将 EVM 字节码移植到 Conflux 上
Conflux 采纳了存储押金机制。执行智能合约时,如果通过 SSTORE (0x55) 指令往存储中写入非零数据的时候,则须要领取存储押金。当这段数据被清空时,存储押金会被退还给领取者。
存储押金的价格是 1/1024 CFX/byte。每个存储单元计 64 字节。除此之外,合约创立后,代码也要收存储押金。
存储押金机制产生的区别
Conflux 采纳了存储押金机制。执行智能合约时,如果通过 SSTORE (0x55) 指令往存储中写入非零数据的时候,则须要领取存储押金。当这段数据被清空时,存储押金会被退还给领取者。
存储押金的价格是 1/1024 CFX/byte。每个存储单元计 64 字节。除此之外,合约创立后,代码也要收存储押金。
交易的存储下限域
在 Conflux 中,每个交易须要填写存储下限,单位是字节。如果存储下限填写的过高,超过了账户余额所能领取的存储押金,交易就会失败。如果存储下限填写过低,导致交易执行完结时理论新增的存储超过了存储下限,交易也会失败。
一个最简略的计划是,通过 Conflux RPC 估算(详见相干章节)交易须要的存储下限。或者,能够通过 n1024 的公式计算账户余额最高反对的存储下限。(其中 n 为领取了交易费和账户转账费用后的余额。为了保险起见,也能够填一个小一点的数,如 n1000)
写存储耗费的燃料
量就能够了。在 Conflux 中,所有 SSTORE (0x55) 指令耗费的燃料都是 5000 gas。相比拟,以太坊在这里的逻辑很简单。不过,个别开发者不须要关怀每个指令的具体 gas 定价,只须要通过 RPC 预计整个交易的燃料用量就能够了。
共识机制产生的区别
区块高度和区块哈希相干的指令
在以太坊中,BLOCKHASH (0x40) 指令(Solidity 中的 block.blockhash(n) 函数 ) 承受区块编号 (区块高度) n 作为输出,输入区块高度对应的哈希值。其中参数高度 n 与交易执行时所在区块高度相差不能够超过 256,否则会返回 0。
Conflux 采纳了树图构造,当区块排序后,每一个区块会产生一个排序编号,这个排序编号不同于区块高度。因为树图构造排序后,相邻的两个区块可能没有父子关系,所以编号为 n-1 的区块不肯定是编号为 n 区块的父亲区块。
Conflux 中 BLOCKHASH (0x40) 指令(Solidity 中的 block.blockhash(n) 函数)承受区块排序编号 n 作为输出。相应的,NUMBER (0x43) 指令(Solidity 中的 block.number 变量)失去的也是排序编号。
此外,以太坊的 BLOCKHASH (0x40) 指令能够询问交易所在区块前 256 个区块的哈希值,而 Conflux 的指令只能询问前一个区块的哈希值。然而,Conflux 的参数数量和以太坊没有区别。
出块速度
Conflux 的出块速度是每秒 2 个块,比以太坊快很多。如果智能合约的代码逻辑里硬编码了出块速度,须要作出相应的扭转。
交易中的信息填写
当用户发动一笔交易时,Conflux 所须要填写的信息有所区别。不过个别 RPC 和 SDK 会替开发者和用户做好这件事件。
Storage Limit: 存储下限。详见 交易的存储下限域 大节。
Gas Limit: 燃料下限。对于未用完的 gas, Conflux 最多只退还 Gas Limit 的 1/4,所以收回交易前,务必预计一个比拟准的燃料下限。
Chain ID: 区块链编号。规定能够执行这笔交易的区块链编号,防止有人将测试网的交易拿到主网上重放。目前,测试网的 Chain ID 是 1,主网的 Chain ID 是 2。
Epoch Height: 交易执行时的(大略的)epoch。如果交易执行时理论的 Epoch 与交易填写的 Epoch Height 相差 100000 以上(Epoch 编号增长 100000 的工夫在半天到几天不等),交易将执行失败。也就是说,过长时间未被打包的交易将无奈执行。
Recipient: Conflux 的地址算法与以太坊有区别。所有公钥生成的地址前四个 bits 都是 0001,所有合约地址前四个 bits 都是 1000。所有内置合约地址前四个 bits 都是 0000。如果收款地址 recipient 的前四个 bits 不是这三者之一,交易执行失败。
其余区别
合约创立后,创建者(即合约创立时的 msg.sender)主动成为合约的管理员。管理员有权销毁合约,或转移管理员权限给别人。管理员能够是一般地址,也能够是合约地址。
Conflux 创立的合约代码下限是 49152 字节,比以太坊多一倍。
请查看本人的合约里有没有硬编码以太坊的相干地址。
Conflux 中还有一些其余的区别,是合约的开发者与使用者不须要关怀的,这里咱们略去。