お疲れさまです。 次世代ビジネス推進部の荻原です。
レコチョクではレコチョクチケットというNFTの技術を利用したチケットのシステムを開発しています。詳しくはこちらをご覧ください。
レコチョクチケットのスマートコントラクトは、今まで販売していたNFTのコントラクトが基本となってチケット特有の機能が追加されているという実装になっています。 そのチケット特有の機能について簡単に紹介します。
レコチョクチケットのコントラクトはオープンチェーンに上にあり誰でも読むことができるので、興味のある方は(温かい目で)見てみてください。Polygonscanで見ることができます。
チケットのステータス
レコチョクチケットは各Tokenをチケットとして扱えるというものなので、各Tokenがチケットとしてのステータスを持ちます。ステータスとは、「未使用」または「使用済」の状態です。
これをスマートコントラクトの中で保持しています。 具体的にはSolidityのmappingという辞書のような型で持っていて、Token IDを指定するとそのTokenのステータスを取得することができます。
NFT発行時にはデフォルトで「未使用」のステータスをセットしています。
以下の例ではトークン発行直後の未使用状態のToken ID1〜5のステータスを取得しています。
> nftTicket.getTicketStatuses([1, 2, 3, 4, 5]);
[ 'unused', 'unused', 'unused', 'unused', 'unused' ]
チケットをもぎる
チケットをもぎる際は紙のチケットであればチケットを半券にしたり、電子チケットであればアプリ等で使用済の画面に切り替えたりしますが、レコチョクチケットではTokenのステータスを「未使用」から「使用済」にすることでもぎることができます。
これは前述のmappingで保持しているステータスの値を更新することで実現しています。
以下の例ではToken ID 3のみもぎっています。
> nftTicket.useTicket(3);
> nftTicket.getTicketStatuses([1, 2, 3, 4, 5]);
[ 'unused', 'unused', 'used', 'unused', 'unused' ]
画像の切り替え
もぎった後OpenSea等で表示される画像を使用済に切り替えます。 この画像はスマートコントラクトで返されるTokenURIでAPIを叩くことで返されるメタデータから取得しています。 画像を切り替えるために、もぎられたらスマートコントラクトで返却するTokenURIを切り替えます。
これはTokenURIを返すメソッド内で、Tokenのステータスを取得しステータスによってURIを変えて返却することで実現しています。
先程Token ID 3のみをもぎったのでToken ID 3はもぎり後のURI、2はもぎり前のURIとなっています。
> nftTicket.tokenURI(3);
'http://127.0.0.1/v1/contract/0x32993E6cd4349722ad55751181E3b10E9387BdF8/token_id/3/used'
> nftTicket.tokenURI(2);
'http://127.0.0.1/v1/contract/0x32993E6cd4349722ad55751181E3b10E9387BdF8/token_id/2'
Token ID 2ももぎればURIが切り替わります。
以下はOpenSeaでもぎる前と後での画像の切り替わりです。
Operatorの設定
チケットをもぎるメソッドを実行できる人を制限しています。(Operator) スマートコントラクト内でOperatorの情報を保持しておき、チケットをもぎるメソッドを実行する際に実行者がOperatorかどうかを判定します。
荻原菜穂