EVM Compatibility
eSpace 实现了一个以太坊虚拟机 (EVM)。 以下是 eSpace 和以太坊之间的一些区别:
Transaction Type
Currently eSpace only support 155 type transaction. 1559 type transaction is not support.
EVM Opcodes
- The BLOCKHASHopcode can only takeNUMBER-1as input. (Unlike Ethereum, which takes any integer inNUMBER-256toNUMBER-1as input). This is the only break opcode.
Block Time
NUMBER opcode将返回树图epoch number。 因此,在 eSpace 合约中使用的 block.number 不会以稳定和可预测的速率增长,因此它可能不适合用于测量时间。
Block generate rate is 1.25s per block (mainnet), is same as Core Space Epoch time.
Contract Size
Contract max code size is 49152 double as Ethereum
Transaction Fees
- SSTORE操作码和- SUICIDEopcode中不会退还gas。
- 占用存储的操作有不同的gas消耗。
- 当将存储条目从零更改为非零时,SSTORE花费 40000 gas(而以太坊中为 20000 gas)。
- 部署新合约时,每个字节花费 400 gas(而以太坊中为 200 gas)。
- 通过 CALL或SUICIDE创建新账户时,该操作消耗 50000 gas(而以太坊中为 25000 gas)。
 
- 当将存储条目从零更改为非零时,
- 最多 1/4的 交易gasLimit可以被退还(如果未使用)
Transaction Gas limit
Only the block whose block height is a multiple of 5 can pack Ethereum type transaction. The total gas limit of these transaction cannot exceed half of the block gas limit (1500w).
EVM Precompiles
All standard precompiles are supported.
| Address | ID | Name | Spec | Status | 
|---|---|---|---|---|
| 0x01 | ECRecover | ECDSA public key recovery | Yellow Paper | ✅ | 
| 0x02 | SHA256 | SHA-2 256-bit hash function | Yellow Paper | ✅ | 
| 0x03 | RIPEMD160 | RIPEMD 160-bit hash function | Yellow Paper | ✅ | 
| 0x04 | Identity | Identity function | Yellow Paper | ✅ | 
| 0x05 | ModExp | Big integer modular exponentiation | EIP-198 | ✅ | 
| 0x06 | BN128Add | Elliptic curve addition | EIP-196 | ✅ | 
| 0x07 | BN128Mul | Elliptic curve scalar multiplication | EIP-196 | ✅ | 
| 0x08 | BN128Pair | Elliptic curve pairing check | EIP-197 | ✅ | 
| 0x09 | Blake2F | BLAKE2b Fcompression function | EIP-152 | ✅ | 
Phantom transactions
A cross-space transaction is a transaction in the Conflux core space that, at some point during its execution, calls one of the state-changing (i.e., not view) methods of the CrossSpaceCall internal contract. Such transactions can change CFX balances and contract storage in both spaces, core and eSpace.
As EVM clients are not aware of Conflux space transactions (the two spaces use different transaction formats), we construct one or more phantom transactions (aka virtual transactions) for each call to the CrossSpaceCall internal contract. These phantom transactions are derived from the corresponding core space transaction, they do not exist in the ledger. Phantom transactions have the following special properties:
- 其中,gas和gasPrice值均为0。 跨 空间交易的 gas 费用将在Core Space中收取。 因此,相应的 phantom 交易不会消耗任何 gas。
- 无效的签名(r、s、v、standardV)。 Conflux 协议无法代表跨空间交易的发送者签名交易。 因此,phantom 交易使用一个伪造的签名,而这个签名无法通过 ECDSA 验证。
示例
When we retrieve epoch 0x72819 in the Conflux core space, we see it contains a single Conflux transaction.
cfx_getBlockByEpochNumber(0x72819, true)
{
  "epochNumber": "0x72819",
  "hash": "0x7440c9e8ebb2e87a7d187e4ad6d09027d860b3948cf4364bb883c028b6c3a858",
  "transactions": [
    {
      "hash": "0xe89ef4b61434ec331b621b8687033f9e4058e76759a3522bdc50e0cb358f505e",
      "blockHash": "0x7440c9e8ebb2e87a7d187e4ad6d09027d860b3948cf4364bb883c028b6c3a858",
      "from": "NET8888:TYPE.USER:AAJFT5SK5RGK2KTJPMPUEJ69989N15KCCY7JAJEUP2",
      "to": "NET8888:TYPE.CONTRACT:ACAP3N9KXZ7C4TU5NUU8G65FJ7A09MG1FY77ZAYSVW",
      "gasPrice": "0x1",
      "gas": "0x8b28d",
      "storageLimit": "0x54",
      "r": "0x2b943e84111cd5f95fbdf15667329ac546c9e5b99548d3c3702aeced4f07de6d",
      "s": "0x2f47ae3c15ec2d1cbcf5bde3870aa21e1df54e8b7b926840a54faa9951cb3321",
      "v": "0x0",
      ...
    }
  ],
  ...
}
When we retrieve the corresponding block in the eSpace, we see it contains two phantom transactions.
eth_getBlockByNumber(0x72819, true)
{
  "hash": "0x7440c9e8ebb2e87a7d187e4ad6d09027d860b3948cf4364bb883c028b6c3a858",
  "number": "0x72819",
  "transactions": [
    {
      "hash": "0xfcdcf304b6b9dc263625b0924efaf3a7eb7044a17d27c0b8d631025b55d1147e",
      "blockHash": "0x7440c9e8ebb2e87a7d187e4ad6d09027d860b3948cf4364bb883c028b6c3a858",
      "from": "0x0000000000000000000000000000000000000000",
      "to": "0xf709629eee416c2d2a53692d38f1568538d8022f",
      "gasPrice": "0x0",
      "gas": "0x0",
      "r": "0x1",
      "s": "0x1",
      "v": "0x4593",
      ...
    },
    {
      "hash": "0xca2f5c5848458bea556f99e626db7108377d600e24add1920c4106358a1a5502",
      "blockHash": "0x7440c9e8ebb2e87a7d187e4ad6d09027d860b3948cf4364bb883c028b6c3a858",
      "from": "0xf709629eee416c2d2a53692d38f1568538d8022f",
      "to": "0xdacf3af269b55ece5fe3239626a27f2a76c48245",
      "gasPrice": "0x0",
      "gas": "0x0",
      "r": "0x1",
      "s": "0x1",
      "v": "0x4593",
      ...
    }
  ],
  ...
}