public static OperationMeta Decode(IByteReader stream) { OperationMeta decodedOperationMeta = new OperationMeta(); decodedOperationMeta.Changes = LedgerEntryChanges.Decode(stream); return(decodedOperationMeta); }
public static TransactionMeta Decode(XdrDataInputStream stream) { TransactionMeta decodedTransactionMeta = new TransactionMeta(); int discriminant = stream.ReadInt(); decodedTransactionMeta.Discriminant = discriminant; switch (decodedTransactionMeta.Discriminant) { case 0: int operationssize = stream.ReadInt(); decodedTransactionMeta.Operations = new OperationMeta[operationssize]; for (int i = 0; i < operationssize; i++) { decodedTransactionMeta.Operations[i] = OperationMeta.Decode(stream); } break; case 1: decodedTransactionMeta.V1 = TransactionMetaV1.Decode(stream); break; } return(decodedTransactionMeta); }
public async Task <Transaction> GetOrBuildTransferTransaction(Guid operationId, BitcoinAddress fromAddress, BitcoinAddress toAddress, string assetId, Money amountToSend, bool includeFee) { if (await _operationMetaRepository.Exist(operationId)) { var alreadyBuildedTransaction = await _transactionBlobStorage.GetTransaction(operationId, TransactionBlobType.Initial); return(Transaction.Parse(alreadyBuildedTransaction)); } var buildedTransaction = await _transactionBuilder.GetTransferTransaction(fromAddress, toAddress, amountToSend, includeFee); await _transactionBlobStorage.AddOrReplaceTransaction(operationId, TransactionBlobType.Initial, buildedTransaction.TransactionData.ToHex()); var operation = OperationMeta.Create(operationId, fromAddress.ToString(), toAddress.ToString(), assetId, buildedTransaction.Amount.Satoshi, buildedTransaction.Fee.Satoshi, includeFee); await _operationMetaRepository.Insert(operation); return(buildedTransaction.TransactionData); }
public async Task <string> GetOrBuildTransferTransaction(Guid operationId, BitcoinAddress fromAddress, PubKey fromAddressPubkey, BitcoinAddress toAddress, string assetId, Money amountToSend, bool includeFee) { if (await _operationMetaRepository.Exist(operationId)) { return(await _transactionBlobStorage.GetTransaction(operationId, TransactionBlobType.Initial)); } var buildedTransaction = await _transactionBuilder.GetTransferTransaction(fromAddress, fromAddressPubkey, toAddress, amountToSend, includeFee); var transactionContext = Serializer.ToString((tx: buildedTransaction.TransactionData, spentCoins: buildedTransaction.SpentCoins)); await _transactionBlobStorage.AddOrReplaceTransaction(operationId, TransactionBlobType.Initial, transactionContext); var operation = OperationMeta.Create(operationId, fromAddress.ToString(), toAddress.ToString(), assetId, buildedTransaction.Amount.Satoshi, buildedTransaction.Fee.Satoshi, includeFee); await _operationMetaRepository.Insert(operation); return(transactionContext); }
public static OperationMeta Decode(XdrDataInputStream stream) { var decodedOperationMeta = new OperationMeta(); decodedOperationMeta.Changes = LedgerEntryChanges.Decode(stream); return(decodedOperationMeta); }
public static void Encode(XdrDataOutputStream stream, TransactionMetaV1 encodedTransactionMetaV1) { LedgerEntryChanges.Encode(stream, encodedTransactionMetaV1.TxChanges); int operationssize = encodedTransactionMetaV1.Operations.Length; stream.WriteInt(operationssize); for (int i = 0; i < operationssize; i++) { OperationMeta.Encode(stream, encodedTransactionMetaV1.Operations[i]); } }
public Task <ResponseModel> Get() { OperationMeta meta = null; // this will get value through code-generation var httpMethod = meta.HttpMethod; var deserializer = _objectFactory.Get <IDeserializer>(meta.DeserializerType); var uri = _routeProvider.GetUri(meta); var request = new HttpRequestMessage(httpMethod, uri); var result = _requestHandler.HandleAsync <ResponseModel>(request, deserializer); return(result); }
public async Task <BuiltTransactionInfo> GetOrBuildTransferTransaction(Guid operationId, BitcoinAddress fromAddress, PubKey fromAddressPubkey, BitcoinAddress toAddress, string assetId, Money amountToSend, bool includeFee) { var existingOperation = await _operationMetaRepository.Get(operationId); if (existingOperation != null) { var existingAmount = existingOperation.IncludeFee ? existingOperation.AmountSatoshi + existingOperation.FeeSatoshi : existingOperation.AmountSatoshi; if (existingOperation.FromAddress != fromAddress.ToString() || existingOperation.ToAddress != toAddress.ToString() || existingOperation.AssetId != assetId || existingOperation.IncludeFee != includeFee || existingAmount != amountToSend.Satoshi) { throw new BusinessException("Conflict in operation parameters", ErrorCode.Conflict); } return(await GetExistingTransaction(existingOperation.OperationId, existingOperation.Hash)); } var builtTransaction = await _transactionBuilder.GetTransferTransaction(fromAddress, fromAddressPubkey, toAddress, amountToSend, includeFee); var builtTransactionInfo = new BuiltTransactionInfo { TransactionHex = builtTransaction.TransactionData.ToHex(), UsedCoins = builtTransaction.UsedCoins }; var txHash = builtTransaction.TransactionData.GetHash().ToString(); await _transactionBlobStorage.AddOrReplaceTransaction(operationId, txHash, TransactionBlobType.Initial, builtTransactionInfo.ToJson(_network)); var operation = OperationMeta.Create(operationId, txHash, fromAddress.ToString(), toAddress.ToString(), assetId, builtTransaction.Amount.Satoshi, builtTransaction.Fee.Satoshi, includeFee); if (await _operationMetaRepository.TryInsert(operation)) { return(builtTransactionInfo); } existingOperation = await _operationMetaRepository.Get(operationId); return(await GetExistingTransaction(operationId, existingOperation.Hash)); }
public static TransactionMetaV1 Decode(XdrDataInputStream stream) { TransactionMetaV1 decodedTransactionMetaV1 = new TransactionMetaV1(); decodedTransactionMetaV1.TxChanges = LedgerEntryChanges.Decode(stream); int operationssize = stream.ReadInt(); decodedTransactionMetaV1.Operations = new OperationMeta[operationssize]; for (int i = 0; i < operationssize; i++) { decodedTransactionMetaV1.Operations[i] = OperationMeta.Decode(stream); } return(decodedTransactionMetaV1); }
public static TransactionMetaV2 Decode(XdrDataInputStream stream) { TransactionMetaV2 decodedTransactionMetaV2 = new TransactionMetaV2(); decodedTransactionMetaV2.TxChangesBefore = LedgerEntryChanges.Decode(stream); int operationssize = stream.ReadInt(); decodedTransactionMetaV2.Operations = new OperationMeta[operationssize]; for (int i = 0; i < operationssize; i++) { decodedTransactionMetaV2.Operations[i] = OperationMeta.Decode(stream); } decodedTransactionMetaV2.TxChangesAfter = LedgerEntryChanges.Decode(stream); return(decodedTransactionMetaV2); }
public static void Encode(IByteWriter stream, TransactionMeta encodedTransactionMeta) { XdrEncoding.EncodeInt32(encodedTransactionMeta.Discriminant, stream); switch (encodedTransactionMeta.Discriminant) { case 0: int operationssize = encodedTransactionMeta.Operations.Length; XdrEncoding.EncodeInt32(operationssize, stream); for (int i = 0; i < operationssize; i++) { OperationMeta.Encode(stream, encodedTransactionMeta.Operations[i]); } break; } }
public static void Encode(XdrDataOutputStream stream, TransactionMeta encodedTransactionMeta) { stream.WriteInt(encodedTransactionMeta.Discriminant); switch (encodedTransactionMeta.Discriminant) { case 0: var operationssize = encodedTransactionMeta.Operations.Length; stream.WriteInt(operationssize); for (var i = 0; i < operationssize; i++) { OperationMeta.Encode(stream, encodedTransactionMeta.Operations[i]); } break; } }
public static TransactionMeta Decode(IByteReader stream) { TransactionMeta decodedTransactionMeta = new TransactionMeta(); decodedTransactionMeta.Discriminant = XdrEncoding.DecodeInt32(stream); switch (decodedTransactionMeta.Discriminant) { case 0: int operationssize = XdrEncoding.DecodeInt32(stream); decodedTransactionMeta.Operations = new OperationMeta[operationssize]; for (int i = 0; i < operationssize; i++) { decodedTransactionMeta.Operations[i] = OperationMeta.Decode(stream); } break; } return(decodedTransactionMeta); }
public static TransactionMeta Decode(XdrDataInputStream stream) { var decodedTransactionMeta = new TransactionMeta(); var discriminant = stream.ReadInt(); decodedTransactionMeta.Discriminant = discriminant; switch (decodedTransactionMeta.Discriminant) { case 0: var operationssize = stream.ReadInt(); decodedTransactionMeta.Operations = new OperationMeta[operationssize]; for (var i = 0; i < operationssize; i++) { decodedTransactionMeta.Operations[i] = OperationMeta.Decode(stream); } break; } return(decodedTransactionMeta); }
public static void Encode(XdrDataOutputStream stream, TransactionMeta encodedTransactionMeta) { stream.WriteInt((int)encodedTransactionMeta.Discriminant); switch (encodedTransactionMeta.Discriminant) { case 0: int operationssize = encodedTransactionMeta.Operations.Length; stream.WriteInt(operationssize); for (int i = 0; i < operationssize; i++) { OperationMeta.Encode(stream, encodedTransactionMeta.Operations[i]); } break; case 1: TransactionMetaV1.Encode(stream, encodedTransactionMeta.V1); break; case 2: TransactionMetaV2.Encode(stream, encodedTransactionMeta.V2); break; } }
public static void Encode(IByteWriter stream, OperationMeta encodedOperationMeta) { LedgerEntryChanges.Encode(stream, encodedOperationMeta.Changes); }
public static OperationMeta Decode(IByteReader stream) { OperationMeta decodedOperationMeta = new OperationMeta(); decodedOperationMeta.Changes = LedgerEntryChanges.Decode(stream); return decodedOperationMeta; }
public static void Encode(XdrDataOutputStream stream, OperationMeta encodedOperationMeta) { LedgerEntryChanges.Encode(stream, encodedOperationMeta.Changes); }
public async Task <BuiltTransactionInfo> GetOrBuildTransferTransactionAsync(Guid operationId, IList <OperationInput> inputs, IList <OperationOutput> outputs, OperationType operationType, string assetId, bool includeFee) { var existingOperation = await _operationMetaRepository.GetAsync(operationId); if (existingOperation != null) { if (!OperationMetaComparer.Compare(existingOperation, inputs, outputs, assetId, includeFee)) { throw new BusinessException("Conflict in operation parameters", ErrorCode.Conflict); } return(await GetExistingTransaction(existingOperation.OperationId, existingOperation.Hash)); } IBuiltTransaction builtTransaction; switch (operationType) { case OperationType.Single: builtTransaction = await _transactionBuilder.GetTransferTransactionAsync(inputs.Single(), outputs.Single(), includeFee); break; case OperationType.ManyInputs: builtTransaction = await _transactionBuilder.GetManyInputsTransferTransactionAsync(inputs, outputs.Single(), includeFee); break; case OperationType.ManyOutputs: builtTransaction = await _transactionBuilder.GetManyOutputsTransferTransactionAsync(inputs.Single(), outputs, includeFee); break; default: throw new ArgumentOutOfRangeException(nameof(operationType)); } var builtTransactionInfo = new BuiltTransactionInfo { TransactionHex = builtTransaction.TransactionData.ToHex(), UsedCoins = builtTransaction.UsedCoins }; await _transactionOutputsService.AddInternalOutputs(operationId, builtTransaction.TransactionData.Outputs.AsCoins()); var txHash = builtTransaction.TransactionData.GetHash().ToString(); await _transactionBlobStorage.AddOrReplaceTransactionAsync(operationId, txHash, TransactionBlobType.Initial, builtTransactionInfo.ToJson(_network)); var operation = OperationMeta.Create(operationId, txHash, inputs, outputs, assetId, builtTransaction.Fee.Satoshi, includeFee); if (await _operationMetaRepository.TryInsertAsync(operation)) { return(builtTransactionInfo); } existingOperation = await _operationMetaRepository.GetAsync(operationId); return(await GetExistingTransaction(operationId, existingOperation.Hash)); }