//获取起始块 private long GetStartBlock() { SQLServer sQLServer = new SQLServer(); sQLServer.Open(); long startBlock = sQLServer.GetStartBlock(); sQLServer.Close(); return(startBlock); }
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; }
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); }
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); } }
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); }