/*
* JSON Ledger API HTTP endpoints
*
* This specification version fixes the API inconsistencies where certain fields marked as required in the spec are in fact optional. If you use code generation tool based on this file, you might need to adjust the existing application code to handle those fields as optional. If you do not want to change your client code, continue using the OpenAPI specification for the latest Canton 3.4 patch release. MINIMUM_CANTON_VERSION=3.6.0
*
* The version of the OpenAPI document: 3.6.0-SNAPSHOT
*
* Generated by: https://openapi-generator.tech
*/
use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct JsPrepareSubmissionRequest {
/// Uniquely identifies the participant user that prepares the transaction. Must be a valid UserIdString (as described in ``value.proto``). Required unless authentication is used with a user token. In that case, the token's user-id will be used for the request's user_id. Optional
#[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
/// Uniquely identifies the command. The triple (user_id, act_as, command_id) constitutes the change ID for the intended ledger change, where act_as is interpreted as a set of party names. The change ID can be used for matching the intended ledger changes with all their completions. Must be a valid LedgerString (as described in ``value.proto``). Required
#[serde(rename = "commandId")]
pub command_id: String,
/// Individual elements of this atomic command. Must be non-empty. Limitation: Only single command transaction are currently supported by the API. The field is marked as repeated in preparation for future support of multiple commands. Required: must be non-empty
#[serde(rename = "commands")]
pub commands: Vec<models::Command>,
#[serde(rename = "minLedgerTime", skip_serializing_if = "Option::is_none")]
pub min_ledger_time: Option<Box<models::MinLedgerTime>>,
/// Set of parties on whose behalf the command should be executed, if submitted. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to **read** (not act) on behalf of each of the given parties. This is because this RPC merely prepares a transaction and does not execute it. Therefore read authorization is sufficient even for actAs parties. Note: This may change, and more specific authorization scope may be introduced in the future. Each element must be a valid PartyIdString (as described in ``value.proto``). Required: must be non-empty
#[serde(rename = "actAs")]
pub act_as: Vec<String>,
/// Set of parties on whose behalf (in addition to all parties listed in ``act_as``) contracts can be retrieved. This affects Daml operations such as ``fetch``, ``fetchByKey``, ``lookupByKey``, ``exercise``, and ``exerciseByKey``. Note: A command can only use contracts that are visible to at least one of the parties in ``act_as`` or ``read_as``. This visibility check is independent from the Daml authorization rules for fetch operations. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to read contract data on behalf of each of the given parties. Optional: can be empty
#[serde(rename = "readAs", skip_serializing_if = "Option::is_none")]
pub read_as: Option<Vec<String>>,
/// Additional contracts used to resolve contract & contract key lookups. Optional: can be empty
#[serde(rename = "disclosedContracts", skip_serializing_if = "Option::is_none")]
pub disclosed_contracts: Option<Vec<models::DisclosedContract>>,
/// Must be a valid synchronizer id If not set, a suitable synchronizer that this node is connected to will be chosen Optional
#[serde(rename = "synchronizerId", skip_serializing_if = "Option::is_none")]
pub synchronizer_id: Option<String>,
/// The package-id selection preference of the client for resolving package names and interface instances in command submission and interpretation Optional: can be empty
#[serde(rename = "packageIdSelectionPreference", skip_serializing_if = "Option::is_none")]
pub package_id_selection_preference: Option<Vec<String>>,
/// When true, the response will contain additional details on how the transaction was encoded and hashed This can be useful for troubleshooting of hash mismatches. Should only be used for debugging. Defaults to false Optional
#[serde(rename = "verboseHashing", skip_serializing_if = "Option::is_none")]
pub verbose_hashing: Option<bool>,
/// Fetches the contract keys into the caches to speed up the command processing. Should only contain contract keys that are expected to be resolved during interpretation of the commands. Keys of disclosed contracts do not need prefetching. Optional: can be empty
#[serde(rename = "prefetchContractKeys", skip_serializing_if = "Option::is_none")]
pub prefetch_contract_keys: Option<Vec<models::PrefetchContractKey>>,
/// Maximum timestamp at which the transaction can be recorded onto the ledger via the synchronizer specified in the `PrepareSubmissionResponse`. If submitted after it will be rejected even if otherwise valid, in which case it needs to be prepared and signed again with a new valid max_record_time. Use this to limit the time-to-life of a prepared transaction, which is useful to know when it can definitely not be accepted anymore and resorting to preparing another transaction for the same intent is safe again. Optional
#[serde(rename = "maxRecordTime", skip_serializing_if = "Option::is_none")]
pub max_record_time: Option<String>,
#[serde(rename = "estimateTrafficCost", skip_serializing_if = "Option::is_none")]
pub estimate_traffic_cost: Option<Box<models::CostEstimationHints>>,
/// The maximum number of passes for the Topology-Aware Package Selection (TAPS). Higher values can increase the chance of successful package selection for routing of interpreted transactions. If unset, this defaults to the value defined in the participant configuration. The provided value must not exceed the limit specified in the participant configuration. Optional
#[serde(rename = "tapsMaxPasses", skip_serializing_if = "Option::is_none")]
pub taps_max_passes: Option<i32>,
/// The hashing scheme version to be used when building the hash. Defaults to HASHING_SCHEME_VERSION_V2. Optional
#[serde(rename = "hashingSchemeVersion", skip_serializing_if = "Option::is_none")]
pub hashing_scheme_version: Option<HashingSchemeVersion>,
}
impl JsPrepareSubmissionRequest {
pub fn new(command_id: String, commands: Vec<models::Command>, act_as: Vec<String>) -> JsPrepareSubmissionRequest {
JsPrepareSubmissionRequest {
user_id: None,
command_id,
commands,
min_ledger_time: None,
act_as,
read_as: None,
disclosed_contracts: None,
synchronizer_id: None,
package_id_selection_preference: None,
verbose_hashing: None,
prefetch_contract_keys: None,
max_record_time: None,
estimate_traffic_cost: None,
taps_max_passes: None,
hashing_scheme_version: None,
}
}
}
/// The hashing scheme version to be used when building the hash. Defaults to HASHING_SCHEME_VERSION_V2. Optional
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum HashingSchemeVersion {
#[serde(rename = "HASHING_SCHEME_VERSION_UNSPECIFIED")]
HashingSchemeVersionUnspecified,
#[serde(rename = "HASHING_SCHEME_VERSION_V2")]
HashingSchemeVersionV2,
#[serde(rename = "HASHING_SCHEME_VERSION_V3")]
HashingSchemeVersionV3,
}
impl Default for HashingSchemeVersion {
fn default() -> HashingSchemeVersion {
Self::HashingSchemeVersionUnspecified
}
}