Test EIP-1559
RPC
Apothem network
RPC="https://erpc.apothem.network/"
RPC="https://earpc.apothem.network/"
Xinfin network
RPC="https://erpc.xinfin.network/"
RPC="https://earpc.xinfin.network/"
Install foundry
We will use foundry to do some tests. Please install it according to the document, such as:
curl -L https://foundry.paradigm.xyz | bash
source ${HOME}/.bashrc
foundryup
Then create a sample project for test:
cd ${HOME}
if [[ -d counter ]]; then
mv counter counter.bak
fi
forge init counter
cd counter
# our network only support solidity v0.8.23 now
forge build --use solc:0.8.23
EIP-1559 block
- devnet: 0
- testnet(Apothem): 71550000 (14th Feb 2025)
- mainet(Xinfin): TBD
Test cases
The following cases should be tested before and after EIP-1559 block.
1. api eth_getBlockByNumber
Request:
curl -s -X POST -H "Content-Type: application/json" ${RPC} -d '{
"jsonrpc": "2.0",
"id": 1001,
"method": "eth_getBlockByNumber",
"params": [
"latest",
false
]
}' | jq
Verify baseFeePerGas
field in response:
- before EIP-1559 block: this field should not exist
- after EIP-1559 block: the value should be
0x2e90edd00
(12500000000)
2. api eth_maxPriorityFeePerGas
Request:
curl -s -X POST -H "Content-Type: application/json" ${RPC} -d '{
"jsonrpc": "2.0",
"id": 1002,
"method": "eth_maxPriorityFeePerGas",
"params": []
}' | jq
Verify the value of result
field in response is reasonable:
- before EIP-1559 block: should be the current gas price
- after EIP-1559 block: should be greater than 0, such as
0x1
3. api eth_gasPrice
Request:
curl -s -X POST -H "Content-Type: application/json" ${RPC} -d '{
"jsonrpc": "2.0",
"id": 1003,
"method": "eth_gasPrice",
"params": []
}' | jq
Verify the value of result
field in response is right:
- before EIP-1559 block: should equal to
eth_maxPriorityFeePerGas
- after EIP-1559 block: should equal to
baseFeePerGas
+eth_maxPriorityFeePerGas
4. api eth_feeHistory
Usage: https://docs.infura.io/api/networks/ethereum/json-rpc-methods/eth_feehistory#parameters
Request:
curl -s -X POST -H "Content-Type: application/json" ${RPC} -d '{
"jsonrpc": "2.0",
"id": 1004,
"method": "eth_feeHistory",
"params": [
"0x3",
"latest",
[20,50]
]
}' | jq
Verify the value of baseFeePerGas
field in response:
- before EIP-1559 block: the value should equal to 0
- after EIP-1559 block: the value should be
0x2e90edd00
(12500000000)
5. eth_getTransactionByHash
Submit 3 transactions to network and record their transaction id:
cd ${HOME}
export PRIVATE_KEY=<YOUR_PRIVATE_KEY>
# tx1: legacy tx
forge create --broadcast --use solc:0.8.23 --rpc-url ${RPC} --private-key ${PRIVATE_KEY} --legacy src/Counter.sol:Counter
# tx2: EIP-1559 tx with parameter maxFeePerGas
forge create --broadcast --use solc:0.8.23 --rpc-url ${RPC} --private-key ${PRIVATE_KEY} --gas-price 12500000000 src/Counter.sol:Counter
# tx3: EIP-1559 tx with maxPriorityFeePerGas
forge create --broadcast --use solc:0.8.23 --rpc-url ${RPC} --private-key ${PRIVATE_KEY} --priority-gas-price 0 src/Counter.sol:Counter
- tx1: should be successful before and after EIP-1559 block
- tx2: should be successful only after EIP-1559 block
- tx3: should be successful only after EIP-1559 block
# eg: hash="0xc64985e6faccc11c96a8baef1d989888022b75c958095e69d5e30938142a0375"
hash=<TX_HASH_ID>
curl -s -X POST -H "Content-Type: application/json" ${RPC} -d '{
"jsonrpc": "2.0",
"id": 1005,
"method": "eth_getTransactionByHash",
"params": [
"'"${hash}"'"
]
}' | jq
Verify the following fields in the response:
- type: should be 0 in tx1, be 2 in tx2 and tx3
- gasPrice: exist in all transactions
- maxFeePerGas: only exist in tx2 and tx3, the value in tx2 should be 12501000000
- maxPriorityFeePerGas: only exist in tx2 and tx3, the value in tx3 should be 1000
6. eth_getTransactionReceipt
curl -s -X POST -H "Content-Type: application/json" ${RPC} -d '{
"jsonrpc": "2.0",
"id": 1006,
"method": "eth_getTransactionReceipt",
"params": [
"'"${hash}"'"
]
}' | jq
Verify tx's type and effectiveGasPrice in the response.
7. eth_getBlockReceipts
# eg: NUMBER="0x8"
NUMBER=<NUMBER>
curl -s -X POST -H "Content-Type: application/json" ${RPC} -d '{
"jsonrpc": "2.0",
"id": 1007,
"method": "eth_getBlockReceipts",
"params": [
"'"${NUMBER}"'"
]
}' | jq
Verify tx's type and effectiveGasPrice in the response.
8. eth_getLogs
Request:
FROM=<FROM_BLOCK_NUMBER>
TO=<TO_BLOCK_NUMBER>
curl -s -X POST -H "Content-Type: application/json" ${RPC} -d '{
"jsonrpc":"2.0",
"id": 1008,
"method":"eth_getLogs",
"params":[
{
"fromBlock": "'"${FROM}"'",
"toBlock": "'"${TO}"'"
}
]
}' | jq
Verify the result is right.
9. Test synchronization
Setup a node and sync with network.
Discussion (0)