0

我想要完成的是从 ERC721 合约调用 ERC20 合约中定义的函数,如下所示,特别transferFrom是 ERC20 合约中的函数在 ERC721 中的同一函数内。

这不编译。它最终所做的是,每次发生 erc721 NFT 转移时,版税都会以 erc20 代币的形式转移给创建者。

import "./myToken.sol" as erc20contract //This is my ERC20 contract

contract ERC721 is ERC721Interface, myToken {
    function transferFrom(address _from, address _to, uint256 _tokenId) public payable {

        address addr_owner = ownerOf(_tokenId);

        require(
            addr_owner == _from,
            "_from is NOT the owner of the token"
        );

        require(
            _to != address(0),
            "Transfer _to address 0x0"
        );

        address addr_allowed = allowance[_tokenId];
        bool isOp = operators[addr_owner][msg.sender];

        require(
            addr_owner == msg.sender || addr_allowed == msg.sender || isOp,
            "msg.sender does not have transferable token"
        );


        //transfer : change the owner of the token
        tokenOwners[_tokenId] = _to;
        balances[_from] = balances[_from].sub(1);
        balances[_to] = balances[_to].add(1);

        //reset approved address
        if (allowance[_tokenId] != address(0)) {
            delete allowance[_tokenId];
        }

        erc20contract.transferFrom(_to, nftInfo[_from].creator, 10); // This is what I'd like to achieve
        {
        emit Transfer(_from, _to, _tokenId);
    }
}
4

1 回答 1

0

编辑:我刚刚注意到您的合同似乎同时实现了标准ERC721ERC20标准。您需要决定一个,但使用组合(如下所示)可能足以提供您所追求的所有必要功能。


除非我遗漏了什么,否则您似乎只缺少 ERC20 代币的实际实例。例如:

contract YourToken is ERC721 {
  ERC20 private immutable token;

  constructor(ERC20 t) {
    token = t;
  }

  function transferFrom(address _from, address _to, uint256 _tokenId) public payable {
    // Your code here.
    token.transferFrom(_from, _to, 10);
  }
}
于 2022-01-07T08:59:22.557 回答