智能合约
文章平均质量分 83
chainpip
一个开放的区块链社区
展开
-
Solidity编码规范
1、命名规范避免使用小写的L,大写的I,大写的O 应该避免在命名中单独出现,因为很容易产生混淆。合约、库、事件、枚举及结构体命名——大驼峰合约、库、事件及结构体命名应该使用单词首字母大写的方式。比如:SimpleToken, SmartBank, CertificateHashRepository,Player。原创 2022-10-17 15:36:10 · 1685 阅读 · 1 评论 -
什么是可升级合约
但是,什么是可升级的智能合约?但也带来了一系列的问题,并且如果已部署的合约发现漏洞,也是无法修复的。~_DATA:逻辑合约初始化方法调用数据,这里为0x8129fc1c(Params.sol initialize方法code)(只调用initialize方法,initialize方法没有入参,如果有参数也是支持的)部署后的合约地址:0x2CC6F64C688B0f9585B2fF4134420A5B74faD836, initialize方法对应的code为0x8129fc1c(部署代理合约的时候会用到)原创 2022-10-14 15:01:20 · 307 阅读 · 1 评论 -
智能合约安全——随机数
当然这种方法也会有一些安全风险,例如依赖第三方给出的随机数种子的话同样会存在第三方作弊或者受贿的情形,即使是自己搭建的随机数服务也可能因为故障等原因无法使用,项目方也有可能操控随机数对 DApp 的运行和用户造成重大的损失。目前来说常见的随机数获取有两种:使用区块变量生成随机数,使用预言机来生成随机数。接下来我们来看合约代码,这个合约是一个猜数字赢以太的游戏,我们可以看到,部署者使用上个区块的区块哈希和区块时间作为随机数种子生成随机数,我们只需要模拟他的随机数生成方法就可以得到奖励。...原创 2022-08-05 15:31:41 · 1564 阅读 · 0 评论 -
智能合约安全——delegatecall (2)
可以看到 Lib.doSomething() 函数将合约中存储位置为 slot0 的参数改为传入的值,这样当 HackMe 合约使用 delegatecall 调用 Lib.doSomething() 函数时也将改变自己在 slot0 位置存储的变量的值,也就是将 lib 参数(这里存储的是 Lib 合约的地址)改为我们传入的 Attack 合约的地址。此时之前在 HackMe.lib 参数中存储的 Lib 合约的地址就被修改成我们传入的 Attack 合约的地址了;社区,一起交流学习~...原创 2022-08-03 16:08:46 · 2508 阅读 · 0 评论 -
智能合约安全——delegatecall (1)
我们可以看到有两个合约,Lib合约中只有一个pwn函数用来修改合约的owner,在HackMe合约中存在fallback函数,fallback函数的内容是使用delegatecall去调用Lib合约中的函数。3.HackMe.fallback()使用deldegatecall调用Lib合约中的函数,函数名取的是msg.data也就是"pwn()",而Lib合约中恰好有名为pwn的函数,于是便在HackMe合约中运行了pwn函数;1的值,即地址c的值。...原创 2022-08-02 11:11:19 · 3223 阅读 · 0 评论 -
智能合约安全——私有数据访问
3)存储变长数组(长度随元素的数量而改变)比较特殊,在遇到变长数组时,会先启用一个新的插槽slotA用来存储数组的长度,其数据存储在另外的编号为slotV的插槽中。合约中修饰变量的关键字仅限制其调用范围,这也就间接证明了合约中的数据均是公开的,可任意读取的,将敏感数据记录在合约中是不安全的。由上面的合约代码我们可以看到,Vault合约将用户的用户名和密码这样的敏感数据记录在了合约中,大家可以看到,合约中的私有数据也是可以读取的,所以一定不要将任何敏感数据存放在合约中哦。...原创 2022-07-30 10:33:10 · 213 阅读 · 0 评论 -
智能合约安全——溢出漏洞
如果一个合约有溢出漏洞的话会导致计算的实际结果和预期的结果产生非常大的差异,这样轻则会影响合约的正常逻辑,重则会导致合约中的资金丢失。所以这个参数可以认为在攻击者的角度是不可用的。1.deposit函数存在两个运算操作,第一个是影响用户存入的余额balances的,这里传入的参数是可控的所以这里会有溢出的风险,另一个是影响用户的锁定时间lockTime的,但是这里的运算逻辑是每次调用deposit存入代币时会给lockTime增加一周,由于这里的参数不可控所以这个运算不会存在溢出风险。...原创 2022-07-28 11:25:52 · 766 阅读 · 0 评论