public static void Encode(XdrDataOutputStream stream, AllowTrustOp encodedAllowTrustOp)
 {
     AccountID.Encode(stream, encodedAllowTrustOp.Trustor);
     AllowTrustOpAsset.Encode(stream, encodedAllowTrustOp.Asset);
     stream.WriteInt(encodedAllowTrustOp.Authorize ? 1 : 0);
 }
Beispiel #2
0
 public static void Encode(XdrDataOutputStream stream, NodeID encodedNodeID)
 {
     PublicKey.Encode(stream, encodedNodeID.InnerValue);
 }
Beispiel #3
0
 public static void Encode(XdrDataOutputStream stream, TransactionResultPair encodedTransactionResultPair)
 {
     Hash.Encode(stream, encodedTransactionResultPair.TransactionHash);
     TransactionResult.Encode(stream, encodedTransactionResultPair.Result);
 }
 public static void Encode(XdrDataOutputStream stream, SetOptionsOp encodedSetOptionsOp)
 {
     if (encodedSetOptionsOp.InflationDest != null)
     {
         stream.WriteInt(1);
         AccountID.Encode(stream, encodedSetOptionsOp.InflationDest);
     }
     else
     {
         stream.WriteInt(0);
     }
     if (encodedSetOptionsOp.ClearFlags != null)
     {
         stream.WriteInt(1);
         Uint32.Encode(stream, encodedSetOptionsOp.ClearFlags);
     }
     else
     {
         stream.WriteInt(0);
     }
     if (encodedSetOptionsOp.SetFlags != null)
     {
         stream.WriteInt(1);
         Uint32.Encode(stream, encodedSetOptionsOp.SetFlags);
     }
     else
     {
         stream.WriteInt(0);
     }
     if (encodedSetOptionsOp.MasterWeight != null)
     {
         stream.WriteInt(1);
         Uint32.Encode(stream, encodedSetOptionsOp.MasterWeight);
     }
     else
     {
         stream.WriteInt(0);
     }
     if (encodedSetOptionsOp.LowThreshold != null)
     {
         stream.WriteInt(1);
         Uint32.Encode(stream, encodedSetOptionsOp.LowThreshold);
     }
     else
     {
         stream.WriteInt(0);
     }
     if (encodedSetOptionsOp.MedThreshold != null)
     {
         stream.WriteInt(1);
         Uint32.Encode(stream, encodedSetOptionsOp.MedThreshold);
     }
     else
     {
         stream.WriteInt(0);
     }
     if (encodedSetOptionsOp.HighThreshold != null)
     {
         stream.WriteInt(1);
         Uint32.Encode(stream, encodedSetOptionsOp.HighThreshold);
     }
     else
     {
         stream.WriteInt(0);
     }
     if (encodedSetOptionsOp.HomeDomain != null)
     {
         stream.WriteInt(1);
         String32.Encode(stream, encodedSetOptionsOp.HomeDomain);
     }
     else
     {
         stream.WriteInt(0);
     }
     if (encodedSetOptionsOp.Signer != null)
     {
         stream.WriteInt(1);
         Signer.Encode(stream, encodedSetOptionsOp.Signer);
     }
     else
     {
         stream.WriteInt(0);
     }
 }
Beispiel #5
0
 public static void Encode(XdrDataOutputStream stream, Price encodedPrice)
 {
     Int32.Encode(stream, encodedPrice.N);
     Int32.Encode(stream, encodedPrice.D);
 }
        public static void Encode(XdrDataOutputStream stream, Curve25519Secret encodedCurve25519Secret)
        {
            int keysize = encodedCurve25519Secret.Key.Length;

            stream.Write(encodedCurve25519Secret.Key, 0, keysize);
        }
Beispiel #7
0
 public static void Encode(XdrDataOutputStream stream, Auth encodedAuth)
 {
     stream.WriteInt(encodedAuth.Unused);
 }
Beispiel #8
0
 public static void Encode(XdrDataOutputStream stream, String32 encodedString32)
 {
     stream.WriteString(encodedString32.InnerValue);
 }
Beispiel #9
0
 public static void Encode(XdrDataOutputStream stream, InflationPayout encodedInflationPayout)
 {
     AccountID.Encode(stream, encodedInflationPayout.Destination);
     Int64.Encode(stream, encodedInflationPayout.Amount);
 }
Beispiel #10
0
 public static void Encode(XdrDataOutputStream stream, AuthenticatedMessageV0 encodedAuthenticatedMessageV0)
 {
     Uint64.Encode(stream, encodedAuthenticatedMessageV0.Sequence);
     StellarMessage.Encode(stream, encodedAuthenticatedMessageV0.Message);
     HmacSha256Mac.Encode(stream, encodedAuthenticatedMessageV0.Mac);
 }
 public static void Encode(XdrDataOutputStream stream, HmacSha256Key encodedHmacSha256Key)
 {
     int keysize = encodedHmacSha256Key.Key.Length;
     stream.Write(encodedHmacSha256Key.Key, 0, keysize);
 }
 public static void Encode(XdrDataOutputStream stream, DontHave encodedDontHave)
 {
     MessageType.Encode(stream, encodedDontHave.Type);
     Uint256.Encode(stream, encodedDontHave.ReqHash);
 }
Beispiel #13
0
 public static void Encode(XdrDataOutputStream stream, SCPEnvelope encodedSCPEnvelope)
 {
     SCPStatement.Encode(stream, encodedSCPEnvelope.Statement);
     Signature.Encode(stream, encodedSCPEnvelope.Signature);
 }
Beispiel #14
0
 public static void Encode(XdrDataOutputStream stream, ChangeTrustOp encodedChangeTrustOp)
 {
     Asset.Encode(stream, encodedChangeTrustOp.Line);
     Int64.Encode(stream, encodedChangeTrustOp.Limit);
 }
Beispiel #15
0
 public static void Encode(XdrDataOutputStream stream, LedgerKeyClaimableBalance encodedLedgerKeyClaimableBalance)
 {
     ClaimableBalanceID.Encode(stream, encodedLedgerKeyClaimableBalance.BalanceID);
 }
Beispiel #16
0
 public static void Encode(XdrDataOutputStream stream, LedgerHeaderHistoryEntry encodedLedgerHeaderHistoryEntry)
 {
     Hash.Encode(stream, encodedLedgerHeaderHistoryEntry.Hash);
     LedgerHeader.Encode(stream, encodedLedgerHeaderHistoryEntry.Header);
     LedgerHeaderHistoryEntryExt.Encode(stream, encodedLedgerHeaderHistoryEntry.Ext);
 }
Beispiel #17
0
 public static void Encode(XdrDataOutputStream stream, TransactionHistoryResultEntry encodedTransactionHistoryResultEntry)
 {
     Uint32.Encode(stream, encodedTransactionHistoryResultEntry.LedgerSeq);
     TransactionResultSet.Encode(stream, encodedTransactionHistoryResultEntry.TxResultSet);
     TransactionHistoryResultEntryExt.Encode(stream, encodedTransactionHistoryResultEntry.Ext);
 }
 public static void Encode(XdrDataOutputStream stream, SequenceNumber encodedSequenceNumber)
 {
     Uint64.Encode(stream, encodedSequenceNumber.InnerValue);
 }
Beispiel #19
0
 public static void Encode(XdrDataOutputStream stream, PaymentOp encodedPaymentOp)
 {
     AccountID.Encode(stream, encodedPaymentOp.Destination);
     Asset.Encode(stream, encodedPaymentOp.Asset);
     Int64.Encode(stream, encodedPaymentOp.Amount);
 }
        public static void Encode(XdrDataOutputStream stream, AssetCode12 encodedAssetCode12)
        {
            int AssetCode12size = encodedAssetCode12.InnerValue.Length;

            stream.Write(encodedAssetCode12.InnerValue, 0, AssetCode12size);
        }
Beispiel #21
0
 public static void Encode(XdrDataOutputStream stream, Error encodedError)
 {
     ErrorCode.Encode(stream, encodedError.Code);
     stream.WriteString(encodedError.Msg);
 }
Beispiel #22
0
 public static void Encode(XdrDataOutputStream stream, LedgerKeyAccount encodedLedgerKeyAccount)
 {
     AccountID.Encode(stream, encodedLedgerKeyAccount.AccountID);
 }
 public static void Encode(XdrDataOutputStream stream, SimplePaymentResult encodedSimplePaymentResult)
 {
     AccountID.Encode(stream, encodedSimplePaymentResult.Destination);
     Asset.Encode(stream, encodedSimplePaymentResult.Asset);
     Int64.Encode(stream, encodedSimplePaymentResult.Amount);
 }
Beispiel #24
0
 public static void Encode(XdrDataOutputStream stream, LedgerKeyTrustLine encodedLedgerKeyTrustLine)
 {
     AccountID.Encode(stream, encodedLedgerKeyTrustLine.AccountID);
     Asset.Encode(stream, encodedLedgerKeyTrustLine.Asset);
 }
Beispiel #25
0
 public static void Encode(XdrDataOutputStream stream, LedgerEntry encodedLedgerEntry)
 {
     Uint32.Encode(stream, encodedLedgerEntry.LastModifiedLedgerSeq);
     LedgerEntryData.Encode(stream, encodedLedgerEntry.Data);
     LedgerEntryExt.Encode(stream, encodedLedgerEntry.Ext);
 }
Beispiel #26
0
 public static void Encode(XdrDataOutputStream stream, LedgerKeyOffer encodedLedgerKeyOffer)
 {
     AccountID.Encode(stream, encodedLedgerKeyOffer.SellerID);
     Int64.Encode(stream, encodedLedgerKeyOffer.OfferID);
 }
Beispiel #27
0
 public static void Encode(XdrDataOutputStream stream, TimeBounds encodedTimeBounds)
 {
     Uint64.Encode(stream, encodedTimeBounds.MinTime);
     Uint64.Encode(stream, encodedTimeBounds.MaxTime);
 }
Beispiel #28
0
 public static void Encode(XdrDataOutputStream stream, LedgerKeyData encodedLedgerKeyData)
 {
     AccountID.Encode(stream, encodedLedgerKeyData.AccountID);
     String64.Encode(stream, encodedLedgerKeyData.DataName);
 }
Beispiel #29
0
 public static void Encode(XdrDataOutputStream stream, Int64 encodedInt64)
 {
     stream.WriteLong(encodedInt64.InnerValue);
 }
Beispiel #30
0
        public async Task <string> BuildTransactionAsync(Guid operationId, AddressBalance from, string toAddress, string memoText, long amount)
        {
            var fromKeyPair = KeyPair.FromAccountId(from.Address);
            var fromAccount = new Account(fromKeyPair, from.Sequence);

            var toKeyPair = KeyPair.FromAccountId(toAddress);

            var transferableBalance = from.Balance - from.MinBalance;

            Operation operation;

            if (await _horizonService.AccountExists(toAddress))
            {
                if (amount <= transferableBalance)
                {
                    var asset = new AssetTypeNative();
                    operation = new PaymentOperation.Builder(toKeyPair, asset, Operation.FromXdrAmount(amount))
                                .SetSourceAccount(fromKeyPair)
                                .Build();
                }
                else if (!_balanceService.IsDepositBaseAddress(from.Address))
                {
                    operation = new AccountMergeOperation.Builder(toKeyPair)
                                .SetSourceAccount(fromKeyPair)
                                .Build();
                }
                else
                {
                    throw new BusinessException($"It isn't allowed to merge the entire balance from the deposit base into another account! Transfer less funds. transferable={transferableBalance}");
                }
            }
            else
            {
                if (amount <= transferableBalance)
                {
                    operation = new CreateAccountOperation.Builder(toKeyPair, Operation.FromXdrAmount(amount))
                                .SetSourceAccount(fromKeyPair)
                                .Build();
                }
                else
                {
                    throw new BusinessException($"It isn't possible to merge the entire balance into an unused account! Use a destination in existance. transferable={transferableBalance}");
                }
            }

            var builder = new TransactionBuilder(fromAccount)
                          .AddOperation(operation)
                          .SetFee(_appSettings.StellarApiService.OperationFee);

            if (!string.IsNullOrWhiteSpace(memoText))
            {
                var memo = new MemoText(memoText);
                builder = builder.AddMemo(memo);
            }

            var tx = builder.Build();

            var xdr               = tx.ToUnsignedEnvelopeXdr(TransactionBase.TransactionXdrVersion.V1);
            var expirationDate    = (DateTime.UtcNow + _transactionExpirationTime);
            var maxUnixTimeDouble = expirationDate.ToUnixTime() / 1000;//ms to seconds
            var maxTimeUnix       = (ulong)maxUnixTimeDouble;

            xdr.V1.Tx.TimeBounds = new TimeBounds()
            {
                MaxTime = new TimePoint(new Uint64(maxTimeUnix)),
                MinTime = new TimePoint(new Uint64(0)),
            };

            var writer = new XdrDataOutputStream();

            stellar_dotnet_sdk.xdr.TransactionEnvelope.Encode(writer, xdr);
            var xdrBase64 = Convert.ToBase64String(writer.ToArray());

            _log.Info("Transaction has been built", new
            {
                OperationId = operationId,
                From        = from,
                To          = toAddress,
                Memo        = memoText,
                Amount      = amount,
                Fee         = tx.Fee,
                Sequence    = tx.SequenceNumber,
                MaxTimeUnix = maxTimeUnix
            });

            var build = new TxBuild
            {
                OperationId = operationId,
                XdrBase64   = xdrBase64
            };
            await _buildRepository.AddAsync(build);

            return(xdrBase64);
        }