Hardhat -我的智能合约有什么奇怪的调用?



我正在使用Hardhat黑客马拉松模板并调用我的智能合约(地址1c0,为了清晰起见缩短地址)函数MyContract#addProduct

问题:我在调用addProduct函数之前和之后看到一堆奇怪的函数调用。执行这些奇怪调用的帐户(266)是HH在启动时生成的第一个地址。MyContract被部署在1c0。

下面是来自Hardhat节点终端的日志和我在//

后面的注释这些呼叫是什么,它们起源于哪里?

更新:我朋友的建议是,可以是MetaMask出于任何目的查询智能合约。还是要调查一下。

// I don't know who's calling it
eth_call 
Contract call:       MyContract#<unrecognized-selector>
From:                266
To:                  1c0
// My fallback is logging
console.log:
MyContract: Fallback called 
// I don't know who's calling it
eth_call
Contract call:       MyContract#symbol
From:                266
To:                  1c0
// I don't know who's calling it
eth_blockNumber
eth_getBalance (3)
eth_call
WARNING: Calling an account which is not a contract
From:                266
To:                  e86
// This is what I call from UI
eth_getTransactionCount
eth_blockNumber
eth_sendRawTransaction 
Contract call:       MyContract#addProduct
Transaction:         740
From:                5ab
To:                  1c0
Value:               0 ETH
Gas used:            414218 of 414218
Block #23:           925
console.log:
MyContract:addProduct()
eth_getTransactionReceipt
eth_blockNumber
eth_getTransactionReceipt
eth_blockNumber
eth_getBlockByHash
// I don't know who's calling it
eth_call
Contract call:       MyContract#<unrecognized-selector>
From:                266
To:                  1c0
console.log:
MyContract: Fallback called
// I don't know who's calling it
eth_call 
Contract call:       MyContract#<unrecognized-selector>
From:               266
To:                 1c0
console.log:
MyContract: Fallback called

经过进一步调查,我认为元掩码会自动调用EIP165 "supportsInterface"函数。

我在我的合约中添加了一些console.log,发现它们匹配了我的合约支持ERC721接口,ERC721元数据接口和ERC1155接口的检查。

在我的本地hardhat开发中,这些未处理的调用非常烦人,有点令人不安,我完全不明白为什么metamask需要制作它们。

添加

receive() external payable {} // to support receiving ETH by default
fallback() external payable {}

将使那些日志消失。

在你的情况下,或者在一般情况下,任何人都可以调用你没有定义的函数的契约,fallback将捕获它们。

如果调用者想调用一个不可用的函数,则执行fallback函数。您还可以使用它的输入参数来查看正在调用的内容,然后采取特定的操作。文档:

https://docs.soliditylang.org/en/v0.8.12/contracts.html fallback-function

Hardhat黑客马拉松样板

前端应用程序定义了一个定期检查-查询令牌余额每秒。

假设你的合约没有实现balanceOf(address)函数,调用重定向到fallback()函数。

相关内容

  • 没有找到相关文章

最新更新