1
votes

i've created a third party contract and i would like to enable this contract to make ERC721 token transfers on behalf of other addresses. I thought that the only way to do this is to send already hashed messages to the contract from main addresses and allow it to complete the transactions.

is it possible to fulfill what I am saying?

pragma solidity ^0.4.24;


import "../../SuperERC721Token.sol";


contract MyContract {

    SuperERC721Token internal externalToken;

    constructor(address address) public {
        externalToken = SuperERC721Token(address);
    }

    function ThirdPartyTransfer(string hashedTRX) public {
        externalToken.call(hashedTRX); // this function allow the contract to send an ERC721 token to another address
    }
}
1

1 Answers

0
votes

Let's say you want to call the functionA function on SuperERC721Token FROM OtherContract, all you do is take the interface from SuperERC721Token, an example of an interface of an ERC20 token is:

interface ERC721 /* is ERC165 */ {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);   
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

interface ERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

interface ERC721TokenReceiver {
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes4);
}

On OtherContract, wherever you want to call functionA, you put the following code:

SuperERC721Token erc721Token= ERC721Token(0x0000000000000000000000000000000000000000); //Replace 0x000000000000000000000000000000000000000 with the address of SuperERC721Token
erc721Token.functionA();

Add any functions that are not in the interface that you want to call.