什么是可升级的智能合约?你可能知道,智能合约是所有可编程区块链(如以太坊上)的一个重要组成部分。通过确保事情按照预定的规则运行,智能合约强制执行秩序。没有智能合约,就没有加密代币、NFT,也没有DApps。但是,什么是可升级的智能合约?嗯,首先,你需要注意,在这种情况下,"可升级"这个词并不意味着可变异。EVM的基本规则之一是,一旦合同被部署,它就不能被改变。相反,可升级的智能合约使用特殊的代理模式。后者涉...
2022-10-14 17:21:40 6235浏览 1点赞 0回复 0收藏
本次我们将带大家了解智能合约中一个经常被用到的东西——随机数。智能合约的开发中常常会用到随机数,例如Lottery和现在流行的NFT数字藏品的属性等都需要用到随机数。目前来说常见的随机数获取有两种:使用区块变量生成随机数,使用预言机来生成随机数。下面我们了解一下这两者的特点:1)使用区块变量生成随机数我们先了解一下常见的区块变量有哪些:block.basefee(uint):当前区块的基本费用block.chainid(uint):当前链idbl...
2022-08-05 17:02:17 5077浏览 0点赞 0回复 0收藏
本次,我们来讲一讲运用delegatecall函数时更复杂的合约漏洞案例。目标合约漏洞分析这次的攻击目标依然是获得HackMe合约中的owner权限,我们可以看到两个合约中除了HackMe合约中的构造函数可以修改合约的owner其他地方并没有修改owner的函数,但是却可以修改位置slot0的值,而HackMe合约中插槽slot0表示的便是Lib的地址,那么我们就先修改Lib的地址为我们的地址,再次调用HackMe合约时就会运行我们合约中的逻辑,那么想改哪个位...
2022-08-03 17:16:17 4175浏览 0点赞 0回复 0收藏
在之前的内容中,学习到了storage中是使用插槽存储数据的。而delegatecall函数有个有趣的特点:当使用delegatecall函数进行外部调用涉及到storage变量的修改时是根据插槽位置来修改的而不是变量名。举个例子:合约A合约B当合约B调用testDelegatecall()函数时,合约B的地址c的值会变为合约A的地址,而地址a则是不变。因为合约A的函数test()改变的是插槽slot1的值,同样的在合约B中运行时,改变的也是插槽slot1的值,即地址c的值...
2022-08-02 15:15:24 4063浏览 0点赞 0回复 0收藏
这次我们将了解如何访问合约中的私有数据(private数据)。目标合约话不多说,直接上代码这次我们的目标合约是部署在Ropsten上的一个合约。合约地址:0x3505a02BCDFbb225988161a95528bfDb279faD6b链接:https:ropsten.etherscan.ioaddress0x3505a02BCDFbb225988161a95528bfDb279faD6bcode分析由上面的合约代码我们可以看到,Vault合约将用户的用户名和密码这样的敏感数据记录在了合约中,我们知道合约中修饰变量的关键字仅限制...
2022-07-30 11:21:20 4793浏览 1点赞 0回复 0收藏