Struct TransactionPayloadBuilder
pub struct TransactionPayloadBuilder { /* private fields */ }Expand description
Builder for constructing TransactionPayload instances.
This builder provides a fluent interface for constructing transaction payloads with required validation.
§Examples
use types::api::TransactionPayload;
let payload = TransactionPayload::builder()
.sender("0x2ade910d9b7a5afa4aaaab80cf90016bd3e1e7d126b5995bf232e07d1fb00081")
.nonce(1)
.chain_id("real-1")
.build()
.expect("Failed to build payload");Implementations§
§impl TransactionPayloadBuilder
impl TransactionPayloadBuilder
pub fn new() -> TransactionPayloadBuilder
pub fn new() -> TransactionPayloadBuilder
Creates a new TransactionPayloadBuilder with all fields initially unset.
pub fn owner<S>(self, owner: S) -> TransactionPayloadBuilder
pub fn owner<S>(self, owner: S) -> TransactionPayloadBuilder
Sets the owner address for the transaction payload.
The owner is the multisig address for multisig-owned transactions, or the
signing wallet’s address for direct (single-signer) transactions. It is
what is_valid_sender is checked against during command validation.
§Arguments
owner- Any value that can be converted to a String (blockchain address)
§Examples
use types::api::TransactionPayload;
let builder = TransactionPayload::builder()
.owner("0x2ade910d9b7a5afa4aaaab80cf90016bd3e1e7d126b5995bf232e07d1fb00081");pub fn sender<S>(self, sender: S) -> TransactionPayloadBuilder
pub fn sender<S>(self, sender: S) -> TransactionPayloadBuilder
Deprecated alias for owner — kept so existing callers using the v1 name
(SDK examples, external tests) keep compiling. New code should use owner.
pub fn nonce(self, nonce: u64) -> TransactionPayloadBuilder
pub fn nonce(self, nonce: u64) -> TransactionPayloadBuilder
Sets the nonce for replay protection.
Mint it as microseconds since the Unix epoch, freshly for every transaction. It is not a counter the client keeps: the sequencer holds a per-owner window of recently seen stamps and refuses one that is zero (410), older than the window (407), further ahead of its clock than the skew allowance (408), or already spent (409).
§Arguments
nonce- microseconds since the Unix epoch
§Examples
use std::time::{SystemTime, UNIX_EPOCH};
use types::api::TransactionPayload;
let now_us = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("system clock before the Unix epoch")
.as_micros() as u64;
let builder = TransactionPayload::builder()
.nonce(now_us);pub fn chain_id<S>(self, chain_id: S) -> TransactionPayloadBuilder
pub fn chain_id<S>(self, chain_id: S) -> TransactionPayloadBuilder
Sets the chain identifier.
The chain ID identifies which blockchain/network this transaction is intended for, preventing transactions from being replayed on different chains.
§Arguments
chain_id- Any value that can be converted to a String (e.g., “real-1”)
§Examples
use types::api::TransactionPayload;
let builder = TransactionPayload::builder()
.chain_id("real-1");pub fn command<C>(self, command: C) -> TransactionPayloadBuilder
pub fn command<C>(self, command: C) -> TransactionPayloadBuilder
Adds a single command to the transaction payload.
Commands are executed in the order they are added.
§Arguments
command- Any value that can be converted into a Command
§Examples
use types::api::{TransactionPayload, Command, CancelOrderRequest};
let builder = TransactionPayload::builder()
.command(Command::CancelOrder(
CancelOrderRequest::builder()
.account("0x123")
.market("0x123")
.build()
.expect("Failed to build cancel order")
));pub fn commands<I>(self, commands: I) -> TransactionPayloadBuilderwhere
I: IntoIterator<Item = Command>,
pub fn commands<I>(self, commands: I) -> TransactionPayloadBuilderwhere
I: IntoIterator<Item = Command>,
Adds multiple commands to the transaction payload.
Commands are executed in the order they appear in the iterator.
§Arguments
commands- An iterator of Command values
§Examples
use types::api::{TransactionPayload, Command, CancelOrderRequest};
let commands = vec![
Command::CancelOrder(
CancelOrderRequest::builder()
.account("0x123")
.market("0x123")
.build()
.expect("Failed to build")
),
];
let builder = TransactionPayload::builder()
.commands(commands);pub fn build(self) -> Result<TransactionPayload, TransactionPayloadBuilderError>
pub fn build(self) -> Result<TransactionPayload, TransactionPayloadBuilderError>
Builds the TransactionPayload from the configured builder.
This method validates that all required fields have been set and constructs
the final TransactionPayload instance.
§Returns
Ok(TransactionPayload)- Successfully built payloadErr(TransactionPayloadBuilderError)- Missing required field(s)
§Errors
Returns TransactionPayloadBuilderError::MissingField if:
noncehas not been setchain_idhas not been set- No commands have been added (at least one is required)
§Notes
The sender field is optional during building and defaults to an empty string
if not provided. This allows for payloads to be created before signing, where
the sender will be set automatically from the signing key.
§Examples
use types::api::{CancelOrderRequest, Command, TransactionPayload};
// at least one command is required — a payload with none is an error
let payload = TransactionPayload::builder()
.nonce(1_800_000_000_000_000)
.chain_id("real-1")
.command(Command::CancelOrder(
CancelOrderRequest::builder()
.account("0x123")
.market("0x123")
.build()
.expect("Failed to build cancel order"),
))
.build()
.expect("Failed to build payload");Trait Implementations§
§impl Debug for TransactionPayloadBuilder
impl Debug for TransactionPayloadBuilder
§impl Default for TransactionPayloadBuilder
impl Default for TransactionPayloadBuilder
§fn default() -> TransactionPayloadBuilder
fn default() -> TransactionPayloadBuilder
Auto Trait Implementations§
impl Freeze for TransactionPayloadBuilder
impl RefUnwindSafe for TransactionPayloadBuilder
impl Send for TransactionPayloadBuilder
impl Sync for TransactionPayloadBuilder
impl Unpin for TransactionPayloadBuilder
impl UnsafeUnpin for TransactionPayloadBuilder
impl UnwindSafe for TransactionPayloadBuilder
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
U: Sized,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
U: Sized,
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> InitializableFromZeroed for Twhere
T: Default,
impl<T> InitializableFromZeroed for Twhere
T: Default,
§unsafe fn initialize(place: *mut T)
unsafe fn initialize(place: *mut T)
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].impl<T> MaybeSend for Twhere
T: Send,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.