脚本宝典收集整理的这篇文章主要介绍了ethernaut 小问题汇总,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Ethernaut题库链接
https://ethernaut.openzeppelin.com/
参考答案链接
https://blog.riskivy.com/
https://hitcxy.com/2019/ethernaut/
https://ainevsia.github.io/2021/02/21/Ethernaut/#more
receive() 一个合约只能有一个receive函数,该函数不能有参数和返回值,需设置为external,payable;当本合约收到ether但并未被调用任何函数,未接受任何数据,receive函数被触发;
fallback() 一个合约只能有一个receive函数,该函数不能有参数和返回值,需设置为external;可设置为payable;当本合约的其他函数不匹配调用,或调用者未提供任何信息,且没有receive函数,fallback函数被触发;
原文链接:https://blog.csdn.net/hahadesu/article/details/117913695
Account.transfer(msg.value);
合约发起方向Account地址转入msg.value个以太币
owner.transfer(address(this).balance)
this
代表的是合约地址;msg.sender
是调用合约的账户地址;
所以代表,合约里的钱转入合约的拥有者账户。
revert的用法和throw很像,也会撤回所有的状态转变。但是它有两点不同
1.它允许你返回一个值;
2.它会把所有剩下的gas退回给caller
调用起来就像这样子:
revert(‘Something bad happened’);
require(condition, ‘Something bad happened’);
基本上,require()
应该被用于函数中检查条件,assert()
用于预防不应该发生的情况,但不应该使条件错误。另外,除非认为之前的检查(用 require
)会导致无法验证 overflow
,否则不应该盲目使用 assert
来检查 overflow
两种底层调用方式 call
和 delegatecall
的区别
call: 最常用的调用方式,调用后内置变量 msg 的值会修改为调用者,执行环境为被调用者的运行环境。
delegatecall: 调用后内置变量 msg 的值不会修改为调用者,但执行环境为调用者的运行环境。
简而言之,区别仅在于后者仅使用给定地址的代码,其它信息则使用当前合约(如存储,余额等等)。
析构函数和构造函数对应,构造函数是初始化数据,而析构函数是销毁数据。
selfdestruct(address recipient):destroy the current contract, sending its funds to the given Address
function approve(address _spender, uint _value) returns (bool success):
此函数的调用方授权给定的地址可以从其地址中提款。
function transferFrom(address _from, address _to, uint _value) returns (bool success):
该函数允许智能合约自动执行转账流程并代表所有者发送给定数量的通证。例如:你可以与银行签订自 动代支付协议。 这就像使用transferFrom() :银行的机器会自动以你的名义进行转账支持。 有了这个函数, 合约就可以代表你自动发送通证到另一个地址,而无需你的干预。
以上是脚本宝典为你收集整理的ethernaut 小问题汇总全部内容,希望文章能够帮你解决ethernaut 小问题汇总所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。