Slide 15
Slide 15 text
仕組み|もぎり|Solidity
import "@openzeppelin/…/ERC721.sol";
import "@openzeppelin/…/AccessControlEnumerable.sol";
contract EventTicket is ERC721, AccessControlEnumerable {
mapping(uint256 => bool) transferability;
function disableTransferability(tokenId, oneTimeToken, signature) onlyRole(STAFF) {
address signer = getSigner(tokenId, oneTimeToken, signature);
require(signer == ownerOf(tokenId));
transferability[tokenId] = false;
}
function _beforeTokenTransfer(from, to, tokenId, batchSize) {
require(transferability[tokenId] == true);
super._beforeTokenTransfer(from, to, tokenId, batchSize);
}
…
}
・OpenZeppelinのERC721を継承
・transferability で譲渡可不可管理
・管理者のみSBT化可能
※ただしNFT所有者の署名が必要
・Transfer前には transferability チェック
15