Example #1
0
        public static async Task <Dictionary <string, List <UTXO> > > GetByAddress(string dumpPath, string address)
        {
            Dictionary <string, List <UTXO> > dir = new Dictionary <string, List <UTXO> >();

            foreach (string filePath in Directory.GetFiles(dumpPath + "/utxo"))
            {
                if (filePath.Contains(address))
                {
                    using (var reader = File.OpenText(filePath))
                    {
                        JObject jObject = JObject.Parse(await reader.ReadToEndAsync());

                        UTXO utxo = new UTXO(jObject["addr"].ToString(),
                                             new ThinNeo.Hash256(jObject["txid"].ToString()),
                                             jObject["asset"].ToString(),
                                             decimal.Parse(jObject["value"].ToString()),
                                             int.Parse(jObject["n"].ToString()));
                        if (dir.ContainsKey(jObject["asset"].ToString()))
                        {
                            if (jObject["used"].ToString() == "0")
                            {
                                dir[jObject["asset"].ToString()].Add(utxo);
                            }
                        }
                        else
                        {
                            List <UTXO> l = new List <UTXO>();
                            l.Add(utxo);
                            dir[jObject["asset"].ToString()] = l;
                        }
                    }
                }
            }
            return(dir);
        }
        async public override Task Run(Dictionary <String, Object> args)
        {
            _logger.LogInformation("{0} Thread ID: {1}",
                                   this.GetType().ToString(), Thread.CurrentThread.ManagedThreadId);

            string  wif           = args["wif"].ToString();
            string  targetAddress = args["targetAddress"].ToString();
            decimal sendCount     = Decimal.Parse(args["sendCount"].ToString());

            byte[] prikey  = ThinNeo.Helper.GetPrivateKeyFromWIF(wif);
            byte[] pubkey  = ThinNeo.Helper.GetPublicKeyFromPrivateKey(prikey);
            string address = ThinNeo.Helper.GetAddressFromPublicKey(pubkey);


            //获取自己的utxo
            Dictionary <string, List <UTXO> > dic_UTXO = await UTXO.GetByAddress(
                _config.GetSection("Data").GetValue <string>("DumpPath"), address);

            //拼装交易体
            Transaction tran = makeTran(dic_UTXO, address, targetAddress, new ThinNeo.Hash256("0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b"), sendCount);

            tran.version    = 0;
            tran.attributes = new ThinNeo.Attribute[0];
            tran.type       = ThinNeo.TransactionType.ContractTransaction;
            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://182.254.221.14:10332", "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());

            _logger.LogInformation("Transaxtion response: {0}", resJO.ToString());
        }