跳到主要内容

EVM Compatibility

eSpace 实现了一个以太坊虚拟机 (EVM)。 以下是 eSpace 和以太坊之间的一些区别:

Transaction Type

Currently eSpace only support 155 type transaction. 1559 type transaction is not support.

EVM Opcodes

  • The BLOCKHASH opcode can only take NUMBER-1 as input. (Unlike Ethereum, which takes any integer in NUMBER-256 to NUMBER-1 as 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 操作码和 SUICIDE opcode中不会退还gas。
  • 占用存储的操作有不同的gas消耗。
    1. 当将存储条目从零更改为非零时,SSTORE 花费 40000 gas(而以太坊中为 20000 gas)。
    2. 部署新合约时,每个字节花费 400 gas(而以太坊中为 200 gas)。
    3. 通过 CALLSUICIDE 创建新账户时,该操作消耗 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.

AddressIDNameSpecStatus
0x01ECRecoverECDSA public key recoveryYellow Paper
0x02SHA256SHA-2 256-bit hash functionYellow Paper
0x03RIPEMD160RIPEMD 160-bit hash functionYellow Paper
0x04IdentityIdentity functionYellow Paper
0x05ModExpBig integer modular exponentiationEIP-198
0x06BN128AddElliptic curve additionEIP-196
0x07BN128MulElliptic curve scalar multiplicationEIP-196
0x08BN128PairElliptic curve pairing checkEIP-197
0x09Blake2FBLAKE2b F compression functionEIP-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:

  • 其中,gasgasPrice 值均为 0。 跨空间交易的 gas 费用将在Core Space中收取。 因此,相应的 phantom 交易不会消耗任何 gas。
  • 无效的签名(rsvstandardV)。 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",
...
}
],
...
}