SelfImprovement

2019-12-04

TRON智能合约安全小课堂 | 第十期:关于Create2的问题

本期小课堂将讨论create2的问题。TRON-Eye 是来自社区的波场合约验证平台,之前的小课堂已经对 TRON-Eye 验证平台进行了详细的介绍。先来聊一下波场中智能合约地址生成方式。目前有两种方式:。在波场编译器0.5.4版本中新加了create2指令,在java-tron Odyssey-v3.6.0 也支持了create2指令。其中是波场地址的固定前缀0x41,是当前合约的msg.sender,salt是一个可以自定义的盐值,是新部署合约的原始code,和deployContract中使用的code相同,包含constructor和初始化参数在内。需要注意的一点是,和最后存储在智能合约中的bytecode不同,存储的bytecode不包括constructor和初始化参数。存在安全隐患的根本原因在于,不考虑hash碰撞的前提下,在create2指令之前,一个合约的状态只有三种:1.不存在,2.存在,3.自毁。如果用户没有对此保持警觉,还是按照之前的思路,那么很有可能被骗。