Пример #1
0
        public async Task CanFinishEscrow()
        {
            IRippleClient rippleClient = new RippleClient("wss://s.altnet.rippletest.net:51233");

            rippleClient.Connect();

            AccountInfo accountInfo = await rippleClient.AccountInfo("rwEHFU98CjH59UX2VqAgeCzRFU9KVvV71V");

            IEscrowFinishTransaction finishTransaction = new EscrowFinishTransaction();

            finishTransaction.Account       = "rwEHFU98CjH59UX2VqAgeCzRFU9KVvV71V";
            finishTransaction.Owner         = "rwEHFU98CjH59UX2VqAgeCzRFU9KVvV71V";
            finishTransaction.OfferSequence = 29;
            finishTransaction.Fee           = new Currency {
                Value = "11"
            };
            finishTransaction.Flags    = TransactionFlags.tfFullyCanonicalSig;
            finishTransaction.Sequence = accountInfo.AccountData.Sequence;

            var      json     = finishTransaction.ToJson();
            TxSigner signer   = TxSigner.FromSecret("xxxxxxx");
            SignedTx signedTx = signer.SignJson(JObject.Parse(json));

            SubmitBlobRequest request = new SubmitBlobRequest();

            request.TransactionBlob = signedTx.TxBlob;

            Submit result = await rippleClient.SubmitTransactionBlob(request);

            Assert.IsNotNull(result);
            Assert.AreEqual("tesSUCCESS", result.EngineResult);
            Assert.IsNotNull(result.Transaction.Hash);
        }
 private void AssertValidSignedTx(SignedTx signedTx)
 {
     Assert.IsNotNull(signedTx, "SignedTx can't be null");
     Assert.IsNotNull(signedTx.TxJson, "SignedTx.TxJson can't be null");
     Assert.IsFalse(string.IsNullOrWhiteSpace(signedTx.TxBlob), "SignedTx.TxBlob can't be null or whitespace");
     Assert.IsFalse(string.IsNullOrWhiteSpace(signedTx.Hash), "SignedTx.Hash can't be null or whitespace");
 }
Пример #3
0
        public async Task CanReleaseEscrow()
        {
            IEscrowFinishTransaction escrowFinishTransaction = new EscrowFinishTransaction();

            escrowFinishTransaction.Account       = "rho3u4kXc5q3chQFKfn9S1ZqUCya1xT3t4";
            escrowFinishTransaction.Owner         = "r9NpyVfLfUG8hatuCCHKzosyDtKnBdsEN3";
            escrowFinishTransaction.OfferSequence = 10;
            escrowFinishTransaction.Fee           = new Currency {
                Value = "15"
            };
            escrowFinishTransaction.Flags = TransactionFlags.tfFullyCanonicalSig;

            var      json     = escrowFinishTransaction.ToJson();
            TxSigner signer   = TxSigner.FromSecret("xxxxxxx");
            SignedTx signedTx = signer.SignJson(JObject.Parse(json));

            SubmitBlobRequest request = new SubmitBlobRequest();

            request.TransactionBlob = signedTx.TxBlob;

            Submit result = await client.SubmitTransactionBlob(request);

            Assert.IsNotNull(result);
            Assert.AreEqual("tesSUCCESS", result.EngineResult);
            Assert.IsNotNull(result.Transaction.Hash);
        }
Пример #4
0
        public async Task CanCreateEscrow()
        {
            IRippleClient rippleClient = new RippleClient("wss://s.altnet.rippletest.net:51233");

            rippleClient.Connect();

            AccountInfo accountInfo = await rippleClient.AccountInfo("rwEHFU98CjH59UX2VqAgeCzRFU9KVvV71V");

            IEscrowCreateTransaction createTransaction = new EscrowCreateTransaction();

            createTransaction.Amount = new Currency {
                ValueAsXrp = 10
            };
            createTransaction.Account     = "rwEHFU98CjH59UX2VqAgeCzRFU9KVvV71V";
            createTransaction.FinishAfter = DateTime.UtcNow.AddMinutes(1);
            createTransaction.Destination = "rEqtEHKbinqm18wQSQGstmqg9SFpUELasT";
            createTransaction.Fee         = new Currency {
                Value = "11"
            };
            createTransaction.Sequence = accountInfo.AccountData.Sequence;

            var      json     = createTransaction.ToJson();
            TxSigner signer   = TxSigner.FromSecret("xxxxxxx");
            SignedTx signedTx = signer.SignJson(JObject.Parse(json));

            SubmitBlobRequest request = new SubmitBlobRequest();

            request.TransactionBlob = signedTx.TxBlob;

            Submit result = await rippleClient.SubmitTransactionBlob(request);

            Assert.IsNotNull(result);
            Assert.AreEqual("tesSUCCESS", result.EngineResult);
            Assert.IsNotNull(result.Transaction.Hash);
        }
Пример #5
0
        public async Task CanFillOrder()
        {
            AccountInfo accountInfo = await client.AccountInfo("rEqtEHKbinqm18wQSQGstmqg9SFpUELasT");

            IOfferCreateTransaction offerCreate = new OfferCreateTransaction();

            offerCreate.Sequence  = accountInfo.AccountData.Sequence;
            offerCreate.TakerGets = new Currency {
                CurrencyCode = "XYZ", Issuer = "rEqtEHKbinqm18wQSQGstmqg9SFpUELasT", Value = "10"
            };
            offerCreate.TakerPays = new Currency {
                ValueAsXrp = 10
            };
            offerCreate.Expiration = DateTime.UtcNow.AddHours(1);
            offerCreate.Account    = "rEqtEHKbinqm18wQSQGstmqg9SFpUELasT";

            var      json     = offerCreate.ToJson();
            TxSigner signer   = TxSigner.FromSecret("xxxxxxx");
            SignedTx signedTx = signer.SignJson(JObject.Parse(json));

            SubmitBlobRequest request = new SubmitBlobRequest();

            request.TransactionBlob = signedTx.TxBlob;

            Submit result = await client.SubmitTransactionBlob(request);

            Assert.IsNotNull(result);
            Assert.AreEqual("tesSUCCESS", result.EngineResult);
            Assert.IsNotNull(result.Transaction.Hash);
        }
Пример #6
0
        public async Task CanDeleteTrust()
        {
            AccountInfo accountInfo = await client.AccountInfo("rho3u4kXc5q3chQFKfn9S1ZqUCya1xT3t4");

            ITrustSetTransaction trustSet = new TrustSetTransaction();

            trustSet.Flags       = TrustSetFlags.tfSetNoRipple | TrustSetFlags.tfFullyCanonicalSig;
            trustSet.Account     = "rho3u4kXc5q3chQFKfn9S1ZqUCya1xT3t4";
            trustSet.LimitAmount = new Currency {
                ValueAsNumber = 0, Issuer = "rDLXQ8KEBn3Aw313bGzhEemx8cCPpGha3d", CurrencyCode = "PHP"
            };
            trustSet.QualityIn  = 0;
            trustSet.QualityOut = 0;
            trustSet.Sequence   = accountInfo.AccountData.Sequence;
            trustSet.Fee        = new Currency {
                Value = "12"
            };

            var      json     = trustSet.ToJson();
            TxSigner signer   = TxSigner.FromSecret("xxxxxxx");
            SignedTx signedTx = signer.SignJson(JObject.Parse(json));

            SubmitBlobRequest request = new SubmitBlobRequest();

            request.TransactionBlob = signedTx.TxBlob;

            Submit result = await client.SubmitTransactionBlob(request);

            Assert.IsNotNull(result);
            Assert.AreEqual("tesSUCCESS", result.EngineResult);
            Assert.IsNotNull(result.Transaction.Hash);
        }
Пример #7
0
 private static void AssertOk(SignedTx signed)
 {
     Assert.AreEqual(ExpectedTxnSignature, signed.TxJson["TxnSignature"]);
     Assert.AreEqual(ExpectedSigningPubKey, signed.TxJson["SigningPubKey"]);
     Assert.AreEqual(ExpectedHash, signed.Hash);
     Assert.AreEqual(ExpectedTxBlob, signed.TxBlob);
 }
Пример #8
0
        public async Task CanEstablishTrust()
        {
            AccountInfo accountInfo = await client.AccountInfo("rwEHFU98CjH59UX2VqAgeCzRFU9KVvV71V");

            ITrustSetTransaction trustSet = new TrustSetTransaction();

            trustSet.LimitAmount = new Currency {
                CurrencyCode = "XYZ", Issuer = "rEqtEHKbinqm18wQSQGstmqg9SFpUELasT", Value = "1000000"
            };
            trustSet.Account  = "rwEHFU98CjH59UX2VqAgeCzRFU9KVvV71V";
            trustSet.Sequence = accountInfo.AccountData.Sequence;

            var      json     = trustSet.ToJson();
            TxSigner signer   = TxSigner.FromSecret("xxxxxxx");
            SignedTx signedTx = signer.SignJson(JObject.Parse(json));

            SubmitBlobRequest request = new SubmitBlobRequest();

            request.TransactionBlob = signedTx.TxBlob;

            Submit result = await client.SubmitTransactionBlob(request);

            Assert.IsNotNull(result);
            Assert.AreEqual("tesSUCCESS", result.EngineResult);
            Assert.IsNotNull(result.Transaction.Hash);
        }
Пример #9
0
 private void AssertValidSignedTx(SignedTx signedTx)
 {
     Assert.IsNotNull(signedTx, "SignedTx can't be null");
     Assert.IsNotNull(signedTx.TxJson, "SignedTx.TxJson can't be null");
     Assert.IsNotNull(signedTx.TxBlob, "SignedTx.TxBlob can't be null");
     Assert.IsNotNull(signedTx.Hash, "SignedTx.Hash can't be null");
 }
Пример #10
0
    public async Task SendMoney(Decimal coin, String destination)
    {
        IPaymentTransaction paymentTransaction = new PaymentTransaction
        {
            Account     = wallet.Address,
            Destination = destination
        };
        Decimal dec = coin;

        paymentTransaction.Amount = new Currency {
            ValueAsXrp = dec
        };
        paymentTransaction.Sequence = accountInfo.AccountData.Sequence;

        TxSigner signer   = TxSigner.FromSecret(wallet.PrivateKey);
        SignedTx signedTx = signer.SignJson(JObject.Parse(paymentTransaction.ToJson()));

        SubmitBlobRequest request = new SubmitBlobRequest
        {
            TransactionBlob = signedTx.TxBlob
        };

        Submit result = await RippleClientUBC.GetClient().client.SubmitTransactionBlob(request);

        AccountInfo accoun = await RippleClientUBC.GetClient().client.AccountInfo(wallet.Address);

        AccountInfo accountIfo = await RippleClientUBC.GetClient().client.AccountInfo(destination);
    }
Пример #11
0
 private static void AssertOk(SignedTx signed)
 {
     Assert.AreEqual(ExpectedTxnSignature, signed.TxJson["TxnSignature"]);
     Assert.AreEqual(ExpectedSigningPubKey, signed.TxJson["SigningPubKey"]);
     Assert.AreEqual(ExpectedHash, signed.Hash);
     Assert.AreEqual(ExpectedTxBlob, signed.TxBlob);
 }
        public async Task CanSubmitPaymentTransaction()
        {
            IRippleClient rippleClient = new RippleClient("wss://s.altnet.rippletest.net:51233");
            await rippleClient.Connect();

            AccountInfo accountInfo = await rippleClient.AccountInfo("r9oxZ7NZW9ecSG8Fig2NGdLcWv9vFy8twE");

            IPaymentTransaction paymentTransaction = new PaymentTransaction();

            paymentTransaction.Account     = "r9oxZ7NZW9ecSG8Fig2NGdLcWv9vFy8twE";
            paymentTransaction.Destination = "rawNcFm6U1ecQjMLQveKyYGi2zgRutKeHS";
            paymentTransaction.Amount      = new Currency {
                ValueAsXrp = 20
            };
            paymentTransaction.Sequence = accountInfo.AccountData.Sequence;
            paymentTransaction.Fee      = new Currency {
                Value = "15"
            };

            var      json     = paymentTransaction.ToJson();
            TxSigner signer   = TxSigner.FromSecret("spzUVPgz5NmARYf3Sgk7bkYQ975BG");
            SignedTx signedTx = signer.SignJson(JObject.Parse(json));

            SubmitBlobRequest request = new SubmitBlobRequest();

            request.TransactionBlob = signedTx.TxBlob;

            Submit result = await rippleClient.SubmitTransactionBlob(request);

            Assert.IsNotNull(result);
            Assert.AreEqual("tesSUCCESS", result.EngineResult);
            Assert.IsNotNull(result.Transaction.Hash);
        }
Пример #13
0
        public Task <byte[]> Handle(byte[] txData)
        {
            var sig = CryptoUtils.Sign(txData, this.PrivateKey);

            var signedTx = new SignedTx
            {
                Inner     = ByteString.CopyFrom(txData),
                Signature = ByteString.CopyFrom(sig.Signature),
                PublicKey = ByteString.CopyFrom(sig.PublicKey)
            };

            return(Task.FromResult(signedTx.ToByteArray()));
        }
Пример #14
0
        public static async Task <(SignedTx, TxReceipt)?> CreateSignedTx(BitcornContext dbContext, User from, decimal amount, string platform, string txType, int?gameId = null)
        {
            var bitcornhub = await GetBitcornhub(dbContext);

            var result = await SendFromGetReceipt(from, bitcornhub, amount, platform, txType, dbContext);

            if (result != null)
            {
                var tx = new SignedTx();
                tx.Id             = Guid.NewGuid().ToString();
                tx.Amount         = amount;
                tx.InCornTxId     = result.TxId.Value;
                tx.SenderUserId   = from.UserId;
                tx.Timestamp      = DateTime.Now;
                tx.TxType         = txType;
                tx.GameInstanceId = gameId;
                dbContext.SignedTx.Add(tx);
                await dbContext.SaveAsync();

                return(tx, result);
            }

            return(null);
        }
Пример #15
0
    public async Task <string> BroadcastSignedTx(SignedTx signedTx)
    {
        var res = await client.BroadcastSignedTxAsync(signedTx);

        return(res.Hash);
    }
Пример #16
0
        public static async Task <(SignedTx, TxReceipt)?> ClaimSignedTx(BitcornContext dbContext, User to, string key, GameInstance game = null)
        {
            lock (_SignedTxLock)
            {
                if (_SignedTxLock.Contains(key))
                {
                    return(null);
                }
                _SignedTxLock.Add(key);
            }

            try
            {
                SignedTx signed = null;
                if (game == null)
                {
                    signed = await dbContext.SignedTx.FirstOrDefaultAsync(x => x.Id == key);

                    if (signed.GameInstanceId != null)
                    {
                        throw new NotImplementedException();
                    }
                }
                else
                {
                    signed = await dbContext.SignedTx.FirstOrDefaultAsync(x => x.Id == key && game.GameId == x.GameInstanceId);
                }

                if (signed != null && signed.OutCornTxId == null)
                {
                    var srcTx = await dbContext.CornTx.FirstOrDefaultAsync(x => x.CornTxId == signed.InCornTxId);

                    if (srcTx != null)
                    {
                        if (srcTx.ReceiverId == BitcornHubPK)
                        {
                            var amount = srcTx.Amount.Value;
                            int?hostTx = null;
                            if (game != null)
                            {
                                var host = await dbContext.JoinUserModels().FirstOrDefaultAsync(x => x.UserId == game.HostId);

                                var hostReward = amount * 0.01m;
                                amount -= hostReward;
                                var hostReceipt = await SendFromBitcornhubGetReceipt(host, hostReward, srcTx.Platform, srcTx.TxType, dbContext);

                                if (hostReceipt != null)
                                {
                                    hostTx = hostReceipt.TxId;
                                }
                            }

                            var receipt = await SendFromBitcornhubGetReceipt(to, amount, srcTx.Platform, srcTx.TxType, dbContext);

                            if (receipt != null)
                            {
                                var cmd = $" update [{nameof(SignedTx)}] set [{nameof(SignedTx.OutCornTxId)}] = {receipt.TxId.Value} where [{nameof(SignedTx.Id)}] = '{signed.Id}' ";
                                if (hostTx != null)
                                {
                                    cmd += $" update [{nameof(SignedTx)}] set [{nameof(SignedTx.OutCornTxId2)}] = {hostTx.Value} where [{nameof(SignedTx.Id)}] = '{signed.Id}' ";
                                }
                                dbContext.Database.ExecuteSqlRaw(cmd);
                                //signed.OutCornTxId = receipt.TxId;
                                return(signed, receipt);
                            }
                        }
                    }
                    //SendFromBitcornhub(to, signed.Amount, signed.);
                }
            }
            catch (Exception ex)
            {
                await BITCORNLogger.LogError(dbContext, ex, "");
            }
            finally
            {
                lock (_SignedTxLock)
                {
                    _SignedTxLock.Remove(key);
                }
            }

            return(null);
        }