コード例 #1
0
        public JObject callContractForTestMulti(string neoCliJsonRPCUrl, List <string> scripthashs, JArray paramsJA)
        {
            JObject res       = new JObject();
            JArray  stackList = new JArray();
            int     n         = 0;

            foreach (var scripthash in scripthashs)
            {
                ThinNeo.ScriptBuilder tmpSb = new ThinNeo.ScriptBuilder();
                httpHelper            hh    = new httpHelper();
                var json = MyJson.Parse(JsonConvert.SerializeObject(paramsJA[n])).AsList();
                var list = json.AsList();
                for (int i = list.Count - 1; i >= 0; i--)
                {
                    tmpSb.EmitParamJson(list[i]);
                }

                var scripthashReverse = ThinNeo.Helper.HexString2Bytes(scripthash).Reverse().ToArray();
                tmpSb.EmitAppCall(scripthashReverse);
                string  invokeSc = ThinNeo.Helper.Bytes2HexString(tmpSb.ToArray());
                JObject invokeRs = invokeScript(neoCliJsonRPCUrl, invokeSc);

                /**
                 * JObject 不能存放相同字段,为将其与其他接口调用区分开来,现单端改名为-Multi结尾的方法
                 */
                /*
                 * res.Add("script", invokeRs["script"]);
                 * res.Add("state", invokeRs["state"]);
                 * res.Add("gas_consumed", invokeRs["gas_consumed"]);
                 */

                JObject stack1 = null;
                if (invokeRs == null)
                {
                    stack1 = new JObject();
                    stack1.Add("type", "FAULT");
                    stack1.Add("value", "");
                    stackList.Add(stack1);
                    continue;
                }
                string state = invokeRs["state"].ToString();
                JArray stack = (JArray)invokeRs["stack"];
                if (state.StartsWith("FAULT"))
                {
                    // 调用合约出错,填充占位
                    stack1 = new JObject();
                    stack1.Add("type", "FAULT");
                    stack1.Add("value", "");
                }
                else
                {
                    stack1 = (JObject)stack[0];
                }
                stack1["hash"] = scripthash;
                stackList.Add(stack1);
            }

            res.Add("stack", stackList);
            return(res);
        }
コード例 #2
0
        public JObject sendrawtransaction(string neoCliJsonRPCUrl, string txSigned)
        {
            httpHelper hh   = new httpHelper();
            var        resp = hh.Post(neoCliJsonRPCUrl, "{'jsonrpc':'2.0','method':'sendrawtransaction','params':['" + txSigned + "'],'id':1}", System.Text.Encoding.UTF8, 1);

            bool    isSendSuccess = (bool)JObject.Parse(resp)["result"];
            JObject Jresult       = new JObject();

            Jresult.Add("sendrawtransactionresult", isSendSuccess);
            if (isSendSuccess)
            {
                ThinNeo.Transaction lastTran = new ThinNeo.Transaction();
                lastTran.Deserialize(new MemoryStream(txSigned.HexString2Bytes()));
                string txid = lastTran.GetHash().ToString();

                ////从已签名交易体分析出未签名交易体,并做Hash获得txid
                //byte[] txUnsigned = txSigned.Split("014140")[0].HexString2Bytes();
                //string txid = ThinNeo.Helper.Sha256(ThinNeo.Helper.Sha256(txUnsigned)).Reverse().ToArray().ToHexString();

                Jresult.Add("txid", txid);
            }
            else
            {
                //上链失败则返回空txid
                Jresult.Add("txid", string.Empty);
            }

            return(Jresult);
        }
コード例 #3
0
        public JObject getContractState(string neoCliJsonRPCUrl, string scripthash)
        {
            httpHelper hh   = new httpHelper();
            var        resp = hh.Post(neoCliJsonRPCUrl, "{'jsonrpc':'2.0','method':'getcontractstate','params':['" + scripthash + "'],'id':1}", System.Text.Encoding.UTF8, 1);

            JObject resultJ = (JObject)JObject.Parse(resp)["result"];

            return(resultJ);
        }
コード例 #4
0
ファイル: Contract.cs プロジェクト: codeyu/NEO_Block_API
        public JObject invokeScript(string neoCliJsonRPCUrl, string script)
        {
            httpHelper hh   = new httpHelper();
            var        resp = hh.Post(neoCliJsonRPCUrl, "{'jsonrpc':'2.0','method':'invokescript','params':['" + script + "'],'id':1}", System.Text.Encoding.UTF8, 1);

            JObject resultJ = (JObject)JObject.Parse(resp)["result"];

            return(resultJ);
        }
コード例 #5
0
        public JObject callContractForTest(string neoCliJsonRPCUrl, List <string> scripthashs, JArray paramsJA)
        {
            //string script = (string)getContractState(neoCliJsonRPCUrl, scripthash)["script"];

            /*
             * int n = 0;
             * ThinNeo.ScriptBuilder sb = new ThinNeo.ScriptBuilder();
             *
             * foreach (var scripthash in scripthashs)
             * {
             *
             *  httpHelper hh = new httpHelper();
             *
             *  var json = MyJson.Parse(JsonConvert.SerializeObject(paramsJA[n])).AsList();
             *
             *  var list = json.AsList();
             *  for (int i = list.Count - 1; i >= 0; i--)
             *  {
             *      sb.EmitParamJson(list[i]);
             *  }
             *
             *  var scripthashReverse = ThinNeo.Helper.HexString2Bytes(scripthash).Reverse().ToArray();
             *  sb.EmitAppCall(scripthashReverse);
             *
             *  n++;
             * }
             *
             * string scriptPlusParams = ThinNeo.Helper.Bytes2HexString(sb.ToArray());
             * return invokeScript(neoCliJsonRPCUrl, scriptPlusParams);
             */


            /// ChangeLog:
            /// 批量调用invokeScript时,个别出错会导致,出错之后结果数据丢失。所以修改为单个单个查询,
            /// 为保证外层解析数据的顺序性,需将出错的结果位置填充数值
            ///
            JObject res       = new JObject();
            JArray  stackList = new JArray();
            int     n         = 0;

            foreach (var scripthash in scripthashs)
            {
                ThinNeo.ScriptBuilder tmpSb = new ThinNeo.ScriptBuilder();
                httpHelper            hh    = new httpHelper();
                var json = MyJson.Parse(JsonConvert.SerializeObject(paramsJA[n])).AsList();
                var list = json.AsList();
                for (int i = list.Count - 1; i >= 0; i--)
                {
                    tmpSb.EmitParamJson(list[i]);
                }

                var scripthashReverse = ThinNeo.Helper.HexString2Bytes(scripthash).Reverse().ToArray();
                tmpSb.EmitAppCall(scripthashReverse);
                string  invokeSc = ThinNeo.Helper.Bytes2HexString(tmpSb.ToArray());
                JObject invokeRs = invokeScript(neoCliJsonRPCUrl, invokeSc);

                res.Add("script", invokeRs["script"]);
                res.Add("state", invokeRs["state"]);
                res.Add("gas_consumed", invokeRs["gas_consumed"]);

                string  state  = invokeRs["state"].ToString();
                JArray  stack  = (JArray)invokeRs["stack"];
                JObject stack1 = null;
                if (state.StartsWith("FAULT"))
                {
                    // 调用合约出错,填充占位
                    stack1 = new JObject();
                    stack1.Add("type", "FAULT");
                    stack1.Add("value", "");
                }
                else
                {
                    stack1 = (JObject)stack[0];
                }
                stackList.Add(stack1);
            }

            res.Add("stack", stackList);

            // debug info

            /*
             * n = 0;
             * List<JObject> rlist = new List<JObject>();
             * foreach (var scripthash in scripthashs)
             * {
             *  ThinNeo.ScriptBuilder tmpSb = new ThinNeo.ScriptBuilder();
             *  httpHelper hh = new httpHelper();
             *  var json = MyJson.Parse(JsonConvert.SerializeObject(paramsJA[n])).AsList();
             *  var list = json.AsList();
             *  for (int i = list.Count - 1; i >= 0; i--)
             *  {
             *      tmpSb.EmitParamJson(list[i]);
             *  }
             *  var scripthashReverse = ThinNeo.Helper.HexString2Bytes(scripthash).Reverse().ToArray();
             *  tmpSb.EmitAppCall(scripthashReverse);
             *  string invokeSc = ThinNeo.Helper.Bytes2HexString(tmpSb.ToArray());
             *  JObject invokeRs = invokeScript(neoCliJsonRPCUrl, invokeSc);
             *  JObject obj = new JObject();
             *  obj.Add("sc", scripthash);
             *  obj.Add("ic", invokeSc);
             *  obj.Add("rs", invokeRs);
             *  rlist.Add(obj);
             * }
             */
            return(res);
        }