public JObject?GetStateByNumber(string blockTag) { var blockNumber = GetBlockNumberByTag(blockTag); if (blockNumber == null) { return(null); } IBlockchainSnapshot blockchainSnapshot = _snapshotIndexer.GetSnapshotForBlock((ulong)blockNumber); var state = new JObject { }; string[] trieNames = new string[] { "Balances", "Contracts", "Storage", "Transactions", "Blocks", "Events", "Validators" }; ISnapshot[] snapshots = blockchainSnapshot.GetAllSnapshot(); for (var i = 0; i < trieNames.Length; i++) { state[trieNames[i]] = Web3DataFormatUtils.Web3Trie(snapshots[i].GetState()); state[trieNames[i] + "Root"] = Web3DataFormatUtils.Web3Number(snapshots[i].Version); } return(state); }