//增加智能合约见证人 public void AddWitnessScript(byte[] vscript, byte[] iscript, Hash160 scriptHash = null) { var scripthash = ThinNeo.Helper_NEO.CalcHash160(vscript); List <Witness> wit = null; if (witnesses == null) { wit = new List <Witness>(); } else { wit = new List <Witness>(witnesses); } Witness newwit = new Witness(iscript, vscript, scriptHash); foreach (var w in wit) { if (w.Address == newwit.Address) { throw new Exception("alread have this witness"); } } wit.Add(newwit); wit.Sort((a, b) => { return(a.Hash.CompareTo(b.Hash)); }); witnesses = wit.ToArray(); }
async Task test_gettargetname() { var target = new ThinNeo.Hash160(Config.domaincenterhash); var result = await nns_common.api_InvokeScript(target, "name"); subPrintLine("result=" + System.Text.Encoding.UTF8.GetString(result.value.subItem[0].data)); }
//设置SD合约参数 async Task test_settargetSDT() { var target = new ThinNeo.Hash160(sds_common.sc); var result = await call_common.api_SendTransaction(this.prikey, call_common.main, "setTargetSDT", "(hex160)" + target.ToString()); subPrintLine("result=" + result); }
async Task test_setjumptarget() { var target = new ThinNeo.Hash160(Config.domaincenterhash); var result = await nns_common.api_SendTransaction(this.superadminprikey, Config.sc_nns, "_setTarget", "(hex160)" + target.ToString()); subPrintLine("result=" + result); }
private static async void TransGasForNep5(string address, byte[] prikey, byte[] pubkey, string targetAddr, decimal sendCount) { var assetnep5 = "0xa0b53d2efa8b1c4a62fcc1fcb54b7641510810c7"; var assetgas = "0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"; string api = "https://api.nel.group/api/testnet"; Dictionary <string, List <Utxo> > dir = await GetBalanceByAddress(api, address); ThinNeo.Transaction tran = null; { byte[] script = null; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); sb.EmitParamJson(array); //参数倒序入 sb.EmitParamJson(new MyJson.JsonNode_ValueString("(str)mintTokens")); //参数倒序入 ThinNeo.Hash160 shash = new ThinNeo.Hash160(assetnep5); sb.EmitAppCall(shash); //nep5脚本 script = sb.ToArray(); } var nep5scripthash = new ThinNeo.Hash160(assetnep5); var targetaddr = ThinNeo.Helper.GetAddressFromScriptHash(nep5scripthash); Console.WriteLine("contract address=" + targetaddr); //往合约地址转账 //生成交易 tran = makeTran(dir[assetgas], targetaddr, new ThinNeo.Hash256(assetgas), 5); 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 = HttpHelper.MakeRpcUrlPost("http://127.0.0.1:20332", "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(strtrandata)); var result = await HttpHelper.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(); if (txid.Length > 0) { Hash256 test = tran.GetHash(); } Console.WriteLine("txid=" + txid); } }
//获取配置 async Task test_getTestData() { Console.WriteLine("Input index:"); string index = Console.ReadLine(); Console.WriteLine("Input key:"); string key = Console.ReadLine(); //Console.WriteLine("Input keyIndex:"); //string keyIndex = Console.ReadLine(); Console.WriteLine("Input addr:"); string addr = Console.ReadLine(); //Console.WriteLine("Input value:"); //string price = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sc_oracle); var result = await oracleSw_Com.api_InvokeScript(shash, "test", "(int)" + index, "(str)" + key, "(addr)" + addr); oracleSw_Com.ResultItem item = result.value; if (item != null) { byte[] data = item.data; BigInteger value = new BigInteger(data); Console.WriteLine(key + ":" + value); } else { Console.WriteLine("item is null"); } }
async Task test_getTypeB() { Console.WriteLine("Input key:"); string key = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sc_oracle); var result = await oracleSw_Com.api_InvokeScript(shash, "getTypeB", "(str)" + key); Console.WriteLine("result = " + result); oracleSw_Com.ResultItem item = result.value; if (item != null) { byte[] data = item.data; BigInteger value = new BigInteger(data); Console.WriteLine(key + ":" + value); } else { Console.WriteLine("item is null"); } }
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); }
async Task test_getdomain() { var target = new ThinNeo.Hash160(Config.domaincenterhash); var result = await nns_common.api_SendTransaction(this.superadminprikey, target, "getDomain", "(hex256)0x011d21139589a79a4f20aa72fe91d2399e963e08f638956bc066b0486b89cc75"); //subPrintLine("result=" + System.Text.Encoding.UTF8.GetString(result.value.subItem[8].data)); //subPrintLine("result=" + System.Text.Encoding.UTF8.GetString(result.value.subItem[9].data)); }
async Task test_recharge() { Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(newsar_common.sc_sar); var result = await newsar_common.api_SendbatchTransaction(prikey, newsar_common.sc_sar, "recharge", "(addr)" + this.address, "(int)" + double.Parse(amount) *ten_pow); subPrintLine(result); }
//释放 async Task test_free() { Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(sdusd_common2.sc_sdusd); var result = await sdusd_common2.api_SendTransaction(prikey, shash, "free", "(addr)" + this.address, "(int)" + amount); subPrintLine(result); }
async Task test_withdrawT() { Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sar4c); var result = await sar_common.api_SendbatchTransaction(prikey, shash, "withdrawT", "(addr)" + this.address, "(int)" + double.Parse(amount) *ten_pow); subPrintLine(result); }
//锁仓 async Task test_lock() { Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sdusd); var result = await sdusd_common.api_SendTransaction(prikey, Config.sdusd, "lock", "(addr)" + this.address, "(int)" + amount); subPrintLine(result); }
//释放 async Task test_free() { Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(sar_common.sc_sar); var result = await sar_common.api_SendbatchTransaction(prikey, shash, "withdraw", "(addr)" + this.address, "(int)" + amount); subPrintLine(result); }
public static string GetAddressFromScriptHash(Hash160 scripthash) { byte[] data = new byte[20 + 1]; data[0] = 0x17; Array.Copy(scripthash, 0, data, 1, 20); var hash = sha256.ComputeHash(data); hash = sha256.ComputeHash(hash); var alldata = data.Concat(hash.Take(4)).ToArray(); return(Base58.Encode(alldata)); }
public Witness(byte[] _invocationScript, byte[] _verificationScript, Hash160 _hash = null) { InvocationScript = _invocationScript; VerificationScript = _verificationScript; if (_hash == null) { Hash = Helper_NEO.CalcHash160(VerificationScript); } else { Hash = _hash; } }
public delegate void Method(ThinNeo.ScriptBuilder sb);//第一步:定义委托类型 public async Task Demo() { //得到合约代码 //var urlgetscript = Helper.MakeRpcUrl(oracleSw_Com.api, "getcontractstate", new MyJson.JsonNode_ValueString(oracleSw_Com.sc)); //var resultgetscript = await Helper.HttpGet(urlgetscript); //var _json = MyJson.Parse(resultgetscript).AsDict(); //var _resultv = _json["result"].AsList()[0].AsDict(); //Console.WriteLine("reg=" + _resultv["script"].AsString()); showMenu(); prikey = ThinNeo.Helper.GetPrivateKeyFromWIF(Config.testwif); pubkey = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey); address = ThinNeo.Helper.GetAddressFromPublicKey(pubkey); scripthash = ThinNeo.Helper.GetPublicKeyHashFromAddress(address); shash = new ThinNeo.Hash160(Config.sc_oracle); while (true) { var line = Console.ReadLine().Replace(" ", "").ToLower(); if (line == "?" || line == "?") { showMenu(); } else if (line == "") { continue; } else if (line == "0") { return; } else//get .test's info { var id = int.Parse(line) - 1; var key = submenu[id]; subPrintLine("[begin]" + key); try { await infos[key](); } catch (Exception err) { subPrintLine(err.Message); } subPrintLine("[end]" + key); } } }
async Task test_setAccount() { Console.WriteLine("Input Para:"); string para = Console.ReadLine(); Console.WriteLine("Input address:"); string address = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sc_oracle); var result = await oracleSw_Com.api_SendTransaction(adminPrikey, shash, "setAccount", "(str)" + para, "(addr)" + address); subPrintLine(result); }
//设置配置 async Task test_setTypeA() { Console.WriteLine("Input key:"); string key = Console.ReadLine(); Console.WriteLine("Input value:"); string value = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sc_oracle); var result = await oracleSw_Com.api_SendTransaction(adminPrikey, shash, "setTypeA", "(str)" + key, "(int)" + value); subPrintLine(result); }
public void invokescrept(Action <bool, WWW> api_cb_cmd, MyJson.JsonNode_Object paparms) { byte[] script = null; using (var sb = new ThinNeo.ScriptBuilder()) { sb.EmitParamJson(paparms["sbParamJson"]); //参数倒序入 sb.EmitPushString(paparms["sbPushString"].ToString()); //参数倒序入 ThinNeo.Hash160 shash = new ThinNeo.Hash160(paparms["nnc"].ToString()); sb.EmitAppCall(shash); //nep5脚本 script = sb.ToArray(); } WWWForm www_form = Helper.GetWWWFormPost("invokescript", new MyJson.JsonNode_ValueString(ThinNeo.Helper.Bytes2HexString(script))); StartCoroutine(HTTP_nel_post(www_form, api_cb_cmd)); }
async Task test_initroot_xxx() { subPrintLine("input root domain:"); var root = Console.ReadLine(); subPrintLine("input register hash:"); var reg = Console.ReadLine(); reg = reg.Replace(" ", ""); var sellregistor = new ThinNeo.Hash160(reg); var result = await nns_common.api_SendTransaction(this.superadminprikey, Config.sc_nns, "initRoot", "(str)" + root,//根域名的名字 "(hex160)" + sellregistor.ToString()); subPrintLine("result=" + result); }
async Task test_transferSDT() { Console.WriteLine("Input target:"); string to = Console.ReadLine(); Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(sdusd_common2.sc_sdusd); var result = await sdusd_common2.api_SendTransaction(prikey, shash, "transfer_sdt", "(addr)" + to, "(int)" + amount ); subPrintLine(result); }
//转账 async Task test_Transfer() { Console.WriteLine("Input target address:"); string addressto = Console.ReadLine(); Console.WriteLine("Input amount:"); string amount = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sdusd); var result = await sdusd_common.api_SendTransaction(prikey, shash, "transfer", "(addr)" + address, "(addr)" + addressto, "(int)" + amount ); subPrintLine(result); }
async Task test_getApprovedAddr() { Console.WriteLine("Input key:"); string key = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sc_oracle); var result = await oracleSw_Com.api_InvokeScript(shash, "getApprovedAddrs", "(str)" + key); oracleSw_Com.ResultItem item = result.value; if (item != null) { byte[] data = item.data; } else { Console.WriteLine("item is null"); } }
public async Task getNEP5Asset(Hash160 Contract) { ScriptBuilder sb = new ScriptBuilder(); MyJson.JsonNode_Array array = new MyJson.JsonNode_Array(); sb.EmitParamJson(array); sb.EmitPushString("totalSupply"); sb.EmitAppCall(Contract); sb.EmitParamJson(array); sb.EmitPushString("name"); sb.EmitAppCall(Contract); sb.EmitParamJson(array); sb.EmitPushString("symbol"); sb.EmitAppCall(Contract); sb.EmitParamJson(array); sb.EmitPushString("decimals"); sb.EmitAppCall(Contract); string scriptPublish = ThinNeo.Helper.Bytes2HexString(sb.ToArray()); byte[] postdata; var url = Helper.MakeRpcUrlPost(Helper.url, "invokescript", out postdata, new MyJson.JsonNode_ValueString(scriptPublish)); var result = await Helper.HttpPost(url, postdata); JObject jObject = JObject.Parse(result); JArray results = jObject["result"]["stack"] as JArray; string totalSupply = Encoding.UTF8.GetString(ThinNeo.Helper.HexString2Bytes(results[0]["value"].ToString())); string name = Encoding.UTF8.GetString(ThinNeo.Helper.HexString2Bytes(results[1]["value"].ToString())); string symbol = Encoding.UTF8.GetString(ThinNeo.Helper.HexString2Bytes(results[2]["value"].ToString())); string decimals = Encoding.UTF8.GetString(ThinNeo.Helper.HexString2Bytes(results[3]["value"].ToString())); List <string> slist = new List <string>(); slist.Add(Contract.ToString()); slist.Add(totalSupply); slist.Add(name); slist.Add(symbol); slist.Add(decimals); MysqlConn.ExecuteDataInsert("nep5asset", slist); }
async Task test_addParaAddrWhit() { Console.WriteLine("Input Para:"); string para = Console.ReadLine(); Console.WriteLine("Input address:"); string address = Console.ReadLine(); Console.WriteLine("Input state(1:授权,0:取消授权):"); string state = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sc_oracle); var result = await oracleSw_Com.api_SendTransaction(adminPrikey, shash, "addParaAddrWhit", "(str)" + para, "(addr)" + address, "(int)" + state); subPrintLine(result); }
protected byte[] GetScript(ThinNeo.Hash160 contractHash, JArray JA) { ThinNeo.ScriptBuilder tmpSb = new ThinNeo.ScriptBuilder(); byte[] randombytes = new byte[32]; using (RandomNumberGenerator rng = RandomNumberGenerator.Create()) { rng.GetBytes(randombytes); } BigInteger randomNum = new BigInteger(randombytes); tmpSb.EmitPushNumber(randomNum); tmpSb.Emit(ThinNeo.VM.OpCode.DROP); for (int i = JA.Count - 1; i >= 0; i--) { tmpSb.EmitParamJson(JA[i]); } tmpSb.EmitAppCall(contractHash); return(tmpSb.ToArray()); }
public void get_sgas_balance() { {//查sgas balance string script = null; using (var sb = new ThinNeo.ScriptBuilder()) { var array = new MyJson.JsonNode_Array(); array.AddArrayValue("(bytes)" + ThinNeo.Helper.Bytes2HexString(roleInfo.getInstance().scripthash)); sb.EmitParamJson(array); //参数倒序入 sb.EmitParamJson(new MyJson.JsonNode_ValueString("(str)balanceOf")); //参数倒序入 ThinNeo.Hash160 shash = new ThinNeo.Hash160(global.id_sgas); sb.EmitAppCall(shash); //nep5脚本 var data = sb.ToArray(); script = ThinNeo.Helper.Bytes2HexString(data); } WWWForm www_form = Helper.GetWWWFormPost("invokescript", new MyJson.JsonNode_ValueString(script)); StartCoroutine(HTTP_nel_post(www_form, on_get_sgas_balance)); } }
public void makeRawTransaction(Action <bool, WWW> api_cb_cmd, MyJson.JsonNode_Array pararms) { if (pararms.Count > 2) { Debug.Log("不支持大于两部的操作"); return; } byte[] script = null; using (var sb = new ThinNeo.ScriptBuilder()) { Debug.Log(pararms.AsList()[0].ToString()); sb.EmitParamJson(pararms.AsList()[0].AsDict()["sbParamJson"]); //参数倒序入 sb.EmitPushString(pararms.AsList()[0].AsDict()["sbPushString"].ToString()); //参数倒序入 ThinNeo.Hash160 shash = new ThinNeo.Hash160(pararms.AsList()[0].AsDict()["nnc"].ToString()); sb.EmitAppCall(shash); //nep5脚本 if (pararms.Count > 1) { //这个方法是为了在同一笔交易中转账并充值 //当然你也可以分为两笔交易 //插入下述两条语句,能得到txid sb.EmitSysCall("System.ExecutionEngine.GetScriptContainer"); sb.EmitSysCall("Neo.Transaction.GetHash"); sb.EmitPushBytes(roleInfo.getInstance().scripthash); sb.EmitPushNumber(2); sb.Emit(ThinNeo.VM.OpCode.PACK); sb.EmitPushString(pararms.AsList()[1].AsDict()["sbPushString"].ToString()); //参数倒序入 ThinNeo.Hash160 shash_2 = new ThinNeo.Hash160(pararms.AsList()[1].AsDict()["nnc"].ToString()); sb.EmitAppCall(shash_2); //nep5脚本 } script = sb.ToArray(); } StartCoroutine(HTTP_nel_post_tan(script, pararms, api_cb_cmd)); }
async Task test_getAccount() { Console.WriteLine("Input key:"); string key = Console.ReadLine(); ThinNeo.Hash160 shash = new ThinNeo.Hash160(Config.sc_oracle); var result = await oracleSw_Com.api_InvokeScript(shash, "getAccount", "(str)" + key); oracleSw_Com.ResultItem item = result.value; if (item != null) { byte[] data = item.data; string value = ThinNeo.Helper.Bytes2HexString(data); Console.WriteLine(key + ":" + value); } else { Console.WriteLine("item is null"); } }