使用 etherjs 创建数据交易
Create a transaction with data using etherjs
我正在研究 Solidity,我想了解如何与 smartcotnract 和 etherjs 进行交互。
我有一个像这样的简单函数:
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
我可以用简单的方法得到相同的结果吗?我如何在我的合同中使用参数调用函数?我可以将 msg.value 作为参数,但我更喜欢使用较少的参数
您可以使用 ethers Contract 助手 class,它允许根据提供的合同 ABI JSON 以更 developer-friedly 的方式调用其方法。
它在后台与您的脚本执行相同的操作 - 将函数调用编码为 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')
});
您还可以使用 overrides 对象来指定 non-default 交易参数。比如它的value
(默认值为0)。
我正在研究 Solidity,我想了解如何与 smartcotnract 和 etherjs 进行交互。
我有一个像这样的简单函数:
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
我可以用简单的方法得到相同的结果吗?我如何在我的合同中使用参数调用函数?我可以将 msg.value 作为参数,但我更喜欢使用较少的参数
您可以使用 ethers Contract 助手 class,它允许根据提供的合同 ABI JSON 以更 developer-friedly 的方式调用其方法。
它在后台与您的脚本执行相同的操作 - 将函数调用编码为 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')
});
您还可以使用 overrides 对象来指定 non-default 交易参数。比如它的value
(默认值为0)。