diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/AssignCommand.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/AssignCommand.cs
index e39c3a1..add49ce 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/AssignCommand.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/AssignCommand.cs
@@ -22,6 +22,7 @@ public partial class AssignCommand
///
///
[JsonPropertyName("value")]
+ [Required]
public AssignCommand1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Completion.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Completion.cs
index 8a295d6..8064471 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Completion.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Completion.cs
@@ -22,6 +22,7 @@ public partial class Completion
///
///
[JsonPropertyName("value")]
+ [Required]
public Completion1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Completion1.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Completion1.cs
index 1a1fced..35a6e5f 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Completion1.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Completion1.cs
@@ -98,6 +98,16 @@ public partial class Completion1
[Required]
public SynchronizerTime SynchronizerTime { get; set; } = null!;
+ ///
+ /// The traffic cost paid by this participant node for the confirmation request for the submitted command.
+ /// Commands whose execution is rejected before their corresponding confirmation request is ordered by the synchronizer will report a paid traffic cost of zero. If a confirmation request is ordered for a command, but the request fails (e.g., due to contention with a concurrent contract archival), the traffic cost is paid and reported on the failed completion for the request.
+ /// If you want to correlate the traffic cost of a successful completion with the transaction that resulted from the command, you can use the <c>offset</c> field to retrieve the transaction using <c>UpdateService.GetUpdateByOffset</c> on the same participant node; or alternatively use the <c>update_id</c> field to retrieve the transaction using <c>UpdateService.GetUpdateById</c> on any participant node that sees the transaction.
+ /// Note: for completions processed before the participant started serving traffic cost on the Ledger API, this field will be set to zero. Additionally, the total cost incurred by the submitting node for the submission of the transaction may be greater than the reported cost, for example if retries were issued due to failed submissions to the synchronizer. The cost reported here is the one paid for ordering the confirmation request.
+ /// Optional
+ ///
+ [JsonPropertyName("paidTrafficCost")]
+ public long? PaidTrafficCost { get; set; }
+
}
}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/InterfaceFilter.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/InterfaceFilter.cs
index e34878b..d763865 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/InterfaceFilter.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/InterfaceFilter.cs
@@ -22,6 +22,7 @@ public partial class InterfaceFilter
///
///
[JsonPropertyName("value")]
+ [Required]
public InterfaceFilter1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsReassignment.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsReassignment.cs
index 436dace..9945b1d 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsReassignment.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsReassignment.cs
@@ -81,6 +81,20 @@ public partial class JsReassignment
[Required]
public string SynchronizerId { get; set; } = null!;
+ ///
+ /// The traffic cost that this participant node paid for the corresponding (un)assignment request.
+ /// Not set for transactions that were
+ ///
+ /// - initiated by another participant
+ /// - initiated offline via the repair service
+ /// - processed before the participant started serving traffic cost on the Ledger API
+ /// - returned as part of a query filtering for a non submitting party
+ ///
+ /// Optional: can be empty
+ ///
+ [JsonPropertyName("paidTrafficCost")]
+ public long? PaidTrafficCost { get; set; }
+
}
}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsTransaction.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsTransaction.cs
index 48d3370..cf3f338 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsTransaction.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsTransaction.cs
@@ -100,6 +100,20 @@ public partial class JsTransaction
[JsonPropertyName("externalTransactionHash")]
public string ExternalTransactionHash { get; set; } = null!;
+ ///
+ /// The traffic cost that this participant node paid for the confirmation request for this transaction.
+ /// Not set for transactions that were
+ ///
+ /// - initiated by another participant
+ /// - initiated offline via the repair service
+ /// - processed before the participant started serving traffic cost on the Ledger API
+ /// - returned as part of a query filtering for a non submitting party
+ ///
+ /// Optional: can be empty
+ ///
+ [JsonPropertyName("paidTrafficCost")]
+ public long? PaidTrafficCost { get; set; }
+
}
}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsUnassignedEvent.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsUnassignedEvent.cs
index b4f50fd..2709ba0 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsUnassignedEvent.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/JsUnassignedEvent.cs
@@ -22,6 +22,7 @@ public partial class JsUnassignedEvent
///
///
[JsonPropertyName("value")]
+ [Required]
public UnassignedEvent Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint.cs
index da82e6e..0848064 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint.cs
@@ -26,6 +26,7 @@ public partial class OffsetCheckpoint
///
///
[JsonPropertyName("value")]
+ [Required]
public OffsetCheckpoint1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint2.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint2.cs
index 1ab289e..225bb72 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint2.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint2.cs
@@ -26,6 +26,7 @@ public partial class OffsetCheckpoint2
///
///
[JsonPropertyName("value")]
+ [Required]
public OffsetCheckpoint1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint3.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint3.cs
index 61d87ad..7729c47 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint3.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/OffsetCheckpoint3.cs
@@ -26,6 +26,7 @@ public partial class OffsetCheckpoint3
///
///
[JsonPropertyName("value")]
+ [Required]
public OffsetCheckpoint1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationAdded.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationAdded.cs
index 6477e71..4f0ddce 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationAdded.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationAdded.cs
@@ -21,6 +21,7 @@ public partial class ParticipantAuthorizationAdded
///
///
[JsonPropertyName("value")]
+ [Required]
public ParticipantAuthorizationAdded1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationChanged.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationChanged.cs
index 1b45ca8..711ab9b 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationChanged.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationChanged.cs
@@ -21,6 +21,7 @@ public partial class ParticipantAuthorizationChanged
///
///
[JsonPropertyName("value")]
+ [Required]
public ParticipantAuthorizationChanged1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationRevoked.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationRevoked.cs
index 26d8c27..70e1d92 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationRevoked.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/ParticipantAuthorizationRevoked.cs
@@ -21,6 +21,7 @@ public partial class ParticipantAuthorizationRevoked
///
///
[JsonPropertyName("value")]
+ [Required]
public ParticipantAuthorizationRevoked1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Reassignment.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Reassignment.cs
index ed1024a..d59d92c 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Reassignment.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Reassignment.cs
@@ -22,6 +22,7 @@ public partial class Reassignment
///
///
[JsonPropertyName("value")]
+ [Required]
public JsReassignment Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Reassignment1.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Reassignment1.cs
index 2476738..ec182cc 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Reassignment1.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Reassignment1.cs
@@ -22,6 +22,7 @@ public partial class Reassignment1
///
///
[JsonPropertyName("value")]
+ [Required]
public JsReassignment Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TemplateFilter.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TemplateFilter.cs
index f4015f7..c462dfb 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TemplateFilter.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TemplateFilter.cs
@@ -22,6 +22,7 @@ public partial class TemplateFilter
///
///
[JsonPropertyName("value")]
+ [Required]
public TemplateFilter1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TopologyTransaction.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TopologyTransaction.cs
index 4440113..7bd8491 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TopologyTransaction.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TopologyTransaction.cs
@@ -21,6 +21,7 @@ public partial class TopologyTransaction
///
///
[JsonPropertyName("value")]
+ [Required]
public JsTopologyTransaction Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Transaction.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Transaction.cs
index b1b9857..d867e5a 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Transaction.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/Transaction.cs
@@ -22,6 +22,7 @@ public partial class Transaction
///
///
[JsonPropertyName("value")]
+ [Required]
public JsTransaction Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TransactionTree.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TransactionTree.cs
index a2ba51c..93d8906 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TransactionTree.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/TransactionTree.cs
@@ -22,6 +22,7 @@ public partial class TransactionTree
///
///
[JsonPropertyName("value")]
+ [Required]
public JsTransactionTree Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/UnassignCommand.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/UnassignCommand.cs
index 0e003ed..5450e61 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/UnassignCommand.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/UnassignCommand.cs
@@ -22,6 +22,7 @@ public partial class UnassignCommand
///
///
[JsonPropertyName("value")]
+ [Required]
public UnassignCommand1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/WildcardFilter.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/WildcardFilter.cs
index b250a33..d1cbcf5 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/WildcardFilter.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Ledger/WildcardFilter.cs
@@ -22,6 +22,7 @@ public partial class WildcardFilter
///
///
[JsonPropertyName("value")]
+ [Required]
public WildcardFilter1 Value { get; set; } = null!;
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Splice/FeatureSupportResponse.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Splice/FeatureSupportResponse.cs
index 4e46f14..6b92faa 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Splice/FeatureSupportResponse.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Splice/FeatureSupportResponse.cs
@@ -20,9 +20,8 @@ public partial class FeatureSupportResponse
{
///
///
- [JsonPropertyName("no_holding_fees_on_transfers")]
- [Required]
- public bool NoHoldingFeesOnTransfers { get; set; }
+ [JsonPropertyName("dummy")]
+ public bool? Dummy { get; set; }
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Splice/WalletFeatureSupportResponse.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Splice/WalletFeatureSupportResponse.cs
index ae9e6bc..7029ec2 100644
--- a/src/Trakx.Canton.ApiClient/Generated/Contracts/Splice/WalletFeatureSupportResponse.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Splice/WalletFeatureSupportResponse.cs
@@ -30,12 +30,6 @@ public partial class WalletFeatureSupportResponse
[Required]
public bool TransferPreapprovalDescription { get; set; }
- ///
- ///
- [JsonPropertyName("no_holding_fees_on_transfers")]
- [Required]
- public bool NoHoldingFeesOnTransfers { get; set; }
-
}
}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/TransferMeta.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/TransferMeta.cs
new file mode 100644
index 0000000..2f16dfb
--- /dev/null
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/TransferMeta.cs
@@ -0,0 +1,31 @@
+//
+// Generated from OpenAPI components by generate-components-cs.py
+//
+
+#nullable enable
+
+using System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
+using System.Text.Json.Serialization;
+
+namespace Trakx.Canton.ApiClient.Contracts.Utilities
+{
+ ///
+ /// Additional metadata associated with the transfer.
+ ///
+ [GeneratedCode("OpenAPIComponentsGen", "1.0.0")]
+ public partial class TransferMeta
+ {
+ ///
+ /// Arbitrary key-value metadata attached to the transfer.
+ ///
+ [JsonPropertyName("values")]
+ [Required]
+ public System.Collections.Generic.IDictionary Values { get; set; } = null!;
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/TransferObject.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/TransferObject.cs
new file mode 100644
index 0000000..b3cdf52
--- /dev/null
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/TransferObject.cs
@@ -0,0 +1,78 @@
+//
+// Generated from OpenAPI components by generate-components-cs.py
+//
+
+#nullable enable
+
+using System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
+using System.Text.Json.Serialization;
+
+namespace Trakx.Canton.ApiClient.Contracts.Utilities
+{
+ ///
+ /// The transfer payload containing transaction details known only to the sender and receiver.
+ ///
+ [GeneratedCode("OpenAPIComponentsGen", "1.0.0")]
+ public partial class TransferObject
+ {
+ ///
+ /// The party ID of the transfer sender.
+ ///
+ [JsonPropertyName("sender")]
+ [Required]
+ public string Sender { get; set; } = null!;
+
+ ///
+ /// The party ID of the transfer receiver.
+ ///
+ [JsonPropertyName("receiver")]
+ [Required]
+ public string Receiver { get; set; } = null!;
+
+ ///
+ /// The transfer amount as a decimal string.
+ ///
+ [JsonPropertyName("amount")]
+ [Required]
+ public string Amount { get; set; } = null!;
+
+ ///
+ ///
+ [JsonPropertyName("instrumentId")]
+ [Required]
+ public InstrumentId InstrumentId { get; set; } = null!;
+
+ ///
+ /// The timestamp when the transfer was requested.
+ ///
+ [JsonPropertyName("requestedAt")]
+ [Required]
+ public DateTimeOffset RequestedAt { get; set; }
+
+ ///
+ /// The deadline by which the transfer must be executed.
+ ///
+ [JsonPropertyName("executeBefore")]
+ [Required]
+ public DateTimeOffset ExecuteBefore { get; set; }
+
+ ///
+ /// Contract IDs of the holdings used as inputs for the transfer.
+ ///
+ [JsonPropertyName("inputHoldingCids")]
+ [Required]
+ public System.Collections.Generic.IList InputHoldingCids { get; set; } = new List();
+
+ ///
+ ///
+ [JsonPropertyName("meta")]
+ [Required]
+ public TransferMeta Meta { get; set; } = null!;
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/TransferProofStatus.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/TransferProofStatus.cs
new file mode 100644
index 0000000..3b089ad
--- /dev/null
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/TransferProofStatus.cs
@@ -0,0 +1,42 @@
+//
+// Generated from OpenAPI components by generate-components-cs.py
+//
+
+#nullable enable
+
+using System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
+using System.Text.Json.Serialization;
+
+namespace Trakx.Canton.ApiClient.Contracts.Utilities
+{
+ ///
+ /// The status of the transfer proof verification:
+ ///
+ /// - `Success`: The proof is verified and the transfer was successfully concluded
+ /// - `Failure`: The proof is verified, but the transfer did not successfully conclude.
+ /// - `Pending`: The transaction is still in progress (e.g., a transfer offer has been sent but not yet accepted in a two-step flow).
+ ///
+ ///
+ [GeneratedCode("OpenAPIComponentsGen", "1.0.0")]
+ [JsonConverter(typeof(JsonStringEnumConverter))]
+ public enum TransferProofStatus
+ {
+ ///
+ ///
+ [EnumMember(Value = "Success")]
+ Success = 0,
+ ///
+ ///
+ [EnumMember(Value = "Failure")]
+ Failure = 1,
+ ///
+ ///
+ [EnumMember(Value = "Pending")]
+ Pending = 2,
+ }
+
+}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/VerifyTransferProofRequest.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/VerifyTransferProofRequest.cs
new file mode 100644
index 0000000..f8534a9
--- /dev/null
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/VerifyTransferProofRequest.cs
@@ -0,0 +1,37 @@
+//
+// Generated from OpenAPI components by generate-components-cs.py
+//
+
+#nullable enable
+
+using System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
+using System.Text.Json.Serialization;
+
+namespace Trakx.Canton.ApiClient.Contracts.Utilities
+{
+ ///
+ /// Request to verify the outcome of a transfer of Registry Utility assets on Canton.
+ ///
+ [GeneratedCode("OpenAPIComponentsGen", "1.0.0")]
+ public partial class VerifyTransferProofRequest
+ {
+ ///
+ /// For the two-step transfer workflow, specifies the most recent UpdateId. If the transfer has completed its second step (accept, reject, or withdraw), use the UpdateId associated with that action. Otherwise, use the UpdateId from the initial transfer offer.
+ ///
+ [JsonPropertyName("updateId")]
+ [Required]
+ public string UpdateId { get; set; } = null!;
+
+ ///
+ ///
+ [JsonPropertyName("transfer")]
+ [Required]
+ public TransferObject Transfer { get; set; } = null!;
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/VerifyTransferProofResponse.cs b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/VerifyTransferProofResponse.cs
new file mode 100644
index 0000000..8fa6127
--- /dev/null
+++ b/src/Trakx.Canton.ApiClient/Generated/Contracts/Utilities/VerifyTransferProofResponse.cs
@@ -0,0 +1,30 @@
+//
+// Generated from OpenAPI components by generate-components-cs.py
+//
+
+#nullable enable
+
+using System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
+using System.Text.Json.Serialization;
+
+namespace Trakx.Canton.ApiClient.Contracts.Utilities
+{
+ ///
+ /// The outcome of verifying a transfer proof.
+ ///
+ [GeneratedCode("OpenAPIComponentsGen", "1.0.0")]
+ public partial class VerifyTransferProofResponse
+ {
+ ///
+ ///
+ [JsonPropertyName("status")]
+ [Required]
+ public TransferProofStatus Status { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/IScanStreamServerClient.cs b/src/Trakx.Canton.ApiClient/Generated/IScanStreamServerClient.cs
new file mode 100644
index 0000000..af1ad54
--- /dev/null
+++ b/src/Trakx.Canton.ApiClient/Generated/IScanStreamServerClient.cs
@@ -0,0 +1,50 @@
+//
+// This code was generated by Refitter.
+//
+
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+using System.Threading;
+using System.Threading.Tasks;
+using Refit;
+using Trakx.Canton.ApiClient.Contracts.Splice;
+using Version = Trakx.Canton.ApiClient.Contracts.Splice.Version;
+
+#nullable enable annotations
+
+namespace Trakx.Canton.ApiClient
+{
+ /// Scan Streaming API
+ [System.CodeDom.Compiler.GeneratedCode("Refitter", "1.6.4.0")]
+ [ApiRouteSuffix("/scan")]
+ public partial interface IScanStreamServerClient : ICantonApiClientBase
+ {
+ /// Download a bulk storage object
+ ///
+ ///
+ ///
+ /// A representing the instance containing the result:
+ ///
+ ///
+ /// Status
+ /// Description
+ ///
+ /// -
+ /// 200
+ /// ok
+ ///
+ /// -
+ /// 404
+ /// not found
+ ///
+ ///
+ ///
+ [Headers("Accept: application/octet-stream")]
+ [Get("/v0/history/bulk/download/{object_key}")]
+ Task> BulkStorageDownload(string object_key, CancellationToken cancellationToken = default);
+
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/Generated/IUtilitiesClient.cs b/src/Trakx.Canton.ApiClient/Generated/IUtilitiesClient.cs
index 90251b4..77aad2a 100644
--- a/src/Trakx.Canton.ApiClient/Generated/IUtilitiesClient.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/IUtilitiesClient.cs
@@ -480,6 +480,49 @@ public partial interface IUtilitiesClient : ICantonApiClientBase
[Post("/api/utilities/v0/registry/burn-mint-instruction/v0/burn-mint-factory")]
Task> GetBurnMintFactory([Body] GetBurnMintFactoryRequest body, CancellationToken cancellationToken = default);
+ ///
+ /// Verify the outcome of a transfer of Registry Utility assets on Canton.
+ ///
+ /// Given an UpdateID and a Transfer Object, the service looks up the corresponding
+ /// ledger transaction and verifies the transfer details against the on-chain events.
+ ///
+ /// The response status indicates the transfer outcome:
+ /// - `Success`: The transfer was executed in the referenced transaction
+ /// - `Pending`: The transfer instruction has been created but not yet settled
+ /// - `Failure`: The transfer instruction was rejected or withdrawn by one of the parties
+ ///
+ /// If none of the above conditions are met, if the provided transfer details do not match
+ /// the on-chain data, or if the original TransferInstruction contract cannot be retrieved,
+ /// a `400` is returned. No further diagnostic information is included in
+ /// the error response to prevent unintended disclosure of sensitive ledger data.
+ ///
+ ///
+ ///
+ ///
+ /// A representing the instance containing the result:
+ ///
+ ///
+ /// Status
+ /// Description
+ ///
+ /// -
+ /// 200
+ /// Transfer proof verified. The `status` field indicates the transfer outcome\n(`Success`, `Pending`, or `Failure`). See the endpoint description for details.\n
+ ///
+ /// -
+ /// 400
+ /// bad request
+ ///
+ /// -
+ /// 500
+ /// Internal server error
+ ///
+ ///
+ ///
+ [Headers("Accept: application/json", "Content-Type: application/json")]
+ [Post("/api/utilities/v0/registry/transfer/v0/proof")]
+ Task> VerifyTransferProof([Body] VerifyTransferProofRequest body, CancellationToken cancellationToken = default);
+
}
diff --git a/src/Trakx.Canton.ApiClient/Generated/IValidatorInternalClient.cs b/src/Trakx.Canton.ApiClient/Generated/IValidatorInternalClient.cs
index 4955ac9..3f57f77 100644
--- a/src/Trakx.Canton.ApiClient/Generated/IValidatorInternalClient.cs
+++ b/src/Trakx.Canton.ApiClient/Generated/IValidatorInternalClient.cs
@@ -339,7 +339,7 @@ public partial interface IValidatorInternalClient : ICantonApiClientBase
Task> ListTransferPreapprovals(CancellationToken cancellationToken = default);
///
- /// Prepare a transaction to create a TransferCommand with the given CC amount to the specified receiver
+ /// **Deprecated**. Prepare a transaction to create a TransferCommand with the given CC amount to the specified receiver
/// from the externally hosted sender.
/// The transaction then needs to be signed and submitted through
/// /v0/admin/external-party/transfer-preapproval/submit-send.
@@ -371,12 +371,13 @@ public partial interface IValidatorInternalClient : ICantonApiClientBase
///
///
///
+ [System.Obsolete]
[Headers("Accept: application/json", "Content-Type: application/json")]
[Post("/v0/admin/external-party/transfer-preapproval/prepare-send")]
Task> PrepareTransferPreapprovalSend([Body] PrepareTransferPreapprovalSendRequest body, CancellationToken cancellationToken = default);
///
- /// Submit transaction generated by /v0/admin/transfer-preapproval/prepare-send
+ /// **Deprecated**. Submit transaction generated by /v0/admin/transfer-preapproval/prepare-send
/// together with its signature. Note that this only waits until the TransferCommand is created.
/// The actual transfer will happen afterwards through automation run by the SVs.
///
@@ -407,6 +408,7 @@ public partial interface IValidatorInternalClient : ICantonApiClientBase
///
///
///
+ [System.Obsolete]
[Headers("Accept: application/json", "Content-Type: application/json")]
[Post("/v0/admin/external-party/transfer-preapproval/submit-send")]
Task> SubmitTransferPreapprovalSend([Body] SubmitTransferPreapprovalSendRequest body, CancellationToken cancellationToken = default);
diff --git a/src/Trakx.Canton.ApiClient/OpenApiSpecs/common-internal.yaml b/src/Trakx.Canton.ApiClient/OpenApiSpecs/common-internal.yaml
index 41f2f6a..cd40510 100644
--- a/src/Trakx.Canton.ApiClient/OpenApiSpecs/common-internal.yaml
+++ b/src/Trakx.Canton.ApiClient/OpenApiSpecs/common-internal.yaml
@@ -342,10 +342,9 @@ components:
If absent or `null`, there are no more pages.
FeatureSupportResponse:
type: object
- required:
- - no_holding_fees_on_transfers
+ required: []
properties:
- no_holding_fees_on_transfers:
+ dummy:
type: boolean
Contract:
type: object
diff --git a/src/Trakx.Canton.ApiClient/OpenApiSpecs/ledger-async.yaml b/src/Trakx.Canton.ApiClient/OpenApiSpecs/ledger-async.yaml
index bf109a1..176678d 100644
--- a/src/Trakx.Canton.ApiClient/OpenApiSpecs/ledger-async.yaml
+++ b/src/Trakx.Canton.ApiClient/OpenApiSpecs/ledger-async.yaml
@@ -213,6 +213,8 @@ components:
description: 'A completion represents the status of a submitted command on the
ledger: it can be successful or failed.'
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/Completion1'
@@ -311,6 +313,34 @@ components:
- for successful/failed assign commands: identifies the target synchronizer
Required
+ paidTrafficCost:
+ description: |-
+ The traffic cost paid by this participant node for the confirmation request
+ for the submitted command.
+
+ Commands whose execution is rejected before their corresponding
+ confirmation request is ordered by the synchronizer will report a paid
+ traffic cost of zero.
+ If a confirmation request is ordered for a command, but the request fails
+ (e.g., due to contention with a concurrent contract archival), the traffic
+ cost is paid and reported on the failed completion for the request.
+
+ If you want to correlate the traffic cost of a successful completion
+ with the transaction that resulted from the command, you can use the
+ ``offset`` field to retrieve the transaction using
+ ``UpdateService.GetUpdateByOffset`` on the same participant node; or alternatively use the ``update_id``
+ field to retrieve the transaction using ``UpdateService.GetUpdateById`` on any participant node
+ that sees the transaction.
+
+ Note: for completions processed before the participant started serving
+ traffic cost on the Ledger API, this field will be set to zero.
+ Additionally, the total cost incurred by the submitting node for the submission of the transaction may be greater
+ than the reported cost, for example if retries were issued due to failed submissions to the synchronizer.
+ The cost reported here is the one paid for ordering the confirmation request.
+
+ Optional
+ type: integer
+ format: int64
JsStatus:
title: JsStatus
type: object
@@ -479,6 +509,8 @@ components:
- detect time out of commands.
- provide an offset which can be used to restart consumption.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/OffsetCheckpoint1'
@@ -647,6 +679,8 @@ components:
title: InterfaceFilter
description: This filter matches contracts that implement a specific interface.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/InterfaceFilter1'
@@ -686,6 +720,8 @@ components:
title: TemplateFilter
description: This filter matches contracts of a specific template.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/TemplateFilter1'
@@ -718,6 +754,8 @@ components:
title: WildcardFilter
description: This filter matches all templates.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/WildcardFilter1'
@@ -1419,6 +1457,8 @@ components:
- detect time out of commands.
- provide an offset which can be used to restart consumption.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/OffsetCheckpoint1'
@@ -1426,6 +1466,8 @@ components:
title: Reassignment
description: Complete view of an on-ledger reassignment.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsReassignment'
@@ -1505,6 +1547,19 @@ components:
Required
type: string
+ paidTrafficCost:
+ description: |-
+ The traffic cost that this participant node paid for the corresponding (un)assignment request.
+
+ Not set for transactions that were
+ - initiated by another participant
+ - initiated offline via the repair service
+ - processed before the participant started serving traffic cost on the Ledger API
+ - returned as part of a query filtering for a non submitting party
+
+ Optional: can be empty
+ type: integer
+ format: int64
JsReassignmentEvent:
title: JsReassignmentEvent
oneOf:
@@ -1549,12 +1604,16 @@ components:
description: Records that a contract has been unassigned, and it becomes unusable
on the source synchronizer
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/UnassignedEvent'
TopologyTransaction:
title: TopologyTransaction
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsTopologyTransaction'
@@ -1659,6 +1718,8 @@ components:
ParticipantAuthorizationAdded:
title: ParticipantAuthorizationAdded
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/ParticipantAuthorizationAdded1'
@@ -1687,6 +1748,8 @@ components:
ParticipantAuthorizationChanged:
title: ParticipantAuthorizationChanged
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/ParticipantAuthorizationChanged1'
@@ -1715,6 +1778,8 @@ components:
ParticipantAuthorizationRevoked:
title: ParticipantAuthorizationRevoked
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/ParticipantAuthorizationRevoked1'
@@ -1736,6 +1801,8 @@ components:
description: Filtered view of an on-ledger transaction's create and archive
events.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsTransaction'
@@ -1834,6 +1901,20 @@ components:
Optional: can be empty
type: string
+ paidTrafficCost:
+ description: |-
+ The traffic cost that this participant node paid for the confirmation
+ request for this transaction.
+
+ Not set for transactions that were
+ - initiated by another participant
+ - initiated offline via the repair service
+ - processed before the participant started serving traffic cost on the Ledger API
+ - returned as part of a query filtering for a non submitting party
+
+ Optional: can be empty
+ type: integer
+ format: int64
Event:
title: Event
description: |-
@@ -2140,6 +2221,8 @@ components:
- detect time out of commands.
- provide an offset which can be used to restart consumption.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/OffsetCheckpoint1'
@@ -2147,6 +2230,8 @@ components:
title: Reassignment
description: Complete view of an on-ledger reassignment.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsReassignment'
@@ -2156,6 +2241,8 @@ components:
Provided for backwards compatibility, it will be removed in the Canton version 3.5.0.
Complete view of an on-ledger transaction.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsTransactionTree'
diff --git a/src/Trakx.Canton.ApiClient/OpenApiSpecs/ledger.yaml b/src/Trakx.Canton.ApiClient/OpenApiSpecs/ledger.yaml
index 31c66a1..d9d8585 100644
--- a/src/Trakx.Canton.ApiClient/OpenApiSpecs/ledger.yaml
+++ b/src/Trakx.Canton.ApiClient/OpenApiSpecs/ledger.yaml
@@ -2391,6 +2391,8 @@ components:
title: AssignCommand
description: Assign a contract
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/AssignCommand1'
@@ -2551,6 +2553,8 @@ components:
description: 'A completion represents the status of a submitted command on the
ledger: it can be successful or failed.'
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/Completion1'
@@ -2649,6 +2653,34 @@ components:
- for successful/failed assign commands: identifies the target synchronizer
Required
+ paidTrafficCost:
+ description: |-
+ The traffic cost paid by this participant node for the confirmation request
+ for the submitted command.
+
+ Commands whose execution is rejected before their corresponding
+ confirmation request is ordered by the synchronizer will report a paid
+ traffic cost of zero.
+ If a confirmation request is ordered for a command, but the request fails
+ (e.g., due to contention with a concurrent contract archival), the traffic
+ cost is paid and reported on the failed completion for the request.
+
+ If you want to correlate the traffic cost of a successful completion
+ with the transaction that resulted from the command, you can use the
+ ``offset`` field to retrieve the transaction using
+ ``UpdateService.GetUpdateByOffset`` on the same participant node; or alternatively use the ``update_id``
+ field to retrieve the transaction using ``UpdateService.GetUpdateById`` on any participant node
+ that sees the transaction.
+
+ Note: for completions processed before the participant started serving
+ traffic cost on the Ledger API, this field will be set to zero.
+ Additionally, the total cost incurred by the submitting node for the submission of the transaction may be greater
+ than the reported cost, for example if retries were issued due to failed submissions to the synchronizer.
+ The cost reported here is the one paid for ordering the confirmation request.
+
+ Optional
+ type: integer
+ format: int64
CompletionResponse:
title: CompletionResponse
description: Required
@@ -4498,6 +4530,8 @@ components:
title: InterfaceFilter
description: This filter matches contracts that implement a specific interface.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/InterfaceFilter1'
@@ -5480,6 +5514,19 @@ components:
Required
type: string
+ paidTrafficCost:
+ description: |-
+ The traffic cost that this participant node paid for the corresponding (un)assignment request.
+
+ Not set for transactions that were
+ - initiated by another participant
+ - initiated offline via the repair service
+ - processed before the participant started serving traffic cost on the Ledger API
+ - returned as part of a query filtering for a non submitting party
+
+ Optional: can be empty
+ type: integer
+ format: int64
JsReassignmentEvent:
title: JsReassignmentEvent
oneOf:
@@ -5723,6 +5770,20 @@ components:
Optional: can be empty
type: string
+ paidTrafficCost:
+ description: |-
+ The traffic cost that this participant node paid for the confirmation
+ request for this transaction.
+
+ Not set for transactions that were
+ - initiated by another participant
+ - initiated offline via the repair service
+ - processed before the participant started serving traffic cost on the Ledger API
+ - returned as part of a query filtering for a non submitting party
+
+ Optional: can be empty
+ type: integer
+ format: int64
JsTransactionTree:
title: JsTransactionTree
description: |-
@@ -5801,6 +5862,8 @@ components:
description: Records that a contract has been unassigned, and it becomes unusable
on the source synchronizer
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/UnassignedEvent'
@@ -6112,6 +6175,8 @@ components:
- detect time out of commands.
- provide an offset which can be used to restart consumption.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/OffsetCheckpoint1'
@@ -6150,6 +6215,8 @@ components:
- detect time out of commands.
- provide an offset which can be used to restart consumption.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/OffsetCheckpoint1'
@@ -6161,6 +6228,8 @@ components:
- detect time out of commands.
- provide an offset which can be used to restart consumption.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/OffsetCheckpoint1'
@@ -6316,6 +6385,8 @@ components:
ParticipantAuthorizationAdded:
title: ParticipantAuthorizationAdded
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/ParticipantAuthorizationAdded1'
@@ -6344,6 +6415,8 @@ components:
ParticipantAuthorizationChanged:
title: ParticipantAuthorizationChanged
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/ParticipantAuthorizationChanged1'
@@ -6372,6 +6445,8 @@ components:
ParticipantAuthorizationRevoked:
title: ParticipantAuthorizationRevoked
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/ParticipantAuthorizationRevoked1'
@@ -6527,6 +6602,8 @@ components:
title: Reassignment
description: Complete view of an on-ledger reassignment.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsReassignment'
@@ -6534,6 +6611,8 @@ components:
title: Reassignment
description: Complete view of an on-ledger reassignment.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsReassignment'
@@ -6845,6 +6924,8 @@ components:
title: TemplateFilter
description: This filter matches contracts of a specific template.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/TemplateFilter1'
@@ -6979,6 +7060,8 @@ components:
TopologyTransaction:
title: TopologyTransaction
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsTopologyTransaction'
@@ -6999,6 +7082,8 @@ components:
description: Filtered view of an on-ledger transaction's create and archive
events.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsTransaction'
@@ -7057,6 +7142,8 @@ components:
Provided for backwards compatibility, it will be removed in the Canton version 3.5.0.
Complete view of an on-ledger transaction.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/JsTransactionTree'
@@ -7095,6 +7182,8 @@ components:
title: UnassignCommand
description: Unassign a contract
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/UnassignCommand1'
@@ -7836,6 +7925,8 @@ components:
title: WildcardFilter
description: This filter matches all templates.
type: object
+ required:
+ - value
properties:
value:
$ref: '#/components/schemas/WildcardFilter1'
diff --git a/src/Trakx.Canton.ApiClient/OpenApiSpecs/scan-stream-server.yaml b/src/Trakx.Canton.ApiClient/OpenApiSpecs/scan-stream-server.yaml
new file mode 100644
index 0000000..0524fb5
--- /dev/null
+++ b/src/Trakx.Canton.ApiClient/OpenApiSpecs/scan-stream-server.yaml
@@ -0,0 +1,61 @@
+openapi: 3.0.0
+info:
+ title: Scan Streaming API
+ version: 0.0.1
+servers:
+ - url: https://example.com/api/scan
+tags:
+ - name: external
+ description: |
+ These endpoints are intended for public usage and will remain backward-compatible.
+ - name: internal
+ description: |
+ For internal usage only, not guaranteed to be stable or backward-compatible.
+ - name: deprecated
+ description: |
+ These endpoints are deprecated and will be removed in a future release.
+ - name: scan
+ description: |
+ The internal and external endpoints.
+paths:
+ /v0/history/bulk/download/{object_key}:
+ get:
+ tags:
+ - external
+ - scan
+ x-jvm-package: scanStream
+ operationId: bulkStorageDownload
+ description: Download a bulk storage object
+ parameters:
+ - name: object_key
+ in: path
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: ok
+ content:
+ application/octet-stream:
+ schema:
+ type: string
+ format: binary
+ x-scala-type: org.apache.pekko.http.scaladsl.model.ResponseEntity
+ '404':
+ $ref: '#/components/responses/404'
+components:
+ schemas:
+ ErrorResponse:
+ type: object
+ required:
+ - error
+ properties:
+ error:
+ type: string
+ responses:
+ '404':
+ description: not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
diff --git a/src/Trakx.Canton.ApiClient/OpenApiSpecs/scan.yaml b/src/Trakx.Canton.ApiClient/OpenApiSpecs/scan.yaml
index 4205d5c..c842a99 100644
--- a/src/Trakx.Canton.ApiClient/OpenApiSpecs/scan.yaml
+++ b/src/Trakx.Canton.ApiClient/OpenApiSpecs/scan.yaml
@@ -4325,10 +4325,9 @@ components:
type: object
FeatureSupportResponse:
type: object
- required:
- - no_holding_fees_on_transfers
+ required: []
properties:
- no_holding_fees_on_transfers:
+ dummy:
type: boolean
responses:
'400':
diff --git a/src/Trakx.Canton.ApiClient/OpenApiSpecs/sv-internal.yaml b/src/Trakx.Canton.ApiClient/OpenApiSpecs/sv-internal.yaml
index 54f12aa..93d4fc6 100644
--- a/src/Trakx.Canton.ApiClient/OpenApiSpecs/sv-internal.yaml
+++ b/src/Trakx.Canton.ApiClient/OpenApiSpecs/sv-internal.yaml
@@ -1605,10 +1605,9 @@ components:
type: string
FeatureSupportResponse:
type: object
- required:
- - no_holding_fees_on_transfers
+ required: []
properties:
- no_holding_fees_on_transfers:
+ dummy:
type: boolean
responses:
'400':
diff --git a/src/Trakx.Canton.ApiClient/OpenApiSpecs/utilities.yaml b/src/Trakx.Canton.ApiClient/OpenApiSpecs/utilities.yaml
index 0d631a4..b2fc3a3 100644
--- a/src/Trakx.Canton.ApiClient/OpenApiSpecs/utilities.yaml
+++ b/src/Trakx.Canton.ApiClient/OpenApiSpecs/utilities.yaml
@@ -392,6 +392,46 @@ paths:
"500":
$ref: "#/components/responses/500"
+ /api/utilities/v0/registry/transfer/v0/proof:
+ post:
+ tags: [registry]
+ operationId: "verifyTransferProof"
+ x-jvm-package: registry
+ description: |
+ Verify the outcome of a transfer of Registry Utility assets on Canton.
+
+ Given an UpdateID and a Transfer Object, the service looks up the corresponding
+ ledger transaction and verifies the transfer details against the on-chain events.
+
+ The response status indicates the transfer outcome:
+ - `Success`: The transfer was executed in the referenced transaction
+ - `Pending`: The transfer instruction has been created but not yet settled
+ - `Failure`: The transfer instruction was rejected or withdrawn by one of the parties
+
+ If none of the above conditions are met, if the provided transfer details do not match
+ the on-chain data, or if the original TransferInstruction contract cannot be retrieved,
+ a `400` is returned. No further diagnostic information is included in
+ the error response to prevent unintended disclosure of sensitive ledger data.
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/VerifyTransferProofRequest"
+ responses:
+ "200":
+ description: |
+ Transfer proof verified. The `status` field indicates the transfer outcome
+ (`Success`, `Pending`, or `Failure`). See the endpoint description for details.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/VerifyTransferProofResponse"
+ "400":
+ $ref: "#/components/responses/400"
+ "500":
+ $ref: "#/components/responses/500"
+
components:
responses:
"400":
@@ -783,4 +823,94 @@ components:
type: string
id:
description: "The unique identifier of the instrument."
- type: string
\ No newline at end of file
+ type: string
+
+ VerifyTransferProofRequest:
+ description: "Request to verify the outcome of a transfer of Registry Utility assets on Canton."
+ type: object
+ required:
+ - updateId
+ - transfer
+ properties:
+ updateId:
+ description: |
+ For the two-step transfer workflow, specifies the most recent UpdateId.
+ If the transfer has completed its second step (accept, reject, or withdraw),
+ use the UpdateId associated with that action. Otherwise, use the UpdateId from the initial transfer offer.
+ type: string
+ transfer:
+ $ref: "#/components/schemas/TransferObject"
+
+ TransferObject:
+ description: "The transfer payload containing transaction details known only to the sender and receiver."
+ type: object
+ required:
+ - sender
+ - receiver
+ - amount
+ - instrumentId
+ - requestedAt
+ - executeBefore
+ - inputHoldingCids
+ - meta
+ properties:
+ sender:
+ description: "The party ID of the transfer sender."
+ type: string
+ receiver:
+ description: "The party ID of the transfer receiver."
+ type: string
+ amount:
+ description: "The transfer amount as a decimal string."
+ type: string
+ example: "1.0000000000"
+ instrumentId:
+ $ref: "#/components/schemas/InstrumentId"
+ requestedAt:
+ description: "The timestamp when the transfer was requested."
+ type: string
+ format: date-time
+ executeBefore:
+ description: "The deadline by which the transfer must be executed."
+ type: string
+ format: date-time
+ inputHoldingCids:
+ description: "Contract IDs of the holdings used as inputs for the transfer."
+ type: array
+ items:
+ type: string
+ meta:
+ $ref: "#/components/schemas/TransferMeta"
+
+ TransferMeta:
+ description: "Additional metadata associated with the transfer."
+ type: object
+ required:
+ - values
+ properties:
+ values:
+ description: "Arbitrary key-value metadata attached to the transfer."
+ type: object
+ additionalProperties:
+ type: string
+
+ VerifyTransferProofResponse:
+ description: "The outcome of verifying a transfer proof."
+ type: object
+ required:
+ - status
+ properties:
+ status:
+ $ref: "#/components/schemas/TransferProofStatus"
+
+ TransferProofStatus:
+ description: |
+ The status of the transfer proof verification:
+ - `Success`: The proof is verified and the transfer was successfully concluded
+ - `Failure`: The proof is verified, but the transfer did not successfully conclude.
+ - `Pending`: The transaction is still in progress (e.g., a transfer offer has been sent but not yet accepted in a two-step flow).
+ type: string
+ enum:
+ - Success
+ - Failure
+ - Pending
\ No newline at end of file
diff --git a/src/Trakx.Canton.ApiClient/OpenApiSpecs/validator-internal.yaml b/src/Trakx.Canton.ApiClient/OpenApiSpecs/validator-internal.yaml
index 9114c62..027a40a 100644
--- a/src/Trakx.Canton.ApiClient/OpenApiSpecs/validator-internal.yaml
+++ b/src/Trakx.Canton.ApiClient/OpenApiSpecs/validator-internal.yaml
@@ -298,10 +298,11 @@ paths:
post:
tags:
- validator
+ deprecated: true
x-jvm-package: validator_admin
operationId: prepareTransferPreapprovalSend
description: |
- Prepare a transaction to create a TransferCommand with the given CC amount to the specified receiver
+ **Deprecated**. Prepare a transaction to create a TransferCommand with the given CC amount to the specified receiver
from the externally hosted sender.
The transaction then needs to be signed and submitted through
/v0/admin/external-party/transfer-preapproval/submit-send.
@@ -330,10 +331,11 @@ paths:
post:
tags:
- validator
+ deprecated: true
x-jvm-package: validator_admin
operationId: submitTransferPreapprovalSend
description: |
- Submit transaction generated by /v0/admin/transfer-preapproval/prepare-send
+ **Deprecated**. Submit transaction generated by /v0/admin/transfer-preapproval/prepare-send
together with its signature. Note that this only waits until the TransferCommand is created.
The actual transfer will happen afterwards through automation run by the SVs.
security:
diff --git a/src/Trakx.Canton.ApiClient/OpenApiSpecs/wallet-internal.yaml b/src/Trakx.Canton.ApiClient/OpenApiSpecs/wallet-internal.yaml
index 1f9a7bd..4262c79 100644
--- a/src/Trakx.Canton.ApiClient/OpenApiSpecs/wallet-internal.yaml
+++ b/src/Trakx.Canton.ApiClient/OpenApiSpecs/wallet-internal.yaml
@@ -1645,14 +1645,11 @@ components:
required:
- token_standard
- transfer_preapproval_description
- - no_holding_fees_on_transfers
properties:
token_standard:
type: boolean
transfer_preapproval_description:
type: boolean
- no_holding_fees_on_transfers:
- type: boolean
AllocateAmuletRequest:
type: object
required:
diff --git a/tests/Trakx.Canton.ApiClient.Tests/Configuration/CantonApiClientConfigurationTests.cs b/tests/Trakx.Canton.ApiClient.Tests/Configuration/CantonApiClientConfigurationTests.cs
index 3afb51b..3359b04 100644
--- a/tests/Trakx.Canton.ApiClient.Tests/Configuration/CantonApiClientConfigurationTests.cs
+++ b/tests/Trakx.Canton.ApiClient.Tests/Configuration/CantonApiClientConfigurationTests.cs
@@ -22,6 +22,7 @@ public class CantonApiClientConfigurationTests
[InlineData(typeof(IAnsExternalClient), $"{SpliceApiUrl}/validator")]
[InlineData(typeof(IScanClient), $"{SpliceApiUrl}/scan")]
[InlineData(typeof(IScanProxyClient), $"{SpliceApiUrl}/validator")]
+ [InlineData(typeof(IScanStreamServerClient), $"{SpliceApiUrl}/scan")]
[InlineData(typeof(ISplitwellInternalClient), $"{SpliceApiUrl}/splitwell")]
[InlineData(typeof(ISvInternalClient), $"{SpliceApiUrl}/sv")]
[InlineData(typeof(ITokenMetadataV1Client), TokenStandardApiUrl)]