Example #1
0
        //获取起始块
        private long GetStartBlock()
        {
            SQLServer sQLServer = new SQLServer();

            sQLServer.Open();
            long startBlock = sQLServer.GetStartBlock();

            sQLServer.Close();
            return(startBlock);
        }
Example #2
0
        public void Run()
        {
            //记录状态
            State.SyncBlock = false;

            long      startBlock = GetStartBlock();
            long      endBlock   = GetEndBlock();
            SQLServer sQLServer  = new SQLServer();

            sQLServer.Open();

            //同步主循环
            for (long blockNum = startBlock; blockNum < endBlock; blockNum++)
            {
                //获取块信息
                JObject blockJson = GetBlock(blockNum);
                //遍历tx 处理vin vout
                foreach (JObject tx in blockJson["result"]["tx"])
                {
                    //接收index
                    string blockindex = blockJson["result"]["index"].Value <string>();
                    //接收txid
                    string txid = tx["txid"].Value <string>();
                    //处理vin
                    foreach (JObject vin in tx["vin"])
                    {
                        string txidRef = vin["txid"].Value <string>();
                        int    nRef    = vin["vout"].Value <int>();
                        //入库
                        sQLServer.AddVin(blockindex, txidRef, nRef);
                    }

                    //处理vout
                    foreach (JObject vout in tx["vout"])
                    {
                        int    n       = vout["n"].Value <int>();
                        string asset   = vout["asset"].Value <string>();
                        string address = vout["address"].Value <string>();
                        string value   = vout["value"].Value <string>();
                        //入库
                        sQLServer.AddVout(blockindex, txid, n, asset, address, value);
                    }
                }
                //记录更新
                sQLServer.UpdateBlockHeight(blockNum + 1);
            }
            sQLServer.Close();
            //记录状态
            State.SyncBlock = true;
        }
Example #3
0
        public void Run()
        {
            string wif           = "KwwJMvfFPcRx2HSgQRPviLv4wPrxRaLk7kfQntkH8kCXzTgAts8t";               //自己
            string targetAddress = "AQye22dcXV1jCrzzC4iGbyM68LADwPSs11";                                 //别人
            string asset         = "0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b"; //币种(NEO)
            //string asset = "0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7";//币种(GAS)
            decimal sendCount = new decimal(1);

            byte[] prikey  = Helper.GetPrivateKeyFromWIF(wif);
            byte[] pubkey  = Helper.GetPublicKeyFromPrivateKey(prikey);
            string address = Helper.GetAddressFromPublicKey(pubkey);

            SQLServer sQLServer = new SQLServer();

            sQLServer.Open();
            //接收一个读取对象
            SqlDataReader reader = sQLServer.GetUTXO(address, asset);

            //整理utxo
            Dictionary <string, List <UTXO> > dic_UTXO = GetUTXO(reader);

            sQLServer.Close();

            //拼交易
            Transaction transaction = MakeTransaction(dic_UTXO, address, targetAddress, new Hash256(asset), sendCount);

            transaction.version    = 0;
            transaction.attributes = new ThinNeo.Attribute[0];
            transaction.type       = TransactionType.ContractTransaction;//转账类型
            byte[] msg    = transaction.GetMessage();
            string msgStr = Helper.Bytes2HexString(msg);

            byte[] signdata = Helper.Sign(msg, prikey);//签名
            transaction.AddWitness(signdata, pubkey, address);
            string txid = transaction.GetHash().ToString();

            byte[] data    = transaction.GetRawData();
            string rawdata = Helper.Bytes2HexString(data);

            //广播
            HttpRequest httpRequest = new HttpRequest();
            JObject     jObject     = httpRequest.Get("sendrawtransaction", rawdata);
            string      info        = jObject.ToString();

            Console.WriteLine(info);
        }
Example #4
0
        public void Run()
        {
            string wif   = "KwwJMvfFPcRx2HSgQRPviLv4wPrxRaLk7kfQntkH8kCXzTgAts8t";               //自己
            string asset = "0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"; //币种(GAS)

            byte[] prikey  = Helper.GetPrivateKeyFromWIF(wif);
            byte[] pubkey  = Helper.GetPublicKeyFromPrivateKey(prikey);
            string address = Helper.GetAddressFromPublicKey(pubkey);

            SQLServer sQLServer = new SQLServer();

            sQLServer.Open();
            //接收一个读取对象
            SqlDataReader reader = sQLServer.GetUTXO(address);

            //整理utxo
            Dictionary <string, List <UTXO> > dic_UTXO = GetUTXO(reader);

            sQLServer.Close();

            //从文件中读取合约脚本
            byte[] script          = System.IO.File.ReadAllBytes("C:\\Neo\\SmartContracts\\0x35eac9327df0a34f2302a1c7832d888b6a366c0e.avm"); //这里填你的合约所在地址
            byte[] parameter__list = Helper.HexString2Bytes("0710");                                                                         //这里填合约入参  例:0610代表(string,[])
            byte[] return_type     = Helper.HexString2Bytes("05");                                                                           //这里填合约的出参
            int    need_storage    = 1;
            int    need_nep4       = 0;
            int    need_canCharge  = 4;
            string name            = "NEO Name Credit(CLI)";
            string version         = "2.0";
            string auther          = "Youngsun";
            string email           = "*****@*****.**";
            string description     = "0";

            using (ScriptBuilder sb = new ScriptBuilder()) {
                //倒叙插入数据
                sb.EmitPushString(description);
                sb.EmitPushString(email);
                sb.EmitPushString(auther);
                sb.EmitPushString(version);
                sb.EmitPushString(name);
                sb.EmitPushNumber(need_storage | need_nep4 | need_canCharge);
                sb.EmitPushBytes(return_type);
                sb.EmitPushBytes(parameter__list);
                sb.EmitPushBytes(script);
                sb.EmitSysCall("Neo.Contract.Create");

                string scriptPublish = Helper.Bytes2HexString(sb.ToArray());
                //用invokescript试运行并得到消耗
                HttpRequest     httpRequest  = new HttpRequest();
                JObject         result       = httpRequest.Get("invokescript", scriptPublish);
                string          consume      = result["result"]["gas_consumed"].ToString();
                decimal         gas_consumed = decimal.Parse(consume);
                InvokeTransData extdata      = new InvokeTransData();
                extdata.script = sb.ToArray();

                extdata.gas = Math.Ceiling(gas_consumed - 10);

                //拼装交易体
                Transaction tran = MakeTransaction(dic_UTXO, null, new Hash256(asset), extdata.gas);
                tran.version = 1;
                tran.extdata = extdata;
                tran.type    = TransactionType.InvocationTransaction;
                byte[] msg      = tran.GetMessage();
                byte[] signdata = Helper.Sign(msg, prikey);
                tran.AddWitness(signdata, pubkey, address);
                string txid    = tran.GetHash().ToString();
                byte[] data    = tran.GetRawData();
                string rawdata = Helper.Bytes2HexString(data);

                //广播
                JObject jObject = httpRequest.Post("sendrawtransaction", rawdata);

                string info = jObject.ToString();
                Console.WriteLine(info);
            }
        }
Example #5
0
        public void Run()
        {
            string  wif           = "KwwJMvfFPcRx2HSgQRPviLv4wPrxRaLk7kfQntkH8kCXzTgAts8t";               //自己
            string  targetAddress = "AQye22dcXV1jCrzzC4iGbyM68LADwPSs11";                                 //别人
            string  asset         = "0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"; //币种(GAS转换NNC)
            decimal sendCount     = new decimal(1);

            byte[] prikey  = Helper.GetPrivateKeyFromWIF(wif);
            byte[] pubkey  = Helper.GetPublicKeyFromPrivateKey(prikey);
            string address = Helper.GetAddressFromPublicKey(pubkey);

            SQLServer sQLServer = new SQLServer();

            sQLServer.Open();
            //接收一个读取对象
            SqlDataReader reader = sQLServer.GetUTXO(address, asset);

            //整理utxo
            Dictionary <string, List <UTXO> > dic_UTXO = GetUTXO(reader);

            sQLServer.Close();

            //拼交易
            Transaction transaction = MakeTransaction(dic_UTXO, address, targetAddress, new Hash256(asset), 0);

            transaction.version    = 0;
            transaction.attributes = new ThinNeo.Attribute[0];

            //与普通转账的区别
            transaction.type = TransactionType.InvocationTransaction;//调用合约的转账
            InvokeTransData invokeTransData = new InvokeTransData();

            byte[] script = null;
            using (ScriptBuilder sb = new ScriptBuilder()) {
                var array = new MyJson.JsonNode_Array();
                array.AddArrayValue("(addr)" + address);                                   //from
                array.AddArrayValue("(addr)" + targetAddress);                             //to
                array.AddArrayValue("(int)" + "1" + "00");                                 //value
                sb.EmitParamJson(array);                                                   //参数倒序入
                sb.EmitPushString("transfer");                                             //参数倒序入
                sb.EmitAppCall(new Hash160("0xbab964febd82c9629cc583596975f51811f25f47")); //合约
                script = sb.ToArray();
            }
            invokeTransData.script = script;
            invokeTransData.gas    = 0;
            transaction.extdata    = invokeTransData;
            ///


            byte[] msg    = transaction.GetMessage();
            string msgStr = Helper.Bytes2HexString(msg);

            byte[] signdata = Helper.Sign(msg, prikey);//签名
            transaction.AddWitness(signdata, pubkey, address);
            string txid = transaction.GetHash().ToString();

            byte[] data    = transaction.GetRawData();
            string rawdata = Helper.Bytes2HexString(data);



            //广播
            HttpRequest httpRequest = new HttpRequest();
            JObject     jObject     = httpRequest.Post("sendrawtransaction", rawdata);
            string      info        = jObject.ToString();

            Console.WriteLine("NNC" + info);
        }