tip: 474
title: Optimize the return value of chainid opcode
author: yanghang8612 <yanghang8612@163.com>
discussions to: https://github.com/tronprotocol/TIPs/issues/474
status: Final
type: Standards Track
category: VM
created: 2022-11-04
This TIP aims to optimize the return value of the chainid
opcode.
The chainId of the TRON mainnet can be queried through the jsonrpc
interface, as follows
curl --location --request POST 'https://api.trongrid.io/jsonrpc' \
--header 'Content-Type: application/json' \
--data-raw '{"jsonrpc":"2.0", "method": "eth_chainId", "params": [], "id": 1}'
{"jsonrpc":"2.0","id":1,"result":"0x2b6653dc"}
After the Istanbul
proposal takes effect, the chainid
opcode becomes valid and it pushes the genesis block id of the current chain onto the stack (defined in tip-174).
In different networks, the return values of the chainid
opcode are as follows:
mainnet
: 0x00000000000000001ebf88508a03865c71d452e25f4d51194196a1d22b6653dcnile
: 0x0000000000000000d698d4192c56cb6be724a558448e2684802de4d6cd8690dcshasta
: 0x0000000000000000de1aa88295e1fcf982742f773e0419c5a9c134c994a9059e
The return value of the chainid
opcode does not match the chainId value queried by the jsonrpc
interface. When dApp developers use tools such as metamask to access the TRON network and send transactions, this difference will cause some transactions to fail, such as permit type transactions.
Meanwhile, the return value of the chainid
opcode is very large. For the javascript language that commonly used in web3 application development, the maximum integer value is Number.MAX_SAFE_INTEGER
(defined in link), and it is clear that the above return values exceed that Number.MAX_SAFE_INTEGER
.
Number.MAX_SAFE_INTEGER
: 2**53 - 1 = 9007199254740991
Therefore, it is necessary to optimize the return value of the chainid
opcode in the TRON network.
After the getAllowOptimizedReturnValueOfChainId(71th)
proposal takes effect, the chainid
opcode pushes the same value as the jsonrpc
interface onto the stack.
The new return value of the chainid
opcode for all networks are as follows:
mainnet
:- In Hex: 0x2b6653dc
- In Decimal: 728126428
nile
:- In Hex: 0xcd8690dc
- In Decimal: 3448148188
shasta
:- In Hex: 0x94a9059e
- In Decimal: 2494104990
The new values above do not conflict with any chainId of the existing EVM networks.
Firstly, the new return values proposed in this tip are consistent with some of the TRON community's protocol standards, such as tip-1193 and tip-712.
Secondly, after analyzing the bytecode of the smart contracts on the mainnet and extensive community discussions, we concluded that the proposal has no significant forward compatibility issues. See issue for related analysis and discussion.
There is no known security consideration.