Ejemplo n.º 1
0
        Step2Prepare ConcertFromWSObjectAndMergeStep1(Step1Response step1Response, MoneroWalletInput data, string Amount, string SpendKey, string ViewKey, string FromAddress, string ToAddress, MixOutput[] mixOuts)
        {
            Step2Prepare step2Prepare = new Step2Prepare();

            step2Prepare.change_amount       = step1Response.change_amount;
            step2Prepare.fee_amount          = step1Response.using_fee;
            step2Prepare.fee_per_b           = data.FeePerB;
            step2Prepare.final_total_wo_fee  = step1Response.final_total_wo_fee;
            step2Prepare.from_address_string = FromAddress;
            step2Prepare.nettype_string      = "MAINNET";
            step2Prepare.priority            = data.Priority;
            step2Prepare.sec_spendKey_string = SpendKey;
            step2Prepare.sec_viewKey_string  = ViewKey;
            step2Prepare.to_address_string   = ToAddress;
            step2Prepare.unlock_time         = "0";
            step2Prepare.using_outs          = step1Response.using_outs;
            if (!string.IsNullOrEmpty(data.PaymentIdString) && data.PaymentIdString.Length > 10)
            {
                step2Prepare.payment_id_string = data.PaymentIdString;
            }

            if (!string.IsNullOrEmpty(data.fee_mask))
            {
                step2Prepare.fee_mask = data.fee_mask;
            }
            else
            {
                step2Prepare.fee_mask = "10000";
            }

            List <mixouts> step2PrepareMixOutPrep = new List <mixouts>();

            foreach (var mixA in mixOuts)
            {
                List <outs> MixedOutList = new List <outs>();

                foreach (var usedOutputs in mixA.Outputs)
                {
                    outs Mix_Out = new outs();
                    Mix_Out.amount       = usedOutputs.Amount;
                    Mix_Out.global_index = usedOutputs.GlobalIndex;
                    Mix_Out.index        = usedOutputs.Index.ToString();
                    Mix_Out.public_key   = usedOutputs.PublicKey;
                    Mix_Out.rct          = usedOutputs.Rct;
                    Mix_Out.tx_pub_key   = usedOutputs.TxPubKey;
                    MixedOutList.Add(Mix_Out);
                }

                mixouts m = new mixouts()
                {
                    amount  = mixA.Amount,
                    outputs = MixedOutList.ToArray()
                };
                step2PrepareMixOutPrep.Add(m);
            }

            step2Prepare.mix_outs = step2PrepareMixOutPrep.ToArray();

            return(step2Prepare);
        }
Ejemplo n.º 2
0
        private Step2Response TryReconstructTransaction(string ToAddress, string Amount, string BaseData, string FromAddress, string feeNeeded = null)
        {
            string s1jData = "";
            string s2jData = "";
            var res = Double.Parse(Amount) * 1e12;
            Amount = res.ToString();
            XMRTaskTransferResponse taskTransferResponse = new XMRTaskTransferResponse();
            MoneroWalletInput data = ConvertFromString(BaseData);
            data.PassedInAttemptAtFee = null;
            if (feeNeeded != null) data.PassedInAttemptAtFee = feeNeeded;
            Step1Prepare step1Prepare = ConvertFromWSObject(data, Amount);
            byte[] s1compdata = System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(step1Prepare, ser));
            int s1len = XMRNative.s1compute(s1compdata, s1compdata.Length); s1compdata = new byte[s1len]; XMRNative.s1getdata(s1compdata, s1len);
            s1jData = System.Text.Encoding.UTF8.GetString(s1compdata);
            Step1Response step1Response = JsonConvert.DeserializeObject\\(s1jData, ser);
            if (!string.IsNullOrEmpty(step1Response.err_msg)) throw new Exception(step1Response.err_msg);
            if (!string.IsNullOrEmpty(step1Response.using_fee) && !string.IsNullOrEmpty(data.MaxAllowedFee))
            {
                BigInteger UsingFee = BigInteger.Parse(step1Response.using_fee);
                BigInteger MaxFee = BigInteger.Parse(data.MaxAllowedFee);
                if (UsingFee \>\ MaxFee) throw new Exception("Max fee exceeded by " + NDReverse((UsingFee - MaxFee).ToString(), 12));
            }
            string[] amounts = new string[step1Response.using_outs.Length];
            for (int i = 0; i \            string mix = WS.XMRGetRandom(step1Response.mixin, amounts);
            MixOutput[] mixOuts = JsonConvert.DeserializeObject\\(mix);
            Step2Prepare step2Prepare = ConcertFromWSObjectAndMergeStep1(step1Response, data, Amount, MoneroWallet.Converters.ByteArrayToHex(wallet.Keys.SpendSecret), MoneroWallet.Converters.ByteArrayToHex(wallet.Keys.ViewSecret), FromAddress, ToAddress, mixOuts);

            var s2 = JsonConvert.SerializeObject(step2Prepare, ser);
            byte[] s2compdata = System.Text.Encoding.UTF8.GetBytes(s2);
            int s2len = XMRNative.s2compute(s2compdata, s2compdata.Length);
            s2compdata = new byte[s2len];
            XMRNative.s2getdata(s2compdata, s2len);
            s2jData = System.Text.Encoding.UTF8.GetString(s2compdata);
            Step2Response step2Response = JsonConvert.DeserializeObject\\(s2jData, ser);
            return step2Response;
        }