如何查看NEAR全链状态及验证合约值参与状态根计算
在NEAR区块链中验证合约存储值参与全链状态根计算的完整流程
NEAR没有直接的"view-whole-blockchain" RPC方法,但可以通过组合现有接口完成完整的证明链,验证单个合约存储值与全链状态根的关联:
1. 获取全链状态根
调用block RPC方法获取最终确认区块的头部信息,其中包含全链状态根:
http post https://rpc.mainnet.near.org jsonrpc=2.0 id=dontcare method=block \ params:='{ "finality": "final" }'
返回结果中result.header.state_root即为当前全链状态的根哈希。
2. 获取合约存储键值对到账户状态根的证明
你已使用的view_state方法可完成这一步,返回的proof字段包含存储键到合约账户状态根的默克尔路径,用于验证该键值对属于合约本地状态:
http post https://rpc.mainnet.near.org jsonrpc=2.0 id=dontcare method=query \ params:='{ "request_type": "view_state", "finality": "final", "account_id": "prover.bridge.near", "prefix_base64": "", "include_proof": true }'
若只需特定键的证明,将prefix_base64设置为该键的Base64编码即可。
3. 获取账户状态根到全链状态根的证明
要验证合约账户的状态根存在于全链状态根的默克尔树中,调用query方法并指定request_type为view_account,同时开启include_proof:
http post https://rpc.mainnet.near.org jsonrpc=2.0 id=dontcare method=query \ params:='{ "request_type": "view_account", "finality": "final", "account_id": "prover.bridge.near", "include_proof": true }'
返回结果中的proof字段包含账户状态根到全链状态根的默克尔路径。
4. 拼接完整证明链
将上述三个部分结合完成验证:
- 用
view_state的证明验证存储键值对 → 合约账户状态根的归属关系 - 用
view_account的证明验证合约账户状态根 → 全链状态根的归属关系 - 最终确认该存储值参与了全链状态根的计算
内容的提问来源于stack exchange,提问作者Dmytro Shashkevych
相关产品推荐
相关产品推荐

