what I am trying to accomplish is calling a function defined in ERC20 contract from ERC721 contract as shown below, specifically transferFrom
function from ERC20 contract inside the same function in ERC721.
This does not compile. what it ultimately does is that everytime a erc721 NFT transfer occurs, royalty is tranferred to the creator in the form of erc20 tokens.
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);
}
}