用ether.js 調(diào)用 safeTransferFrom 方法時(shí)總是報(bào) safeTransferFrom is not a function 錯(cuò)誤
function safeTransferFrom(
address from,
address to,
uint256 id
) public virtual {
transferFrom(from, to, id);
require(
to.code.length == 0 ||
ERC721TokenReceiver(to).onERC721Received(
msg.sender,
from,
id,
""
) ==
ERC721TokenReceiver.onERC721Received.selector,
"UNSAFE_RECIPIENT"
);
}
function safeTransferFrom(
address from,
address to,
uint256 id,
bytes calldata data
) public virtual {
transferFrom(from, to, id);
require(
to.code.length == 0 ||
ERC721TokenReceiver(to).onERC721Received(
msg.sender,
from,
id,
data
) ==
ERC721TokenReceiver.onERC721Received.selector,
"UNSAFE_RECIPIENT"
);
}
在ERC721中 safeTransferFrom 是重載方法 單獨(dú)根據(jù)方法名去找 就會(huì)找到兩個(gè) 没陡。
也就是contract.safeTransferFrom(…) 這種寫法是有問題的蛇尚。
錯(cuò)誤寫法
contract.safeTransferFrom(addr1, addr2, 1);
正確寫法
contract["safeTransferFrom(address,address,uint256)"](addr1, addr2, 1);