Skip to content

Turn Kickback registration into NFT (aka ticket as NFT) #73

@makoto

Description

@makoto

The use case

  • The event ticket can be displayed on the user wallet
  • A user can RSVP for friends (The friend still has to sign in on Kickback to receive a notification email and has to have eth to be able to withdraw)
  • Even organisers can use Kickback NFT as token gated access on the Discord channel, etc.

Feature

  • Each event (Conference) has its own NFT contract
  • Contract supports either ERC721 or 1155
  • Use Conference.participantsIndex as TokenId
  • Metadata uri can be set at Conference constructor
  • Metadata uri is set at Deployer and can be changed by groupAdmin. (Refer to changeClearFee for the similar implementation).
  • The ticketing NFT cannot be transferred to the address which is already registered (if a user want to buy multiple tickets for friends, the user has to transfer to a different user address before purchasing the second ticket)

Acceptance scenario

Please make sure to write tests to cover at least these scenarios.

  • When a user registers, ownerOf(tokenId) returns the registrant address.
  • When a user registers, it emits a relevant event that NFT markets like OpenSea use to index.
  • When a user transfer's NFT, it emits a relevant event that NFT markets like OpenSea use to index.
  • When the registrant transfers the ticket to a recipient, isRegistered/isAttended/isPaid returns the info about the recipient (if this ended up causing too much attack vector, we may make the token not transferrable ).
  • When the registrant transfer that ticket to a recipient, the user can register again (as the registrant is no longer registered for the event).
  • When a user receives the NFT, the user cannot register as the user is already registered.
  • When the registrant transfers the ticket to a recipient, the new recipient can call withdraw and clearAndSend to receive the payout

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions