示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }
示例#4
0
    //往市场合约里的充值测试
    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);
    }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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;
        }
示例#9
0
        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);
        }
示例#10
0
        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());
        }
示例#11
0
        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());
        }
示例#12
0
        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);
        }
示例#13
0
        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);
        }
示例#15
0
        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));
        }
示例#16
0
        /// <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);
        }
示例#17
0
        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);
            }
        }
示例#18
0
    //市场合约余额测试
    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);
    }
示例#19
0
        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);
        }
示例#20
0
        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);
            }
        }
示例#21
0
        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());
        }
示例#22
0
        /// <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);
        }
示例#23
0
        //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);
            }
        }
示例#24
0
        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());
            }
        }
示例#25
0
        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);
        }
示例#26
0
        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);
        }
示例#27
0
        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);
        }
示例#28
0
    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);
    }
示例#29
0
        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);
        }
示例#30
0
        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);
        }