繁体   English   中英

如何在 ERC721 合约中调用 ERC20 合约函数

[英]how to call a ERC20 contract fucntion inside ERC721 contract

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

这不编译。 它最终所做的是,每次发生 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);
    }
}

编辑:我刚刚注意到您的合同似乎同时实现了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);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM