示例#1
0
 public virtual void Commit()
 {
     Logs?.Commit();
     CareAddrs?.Commit();
     CareAssets?.Commit();
     CareEvents?.Commit();
     Transfers?.Commit();
     BlockNumber?.Commit();
     TransferBlockNumberList?.Commit();
 }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
        }