I created a contract instance in hardhat console like so:
const contract_fac = await ethers.getContractFactory("ContractName");
const contract = await contract_fac.attach("CONTRACTADDR...");
Contract object has all public/external functions except safeTransferFrom
. Why?
When I call it with contract.safeTransferFrom(…)
it throws JavaScript Error “safeTransferFrom is not a function”. Is this a bug or do I not understand something? safeTransferFrom
function is listed in the ABI.
I use OpenZeppelin (v. 4.2) 721 token template without changes, Ethers.js (v. 5.4.1) and hardhat (v. 2.4.1).
Update: Problem solved. safeTransferFrom is a overloaded function. In ethers, the syntax to call an overloaded contract function is different from the non-overloaded function. Ethers.js doc
Wrong:
contract.safeTransferFrom(addr1, addr2, 1);
Correct:
contract["safeTransferFrom(address,address,uint256)"](addr1, addr2, 1);
safeTransferFrom
that throws the error? – Lesawait instance.connect(secondUser)['safeTransferFrom(address,address,uint256)'](owner.address, secondUser.address, 2);
– Koniology