Skip to main content

Differences Between Axon and Ethereum

This article summarizes the differences in terms of mining and wallet related APIs, and the calculation of the transactions root between Axon and Ethereum.

eth_getUncleByBlockHashAndIndex API

Since Axon uses BFT consensus algorithm, no uncle block exists. The RPC method always returns null.

eth_getUncleByBlockNumberAndIndex API

Since Axon uses BFT consensus algorithm, no uncle block exists. The RPC method always returns null.

eth_getUncleCountByBlockHash API

Since Axon uses BFT consensus algorithm, no uncle block exists. The RPC method always returns 0x0.

eth_getUncleCountByBlockNumber API

Since Axon uses BFT consensus algorithm, no uncle block exists. The RPC method always returns 0x0.

eth_mining API

Since Axon does not mine, this RPC method always returns false.

eth_coinbase API

Since Axon does not mine, this RPC method always returns 0x0000000000000000000000000000000000000000.

eth_hashrate API

Since Axon does not mine, this RPC method always returns 0x1.

eth_submitWork API

Since Axon does not mine, this RPC method always returns true.

eth_submitHashrate API

Since Axon does not mine, this RPC method always returns true.

Difficulty opcode

Since Axon does not mine, this opcode always uses 0x1.

gas_price calculation

Since Axon does not mine, Axon simplifies the process of gas_price calculation of EIP-1559 transaction as gas_price = max(tx.gas_price, tx.max_fee_per_gas).

eth_accounts API

Since Axon does not mine, this RPC method is not supported.

eth_sign API

Since Axon does not mine, this RPC method is not supported.

eth_signTransaction API

Since Axon does not mine, this RPC method is not supported.

eth_sendTransaction API

Since Axon does not mine, this RPC method is not supported.

Others

Transactions Root Calculation

The transactions root calculation in Ethereum is as follows:

let mut trie = Trie::new(memory_db);
for (i, tx) in transactions.iter().enumerate() {
let key = rlp_encode(&i);
let val = rlp_encode(&tx);
trie.insert(key, val);
}
block.header.transactions_root = trie.root();

The calculation in Axon is:

let mut trie = Trie::new(memory_db);
for (i, tx) in transactions.iter().enumerate() {
let key = rlp_encode(&i);
let val = rlp_encode(&keccak256(rlp_encode(&tx)));
trie.insert(key, val);
}
block.header.transactions_root = trie.root();