我正在研究这种坚固性,我想了解如何与智能体和以太互动。
我有这样一个简单的函数:
function buyNumber(uint256 _number) public payable {
if(msg.value < 0.1 ether){
revert("more eth!");
}
...todoStuff
}我有个测试
const tx = {
from: owner.address,
to: myContract.address,
value: ethers.utils.parseEther('0.1'),
data: '0x4b729aff0000000000000000000000000000000000000000000000000000000000000001'
}
let sendTx = await owner.sendTransaction(tx);
console.log(sendTx)现在,事务可以工作,因为我获得了0x4b729aff0000000000000000000000000000000000000000000000000000000000000001函数签名和参数
let iface = new ethers.utils.Interface(ABI)
iface.encodeFunctionData("buyNumber", [ 1 ])
0x4b729aff0000000000000000000000000000000000000000000000000000000000000001我能用简单的方式得到同样的结果吗?我如何在与params的合同中调用一个函数?我可以将msg.value作为参数,但我更喜欢使用较少的参数
发布于 2022-04-19 19:14:51
您可以使用以太合同助手类,它允许基于提供的契约ABI以更开发人员的方式调用其方法。
它在后台执行与脚本相同的操作--对data值的函数调用进行编码。
const contract = new ethers.Contract(contractAddress, abiJson, signerInstance);
// the Solidity function accepts 1 param - a number
// the last param is the `overrides` object - see docs below
await contract.buyNumber(1, {
value: ethers.utils.parseEther('0.1')
});还可以使用覆盖对象指定非默认事务参数。例如它的value (默认值为0)。
https://stackoverflow.com/questions/71928224
复制相似问题