From 124ca390862f8ce8d69b9ba458529e4bfd4fdb88 Mon Sep 17 00:00:00 2001 From: Kyle Johns Date: Thu, 7 Jul 2022 16:02:16 -0400 Subject: [PATCH 1/7] mock option implemented but need CardanoSharp lib update before proceeding --- Src/ConsoleTool/Cscli.ConsoleTool.csproj | 2 +- Src/ConsoleTool/ShowBaseHelpCommand.cs | 2 +- .../BuildSimplePaymentTransactionCommand.cs | 19 ++++++++++++++++--- Src/ConsoleTool/Transaction/TxUtils.cs | 1 + 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Src/ConsoleTool/Cscli.ConsoleTool.csproj b/Src/ConsoleTool/Cscli.ConsoleTool.csproj index 55ea4f0..2c7e968 100644 --- a/Src/ConsoleTool/Cscli.ConsoleTool.csproj +++ b/Src/ConsoleTool/Cscli.ConsoleTool.csproj @@ -32,7 +32,7 @@ - + diff --git a/Src/ConsoleTool/ShowBaseHelpCommand.cs b/Src/ConsoleTool/ShowBaseHelpCommand.cs index 85a06eb..0841c6a 100644 --- a/Src/ConsoleTool/ShowBaseHelpCommand.cs +++ b/Src/ConsoleTool/ShowBaseHelpCommand.cs @@ -40,7 +40,7 @@ query info address --network --address query info transaction --network --tx-id Transaction Commands: - BETA: transaction simple-payment build --network --from
--to
(--ada | --lovelaces | --send-all true) [--ttl ] [--signing-key ] [--submit true] [--message """"] [--out-file ] + BETA: transaction simple-payment build --network --from
--to
(--ada | --lovelaces | --send-all true) [--ttl ] [--mock-witness-cnt ] [--signing-key ] [--submit true] [--message """"] [--out-file ] transaction view --network --cbor-hex transaction sign --cbor-hex --signing-keys [--out-file ] transaction submit --network --cbor-hex diff --git a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs index 8d5d05d..29ed3a7 100644 --- a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs +++ b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs @@ -24,6 +24,7 @@ public class BuildSimplePaymentTransactionCommand : ICommand public decimal Ada { get; init; } public bool SendAll { get; init; } = false; public uint Ttl { get; set; } // Slot for transaction expiry + public uint? MockWitnessCount { get; set; } // Slot for transaction expiry public string? Message { get; init; } // Onchain Metadata 674 standard public bool Submit { get; init; } // Submits Transaction to Koios node public string? OutFile { get; init; } // cardano-cli compatible transaction file (signed only) @@ -70,14 +71,26 @@ public async ValueTask ExecuteAsync(CancellationToken ct) } // Build Whole Tx var txBuilder = TransactionBuilder.Create.SetBody(txBodyBuilder); + + // Initiate Witness Builder + var witnesses = TransactionWitnessSetBuilder.Create; + // Key Witnesses if signing key is passed in if (!string.IsNullOrWhiteSpace(SigningKey)) { var paymentSkey = TxUtils.GetPrivateKeyFromBech32SigningKey(SigningKey); - var witnesses = TransactionWitnessSetBuilder.Create - .AddVKeyWitness(paymentSkey.GetPublicKey(false), paymentSkey); - txBuilder.SetWitnesses(witnesses); + witnesses.AddVKeyWitness(paymentSkey.GetPublicKey(false), paymentSkey); + } + + // Add Mock Witnesses + if (MockWitnessCount.HasValue) + { + witnesses.MockVKeyWitness(MockWitnessCount.Value); } + + if(witnesses.Build().VKeyWitnesses.Any()) + txBuilder.SetWitnesses(witnesses); + // Metadata var auxDataBuilder = !string.IsNullOrWhiteSpace(Message) ? AuxiliaryDataBuilder.Create.AddMetadata(MessageStandardKey, BuildMessageMetadata(Message)) diff --git a/Src/ConsoleTool/Transaction/TxUtils.cs b/Src/ConsoleTool/Transaction/TxUtils.cs index ed286f9..2ad42cb 100644 --- a/Src/ConsoleTool/Transaction/TxUtils.cs +++ b/Src/ConsoleTool/Transaction/TxUtils.cs @@ -1,5 +1,6 @@ using CardanoSharp.Wallet.Encoding; using CardanoSharp.Wallet.Models.Keys; +using CardanoSharp.Wallet.Models.Transactions; namespace Cscli.ConsoleTool.Transaction; From 99d6cc18d0da2dc0b52cceaa4e80a4eb74972bc2 Mon Sep 17 00:00:00 2001 From: Kyle Johns Date: Fri, 8 Jul 2022 08:35:54 -0400 Subject: [PATCH 2/7] ok updated cardanosharp for the new mocking feature and got cli to capture the --mock-witness-count value. --- Src/ConsoleTool/Constants.cs | 1 + Src/ConsoleTool/ShowBaseHelpCommand.cs | 2 +- .../BuildSimplePaymentTransactionCommand.cs | 16 +++++++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Src/ConsoleTool/Constants.cs b/Src/ConsoleTool/Constants.cs index 04bdedf..d8018ff 100644 --- a/Src/ConsoleTool/Constants.cs +++ b/Src/ConsoleTool/Constants.cs @@ -70,6 +70,7 @@ public static class Constants { "--signing-keys", "signingKeys" }, { "--send-all", "sendAll" }, { "--out-file", "outFile" }, + { "--mock-witness-count", "mockWitnessCount"} //{ "--output-format", "outputFormat" }, }; } \ No newline at end of file diff --git a/Src/ConsoleTool/ShowBaseHelpCommand.cs b/Src/ConsoleTool/ShowBaseHelpCommand.cs index 0841c6a..80970a5 100644 --- a/Src/ConsoleTool/ShowBaseHelpCommand.cs +++ b/Src/ConsoleTool/ShowBaseHelpCommand.cs @@ -40,7 +40,7 @@ query info address --network --address query info transaction --network --tx-id Transaction Commands: - BETA: transaction simple-payment build --network --from
--to
(--ada | --lovelaces | --send-all true) [--ttl ] [--mock-witness-cnt ] [--signing-key ] [--submit true] [--message """"] [--out-file ] + BETA: transaction simple-payment build --network --from
--to
(--ada | --lovelaces | --send-all true) [--ttl ] [--mock-witness-count ] [--signing-key ] [--submit true] [--message """"] [--out-file ] transaction view --network --cbor-hex transaction sign --cbor-hex --signing-keys [--out-file ] transaction submit --network --cbor-hex diff --git a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs index 29ed3a7..6d32f54 100644 --- a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs +++ b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs @@ -24,7 +24,7 @@ public class BuildSimplePaymentTransactionCommand : ICommand public decimal Ada { get; init; } public bool SendAll { get; init; } = false; public uint Ttl { get; set; } // Slot for transaction expiry - public uint? MockWitnessCount { get; set; } // Slot for transaction expiry + public int? MockWitnessCount { get; set; } // Slot for transaction expiry public string? Message { get; init; } // Onchain Metadata 674 standard public bool Submit { get; init; } // Submits Transaction to Koios node public string? OutFile { get; init; } // cardano-cli compatible transaction file (signed only) @@ -103,6 +103,20 @@ public async ValueTask ExecuteAsync(CancellationToken ct) // Fee Calculation var fee = tx.CalculateAndSetFee(protocolParams.MinFeeA, protocolParams.MinFeeB); tx.TransactionBody.TransactionOutputs.Last().Value.Coin -= fee; + + // Remove Mocks + if (MockWitnessCount.HasValue) + { + var initialCount = tx.TransactionWitnessSet.VKeyWitnesses.Count; + for (var i = initialCount - 1; + i >= initialCount - MockWitnessCount.Value; + i--) + { + tx.TransactionWitnessSet.VKeyWitnesses.Remove( + tx.TransactionWitnessSet.VKeyWitnesses.ToList()[i]); + } + } + var txCborBytes = tx.Serialize(); if (!string.IsNullOrWhiteSpace(OutFile)) { From c89b2ae85a7eb252a8b79af30377dc226feb732e Mon Sep 17 00:00:00 2001 From: Kyle Johns Date: Sun, 10 Jul 2022 19:58:55 -0400 Subject: [PATCH 3/7] updated the approach used to remove mocked vkey witnesses. --- Src/ConsoleTool/Cscli.ConsoleTool.csproj | 2 +- .../BuildSimplePaymentTransactionCommand.cs | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Src/ConsoleTool/Cscli.ConsoleTool.csproj b/Src/ConsoleTool/Cscli.ConsoleTool.csproj index 2c7e968..c754d49 100644 --- a/Src/ConsoleTool/Cscli.ConsoleTool.csproj +++ b/Src/ConsoleTool/Cscli.ConsoleTool.csproj @@ -32,7 +32,7 @@ - + diff --git a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs index 6d32f54..aa76b84 100644 --- a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs +++ b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs @@ -107,16 +107,13 @@ public async ValueTask ExecuteAsync(CancellationToken ct) // Remove Mocks if (MockWitnessCount.HasValue) { - var initialCount = tx.TransactionWitnessSet.VKeyWitnesses.Count; - for (var i = initialCount - 1; - i >= initialCount - MockWitnessCount.Value; - i--) + var mockedWitnesses = tx.TransactionWitnessSet.VKeyWitnesses.Where(x => x.IsMock); + foreach (var mockedWitness in mockedWitnesses) { - tx.TransactionWitnessSet.VKeyWitnesses.Remove( - tx.TransactionWitnessSet.VKeyWitnesses.ToList()[i]); + tx.TransactionWitnessSet.VKeyWitnesses.Remove(mockedWitness); } } - + var txCborBytes = tx.Serialize(); if (!string.IsNullOrWhiteSpace(OutFile)) { From a3bf968e1b8641c9e9f25829eecc90a739867e93 Mon Sep 17 00:00:00 2001 From: Kyle Johns Date: Wed, 13 Jul 2022 09:58:29 -0400 Subject: [PATCH 4/7] updated cardanosharp. this update will remove mocks for us after calculating fee --- Src/ConsoleTool/Cscli.ConsoleTool.csproj | 2 +- .../BuildSimplePaymentTransactionCommand.cs | 12 ++---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/Src/ConsoleTool/Cscli.ConsoleTool.csproj b/Src/ConsoleTool/Cscli.ConsoleTool.csproj index c754d49..ce74443 100644 --- a/Src/ConsoleTool/Cscli.ConsoleTool.csproj +++ b/Src/ConsoleTool/Cscli.ConsoleTool.csproj @@ -32,7 +32,7 @@ - + diff --git a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs index aa76b84..3062bf5 100644 --- a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs +++ b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs @@ -99,20 +99,12 @@ public async ValueTask ExecuteAsync(CancellationToken ct) { txBuilder.SetAuxData(auxDataBuilder); } + var tx = txBuilder.Build(); + // Fee Calculation var fee = tx.CalculateAndSetFee(protocolParams.MinFeeA, protocolParams.MinFeeB); tx.TransactionBody.TransactionOutputs.Last().Value.Coin -= fee; - - // Remove Mocks - if (MockWitnessCount.HasValue) - { - var mockedWitnesses = tx.TransactionWitnessSet.VKeyWitnesses.Where(x => x.IsMock); - foreach (var mockedWitness in mockedWitnesses) - { - tx.TransactionWitnessSet.VKeyWitnesses.Remove(mockedWitness); - } - } var txCborBytes = tx.Serialize(); if (!string.IsNullOrWhiteSpace(OutFile)) From a8b5c3eea60615a371449d8a68826e9fb5183acd Mon Sep 17 00:00:00 2001 From: Kyle Johns Date: Thu, 21 Jul 2022 20:43:31 -0400 Subject: [PATCH 5/7] updated cs wallet and corrected the mock --- Src/ConsoleTool/Cscli.ConsoleTool.csproj | 2 +- .../BuildSimplePaymentTransactionCommand.cs | 20 +++++-------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/Src/ConsoleTool/Cscli.ConsoleTool.csproj b/Src/ConsoleTool/Cscli.ConsoleTool.csproj index ce74443..89fe9c1 100644 --- a/Src/ConsoleTool/Cscli.ConsoleTool.csproj +++ b/Src/ConsoleTool/Cscli.ConsoleTool.csproj @@ -32,7 +32,7 @@ - + diff --git a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs index 3062bf5..3fb6b3a 100644 --- a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs +++ b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs @@ -71,25 +71,15 @@ public async ValueTask ExecuteAsync(CancellationToken ct) } // Build Whole Tx var txBuilder = TransactionBuilder.Create.SetBody(txBodyBuilder); - - // Initiate Witness Builder - var witnesses = TransactionWitnessSetBuilder.Create; - + // Key Witnesses if signing key is passed in if (!string.IsNullOrWhiteSpace(SigningKey)) { var paymentSkey = TxUtils.GetPrivateKeyFromBech32SigningKey(SigningKey); - witnesses.AddVKeyWitness(paymentSkey.GetPublicKey(false), paymentSkey); - } - - // Add Mock Witnesses - if (MockWitnessCount.HasValue) - { - witnesses.MockVKeyWitness(MockWitnessCount.Value); - } - - if(witnesses.Build().VKeyWitnesses.Any()) + var witnesses = TransactionWitnessSetBuilder.Create + .AddVKeyWitness(paymentSkey.GetPublicKey(false), paymentSkey); txBuilder.SetWitnesses(witnesses); + } // Metadata var auxDataBuilder = !string.IsNullOrWhiteSpace(Message) @@ -103,7 +93,7 @@ public async ValueTask ExecuteAsync(CancellationToken ct) var tx = txBuilder.Build(); // Fee Calculation - var fee = tx.CalculateAndSetFee(protocolParams.MinFeeA, protocolParams.MinFeeB); + var fee = tx.CalculateAndSetFee(protocolParams.MinFeeA, protocolParams.MinFeeB, MockWitnessCount ?? 0); tx.TransactionBody.TransactionOutputs.Last().Value.Coin -= fee; var txCborBytes = tx.Serialize(); From 9f0f230e6be386ba6529389aa01931a3d7b9ff72 Mon Sep 17 00:00:00 2001 From: Kyle Johns Date: Thu, 21 Jul 2022 20:45:30 -0400 Subject: [PATCH 6/7] removed unnecessary edit --- .../Transaction/BuildSimplePaymentTransactionCommand.cs | 5 ----- Src/ConsoleTool/Transaction/TxUtils.cs | 1 - 2 files changed, 6 deletions(-) diff --git a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs index 3fb6b3a..d37d737 100644 --- a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs +++ b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs @@ -71,7 +71,6 @@ public async ValueTask ExecuteAsync(CancellationToken ct) } // Build Whole Tx var txBuilder = TransactionBuilder.Create.SetBody(txBodyBuilder); - // Key Witnesses if signing key is passed in if (!string.IsNullOrWhiteSpace(SigningKey)) { @@ -80,7 +79,6 @@ public async ValueTask ExecuteAsync(CancellationToken ct) .AddVKeyWitness(paymentSkey.GetPublicKey(false), paymentSkey); txBuilder.SetWitnesses(witnesses); } - // Metadata var auxDataBuilder = !string.IsNullOrWhiteSpace(Message) ? AuxiliaryDataBuilder.Create.AddMetadata(MessageStandardKey, BuildMessageMetadata(Message)) @@ -89,13 +87,10 @@ public async ValueTask ExecuteAsync(CancellationToken ct) { txBuilder.SetAuxData(auxDataBuilder); } - var tx = txBuilder.Build(); - // Fee Calculation var fee = tx.CalculateAndSetFee(protocolParams.MinFeeA, protocolParams.MinFeeB, MockWitnessCount ?? 0); tx.TransactionBody.TransactionOutputs.Last().Value.Coin -= fee; - var txCborBytes = tx.Serialize(); if (!string.IsNullOrWhiteSpace(OutFile)) { diff --git a/Src/ConsoleTool/Transaction/TxUtils.cs b/Src/ConsoleTool/Transaction/TxUtils.cs index 2ad42cb..ed286f9 100644 --- a/Src/ConsoleTool/Transaction/TxUtils.cs +++ b/Src/ConsoleTool/Transaction/TxUtils.cs @@ -1,6 +1,5 @@ using CardanoSharp.Wallet.Encoding; using CardanoSharp.Wallet.Models.Keys; -using CardanoSharp.Wallet.Models.Transactions; namespace Cscli.ConsoleTool.Transaction; From 644d05a828307f24de21ffae5186c5fe87c69a22 Mon Sep 17 00:00:00 2001 From: Kyle Johns Date: Thu, 21 Jul 2022 20:58:41 -0400 Subject: [PATCH 7/7] with current implementation of cs wallet, it expects TransactionWitnessSet to be initialized --- .../Transaction/BuildSimplePaymentTransactionCommand.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs index d37d737..4b38b56 100644 --- a/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs +++ b/Src/ConsoleTool/Transaction/BuildSimplePaymentTransactionCommand.cs @@ -10,6 +10,7 @@ using CardanoSharp.Wallet.Utilities; using Cscli.ConsoleTool.Koios; using System.Text.Json; +using CardanoSharp.Wallet.Models.Transactions; using static Cscli.ConsoleTool.Constants; namespace Cscli.ConsoleTool.Transaction; @@ -88,6 +89,8 @@ public async ValueTask ExecuteAsync(CancellationToken ct) txBuilder.SetAuxData(auxDataBuilder); } var tx = txBuilder.Build(); + if(MockWitnessCount is not null && MockWitnessCount > 0) + tx.TransactionWitnessSet = new TransactionWitnessSet(); // Fee Calculation var fee = tx.CalculateAndSetFee(protocolParams.MinFeeA, protocolParams.MinFeeB, MockWitnessCount ?? 0); tx.TransactionBody.TransactionOutputs.Last().Value.Coin -= fee;