Exemplo n.º 1
0
 public void Processor(IExtData extData)
 {
     extData.Data.Add(nameof(JT808_0x0200_DT1_0x82.Gender1), jT808_0X0200_DT1_0X82.Gender1);
 }
Exemplo n.º 2
0
 public void Processor(IExtData extData)
 {
     extData.Data.Add(nameof(JT808_0x0200_DT1_0x81.Age), jT808_0X0200_DT1_0X81.Age);
     extData.Data.Add(nameof(JT808_0x0200_DT1_0x81.UserName), jT808_0X0200_DT1_0X81.UserName);
     extData.Data.Add(nameof(JT808_0x0200_DT1_0x81.Gender), jT808_0X0200_DT1_0X81.Gender);
 }
Exemplo n.º 3
0
 public static void SetExtData(this IExtData extData, string key, object value)
 {
     extData.GetExtData()[key] = JToken.FromObject(value);
 }
Exemplo n.º 4
0
 public static void RemoveExtData(this IExtData extData, string key)
 {
     extData.GetExtData().Remove(key);
 }
Exemplo n.º 5
0
 public static object GetExtData(this IExtData extData, string key, object ifNotFound = null)
 {
     return(extData.GetExtData().ContainsKey(key)
             ? extData.GetExtData()[key]
             : ifNotFound);
 }
Exemplo n.º 6
0
 public static bool ContainsExtData(this IExtData extData, string key)
 {
     return(extData.GetExtData().ContainsKey(key));
 }
Exemplo n.º 7
0
 public static IEnumerable <string> GetExtDataKeys(this IExtData extData)
 {
     return(extData.GetExtData().Keys);
 }
Exemplo n.º 8
0
 public static int GetExtDataCount(this IExtData extData)
 {
     return(extData.GetExtData().Count);
 }
Exemplo n.º 9
0
        public void Deserialize(System.IO.Stream ms)
        {
            //参考源码来自
            //      https://github.com/neo-project/neo
            //      Transaction.cs
            //      源码采用c#序列化技术

            //参考源码2
            //      https://github.com/AntSharesSDK/antshares-ts
            //      Transaction.ts
            //      采用typescript开发

            this.type    = (TransactionType)ms.ReadByte();        //读一个字节,交易类型
            this.version = (byte)ms.ReadByte();
            if (this.type == TransactionType.ContractTransaction) //每个交易类型有一些自己独特的处理
            {
                //ContractTransaction 就是最常见的合约交易,
                //他没有自己的独特处理
                extdata = null;
            }
            else if (this.type == TransactionType.InvocationTransaction)
            {
                extdata = new InvokeTransData();
            }
            else
            {
                throw new Exception("未编写针对这个交易类型的代码");
            }
            if (extdata != null)
            {
                extdata.Deserialize(this, ms);
            }
            //attributes
            var countAttributes = readVarInt(ms);

            this.attributes = new Attribute[countAttributes];
            Console.WriteLine("countAttributes:" + countAttributes);
            for (UInt64 i = 0; i < countAttributes; i++)
            {
                //读取attributes
                byte[] attributeData;
                var    Usage = (TransactionAttributeUsage)ms.ReadByte();
                if (Usage == TransactionAttributeUsage.ContractHash || Usage == TransactionAttributeUsage.Vote || (Usage >= TransactionAttributeUsage.Hash1 && Usage <= TransactionAttributeUsage.Hash15))
                {
                    attributeData = new byte[32];
                    ms.Read(attributeData, 0, 32);
                }
                else if (Usage == TransactionAttributeUsage.ECDH02 || Usage == TransactionAttributeUsage.ECDH03)
                {
                    attributeData    = new byte[33];
                    attributeData[0] = (byte)Usage;
                    ms.Read(attributeData, 1, 32);
                }
                else if (Usage == TransactionAttributeUsage.Script)
                {
                    attributeData = new byte[20];
                    ms.Read(attributeData, 0, 20);
                }
                else if (Usage == TransactionAttributeUsage.DescriptionUrl)
                {
                    var len = (byte)ms.ReadByte();
                    attributeData = new byte[len];
                    ms.Read(attributeData, 0, len);
                }
                else if (Usage == TransactionAttributeUsage.Description || Usage >= TransactionAttributeUsage.Remark)
                {
                    var len = (int)readVarInt(ms, 65535);
                    attributeData = new byte[len];
                    ms.Read(attributeData, 0, len);
                }
                else
                {
                    throw new FormatException();
                }
            }

            //inputs  输入表示基于哪些交易
            var countInputs = readVarInt(ms);

            Console.WriteLine("countInputs:" + countInputs);
            this.inputs = new TransactionInput[countInputs];
            for (UInt64 i = 0; i < countInputs; i++)
            {
                this.inputs[i]      = new TransactionInput();
                this.inputs[i].hash = new byte[32];
                byte[] buf = new byte[2];
                ms.Read(this.inputs[i].hash, 0, 32);
                ms.Read(buf, 0, 2);
                UInt16 index = (UInt16)(buf[1] * 256 + buf[0]);
                this.inputs[i].index = index;
            }

            //outputes 输出表示最后有哪几个地址得到多少钱,肯定有一个是自己的地址,因为每笔交易都会把之前交易的余额清空,刨除自己,就是要转给谁多少钱

            //这个机制叫做UTXO
            var countOutputs = readVarInt(ms);

            Console.WriteLine("countOutputs:" + countOutputs);
            this.outputs = new TransactionOutput[countOutputs];
            for (UInt64 i = 0; i < countOutputs; i++)
            {
                this.outputs[i] = new TransactionOutput();
                TransactionOutput outp = this.outputs[i];
                //资产种类
                var assetid = new byte[32];
                ms.Read(assetid, 0, 32);

                byte[] buf = new byte[8];
                ms.Read(buf, 0, 8);
                var value = Fixed8.FromBytes(buf, 0);
                //资产数量

                var scripthash = new byte[20];

                ms.Read(scripthash, 0, 20);
                outp.assetId   = assetid;
                outp.value     = value;
                outp.toAddress = scripthash;

                this.outputs[i] = outp;
            }
        }