将EVM字节码移植到Conflux上Conflux采用了存储押金机制。执行智能合约时,如果通过SSTORE(0x55)指令往存储中写入非零数据的时候,则需要支付存储押金。当这段数据被清空时,存储押金会被退还给支付者。存储押金的价格是1/1024CFX/byte。每个存储单元计64字节。除此之外,合约创建后,代码也要收存储押金。存储押金机制产生的区别
Conflux采用了存储押金机制。执行智能合约时,如果通过SSTORE(0x55)指令往存储中写入非零数据的时候,则需要支付存储押金。当这段数据被清空时,存储押金会被退还给支付者。
存储押金的价格是1/1024CFX/byte。每个存储单元计64字节。除此之外,合约创建后,代码也要收存储押金。交易的存储上限域
在Conflux中,每个交易需要填写存储上限,单位是字节。如果存储上限填写的过高,超过了账户余额所能支付的存储押金,交易就会失败。如果存储上限填写过低,导致交易执行结束时实际新增的存储超过了存储上限,交易也会失败。一个最简单的方案是,通过ConfluxRPC估算交易需要的存储上限。或者,可以通过n*1024的公式计算账户余额最高支持的存储上限。写存储消耗的燃料
量就可以了。在Conflux中,所有SSTORE(0x55)指令消耗的燃料都是5000gas。相比较,以太坊在这里的逻辑很复杂。不过,一般开发者不需要关心每个指令的具体gas定价,只需要通过RPC估计整个交易的燃料用量就可以了。共识机制产生的区别
区块高度和区块哈希相关的指令
在以太坊中,BLOCKHASH(0x40)指令接受区块排序编号n作为输入。相应的,NUMBER(0x43)指令得到的也是排序编号。此外,以太坊的BLOCKHASH(0x40)指令可以询问交易所在区块前256个区块的哈希值,而Conflux的指令只能询问前一个区块的哈希值。但是,Conflux的参数数量和以太坊没有区别。出块速度
Conflux的出块速度是每秒2个块,比以太坊快很多。如果智能合约的代码逻辑里硬编码了出块速度,需要作出相应的改变。交易中的信息填写
当用户发起一笔交易时,Conflux所需要填写的信息有所区别。不过一般RPC和SDK会替开发者和用户做好这件事情。StorageLimit:存储上限。详见交易的存储上限域小节。GasLimit:燃料上限。对于未用完的gas,Conflux最多只退还GasLimit的1/4,所以发出交易前,务必估计一个比较准的燃料上限。ChainID:区块链编号。规定可以执行这笔交易的区块链编号,避免有人将测试网的交易拿到主网上重放。目前,测试网的ChainID是1,主网的ChainID是2。EpochHeight:交易执行时的epoch。如果交易执行时实际的Epoch与交易填写的EpochHeight相差100000以上,交易将执行失败。也就是说,过长时间未被打包的交易将无法执行。Recipient:Conflux的地址算法与以太坊有区别。所有公钥生成的地址前四个bits都是0001,所有合约地址前四个bits都是1000。所有内置合约地址前四个bits都是0000。如果收款地址recipient的前四个bits不是这三者之一,交易执行失败。其他区别
合约创建后,创建者自动成为合约的管理员。管理员有权销毁合约,或转移管理员权限给他人。管理员可以是普通地址,也可以是合约地址。Conflux创建的合约代码上限是49152字节,比以太坊多一倍。请检查自己的合约里有没有硬编码以太坊的相关地址。Conflux中还有一些其他的区别,是合约的开发者与使用者不需要关心的,这里我们略去。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。