Skip to content

get_storage_proof returns inconsistent contracts tree root #771

@rnbguy

Description

@rnbguy

Is there an existing issue?

  • I have searched the existing issues

Description of bug

The madara node returns different global contracts and classes trie root for the same height queried at different occasions.-

Steps to reproduce

use starknet::core::types::ConfirmedBlockId;
use starknet::macros::felt;
use starknet::providers::jsonrpc::HttpTransport;
use starknet::providers::sequencer::models::BlockId;
use starknet::providers::{Provider, SequencerGatewayProvider, Url};

#[tokio::main]
async fn main() {
    let gateway = SequencerGatewayProvider::new(Url::parse("http://localhost:12346").unwrap(), Url::parse("http://localhost:12346/feeder_gateway").unwrap(), felt!("0x1234"));

    let block = gateway.get_block(BlockId::Latest).await.unwrap();

    let block_number = block.block_number.unwrap();

    let provider = starknet::providers::JsonRpcClient::new(HttpTransport::new(
        Url::parse("http://localhost:12345").unwrap(),
    ));

    for i in 0..5 {
        let storage_proof = provider
            .get_storage_proof(ConfirmedBlockId::Number(block_number), [], [], [])
            .await
            .unwrap();

        println!("{:?}", storage_proof);

        std::thread::sleep(std::time::Duration::from_secs(2));
    }
}

This will print storage proofs with different contracts_tree_root -- even though they are queried for the same block number. Example output:

StorageProof { classes_proof: {}, contracts_proof: ContractsProof { nodes: {}, contract_leaves_data: [] }, contracts_storage_proofs: [], global_roots: GlobalRoots { contracts_tree_root: 0x6676d4e6c50905fddbd41043a84cdda7f7e2cfa35dd12bdb83fa9ecbdf78e88, classes_tree_root: 0x2646752d4b85dcf1b52fbc61efab4557e02b3ac0de448d15475f5be670d3ccd, block_hash: 0x393cd90be464f3dead0462cef461af7ced5bdf8a0524ae91778642fd3297cb9 } }
StorageProof { classes_proof: {}, contracts_proof: ContractsProof { nodes: {}, contract_leaves_data: [] }, contracts_storage_proofs: [], global_roots: GlobalRoots { contracts_tree_root: 0x21e5f02aca50f076bb9cf7cd71af41f7bf0b552e2b16c7e6b18cdebaef75ed5, classes_tree_root: 0x2646752d4b85dcf1b52fbc61efab4557e02b3ac0de448d15475f5be670d3ccd, block_hash: 0x393cd90be464f3dead0462cef461af7ced5bdf8a0524ae91778642fd3297cb9 } }
StorageProof { classes_proof: {}, contracts_proof: ContractsProof { nodes: {}, contract_leaves_data: [] }, contracts_storage_proofs: [], global_roots: GlobalRoots { contracts_tree_root: 0x15c81c33d32e9083da90b09815827bd7842c5c39a38ab0b57617672c9179983, classes_tree_root: 0x2646752d4b85dcf1b52fbc61efab4557e02b3ac0de448d15475f5be670d3ccd, block_hash: 0x393cd90be464f3dead0462cef461af7ced5bdf8a0524ae91778642fd3297cb9 } }
StorageProof { classes_proof: {}, contracts_proof: ContractsProof { nodes: {}, contract_leaves_data: [] }, contracts_storage_proofs: [], global_roots: GlobalRoots { contracts_tree_root: 0x6053ab0450cef4c6938027e09d477c333df162f8df7d53d35daf535ff03334d, classes_tree_root: 0x2646752d4b85dcf1b52fbc61efab4557e02b3ac0de448d15475f5be670d3ccd, block_hash: 0x393cd90be464f3dead0462cef461af7ced5bdf8a0524ae91778642fd3297cb9 } }
StorageProof { classes_proof: {}, contracts_proof: ContractsProof { nodes: {}, contract_leaves_data: [] }, contracts_storage_proofs: [], global_roots: GlobalRoots { contracts_tree_root: 0x59d7119111c75010d075e4aabedc752e9939f0e2025e8622eb80b9b443d1967, classes_tree_root: 0x2646752d4b85dcf1b52fbc61efab4557e02b3ac0de448d15475f5be670d3ccd, block_hash: 0x393cd90be464f3dead0462cef461af7ced5bdf8a0524ae91778642fd3297cb9 } }

I am using madara from commit 2c2d39b

madara \
    --base-path madara-test \
    --rpc-port 12345 \
    --gateway-port 12346 \
    --chain-config-override "block_time=1s,pending_block_update_time=1s,chain_id=IBC_SN_DEVNET,latest_protocol_version=0.14.0" \
    --devnet \
    --devnet-unsafe \
    --gateway-enable \
    --feeder-gateway-enable \
    --rpc-storage-proof-max-distance 300 \
    --preset sepolia \
    --l1-sync-disabled \
    --l2-sync-disabled \
    --l1-gas-price 0 \
    --blob-gas-price 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions