Beispiel #1
0
        public RPC_Result RPC_SendRawTransaction(IList <MessagePackObject> _params)
        {
            var message = _params.First();
            var pubkey  = this.pubkey;
            var sign    = Helper_NEO.Sign(message.AsBinary(), this.prikey);

            var signdata = new TransactionSign();

            signdata.VScript = pubkey;
            signdata.IScript = sign;
            var data = SerializeHelper.SerializeToBinary(signdata);

            this.Tell_SendRaw(this._System.GetPipeline(this, "this/node"), message.AsBinary(), data);
            var result = new MessagePackObject(0);

            return(new RPC_Result(result));
        }
        void OnRecv_ResponseAcceptJoin(IModulePipeline from, MessagePackObjectDictionary dict)
        {
            logger.Info("had join chain");
            var link = this.linkNodes[from.system.PeerID];

            link.hadJoin = true;//已经和某个节点接通
            //如果连上了,标识连上的节点的优先级
            var plevel = dict["plevel"].AsInt32();

            this.getPlevelFromLinkObj(link, plevel);
            //Console.WriteLine("@ from:" + link.publicEndPoint + " plevel:" + link.pLevel + " node:" + this.config.PublicEndPoint + " plevel:" + this.pLevel);

            if (this.prikey != null)//有私钥证明一下
            {
                var check    = dict["checkinfo"].AsBinary();
                var addinfo  = Guid.NewGuid().ToByteArray();
                var message  = addinfo.Concat(check).ToArray();
                var signdata = Helper_NEO.Sign(message, this.prikey);
                Tell_Request_ProvePeer(from, addinfo, signdata);
            }
            Tell_Request_PeerList(from);
            //如果连接上了,要更新自己的优先级
            //if (this.pLevel < 0)
            //{
            //    if (link.pLevel >= 0)//加入的节点优先级有效,且本身节点不是记账人
            //    {
            //        this.pLevel = link.pLevel + 1;
            //    }
            //}
            //else if(this.pLevel > link.pLevel)
            //{
            //    this.pLevel = link.pLevel + 1;
            //    //如果是变更,则广播低优先级节点
            //    foreach (var item in this.linkNodes)
            //    {
            //        if (item.Value.hadJoin && item.Value.pLevel < this.pLevel)
            //        {
            //            Tell_BoradCast_PeerState(item.Value.remoteNode);
            //        }
            //    }
            //}

            //System.Console.WriteLine($"node:{this.config.PublicEndPoint} pLeve:{this.pLevel}  isProved:{this.isProved}");
        }