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"); }
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); }
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); }
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); }
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); }
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 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); }
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"); }
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); }
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); }
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())); }
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); }
public async Task <string> BroadcastSignedTx(SignedTx signedTx) { var res = await client.BroadcastSignedTxAsync(signedTx); return(res.Hash); }
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); }