Skip to main content

r402_aptos/
lib.rs

1#![cfg_attr(docsrs, feature(doc_cfg))]
2#![cfg_attr(
3    test,
4    allow(
5        unknown_lints,
6        clippy::unused_async_trait_impl,
7        reason = "in-crate mock impls of AFIT traits have no .await"
8    )
9)]
10
11//! Aptos chain support for the x402 payment protocol.
12//!
13//! This crate implements the x402 `"exact"` scheme for Aptos: the buyer
14//! signs a `0x1::primary_fungible_store::transfer` of a fungible asset, and
15//! a facilitator fee payer submits it after `aptos-sdk` 0.6 preflight.
16//!
17//! # Features
18//!
19//! - **CAIP-2 Addressing**: `aptos:1` (mainnet) and `aptos:2` (testnet)
20//! - **Fungible Asset payments**: exact `primary_fungible_store::transfer`
21//! - **Fee-payer sponsorship**: `extra.feePayer` is copied from `/supported`
22//! - **In-process facilitator**: verify and settle via `aptos-sdk` 0.6.0
23//!
24//! # Feature Flags
25//!
26//! - `server` — server-side price tag generation
27//! - `client` — client-side transfer signing
28//! - `facilitator` — facilitator-side payment verification and settlement
29//! - `telemetry` — `tracing` instrumentation
30
31#[cfg(not(any(feature = "client", feature = "facilitator")))]
32use base64 as _;
33#[cfg(feature = "telemetry")]
34use tracing_core as _;
35
36#[cfg(test)]
37mod unused_dev_deps {
38    #[cfg(not(any(feature = "client", feature = "facilitator")))]
39    use aptos_sdk as _;
40    #[cfg(not(any(feature = "client", feature = "facilitator")))]
41    use tokio as _;
42}
43
44/// Default USDC decimal precision.
45pub const DEFAULT_TOKEN_DECIMALS: u8 = 6;
46
47/// Sponsored-transaction cap on `max_gas_amount` (`@x402/aptos` `MAX_GAS_AMOUNT`).
48pub const MAX_GAS_AMOUNT: u64 = 500_000;
49
50/// Sponsored-transaction cap on `gas_unit_price` octas (`MAX_GAS_UNIT_PRICE`).
51pub const MAX_GAS_UNIT_PRICE: u64 = 1_000;
52
53/// Client `max_gas_amount` — Aptos SDK simple-tx default, under [`MAX_GAS_AMOUNT`].
54pub const DEFAULT_CLIENT_MAX_GAS: u64 = 200_000;
55
56/// Client `gas_unit_price` when estimate is unavailable.
57pub const DEFAULT_GAS_UNIT_PRICE: u64 = 100;
58
59/// Verify rejects expirations closer than this many seconds.
60pub const EXPIRATION_BUFFER_SECONDS: u64 = 5;
61
62/// `0x1::primary_fungible_store::transfer` (client-built path).
63pub const PRIMARY_FUNGIBLE_STORE_TRANSFER: &str = "0x1::primary_fungible_store::transfer";
64
65/// `0x1::fungible_asset::transfer` (also accepted at verify).
66pub const FUNGIBLE_ASSET_TRANSFER: &str = "0x1::fungible_asset::transfer";
67
68/// Type argument on both transfer entry functions.
69pub const FUNGIBLE_ASSET_METADATA: &str = "0x1::fungible_asset::Metadata";
70
71pub mod chain;
72pub mod exact;
73
74mod networks;
75#[cfg(feature = "facilitator")]
76pub use chain::{AptosChainProvider, AptosFeePayer};
77#[cfg(any(feature = "client", feature = "facilitator"))]
78pub use chain::{
79    DecodedAptosPayload, SimpleTransaction, decode_aptos_payload, encode_aptos_payload,
80};
81pub use exact::AptosExact;
82#[cfg(feature = "client")]
83pub use exact::client::{AptosExactClient, AptosSigner};
84#[cfg(feature = "facilitator")]
85pub use exact::facilitator::{AptosExactFacilitator, AptosExactFacilitatorConfig};
86pub use networks::*;