public async Task Deposit(long amount, ConstellationInfo.Asset asset, params KeyPair[] extraSigners) { var tx = await TransactionHelper.GetDepositTx(keyPair, constellation, Amount.FromXdr(amount), asset); tx.Sign(keyPair); foreach (var signer in extraSigners) { tx.Sign(signer); } await tx.Submit(constellation); }
public async Task <MessageEnvelope> MakePayment(KeyPair destination, long amount, ConstellationInfo.Asset asset, bool waitForFinalize = true) { var paymentMessage = new PaymentRequest { Amount = amount, Destination = destination, Asset = asset.Id }; var response = (CentaurusResponse)await connection.SendMessage(paymentMessage.CreateEnvelope()); var result = await(waitForFinalize ? response.ResponseTask : response.AcknowledgmentTask); return(result); }
public async Task <MessageEnvelope> CreateOrder(long amount, double price, OrderSide side, ConstellationInfo.Asset asset, bool waitForFinalize = true) { var order = new OrderRequest { Amount = amount, Price = price, Side = side, Asset = asset.Id }; var response = (CentaurusResponse)await connection.SendMessage(order.CreateEnvelope()); var result = await(waitForFinalize ? response.ResponseTask : response.AcknowledgmentTask); return(result); }
public async Task <MessageEnvelope> Withdrawal(KeyPair destination, string amount, ConstellationInfo.Asset asset, bool waitForFinalize = true) { var paymentMessage = new WithdrawalRequest(); var tx = await TransactionHelper.GetWithdrawalTx(keyPair, constellation, destination, amount, asset); paymentMessage.TransactionXdr = tx.ToArray(); var response = (CentaurusResponse)await connection.SendMessage(paymentMessage.CreateEnvelope()); var result = await(waitForFinalize ? response.ResponseTask : response.AcknowledgmentTask); var txResultMessage = result.Message as ITransactionResultMessage; if (txResultMessage is null) { throw new Exception($"Unexpected result type '{result.Message.MessageType}'"); } tx.Sign(keyPair); foreach (var signature in txResultMessage.TxSignatures) { tx.Signatures.Add(signature.ToDecoratedSignature()); } var submitResult = await tx.Submit(constellation); if (!submitResult.IsSuccess()) { logger.Error($"Submit withdrawal failed. Result xdr: {submitResult.ResultXdr}"); } return(result); }
public static async Task <Transaction> GetDepositTx(KeyPair sourceAccount, ConstellationInfo constellation, string amount, ConstellationInfo.Asset asset) { using (var server = constellation.StellarNetwork.GetServer()) { var txBuilder = await GetTxBuilder(server, sourceAccount); txBuilder.AddOperation(new PaymentOperation.Builder((KeyPair)constellation.VaultPubKey, asset.StellarAsset, amount).Build()); var tx = txBuilder.Build(); return(tx); } }
public static async Task <Transaction> GetWithdrawalTx(KeyPair sourceAccount, ConstellationInfo constellation, KeyPair destination, string amount, ConstellationInfo.Asset asset) { using (var server = constellation.StellarNetwork.GetServer()) { var txBuilder = await GetTxBuilder(server, sourceAccount); if ((await server.GetAccountData(destination.AccountId)) == null) { throw new Exception($"{destination.AccountId} is not a part of Stellar Network."); } txBuilder.AddOperation(new PaymentOperation.Builder(destination, asset.StellarAsset, amount).SetSourceAccount(KeyPair.FromAccountId(constellation.Vault)).Build()); txBuilder.AddTimeBounds(new stellar_dotnet_sdk.TimeBounds(maxTime: DateTimeOffset.UtcNow.AddSeconds(60))); var tx = txBuilder.Build(); return(tx); } }