コード例 #1
0
    void check_plat_notify(MyJson.IJsonNode json)
    {
        b_notify_need_refresh = false;

        var json_pending = json.AsDict()["pending"].AsList();

        if (json_pending.Count > 0)
        {//有pending数据,开启定时器
            b_notify_need_refresh = true;
        }

        var json_complete = json.AsDict()["complete"].AsList();

        if (json_complete.Count > 0)
        {
            foreach (var item in json_complete)
            {
                string txid = item.AsDict()["txid"].ToString();
                string ext  = item.AsDict()["ext"].ToString();
                if (!m_platNotifyTxids.ContainsKey(txid))
                {
                    //notify
                    do_plat_notify(item, ext);

                    m_platNotifyTxids[txid] = 1;
                }
            }
        }
    }
コード例 #2
0
    public void do_plat_notify(MyJson.IJsonNode json_complete, string ext = "")
    {
        string txid = json_complete.AsDict()["txid"].ToString();

        switch (json_complete.AsDict()["type"].ToString())
        {
        case "2":     //sgas->gas退款
            if (json_complete.AsDict()["state"].ToString() == "1")
            {
                if (ext == "")
                {    //sgas->utxo确认
                    sdk_http._instance.transform_sgas_gas2(json_complete);
                }
                else
                {    //utxo->gas提交成功,循环获取结果
                    doPlatNotifyRefundRes(txid, ext);
                }
            }
            else
            {
                api_tool._instance.walletNotify(roleInfo.getInstance().uid, roleInfo.getInstance().token, txid, global.netType, null);
            }
            break;
        }
    }
コード例 #3
0
        MyJson.JsonNode_Object getJsonResult(MyJson.JsonNode_Array json, string pos)
        {
            var pp = pos.Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries);

            if (pp[0] == "result")
            {
                MyJson.IJsonNode value = json;

                for (var i = 1; i < pp.Length; i++)
                {
                    if (value is MyJson.JsonNode_Object && value.AsDict()["type"].AsString() == "Array")
                    {
                        value = value.AsDict()["value"];
                    }
                    var index = int.Parse(pp[i]);
                    value = value.AsList()[index];
                }
                return(value.AsDict());
            }
            return(null);
        }
コード例 #4
0
ファイル: sdk_http.cs プロジェクト: vivien1990/My-project
    IEnumerator HTTP_nel_post_sgas_gas2(MyJson.IJsonNode json_complete)
    {
        string txid = json_complete.AsDict()["txid"].ToString();

        var    nep55_shash   = new ThinNeo.Hash160(global.id_sgas);
        string nep55_address = ThinNeo.Helper.GetAddressFromScriptHash(nep55_shash);

        WWWForm www_getuxo_form_2 = Helper.GetWWWFormPost("getutxo", new MyJson.JsonNode_ValueString(nep55_address));
        WWW     www_utxo_2        = new WWW(global.api, www_getuxo_form_2);

        yield return(www_utxo_2);

        Dictionary <string, List <Utxo> > _dir_2 = get_utxo(www_utxo_2.text);

        if (_dir_2.ContainsKey(global.id_GAS) == false)
        {
            Debug.Log("no gas");
        }

        List <Utxo> newlist_2 = new List <Utxo>();

        foreach (var utxo in _dir_2[global.id_GAS])
        {
            if (utxo.n == 0 && utxo.txid.ToString().Equals(txid))
            {
                newlist_2.Add(utxo);
            }
        }
        if (newlist_2.Count == 0)
        {
            Debug.Log("找不到要使用的UTXO");
            yield return(null);
        }

        {//检查utxo
            byte[] script = null;
            using (var sb = new ThinNeo.ScriptBuilder())
            {
                var array = new MyJson.JsonNode_Array();
                array.AddArrayValue("(hex256)" + newlist_2[0].txid.ToString());
                sb.EmitParamJson(array);                                                   //参数倒序入
                sb.EmitParamJson(new MyJson.JsonNode_ValueString("(str)getRefundTarget")); //参数倒序入
                var shash = new ThinNeo.Hash160(global.id_sgas);
                sb.EmitAppCall(shash);                                                     //nep5脚本
                script = sb.ToArray();
            }

            WWWForm www_getTarget_form = Helper.GetWWWFormPost("invokescript", new MyJson.JsonNode_ValueString(ThinNeo.Helper.Bytes2HexString(script)));
            WWW     www_form           = new WWW(global.api, www_getTarget_form);
            yield return(www_form);

            var jsonCU = MyJson.Parse(www_form.text);
            var stack  = jsonCU.AsDict()["result"].AsList()[0].AsDict()["stack"].AsList()[0].AsDict();
            var value  = stack["value"].AsString();
            if (value.Length == 0)//未标记的UTXO,不能使用
            {
                Debug.Log("这个utxo没有标记");
                yield return(null);
            }

            var hash = new ThinNeo.Hash160(ThinNeo.Helper.HexString2Bytes(value));
            if (hash.ToString() != ThinNeo.Helper.GetPublicKeyHashFromAddress(roleInfo.getInstance().address).ToString())
            {
                Debug.Log("这个utxo不是标记给你用的");
                Debug.Log(hash.ToString());
                Debug.Log(ThinNeo.Helper.Bytes2HexString(roleInfo.getInstance().scripthash));
                yield return(null);
            }
        }


        ThinNeo.Transaction tran_2 = Helper.makeTran(newlist_2, roleInfo.getInstance().address, new ThinNeo.Hash256(global.id_GAS), newlist_2[0].value);
        tran_2.type    = ThinNeo.TransactionType.ContractTransaction;
        tran_2.version = 0;

        //sign and broadcast
        {//做智能合约的签名
            byte[] n55contract = null;
            {
                WWWForm www_getState = Helper.GetWWWFormPost("getcontractstate", new MyJson.JsonNode_ValueString(global.id_sgas));
                WWW     www_state    = new WWW(global.api, www_getState);
                yield return(www_state);

                var _json    = MyJson.Parse(www_state.text).AsDict();
                var _resultv = _json["result"].AsList()[0].AsDict();
                n55contract = ThinNeo.Helper.HexString2Bytes(_resultv["script"].AsString());
            }
            byte[] iscript = null;
            using (var sb = new ThinNeo.ScriptBuilder())
            {
                sb.EmitPushNumber(0);
                sb.EmitPushNumber(0);
                iscript = sb.ToArray();
            }
            tran_2.AddWitnessScript(n55contract, iscript);
        }


        var trandata_2    = tran_2.GetRawData();
        var strtrandata_2 = ThinNeo.Helper.Bytes2HexString(trandata_2);

        ThinNeo.Transaction testde_2 = new ThinNeo.Transaction();
        testde_2.Deserialize(new System.IO.MemoryStream(trandata_2));

        WWWForm www_transaction_2 = Helper.GetWWWFormPost("sendrawtransaction", new MyJson.JsonNode_ValueString(strtrandata_2));
        WWW     www_tran_2        = new WWW(global.api, www_transaction_2);

        yield return(www_tran_2);

        Debug.Log(www_tran_2.text);

        var json_2 = MyJson.Parse(www_tran_2.text).AsDict();

        if (json_2.ContainsKey("result"))
        {
            var resultv = json_2["result"].AsList()[0].AsDict();
            var ext     = resultv["txid"].AsString();
            if (txid.Length > 0)
            {
                Debug.Log("txid=" + ext);
                testtool.panel_main.do_plat_notify(json_complete, ext);
                api_tool._instance.walletNotifyExt(roleInfo.getInstance().uid, roleInfo.getInstance().token, txid, ext, global.netType, null);
            }
            else
            {
                Debug.Log("交易失败");
            }
        }
        else
        {
            Debug.Log("交易失败");
        }
    }
コード例 #5
0
ファイル: sneo.cs プロジェクト: Alchemint/neo-thinsdk-cs
        async Task test_claimSimple()
        {
            var addr = ThinNeo.Helper.GetAddressFromScriptHash(Config.sneo);

            byte[] postdata;

            var url    = Helper.MakeRpcUrlPost(Config.api, "getclaimgas", out postdata, new MyJson.JsonNode_ValueString(addr));
            var result = await Helper.HttpPost(url, postdata);

            //Console.WriteLine("得到的结果是:" + result);

            var json = MyJson.Parse(result).AsDict();

            if (json.ContainsKey("result"))
            {
                //gas总量
                var gas = json["result"].AsList()[0].AsDict()["gas"] + "";
                //var gas = 0.00004;
                //Console.WriteLine("gas:" + gas);

                var claims = json["result"].AsList()[0].AsDict()["claims"].AsList();
                //Console.WriteLine("claims:" + claims);

                //var assetIDStr = "0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"; //选择GAS支付合约调用费用
                var assetID = HexString2Bytes(Config.id_GAS.Replace("0x", "")).Reverse().ToArray();

                //构建交易体
                ThinNeo.Transaction claimTran = new ThinNeo.Transaction
                {
                    type       = ThinNeo.TransactionType.ClaimTransaction,//领取Gas合约
                    attributes = new ThinNeo.Attribute[0],
                    inputs     = new ThinNeo.TransactionInput[0],
                    outputs    = new ThinNeo.TransactionOutput[1],
                    extdata    = new ThinNeo.ClaimTransData()
                };

                claimTran.outputs[0] = new ThinNeo.TransactionOutput
                {
                    assetId   = assetID,
                    toAddress = ThinNeo.Helper.GetPublicKeyHashFromAddress(this.address),
                    value     = Decimal.Parse("0.00006552")
                };
                Console.WriteLine("claim addr:" + this.address);
                List <ThinNeo.TransactionInput> claimVins = new List <ThinNeo.TransactionInput>();

                MyJson.JsonNode_Array array = (MyJson.JsonNode_Array)claims;
                MyJson.IJsonNode      node  = array[0];

                Console.WriteLine("claims:" + node);
                claimVins.Add(new ThinNeo.TransactionInput
                {
                    hash  = ThinNeo.Debug.DebugTool.HexString2Bytes((node.AsDict()["txid"].ToString()).Replace("0x", "")).Reverse().ToArray(),
                    index = ushort.Parse(node.AsDict()["n"].ToString())
                });

                (claimTran.extdata as ThinNeo.ClaimTransData).claims = claimVins.ToArray();

                //做智能合约的签名
                byte[] iscript = null;
                using (var sb = new ThinNeo.ScriptBuilder())
                {
                    sb.EmitPushString("whatever");
                    sb.EmitPushNumber(250);
                    iscript = sb.ToArray();
                }

                claimTran.AddWitnessScript(n55contract, iscript);

                var trandata    = claimTran.GetRawData();
                var strtrandata = ThinNeo.Helper.Bytes2HexString(trandata);

                byte[] postdata2;
                url = Helper.MakeRpcUrlPost(Config.api, "sendrawtransaction", out postdata2, new MyJson.JsonNode_ValueString(strtrandata));

                var result2 = await Helper.HttpPost(url, postdata2);

                Console.WriteLine("得到的结果是:" + result2);
            }
        }