public virtual void Commit() { Logs?.Commit(); CareAddrs?.Commit(); CareAssets?.Commit(); CareEvents?.Commit(); Transfers?.Commit(); BlockNumber?.Commit(); TransferBlockNumberList?.Commit(); }
public void ProcessTxByBlockNumber(uint blockNumber, Snapshot snapshot) { dic.Clear(); uint txCount = Singleton.EthHelper.GetBlockTransactionCountByNumber(blockNumber); for (uint i = 0; i < txCount; i++) { UInt256 txHash = Singleton.EthHelper.GetTransactionHashByBlockNumberAndIndex(blockNumber, i); Logger.LogCommon(txHash); ProcessLogsByTxHash(txHash, snapshot); } ///// foreach (var v in dic.Keys) { snapshot.Transfers.Add( new TransferKey() { address = v, blockNumber = blockNumber }, new TransferGroup() { transfers = dic[v].ToArray() } ); //将某个地址有交易的高度都记录下来 var list = snapshot.TransferBlockNumberList.TryGet(v); if (list == null) { list = new TransferBlockNumberList(); list.blockNumberList = new List <uint>(); } list.blockNumberList.Add(blockNumber); snapshot.TransferBlockNumberList.GetAndChange(v, () => list); } }
protected override JArray ProcessRes(JsonRPCrequest req) { JArray result = new JArray(); result = base.ProcessRes(req); switch (req.method) { case "getTransferByAddressAndBlockNumber": { UInt160 address = new UInt160((string)req.@params[0]); uint blockNumber = uint.Parse(req.@params[1].ToString()); TransferGroup trans = Singleton.Store.GetTransferGroup().TryGet(new TransferKey() { address = address, blockNumber = blockNumber }); if (trans == null) { result = new JArray(); } else { JArray ja = new JArray(); for (var i = 0; i < trans.transfers.Length; i++) { ja.Add(trans.transfers[i].ToJson()); } result = ja; } break; } case "getAllTransferByAddress": { UInt160 address = new UInt160((string)req.@params[0]); TransferBlockNumberList list = Singleton.Store.GetTransferBlockNumberList().TryGet(address); if (list == null) { result = new JArray(); } else { JArray ja = new JArray(); for (var i = 0; i < list.blockNumberList.Count; i++) { uint blockNumber = list.blockNumberList[i]; TransferGroup trans = Singleton.Store.GetTransferGroup().TryGet(new TransferKey() { address = address, blockNumber = blockNumber }); for (var ii = 0; ii < trans.transfers.Length; ii++) { ja.Add(trans.transfers[ii].ToJson()); } } result = ja; } break; } case "getTransferFilterBlockNumber": { UInt160 address = new UInt160((string)req.@params[0]); uint blockNumber = uint.Parse(req.@params[1].ToString()); TransferBlockNumberList list = Singleton.Store.GetTransferBlockNumberList().TryGet(address); if (list == null) { result = new JArray(); } else { JArray ja = new JArray(); for (var i = 0; i < list.blockNumberList.Count; i++) { uint _blockNumber = list.blockNumberList[i]; if (_blockNumber < blockNumber) { continue; } TransferGroup trans = Singleton.Store.GetTransferGroup().TryGet(new TransferKey() { address = address, blockNumber = _blockNumber }); for (var ii = 0; ii < trans.transfers.Length; ii++) { ja.Add(trans.transfers[ii].ToJson()); } } result = ja; } break; } } return(result); }