/// <summary> /// 取回在注册器下的sgas /// </summary> /// <returns></returns> async Task test_getMoneyBack() { Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); //amount += "00000000"; var info = await nns_tools.api_InvokeScript(Config.sc_nns, "getOwnerInfo", "(hex256)" + nns_tools.nameHash(root).ToString()); var _result = info.value.subItem[0]; var sell_reg = _result.subItem[1].AsHash160(); byte[] script; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + address); //from array.AddArrayValue("(int)" + amount); //value sb.EmitParamJson(array); //参数倒序入 sb.EmitPushString("getmoneyback"); //参数倒序入 sb.EmitAppCall(sell_reg); //nep5脚本 script = sb.ToArray(); } var result = await nns_tools.api_SendTransaction(prikey, script); subPrintLine(result); }
public static async Task <string> PostHttpRequest(string method, string rawdata, string chainHash) { string url; byte[] postdata; MyJson.JsonNode_Array postRawArray = new MyJson.JsonNode_Array(); postRawArray.AddArrayValue(chainHash); postRawArray.AddArrayValue(rawdata); url = Helper.MakeRpcUrlPost(Program.local, method, out postdata, postRawArray.ToArray()); string result = ""; try { result = await Helper.HttpPost(url, postdata); } catch (Exception) { //Console.WriteLine(e.Message); } return(result); }
async Task setmoneyin() { string addressto = ThinNeo.Helper.GetAddressFromScriptHash(Config.domainTransactionhash); byte[] script; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + address); //from array.AddArrayValue("(addr)" + addressto); //to array.AddArrayValue("(int)" + 20 + "00000000"); //value sb.EmitParamJson(array); //参数倒序入 sb.EmitPushString("transfer"); //参数倒序入 sb.EmitAppCall(Config.dapp_sgas); //nep5脚本 sb.EmitSysCall("System.ExecutionEngine.GetScriptContainer"); sb.EmitSysCall("Neo.Transaction.GetHash"); //把TXID包进Array里 sb.EmitPushNumber(1); sb.Emit(ThinNeo.VM.OpCode.PACK); sb.EmitPushString("setmoneyin"); sb.EmitAppCall(Config.domainTransactionhash); script = sb.ToArray(); Console.WriteLine(ThinNeo.Helper.Bytes2HexString(script)); } var result = await nns_tools.api_SendTransaction(prikey, script); subPrintLine(result); }
//往市场合约里的充值测试 void test_rechargeToken() { MyJson.JsonNode_Array paparms = new MyJson.JsonNode_Array(); MyJson.JsonNode_Object paparms_1 = new MyJson.JsonNode_Object(); var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)AYTcTTB8jpWtGgs8ukoUrQPm1zmEFxZHNk"); array.AddArrayValue("(addr)ALAD4J1b7PnkV23GrEquBjo8wqUfc6MGQf"); array.AddArrayValue("(int)" + 100000000); paparms_1["sbParamJson"] = array; paparms_1["sbPushString"] = new MyJson.JsonNode_ValueString("transfer"); paparms_1["nnc"] = new MyJson.JsonNode_ValueString(global.id_sgas); MyJson.JsonNode_Object paparms_extString = new MyJson.JsonNode_Object(); paparms_extString["txType"] = new MyJson.JsonNode_ValueString("transferNepToAuc"); paparms_extString["data"] = new MyJson.JsonNode_ValueString("1"); paparms_1["extString"] = paparms_extString; MyJson.JsonNode_Object paparms_2 = new MyJson.JsonNode_Object(); paparms_2["sbPushString"] = new MyJson.JsonNode_ValueString("rechargeToken"); paparms_2["nnc"] = new MyJson.JsonNode_ValueString("0x7753e79cfb98e63e2b7aa00a819e0cb86fdb1930"); paparms_2["extString"] = paparms_extString; paparms.AddArrayValue(paparms_1); paparms.AddArrayValue(paparms_2); NeoGameSDK_CS.makeRawTransaction((bool timeout, WWW www) => { Debug.Log(www.text); }, paparms); }
public static async Task <string> InvokeScript(byte[] script, string chainHash) { string scriptPublish = script.ToHexString(); byte[] postdata; string url; MyJson.JsonNode_Array postArray = new MyJson.JsonNode_Array(); postArray.AddArrayValue(chainHash); postArray.AddArrayValue(scriptPublish); url = Helper.MakeRpcUrlPost(Program.local, "invokescript", out postdata, postArray.ToArray()); string result = ""; try { result = await Helper.HttpPost(url, postdata); } catch (Exception) { } return(result); }
public async Task Demo() { byte[] prikey = ThinNeo.Helper.GetPrivateKeyFromWIF(Config.test_wif); byte[] pubkey = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey); string address = ThinNeo.Helper.GetAddressFromPublicKey(pubkey); byte[] scripthash = ThinNeo.Helper.GetPublicKeyHashFromAddress(address); subPrintLine("Get Total Supply for " + this.ID + ":"); var result = await nns_tools.api_InvokeScript(sc, "totalSupply"); subPrintLine("Total Supply : " + result.value.subItem[0].AsInteger()); //获取地址的资产列表 Dictionary <string, List <Utxo> > dir = await Helper.GetBalanceByAddress(Nep55_1.api, address); if (dir.ContainsKey(Nep55_1.id_GAS) == false) { Console.WriteLine("no gas"); return; } //MakeTran ThinNeo.Transaction tran = null; { byte[] script = null; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + address); //from array.AddArrayValue("(str)" + "totalSupply"); //to array.AddArrayValue("(int)22"); //value sb.EmitParamJson(array); //参数倒序入 sb.EmitParamJson(new MyJson.JsonNode_ValueString("(str)transfer")); //参数倒序入 ThinNeo.Hash160 shash = new ThinNeo.Hash160(sc); sb.EmitAppCall(shash); //nep5脚本 script = sb.ToArray(); } tran = Helper.makeTran(dir[Nep55_1.id_GAS], address, new ThinNeo.Hash256(Nep55_1.id_GAS), 0); tran.type = ThinNeo.TransactionType.InvocationTransaction; var idata = new ThinNeo.InvokeTransData(); tran.extdata = idata; idata.script = script; } //sign and broadcast var signdata = ThinNeo.Helper.Sign(tran.GetMessage(), prikey); tran.AddWitness(signdata, pubkey, address); var trandata = tran.GetRawData(); var strtrandata = ThinNeo.Helper.Bytes2HexString(trandata); byte[] postdata;//Nep55_1.api var url = Helper.MakeRpcUrlPost(nnc_1.api_local, "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(strtrandata)); var result2 = await Helper.HttpPost(url, postdata); Console.WriteLine("得到的结果是:" + result2); }
public void NeoTransfer() { byte[] prikey = ThinNeo.Helper.GetPrivateKeyFromWIF(wif); var pubkey = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey); var address = ThinNeo.Helper.GetAddressFromPublicKey(pubkey); using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + from); array.AddArrayValue("(addr)" + "AMjCDmrbfcBxGPitHcdrUYRyPXD7DfC52c");//NeoBank address AMjCDmrbfcBxGPitHcdrUYRyPXD7DfC52c array.AddArrayValue("(int)" + value); byte[] randomBytes = new byte[32]; using (RandomNumberGenerator rng = RandomNumberGenerator.Create()) { rng.GetBytes(randomBytes); } BigInteger randomNum = new BigInteger(randomBytes); sb.EmitPushNumber(randomNum); sb.Emit(ThinNeo.VM.OpCode.DROP); sb.EmitParamJson(array); //参数倒序入 sb.EmitPushString("transfer"); //参数倒序入 sb.EmitAppCall(new Hash160("0x04e31cee0443bb916534dad2adf508458920e66d")); //nep5脚本 script = sb.ToArray(); } ThinNeo.Transaction tran = new Transaction(); tran.inputs = new ThinNeo.TransactionInput[0]; tran.outputs = new TransactionOutput[0]; tran.attributes = new ThinNeo.Attribute[1]; tran.attributes[0] = new ThinNeo.Attribute(); tran.attributes[0].usage = TransactionAttributeUsage.Script; tran.attributes[0].data = ThinNeo.Helper.GetPublicKeyHashFromAddress(address); tran.version = 1; tran.type = ThinNeo.TransactionType.InvocationTransaction; var idata = new ThinNeo.InvokeTransData(); tran.extdata = idata; idata.script = script; idata.gas = 0; byte[] msg = tran.GetMessage(); string msgstr = ThinNeo.Helper.Bytes2HexString(msg); byte[] signdata = ThinNeo.Helper.Sign(msg, prikey); tran.AddWitness(signdata, pubkey, address); string txid = tran.GetHash().ToString(); byte[] data = tran.GetRawData(); string rawdata = ThinNeo.Helper.Bytes2HexString(data); byte[] postdata; var url = MakeRpcUrlPost(NeoRpcUrl, "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(rawdata)); var result = HttpPost(url, postdata); Console.WriteLine(result + " txid: " + txid); return(result); }
private void Button_Click_2(object sender, RoutedEventArgs e) { int need_storage = iStorage.IsChecked == true ? 1 : 0; int need_nep4 = iDyncall.IsChecked == true ? 2 : 0; int can_charge = iCharge.IsChecked == true ? 4 : 0; ThinNeo.ScriptBuilder sb = new ThinNeo.ScriptBuilder(); //倒叙插入数据 var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(bytes)" + this.asmBinText.Text); array.AddArrayValue("(bytes)" + iPList.Text); array.AddArrayValue("(bytes)" + iRType.Text); array.AddArrayValue("(int)" + (need_storage | need_nep4 | can_charge)); array.AddArrayValue("(str)" + iName.Text); //name array.AddArrayValue("(str)" + iVersion.Text); //version array.AddArrayValue("(str)" + iAuthor.Text); //author array.AddArrayValue("(str)" + iEmail.Text); //email array.AddArrayValue("(str)" + iDescription.Text); //desc sb.EmitParamJson(array); //参数倒序入 sb.EmitParamJson(new MyJson.JsonNode_ValueString("(str)upgrade")); //参数倒序入 var shash = new ThinNeo.Hash160(iOldScHash.Text);; sb.EmitAppCall(shash); this.script = sb.ToArray(); this.DialogResult = true; }
private void Button_Click(object sender, RoutedEventArgs e) { var prikey = ThinNeo.Helper.GetPrivateKeyFromWIF(""); var pubkey = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey); var scripthash = ThinNeo.Helper.GetScriptHashFromPublicKey(pubkey); var addres = ThinNeo.Helper.GetAddressFromScriptHash(scripthash); //AbN2K2trYzgx8WMg2H7U7JHH6RQVzz2fnx var vscripthash = ThinNeo.Helper.GetPublicKeyHashFromAddress("AdsNmzKPPG7HfmQpacZ4ixbv9XJHJs2ACz"); ThinNeo.Transaction tx = new ThinNeo.Transaction(); tx.inputs = new ThinNeo.TransactionInput[0]; tx.outputs = new ThinNeo.TransactionOutput[0]; tx.type = ThinNeo.TransactionType.InvocationTransaction; tx.version = 1; //附加一个见证人 ///要他签名 tx.attributes = new ThinNeo.Attribute[1]; tx.attributes[0] = new ThinNeo.Attribute(); tx.attributes[0].usage = ThinNeo.TransactionAttributeUsage.Script; tx.attributes[0].data = scripthash; //拼接调用脚本 var invokedata = new ThinNeo.InvokeTransData(); tx.extdata = invokedata; invokedata.gas = 0; var sb = new ThinNeo.ScriptBuilder(); MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); array.AddArrayValue("(hex160)" + scripthash.ToString()); //witnesscall array.AddArrayValue("(hex160)" + vscripthash.ToString()); //witnessreturn array.AddArrayValue("(str)" + vscripthash.ToString()); //callscript array.AddArrayValue("(str)" + methodCombox.Text); //callmethod var _params = new MyJson.JsonNode_Array(); _params.AddArrayValue(int.Parse(textbox1.Text)); _params.AddArrayValue(int.Parse(textbox2.Text)); array.Add(_params);//params _params.AddArrayValue("(int)" + r.Next()); sb.EmitParamJson(array); sb.EmitPushString("outcall"); ThinNeo.Hash160 contractaddr = new ThinNeo.Hash160("0x24192c2a72e0ce8d069232f345aea4db032faf72"); sb.EmitAppCall(contractaddr); invokedata.script = sb.ToArray(); //签名(谁签名) var msg = tx.GetMessage(); var data = ThinNeo.Helper.Sign(msg, prikey); tx.AddWitness(data, pubkey, addres); DoCallTran(tx); //CallScript(invokedata.script); }
public async Task Start() { string wif = "L3KK4jkgRzNEimdRxzzvD2p2vmPfkpnLC574tY2s5qY3M9LthHtb"; string targetAddress = "AbN2K2trYzgx8WMg2H7U7JHH6RQVzz2fnx"; decimal sendCount = new decimal(1); byte[] prikey = ThinNeo.Helper.GetPrivateKeyFromWIF(wif); byte[] pubkey = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey); string address = ThinNeo.Helper.GetAddressFromPublicKey(pubkey); 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)" + "500" + "00"); //value sb.EmitParamJson(array); //参数倒序入 sb.EmitPushString("transfer"); //参数倒序入 sb.EmitAppCall(new Hash160("0xccd651a5e7d9f4dc698353970df7b7180139cbbe")); script = sb.ToArray(); } //获取自己的utxo Dictionary <string, List <UTXO> > dic_UTXO = await GetUTXOByAddress("https://api.nel.group/api/testnet", address); Transaction tran = makeTran(dic_UTXO, address, null, new ThinNeo.Hash256("0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"), 0); tran.type = ThinNeo.TransactionType.InvocationTransaction; tran.version = 0; tran.attributes = new ThinNeo.Attribute[0]; var idata = new ThinNeo.InvokeTransData(); tran.extdata = idata; idata.script = script; idata.gas = 0; byte[] msg = tran.GetMessage(); string msgstr = ThinNeo.Helper.Bytes2HexString(msg); byte[] signdata = ThinNeo.Helper.Sign(msg, prikey); tran.AddWitness(signdata, pubkey, address); string txid = tran.GetHash().ToString(); byte[] data = tran.GetRawData(); string rawdata = ThinNeo.Helper.Bytes2HexString(data); byte[] postdata; var url = HttpHelper.MakeRpcUrlPost("https://api.nel.group/api/testnet", "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(rawdata)); var result = await HttpHelper.HttpPost(url, postdata); MyJson.JsonNode_Object resJO = (MyJson.JsonNode_Object)MyJson.Parse(result); Console.WriteLine(resJO.ToString()); }
public async Task Start() { string wif = "KwwJMvfFPcRx2HSgQRPviLv4wPrxRaLk7kfQntkH8kCXzTgAts8t"; string targetAddress = "ALjSnMZidJqd18iQaoCgFun6iqWRm2cVtj"; decimal sendCount = new decimal(1); byte[] prikey = ThinNeo.Helper.GetPrivateKeyFromWIF(wif); byte[] pubkey = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey); string address = ThinNeo.Helper.GetAddressFromPublicKey(pubkey); 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(); } //获取自己的utxo Dictionary <string, List <UTXO> > dic_UTXO = await GetUTXOByAddress("https://api.nel.group/api/testnet", address); Transaction tran = makeTran(dic_UTXO, address, null, new ThinNeo.Hash256("0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"), 0); tran.type = ThinNeo.TransactionType.InvocationTransaction; tran.version = 0; tran.attributes = new ThinNeo.Attribute[0]; var idata = new ThinNeo.InvokeTransData(); tran.extdata = idata; idata.script = script; idata.gas = 0; byte[] msg = tran.GetMessage(); string msgstr = ThinNeo.Helper.Bytes2HexString(msg); byte[] signdata = ThinNeo.Helper.Sign(msg, prikey); tran.AddWitness(signdata, pubkey, address); string txid = tran.GetHash().ToString(); byte[] data = tran.GetRawData(); string rawdata = ThinNeo.Helper.Bytes2HexString(data); byte[] postdata; var url = HttpHelper.MakeRpcUrlPost("https://api.nel.group/api/testnet", "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(rawdata)); var result = await HttpHelper.HttpPost(url, postdata); MyJson.JsonNode_Object resJO = (MyJson.JsonNode_Object)MyJson.Parse(result); Console.WriteLine(resJO.ToString()); }
public void Run() { string address = "AQye22dcXV1jCrzzC4iGbyM68LADwPSs11"; byte[] data = null; using (ScriptBuilder sb = new ScriptBuilder()) { MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + address);//who sb.EmitParamJson(array); sb.EmitPushString("balanceOf"); sb.EmitAppCall(new Hash160("0x8e64b705793e59b9e8b9ce9412092a3881eaa5fd"));//合约hash(我的Youngsun币:0x8e64b705793e59b9e8b9ce9412092a3881eaa5fd) data = sb.ToArray(); } string script = Helper.Bytes2HexString(data); //invokescript方法 //通过虚拟机传递脚本之后返回结果 //此方法用于测试你的虚拟机脚本,如同在区块链上运行一样。这个RPC调用对区块链没有任何影响。 HttpRequest httpRequest = new HttpRequest(); JObject jObject = httpRequest.Get("invokescript", script); string info = jObject.ToString(); Console.WriteLine(jObject); }
public static async Task <string> api_SendbatchTransfer(byte[] prikey, Hash160 schash, string methodname, params string[] subparam) { byte[] pubkey = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey); string address = ThinNeo.Helper.GetAddressFromPublicKey(pubkey); byte[] data = null; using (ScriptBuilder sb = new ScriptBuilder()) { MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); byte[] randombytes = new byte[32]; using (RandomNumberGenerator rng = RandomNumberGenerator.Create()) { rng.GetBytes(randombytes); } BigInteger randomNum = new BigInteger(randombytes); sb.EmitPushNumber(randomNum); sb.Emit(ThinNeo.VM.OpCode.DROP); if (subparam != null && subparam.Length > 0) { for (var i = 0; i < subparam.Length; i++) { array.AddArrayValue(subparam[i]); } } sb.EmitParamJson(array); sb.EmitPushString(methodname); sb.EmitAppCall(schash); data = sb.ToArray(); } //MakeTran ThinNeo.Transaction tran = new ThinNeo.Transaction(); tran.version = 0;//0 or 1 tran.inputs = new ThinNeo.TransactionInput[0]; tran.outputs = new ThinNeo.TransactionOutput[0]; tran.type = ThinNeo.TransactionType.InvocationTransaction; tran.extdata = new ThinNeo.InvokeTransData(); var idata = new ThinNeo.InvokeTransData(); tran.extdata = idata; idata.script = data; idata.gas = 0; tran.attributes = new ThinNeo.Attribute[1]; tran.attributes[0] = new ThinNeo.Attribute(); tran.attributes[0].usage = ThinNeo.TransactionAttributeUsage.Script; tran.attributes[0].data = ThinNeo.Helper.GetPublicKeyHashFromAddress(address); //sign and broadcast var signdata = ThinNeo.Helper.Sign(tran.GetMessage(), prikey); tran.AddWitness(signdata, pubkey, address); var trandata = tran.GetRawData(); var strtrandata = ThinNeo.Helper.Bytes2HexString(trandata); byte[] postdata; var url = Helper.MakeRpcUrlPost(Config.api, "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(strtrandata)); var result = await Helper.HttpPost(url, postdata); return(result); }
public static async Task <Result> api_InvokeScript(Hash160 scripthash, string methodname, params string[] subparam) { byte[] data = null; using (ScriptBuilder sb = new ScriptBuilder()) { MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); for (var i = 0; i < subparam.Length; i++) { array.AddArrayValue(subparam[i]); } sb.EmitParamJson(array); sb.EmitPushString(methodname); sb.EmitAppCall(scripthash); data = sb.ToArray(); } string script = ThinNeo.Helper.Bytes2HexString(data); byte[] postdata; var url = Helper.MakeRpcUrlPost(api, "invokescript", out postdata, new MyJson.JsonNode_ValueString(script)); var text = await Helper.HttpPost(url, postdata); MyJson.JsonNode_Object json = MyJson.Parse(text) as MyJson.JsonNode_Object; Result rest = new Result(); rest.textInfo = text; if (json.ContainsKey("result")) { var result = json["result"].AsList()[0].AsDict()["stack"].AsList(); rest.value = ResultItem.FromJson("Array", result); } return(rest);// subPrintLine("得到的结果是:" + result); }
private async Task test_getRefundTarget() { subPrintLine("Input txid:"); string txid = Console.ReadLine(); byte[] script = null; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(hex256)" + txid); sb.EmitParamJson(array); //参数倒序入 sb.EmitParamJson(new MyJson.JsonNode_ValueString("(str)getRefundTarget")); //参数倒序入 var shash = Config.dapp_sgas; sb.EmitAppCall(shash); //nep5脚本 script = sb.ToArray(); } var urlCheckUTXO = Helper.MakeRpcUrl(Config.api, "invokescript", new MyJson.JsonNode_ValueString(ThinNeo.Helper.Bytes2HexString(script))); string resultCheckUTXO = await Helper.HttpGet(urlCheckUTXO); var jsonCU = MyJson.Parse(resultCheckUTXO); var stack = jsonCU.AsDict()["result"].AsList()[0].AsDict()["stack"].AsList()[0].AsDict(); var value = ThinNeo.Helper.HexString2Bytes(stack["value"].ToString()); subPrintLine("addr:" + ThinNeo.Helper.GetAddressFromScriptHash(value)); }
/// <summary> /// 调用合约中的balanceOf方法、 /// </summary> /// <param name="address"></param> private static void GetBalanceOf() { byte[] data = null; using (ScriptBuilder sb = new ScriptBuilder()) { MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + "AbN2K2trYzgx8WMg2H7U7JHH6RQVzz2fnx"); sb.EmitParamJson(array); sb.EmitPushString("balanceOf"); sb.EmitAppCall(new Hash160("04e31cee0443bb916534dad2adf508458920e66d"));//合约脚本hash data = sb.ToArray(); } string script = ThinNeo.Helper.Bytes2HexString(data); byte[] postdata; var url = Helper.MakeRpcUrlPost("https://api.nel.group/api/testnet", "invokescript", out postdata, new MyJson.JsonNode_ValueString(script)); var result = Helper.HttpPost(url, postdata); var res = Newtonsoft.Json.Linq.JObject.Parse(result)["result"] as Newtonsoft.Json.Linq.JArray; var stack = (res[0]["stack"] as Newtonsoft.Json.Linq.JArray)[0] as Newtonsoft.Json.Linq.JObject; var balance = ThinNeo.Helper.HexString2Bytes((string)stack["value"]); var bb = new BigInteger(balance); decimal cc = (decimal)bb / (decimal)100000000.00000000; Console.WriteLine(result); Console.WriteLine(balance); }
void threadCheckTx() { while (true) { foreach (var item in mapTxState) { var txid = item.Key; var sb = new ThinNeo.ScriptBuilder(); MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); array.AddArrayValue("(hex256)" + txid); //array.AddArrayValue(new MyJson.JsonNode_Array()); sb.EmitParamJson(array); sb.EmitPushString("getcallstate"); ThinNeo.Hash160 contractaddr = new ThinNeo.Hash160("0x24192c2a72e0ce8d069232f345aea4db032faf72"); sb.EmitAppCall(contractaddr); var script = sb.ToArray(); var result = CallScript(script); if (!string.IsNullOrEmpty(result[0]["value"].ToString())) { item.Value.state = (int)result[0]["value"][0]["value"]; } } System.Threading.Thread.Sleep(1000); } }
//市场合约余额测试 void test_getAuctionSgas() { MyJson.JsonNode_Object paparms = new MyJson.JsonNode_Object(); var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)AYTcTTB8jpWtGgs8ukoUrQPm1zmEFxZHNk"); paparms["sbParamJson"] = array; paparms["sbPushString"] = new MyJson.JsonNode_ValueString("balanceOf"); paparms["nnc"] = new MyJson.JsonNode_ValueString("0x7753e79cfb98e63e2b7aa00a819e0cb86fdb1930"); NeoGameSDK_CS.invokescrept((bool timeout, WWW www) => { var json = MyJson.Parse(www.text); if (!json.AsDict().ContainsKey("result")) { Debug.Log("无余额"); } else { var resultv = json.AsDict()["result"].AsList()[0].AsDict()["stack"].AsList()[0].AsDict(); var rtype = resultv["type"].AsString(); var rvalue = resultv["value"].AsString(); if (rvalue != "") { var n = new BigMath.Numerics.BigInteger(ThinNeo.Helper.HexString2Bytes(rvalue)); Debug.Log("余额:" + decimal.Parse((float.Parse(n.ToString()) / 100000000).ToString())); } else { Debug.Log("无余额"); } } }, paparms); }
public async Task Start() { //string address = "ALjSnMZidJqd18iQaoCgFun6iqWRm2cVtj"; string address = "AbN2K2trYzgx8WMg2H7U7JHH6RQVzz2fnx"; byte[] data = null; using (ScriptBuilder sb = new ScriptBuilder()) { MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + address);//who sb.EmitParamJson(array); sb.EmitPushString("balanceOf"); //sb.EmitAppCall(new Hash160("0xbab964febd82c9629cc583596975f51811f25f47")); sb.EmitAppCall(new Hash160("0xa0b53d2efa8b1c4a62fcc1fcb54b7641510810c7")); data = sb.ToArray(); } string script = ThinNeo.Helper.Bytes2HexString(data); byte[] postdata; var url = HttpHelper.MakeRpcUrlPost("https://api.nel.group/api/testnet", "invokescript", out postdata, new MyJson.JsonNode_ValueString(script)); var result = await HttpHelper.HttpPost(url, postdata); Console.WriteLine("得到的结果是:" + result); }
void update() { this.textASM.Text = ThinNeo.Helper.Bytes2HexString(this.vscript); var scripthash = ThinNeo.Helper.GetScriptHashFromScript(this.vscript); this.info1.Text = ThinNeo.Helper.Bytes2HexString(scripthash); this.info2.Text = ThinNeo.Helper.GetAddressFromScriptHash(scripthash); MyJson.JsonNode_Array arr = new MyJson.JsonNode_Array(); arr.AddArrayValue("(str)0214"); arr.Add(new MyJson.JsonNode_Array()); var sb = new StringBuilder(); arr.ConvertToStringWithFormat(sb, 4); this.jsonParam.Text = sb.ToString(); if (this.iscript != null) { this.asmList.Items.Clear(); var ops = ThinNeo.Compiler.Avm2Asm.Trans(this.iscript); for (int i = 0; i < ops.Length; i++) { this.asmList.Items.Add(ops[i]); } this.asmBinText.Text = ThinNeo.Helper.Bytes2HexString(this.iscript); } }
private static async void TransNNC(string address, byte[] prikey, byte[] pubkey, string targetAddr, decimal sendCount) { byte[] script = null; using (ScriptBuilder sb = new ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + address); array.AddArrayValue("(addr)" + targetAddr); array.AddArrayValue("(int)" + "1" + "00"); sb.EmitParamJson(array); sb.EmitPushString("transfer"); sb.EmitAppCall(new Hash160("0xbab964febd82c9629cc583596975f51811f25f47")); script = sb.ToArray(); } Dictionary <string, List <UTXO> > dic_UTXO = await GetUTXOByAddress(address); Transaction tran = MakeTran(dic_UTXO, address, targetAddr, new ThinNeo.Hash256("0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"), 0); tran.type = TransactionType.InvocationTransaction; tran.version = 0; tran.attributes = new ThinNeo.Attribute[0]; var idata = new ThinNeo.InvokeTransData(); tran.extdata = idata; idata.script = script; idata.gas = 0; byte[] msg = tran.GetMessage(); string msgstr = ThinNeo.Helper.Bytes2HexString(msg); byte[] signdata = ThinNeo.Helper.Sign(msg, prikey); tran.AddWitness(signdata, pubkey, address); string txid = tran.GetHash().ToString(); byte[] data = tran.GetRawData(); string rawdata = ThinNeo.Helper.Bytes2HexString(data); byte[] postdata; var url = HttpHelper.MakeRpcUrlPost("http://127.0.0.1:20332", "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(rawdata)); var result = await HttpHelper.HttpPost(url, postdata); MyJson.JsonNode_Object resJO = (MyJson.JsonNode_Object)MyJson.Parse(result); Console.WriteLine(resJO.ToString()); }
/// <summary> /// 充值注册器 /// </summary> /// <returns></returns> async Task test_rechargeReg() { var info = await nns_tools.api_InvokeScript(Config.sc_nns, "getOwnerInfo", "(hex256)" + nns_tools.nameHash(root).ToString()); var _result = info.value.subItem[0]; var sell_reg = _result.subItem[1].AsHash160(); string addressto = ThinNeo.Helper.GetAddressFromScriptHash(sell_reg); Console.WriteLine("addressto=" + addressto); Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); //amount += "00000000"; byte[] script; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + address); //from array.AddArrayValue("(addr)" + addressto); //to array.AddArrayValue("(int)" + amount); //value sb.EmitParamJson(array); //参数倒序入 sb.EmitPushString("transfer"); //参数倒序入 sb.EmitAppCall(Config.dapp_sgas); //nep5脚本 ////这个方法是为了在同一笔交易中转账并充值 ////当然你也可以分为两笔交易 ////插入下述两条语句,能得到txid sb.EmitSysCall("System.ExecutionEngine.GetScriptContainer"); sb.EmitSysCall("Neo.Transaction.GetHash"); //把TXID包进Array里 sb.EmitPushNumber(1); sb.Emit(ThinNeo.VM.OpCode.PACK); sb.EmitPushString("setmoneyin"); sb.EmitAppCall(sell_reg); script = sb.ToArray(); Console.WriteLine(ThinNeo.Helper.Bytes2HexString(script)); } var result = await nns_tools.api_SendTransaction(prikey, script); subPrintLine(result); }
//GAS兑换代币 async Task test_mintTokensGAS() { Console.WriteLine("Input mint tokens:"); string mount = Console.ReadLine(); //获取地址的资产列表 Dictionary <string, List <Utxo> > dir = await Helper.GetBalanceByAddress(Config.api, address); if (dir.ContainsKey(Config.id_GAS) == false) { Console.WriteLine("no gas"); return; } ThinNeo.Transaction tran = null; { byte[] script = null; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(str)gas"); sb.EmitParamJson(array); //参数倒序入 sb.EmitParamJson(new MyJson.JsonNode_ValueString("(str)mintTokens")); //参数倒序入 sb.EmitAppCall(sneo_common.sc_sneo); //nep5脚本 script = sb.ToArray(); } var targetaddr = ThinNeo.Helper.GetAddressFromScriptHash(sneo_common.sc_sneo); Console.WriteLine("contract address=" + targetaddr);//往合约地址转账 //生成交易 tran = Helper.makeTran(dir[Config.id_GAS], targetaddr, new ThinNeo.Hash256(Config.id_GAS), Decimal.Parse(mount)); tran.type = ThinNeo.TransactionType.InvocationTransaction; var idata = new ThinNeo.InvokeTransData(); tran.extdata = idata; idata.script = script; } //sign and broadcast var signdata = ThinNeo.Helper.Sign(tran.GetMessage(), prikey); tran.AddWitness(signdata, pubkey, address); var trandata = tran.GetRawData(); var strtrandata = ThinNeo.Helper.Bytes2HexString(trandata); byte[] postdata; var url = Helper.MakeRpcUrlPost(Config.api, "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(strtrandata)); var result = await Helper.HttpPost(url, postdata); Console.WriteLine("得到的结果是:" + result); var json = MyJson.Parse(result).AsDict(); if (json.ContainsKey("result")) { var resultv = json["result"].AsList()[0].AsDict(); var txid = resultv["txid"].AsString(); Console.WriteLine("txid=" + txid); } }
public async Task ContractTransaction() { string wif = "L1PSC3LRShi51xHAX2KN9oCFqETrZQhnzhKVu5zbrzdDpxF1LQz3"; byte[] prikey = ThinNeo.Helper.GetPrivateKeyFromWIF(wif); byte[] pubkey = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey); string address = ThinNeo.Helper.GetAddressFromPublicKey(pubkey); byte[] prikey1 = ThinNeo.Helper.GetPrivateKeyFromWIF("L3KK4jkgRzNEimdRxzzvD2p2vmPfkpnLC574tY2s5qY3M9LthHtb"); byte[] pubkey1 = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey1); string address1 = ThinNeo.Helper.GetAddressFromPublicKey(pubkey1); Dictionary <string, List <Utxo> > dir = await Helper.GetBalanceByAddress(api, address1); using (ThinNeo.ScriptBuilder sb = new ThinNeo.ScriptBuilder()) { MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); array.AddArrayValue("(int)1"); sb.EmitParamJson(array); sb.EmitPushString("deploy"); sb.EmitAppCall(new Hash160("0xccd651a5e7d9f4dc698353970df7b7180139cbbe")); string scriptPublish = ThinNeo.Helper.Bytes2HexString(sb.ToArray()); byte[] postdata; var url = Helper.MakeRpcUrlPost(api, "invokescript", out postdata, new MyJson.JsonNode_ValueString(scriptPublish)); var result = await Helper.HttpPost(url, postdata); //return; var consume = (((MyJson.Parse(result) as MyJson.JsonNode_Object)["result"] as MyJson.JsonNode_Array)[0] as MyJson.JsonNode_Object)["gas_consumed"].ToString(); decimal gas_consumed = decimal.Parse(consume); ThinNeo.InvokeTransData extdata = new ThinNeo.InvokeTransData(); extdata.script = sb.ToArray(); extdata.gas = Math.Ceiling(gas_consumed); ThinNeo.Transaction tran = makeTran(dir, null, new ThinNeo.Hash256(id_GAS), extdata.gas); tran.version = 1; tran.extdata = extdata; tran.type = ThinNeo.TransactionType.InvocationTransaction; byte[] msg = tran.GetMessage(); byte[] signdata = ThinNeo.Helper.Sign(msg, prikey1); tran.AddWitness(signdata, pubkey1, address1); string txid = tran.GetHash().ToString(); byte[] data = tran.GetRawData(); string rawdata = ThinNeo.Helper.Bytes2HexString(data); url = Helper.MakeRpcUrlPost(api, "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(rawdata)); result = await Helper.HttpPost(url, postdata); MyJson.JsonNode_Object resJO = (MyJson.JsonNode_Object)MyJson.Parse(result); Console.WriteLine(resJO.ToString()); } }
public static async Task <string> api_SendTransaction(byte[] prikey, Hash160 schash, string methodname, params string[] subparam) { byte[] pubkey = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey); string address = ThinNeo.Helper.GetAddressFromPublicKey(pubkey); //获取地址的资产列表 Dictionary <string, List <Utxo> > dir = await Helper.GetBalanceByAddress(Config.api, address); if (dir.ContainsKey(Config.id_GAS) == false) { Console.WriteLine("no gas"); return(null); } //MakeTran ThinNeo.Transaction tran = null; { byte[] data = null; using (ScriptBuilder sb = new ScriptBuilder()) { MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); if (subparam != null && subparam.Length > 0) { for (var i = 0; i < subparam.Length; i++) { array.AddArrayValue(subparam[i]); } } sb.EmitParamJson(array); sb.EmitPushString(methodname); sb.EmitAppCall(schash); data = sb.ToArray(); } tran = Helper.makeTran(dir[Config.id_GAS], null, new ThinNeo.Hash256(Nep55_1.id_GAS), 0); tran.type = ThinNeo.TransactionType.InvocationTransaction; var idata = new ThinNeo.InvokeTransData(); tran.extdata = idata; idata.script = data; idata.gas = 0; } //sign and broadcast var signdata = ThinNeo.Helper.Sign(tran.GetMessage(), prikey); tran.AddWitness(signdata, pubkey, address); var trandata = tran.GetRawData(); var strtrandata = ThinNeo.Helper.Bytes2HexString(trandata); byte[] postdata; var url = Helper.MakeRpcUrlPost(Config.api, "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(strtrandata)); var result = await Helper.HttpPost(url, postdata); return(result); }
async Task test_setSGASIn() { string addressto = ThinNeo.Helper.GetAddressFromScriptHash(Config.dapp_coinpool); Console.WriteLine("addressto=" + addressto); Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); byte[] script; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(addr)" + address); //from array.AddArrayValue("(addr)" + addressto); //to array.AddArrayValue("(int)" + amount); //value sb.EmitParamJson(array); //参数倒序入 sb.EmitPushString("transfer"); //参数倒序入 sb.EmitAppCall(Config.dapp_sgas); //nep5脚本 ////这个方法是为了在同一笔交易中转账并充值 ////当然你也可以分为两笔交易 ////插入下述两条语句,能得到txid sb.EmitSysCall("System.ExecutionEngine.GetScriptContainer"); sb.EmitSysCall("Neo.Transaction.GetHash"); //把TXID包进Array里 sb.EmitPushNumber(1); sb.Emit(ThinNeo.VM.OpCode.PACK); sb.EmitPushString("setSGASIn"); sb.EmitAppCall(Config.dapp_coinpool); script = sb.ToArray(); Console.WriteLine(ThinNeo.Helper.Bytes2HexString(script)); } var result = await nns_common.api_SendTransaction(prikey, script); subPrintLine(result); }
public MyJson.JsonNode_Object ToJson() { MyJson.JsonNode_Object _op = new MyJson.JsonNode_Object(); _op.SetDictValue("addr", addr); _op.SetDictValue("op", op.ToString()); if (this.stack != null) { MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); _op.SetDictValue("stack", array); foreach (var r in stack) { if (r.ind > 0) { array.AddArrayValue(r.type.ToString() + "|" + r.ind); } else { array.AddArrayValue(r.type.ToString()); } } } if (opresult != null) { _op.SetDictValue("result", StatkItemToJson(opresult)); } if (opparam != null) { _op.SetDictValue("param", opparam.ToHexString()); } if (subScript != null) { _op.SetDictValue("subscript", subScript.ToJson()); } return(_op); }
void test_setAuctionSgasNnc() { MyJson.JsonNode_Array paparms = new MyJson.JsonNode_Array(); MyJson.JsonNode_Object paparms_1 = new MyJson.JsonNode_Object(); var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(hex)0x2761020e5e6dfcd8d37fdd50ff98fa0f93bccf54"); paparms_1["sbParamJson"] = array; paparms_1["sbPushString"] = new MyJson.JsonNode_ValueString("_setSgas"); paparms_1["nnc"] = new MyJson.JsonNode_ValueString("0x7753e79cfb98e63e2b7aa00a819e0cb86fdb1930"); paparms.AddArrayValue(paparms_1); NeoGameSDK_CS.makeRawTransaction((bool timeout, WWW www) => { Debug.Log(www.text); }, paparms); }
async Task test_deploy() { byte[] script; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(int)1"); sb.EmitParamJson(array); //参数倒序入 sb.EmitPushString("deploy"); //参数倒序入 sb.EmitAppCall(Config.dapp_nnc); //nep5脚本 script = sb.ToArray(); Console.WriteLine(ThinNeo.Helper.Bytes2HexString(script)); } var result = await nns_common.api_SendTransaction(prikey, script); subPrintLine(result); }
public static string toHexData(this string scHash, string scMethod, string[] scParams) { byte[] data = null; using (ScriptBuilder sb = new ScriptBuilder()) { MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); for (var i = 0; i < scParams.Length; i++) { array.AddArrayValue(scParams[i]); } sb.EmitParamJson(array); sb.EmitPushString(scMethod); sb.EmitAppCall(new Hash160(scHash)); data = sb.ToArray(); } var script = Helper.Bytes2HexString(data); return(script); }