Skip to main content

PswapNote

Struct PswapNote 

Source
pub struct PswapNote { /* private fields */ }
Expand description

A partially-fillable swap note for decentralized asset exchange.

A PSWAP note allows a creator to offer one fungible asset in exchange for another. Unlike a regular SWAP note, consumers may fill it partially — the unfilled portion is re-created as a remainder note with an updated serial number, while the creator receives the filled portion via a payback note.

The note can be consumed both in local transactions (where the consumer provides fill amounts via note_args) and in network transactions (where note_args default to [0, 0, 0, 0], triggering a full fill). To route a PSWAP note to a network account, set the attachment to a NetworkAccountTarget via the builder.

Implementations§

Source§

impl PswapNote

Source

pub fn builder() -> PswapNoteBuilder

Create an instance of PswapNote using the builder syntax

Source§

impl PswapNote

Source

pub const NUM_STORAGE_ITEMS: usize = PswapNoteStorage::NUM_STORAGE_ITEMS

Expected number of storage items for the PSWAP note.

Source

pub const PSWAP_ATTACHMENT_SCHEME: NoteAttachmentScheme

Attachment scheme stamped on both PSWAP output notes (the payback P2ID and the remainder PSWAP).

Source

pub fn script() -> NoteScript

Returns the compiled PSWAP note script.

Source

pub fn script_root() -> NoteScriptRoot

Returns the root hash of the PSWAP note script.

Source

pub fn create_args(account_fill: u64, note_fill: u64) -> Result<Word, NoteError>

Builds the NOTE_ARGS word that the PSWAP script expects when a consumer wants to fill part of the swap:

[account_fill, note_fill, 0, 0]

  • account_fill is the portion of the requested asset the consumer pays out of their own vault.
  • note_fill is the portion sourced from another note in the same transaction (cross-swap / net-zero flow).

Both values are in the requested asset’s base units. In a network transaction the kernel defaults NOTE_ARGS to [0, 0, 0, 0] and the script falls back to a full fill, so this helper is only needed for local transactions where the consumer is choosing the fill split.

§Errors

Returns an error if either value exceeds the Goldilocks field size (i.e. cannot be represented as a Felt). In practice this cannot happen for any amount that fits in a FungibleAssetFungibleAsset::MAX_AMOUNT is comfortably below 2^63 — but the conversion is surfaced explicitly rather than hidden behind a panic.

Source

pub fn sender(&self) -> AccountId

Returns the account ID of the note sender.

Source

pub fn storage(&self) -> &PswapNoteStorage

Returns a reference to the PSWAP note storage.

Source

pub fn serial_number(&self) -> Word

Returns the serial number of this note.

Source

pub fn note_type(&self) -> NoteType

Returns the note type (public or private).

Source

pub fn offered_asset(&self) -> &FungibleAsset

Returns a reference to the offered FungibleAsset.

Source

pub fn attachments(&self) -> Option<&NoteAttachment>

Returns a reference to the note attachments.

For notes targeting a network account, this may contain a NetworkAccountTarget with scheme = 2. For a remainder PSWAP this contains the Self::PSWAP_ATTACHMENT_SCHEME word [amt_payout, order_id, depth, 0]. For an original PSWAP (no prior fill), this is typically empty.

Source

pub fn order_id(&self) -> Felt

Returns the order_id of this lineage, equal to serial_number()[1].

Source

pub fn parent_depth(&self) -> u64

Returns the depth carried in this note’s Self::PSWAP_ATTACHMENT_SCHEME attachment, or 0 if the note has no such attachment (i.e., it is the original PSWAP, not a remainder produced by an earlier fill).

The next round’s current_depth is computed as parent_depth() + 1, matching the on-chain get_current_depth MASM procedure.

Source

pub fn execute_full_fill( &self, consumer_account_id: AccountId, ) -> Result<Note, NoteError>

Executes the swap as a full fill, producing only the payback note (no remainder).

Equivalent to calling Self::execute with account_fill_asset set to the full requested amount and note_fill_asset = None. It also matches the on-chain behavior when a note is consumed without explicit note_args (e.g. in a network transaction, where the kernel defaults note_args to [0, 0, 0, 0] and the MASM script falls back to a full fill).

Source

pub fn execute( &self, consumer_account_id: AccountId, account_fill_asset: Option<FungibleAsset>, note_fill_asset: Option<FungibleAsset>, ) -> Result<(Note, Option<PswapNote>), NoteError>

Executes the swap, producing the output notes for a given fill.

account_fill_asset is debited from the consumer’s vault; note_fill_asset arrives from another note in the same transaction (cross-swap). At least one must be provided.

Returns (payback_note, Option<remainder_pswap_note>). The remainder is None when the fill equals the total requested amount (full fill).

§Errors

Returns an error if:

  • Both assets are None.
  • The fill amount is zero.
  • The fill amount exceeds the total requested amount.
Source

pub fn calculate_offered_for_requested( &self, fill_amount: u64, ) -> Result<u64, NoteError>

Returns how many offered tokens a consumer receives for fill_amount of the requested asset, based on this note’s current offered/requested ratio.

§Errors

Returns an error if the calculated payout is not a valid asset amount.

Source

pub fn payback_note( &self, consumer_account_id: AccountId, attachment: &PswapNoteAttachment, ) -> Result<Note, NoteError>

Reconstructs the depth-d payback P2ID Note, so the creator can consume it as an unauthenticated input note.

consumer_account_id must be the account that consumed the parent PSWAP in round depth: the MASM stamps it as the payback’s metadata sender, which feeds into Note::details_commitment.

§Errors

Returns an error if attachment.depth() == 0 or if the fill amount is not a valid asset amount.

Source

pub fn remainder_note( &self, consumer_account_id: AccountId, attachment: &PswapNoteAttachment, remaining_offered: AssetAmount, remaining_requested: AssetAmount, ) -> Result<Note, NoteError>

Reconstructs the depth-d remainder PSWAP Note in this lineage.

Called on the original PSWAP, this returns the full Note for the remainder produced in round depth. The returned Note matches the created note exactly.

  • consumer_account_id — the account that consumed the parent PSWAP in round depth, used as the remainder’s sender.
  • attachment — the on-chain [amount, order_id, depth, 0] attachment for this round, where amount is the offered-asset units paid out.
  • remaining_offered / remaining_requested — the leftover amounts that survive into this remainder. Both are required because the price formula uses floor division, so one isn’t derivable from the other across rounds in general.
§Errors

Returns an error if attachment.depth() == 0 or if any amount is not a valid asset amount.

Source

pub fn create_tag( note_type: NoteType, offered_asset: &FungibleAsset, requested_asset: &FungibleAsset, ) -> NoteTag

Builds the 32-bit NoteTag for a PSWAP note.

[31..30] note_type          (2 bits)
[29..16] script_root MSBs   (14 bits)
[15..8]  offered faucet ID  (8 bits, top byte of prefix)
[7..0]   requested faucet ID (8 bits, top byte of prefix)

Trait Implementations§

Source§

impl Clone for PswapNote

Source§

fn clone(&self) -> PswapNote

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PswapNote

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl From<PswapNote> for Note

Converts a PswapNote into a protocol Note, computing the final PSWAP tag.

Source§

fn from(pswap: PswapNote) -> Note

Converts to this type from the input type.
Source§

impl TryFrom<&Note> for PswapNote

Parses a protocol Note back into a PswapNote by deserializing its storage.

Source§

type Error = NoteError

The type returned in the event of a conversion error.
Source§

fn try_from( note: &Note, ) -> Result<PswapNote, <PswapNote as TryFrom<&Note>>::Error>

Performs the conversion.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more