Ethereum 在OpenSea中传输ERC721令牌时,如何执行内部功能?

Ethereum 在OpenSea中传输ERC721令牌时,如何执行内部功能?,ethereum,Ethereum,公海: 以太扫描: 问题1: 我在Rinkeby testnet部署了一个票证合同,并将它们放在opensea中。但是,当传输成功时,OpenSea没有执行传输函数。为什么 问题2: 我想在OpenSea中传输令牌时执行renewQRcode函数。如何做到这一点 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/ERC721.so

公海:

以太扫描:

问题1: 我在Rinkeby testnet部署了一个票证合同,并将它们放在opensea中。但是,当传输成功时,OpenSea没有执行传输函数。为什么

问题2: 我想在OpenSea中传输令牌时执行renewQRcode函数。如何做到这一点

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract Ticket is ERC721 {
    // Mapping from ticket holder to ticket QR code
    mapping(uint256 => bytes32) private _tokenIdQRcodeMapping;

    // Number of ticket are minted
    uint256 private _ticketCount = 0;

    // Metadata base url
    string private _theBaseURI;
    constructor(string memory __theBaseURI) ERC721("Ticket", "Ticket") {
        _theBaseURI = __theBaseURI;
    }

    // function _baseURI() internal override view returns (string memory) {
    //     return _theBaseURI;
    // }

    // getter
    function getQRcode(uint256 _tokenId) internal view returns (bytes32) {
        return _tokenIdQRcodeMapping[_tokenId];
    }

    function getTicketCount() public view returns (uint256) {
        return _ticketCount;
    }

    /**
    * @dev renew QRcode with token id and new address
    * Requirements:
    *
    * - `tokenId` must not exist.
    * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
    *
    */

    function renewQRcode(uint256 _tokenId, address _newTicketHolder) public{
        require(
            _tokenIdQRcodeMapping[_tokenId] != bytes32(0),
            "token need to exist"
        );
        require(
            _newTicketHolder != address(0),
            "newTicketHolder need to be no null"
        );
        require(
            msg.sender == ownerOf(_tokenId),
            "msg.sender need to be holder to change QRcode"
        );
        _tokenIdQRcodeMapping[_tokenId] = keccak256(
            abi.encodePacked(block.timestamp, _newTicketHolder, _ticketCount)
        );
    }

    /**
    * @dev mint ticket with no args
    * Requirements:
    *
    * - `tokenId` must not exist.
    * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
    *
    */
    function mint() public {
        _safeMint(msg.sender, _ticketCount);
        // add qrcode
        _tokenIdQRcodeMapping[_ticketCount] = keccak256(
            abi.encodePacked(block.timestamp, msg.sender, _ticketCount)
        );
        _ticketCount += 1;
    }
}