我正在使用硬帽子黑客马拉松样板,并调用我的智能合同的(地址1c0,地址缩写为清晰)的功能MyContract#addProduct从UI通过ethers.js。
问题是:在调用我的addProduct函数之前和之后,我都会看到一些奇怪的函数调用。执行这些奇怪呼叫的帐户(266)是HH在开始时生成的第一个地址。MyContract部署在1c0。
下面是来自硬件节点终端的日志,在//之后有我的注释。
这些电话是什么?它们是从哪里来的?
UPDATE: --我朋友的一个建议,它可以是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发布于 2022-05-14 01:57:37
经过进一步研究,我相信元问题自动调用了EIP165 "supportsInterface“函数。
我在合同中添加了一些console.log,发现它们匹配检查我的合同是否支持ERC721接口、ERC721元数据接口和ERC1155接口。
在我的本地硬帽子开发中,这些未处理的调用非常烦人,有些令人感到不安,我也不完全理解元请求为什么需要这样做。
发布于 2022-08-25 13:44:05
添加
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
https://stackoverflow.com/questions/72101643
复制相似问题