Expand description
cow-rs — Rust SDK for the CoW Protocol.
Organised into sub-modules mirroring the TypeScript SDK packages:
| Module | Purpose |
|---|---|
config | Chain IDs, contract addresses, token constants |
order_book | Orderbook HTTP client and API types |
order_signing | EIP-712 digest and ECDSA signing |
trading | High-level TradingSdk and fee-breakdown types |
app_data | Order metadata schema and keccak256 hashing |
subgraph | Historical trading data via GraphQL |
composable | Conditional orders (TWAP) and Merkle multiplexer |
onchain | On-chain reading via JSON-RPC eth_call |
§Quick start — TradingSdk
use alloy_primitives::U256;
use cow_rs::{OrderKind, SupportedChainId, TradeParameters, TradingSdk, TradingSdkConfig};
let sdk = TradingSdk::new(
TradingSdkConfig::prod(SupportedChainId::Sepolia, "MyApp"),
"0xdeadbeef...",
)?;
let result = sdk
.post_swap_order(TradeParameters {
kind: OrderKind::Sell,
sell_token: "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14".parse()?,
sell_token_decimals: 18,
buy_token: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238".parse()?,
buy_token_decimals: 6,
amount: U256::from(100_000_000_000_000_u64),
slippage_bps: Some(50),
receiver: None,
valid_for: None,
valid_to: None,
partially_fillable: None,
partner_fee: None,
})
.await?;
println!("order: {}", result.order_id);Re-exports§
pub use app_data::AppDataDoc;pub use app_data::AppDataInfo;pub use app_data::CidComponents;pub use app_data::CowHook;pub use app_data::DEFAULT_IPFS_READ_URI;pub use app_data::DEFAULT_IPFS_WRITE_URI;pub use app_data::Ipfs;pub use app_data::IpfsUploadResult;pub use app_data::LATEST_APP_DATA_VERSION;pub use app_data::Metadata;pub use app_data::MetadataApi;pub use app_data::OrderClassKind;pub use app_data::OrderInteractionHooks;pub use app_data::PartnerFee;pub use app_data::PartnerFeeEntry;pub use app_data::Quote;pub use app_data::Referrer;pub use app_data::ReplacedOrder;pub use app_data::Utm;pub use app_data::ValidationError;pub use app_data::ValidationResult;pub use app_data::Widget;pub use app_data::appdata_hex;pub use app_data::appdata_hex_to_cid;pub use app_data::appdata_json;pub use app_data::assert_cid;pub use app_data::build_app_data_doc;pub use app_data::build_app_data_doc_full;pub use app_data::build_order_app_data;pub use app_data::cid_to_appdata_hex;pub use app_data::decode_cid;pub use app_data::extract_digest;pub use app_data::fetch_doc_from_app_data_hex;pub use app_data::fetch_doc_from_cid;pub use app_data::get_app_data_info;pub use app_data::get_app_data_schema;pub use app_data::get_partner_fee_bps;pub use app_data::import_schema;pub use app_data::merge_app_data_doc;pub use app_data::parse_cid;pub use app_data::pin_json_in_pinata_ipfs;pub use app_data::stringify_deterministic;pub use app_data::upload_app_data_to_pinata;pub use app_data::validate_app_data_doc;pub use app_data::app_data_hex_to_cid_legacy;Deprecated pub use app_data::fetch_doc_from_app_data_hex_legacy;Deprecated pub use app_data::get_app_data_info_legacy;Deprecated pub use app_data::upload_metadata_doc_to_ipfs_legacy;Deprecated pub use bridging::ACROSS_DEPOSIT_EVENT_INTERFACE;pub use bridging::BridgeError;pub use bridging::BridgeProvider;pub use bridging::BridgingSdk;pub use bridging::COW_TRADE_EVENT_INTERFACE;pub use bridging::QuoteBridgeRequest;pub use bridging::QuoteBridgeResponse;pub use bridging::QuoteStrategy;pub use bridging::create_strategies;pub use bridging::get_cache_key;pub use bridging::safe_call_best_quote_callback;pub use bridging::safe_call_progressive_callback;pub use composable::BlockInfo;pub use composable::COMPOSABLE_COW_ADDRESS;pub use composable::CURRENT_BLOCK_TIMESTAMP_FACTORY_ADDRESS;pub use composable::ConditionalOrderFactory;pub use composable::ConditionalOrderKind;pub use composable::ConditionalOrderParams;pub use composable::DurationOfPart;pub use composable::GAT_HANDLER_ADDRESS;pub use composable::GatData;pub use composable::GatOrder;pub use composable::GpV2OrderStruct;pub use composable::IsValidResult;pub use composable::MAX_FREQUENCY;pub use composable::Multiplexer;pub use composable::OrderProof;pub use composable::PollResult;pub use composable::ProofLocation;pub use composable::ProofStruct;pub use composable::ProofWithParams;pub use composable::STOP_LOSS_HANDLER_ADDRESS;pub use composable::StopLossData;pub use composable::StopLossOrder;pub use composable::TWAP_HANDLER_ADDRESS;pub use composable::TestConditionalOrderParams;pub use composable::TwapData;pub use composable::TwapOrder;pub use composable::TwapStartTime;pub use composable::TwapStruct;pub use composable::balance_to_string;pub use composable::create_calldata;pub use composable::create_set_domain_verifier_tx;pub use composable::create_test_conditional_order;pub use composable::create_with_context_calldata;pub use composable::data_to_struct;pub use composable::decode_gat_static_input;pub use composable::decode_params;pub use composable::decode_stop_loss_static_input;pub use composable::decode_twap_static_input;pub use composable::decode_twap_struct;pub use composable::default_token_formatter;pub use composable::encode_gat_struct;pub use composable::encode_params;pub use composable::encode_stop_loss_struct;pub use composable::encode_twap_struct;pub use composable::format_epoch;pub use composable::from_struct_to_order;pub use composable::get_block_info;pub use composable::get_domain_verifier;pub use composable::get_domain_verifier_calldata;pub use composable::get_is_valid_result;pub use composable::is_composable_cow;pub use composable::is_extensible_fallback_handler;pub use composable::is_valid_abi;pub use composable::kind_to_string;pub use composable::order_id;pub use composable::remove_calldata;pub use composable::set_root_calldata;pub use composable::set_root_with_context_calldata;pub use composable::struct_to_data;pub use composable::transform_data_to_struct;pub use composable::transform_struct_to_data;pub use config::AdditionalTargetChainId;pub use config::AddressPerChain;pub use config::ApiBaseUrls;pub use config::ApiContext;pub use config::BARN_ETH_FLOW;pub use config::BTC_CURRENCY_ADDRESS;pub use config::BUY_ETH_ADDRESS;pub use config::COMPOSABLE_COW;pub use config::ChainContract;pub use config::ChainContracts;pub use config::ChainInfo;pub use config::ChainRpcUrls;pub use config::ChainTokenInfo;pub use config::CowSwapConfig;pub use config::DEPLOYER_CONTRACT;pub use config::ETH_FLOW_PROD;pub use config::ETH_FLOW_STAGING;pub use config::EVM_NATIVE_CURRENCY_ADDRESS;pub use config::EXTENSIBLE_FALLBACK_HANDLER;pub use config::Env;pub use config::EvmCall;pub use config::EvmChainInfo;pub use config::EvmChains;pub use config::IpfsConfig;pub use config::MAX_VALID_TO_EPOCH;pub use config::NATIVE_CURRENCY_ADDRESS;pub use config::NonEvmChainInfo;pub use config::NonEvmChains;pub use config::ProtocolOptions;pub use config::RAW_CHAINS_FILES_PATH;pub use config::RAW_FILES_PATH;pub use config::SALT;pub use config::SETTLEMENT_CONTRACT;pub use config::SETTLEMENT_CONTRACT_STAGING;pub use config::SOL_NATIVE_CURRENCY_ADDRESS;pub use config::SupportedChainId;pub use config::TOKEN_LIST_IMAGES_PATH;pub use config::TargetChainId;pub use config::ThemedImage;pub use config::TokenInfo;pub use config::TokenRegistry;pub use config::VAULT_RELAYER;pub use config::VAULT_RELAYER_STAGING;pub use config::WebUrl;pub use config::additional_target_chain_info;pub use config::all_additional_target_chain_ids;pub use config::all_additional_target_chains;pub use config::all_chain_ids;pub use config::all_chains;pub use config::all_supported_chain_ids;pub use config::all_supported_chains;pub use config::api_base_url;pub use config::api_url;pub use config::composable_cow;pub use config::composable_cow_contract_address;pub use config::cow_protocol_settlement_contract_address;pub use config::cow_protocol_vault_relayer_address;pub use config::cow_protocol_vault_relayer_address_staging;pub use config::deterministic_deployment_address;pub use config::eth_flow_for_env;pub use config::extensible_fallback_handler;pub use config::extensible_fallback_handler_contract_address;pub use config::get_chain_info;pub use config::get_wrapped_token_for_chain;pub use config::implementation_address_slot;pub use config::is_additional_target_chain;pub use config::is_btc_chain;pub use config::is_chain_deprecated;pub use config::is_chain_under_development;pub use config::is_evm_chain;pub use config::is_evm_chain_info;pub use config::is_non_evm_chain;pub use config::is_non_evm_chain_info;pub use config::is_supported_chain;pub use config::is_target_chain_id;pub use config::is_zk_sync_chain;pub use config::map_address_to_supported_networks;pub use config::map_all_networks;pub use config::map_supported_networks;pub use config::order_explorer_link;pub use config::owner_address_slot;pub use config::settlement_contract;pub use config::settlement_contract_for_env;pub use config::supported_chain_info;pub use config::tradable_supported_chain_ids;pub use config::tradable_supported_chains;pub use config::vault_relayer;pub use config::vault_relayer_for_env;pub use config::wrapped_native_currency;pub use cow_shed::CowShedCall;pub use cow_shed::CowShedHookParams;pub use cow_shed::CowShedSdk;pub use erc20::build_eip2612_nonces_calldata;pub use erc20::build_eip2612_version_calldata;pub use erc20::build_erc20_allowance_calldata;pub use erc20::build_erc20_approve_calldata;pub use erc20::build_erc20_balance_of_calldata;pub use erc20::build_erc20_decimals_calldata;pub use erc20::build_erc20_name_calldata;pub use erc20::build_erc20_transfer_calldata;pub use erc20::build_erc20_transfer_from_calldata;pub use error::CowError;pub use ethflow::EthFlowOrderData;pub use ethflow::EthFlowTransaction;pub use ethflow::build_eth_flow_transaction;pub use ethflow::encode_eth_flow_create_order;pub use ethflow::is_eth_flow_order_data;pub use flash_loans::FlashLoanParams;pub use flash_loans::FlashLoanProvider;pub use flash_loans::FlashLoanSdk;pub use onchain::OnchainReader;pub use onchain::permit::OnchainTokenInfo;pub use order_book::AppDataObject;pub use order_book::Auction;pub use order_book::CompetitionAuction;pub use order_book::CompetitionOrderStatus;pub use order_book::CompetitionOrderStatusKind;pub use order_book::DEFAULT_RETRY_STATUS_CODES;pub use order_book::EthflowData;pub use order_book::GetOrdersRequest;pub use order_book::GetTradesRequest;pub use order_book::InteractionData;pub use order_book::OnchainOrderData;pub use order_book::Order;pub use order_book::OrderBookApi;pub use order_book::OrderCancellations;pub use order_book::OrderClass;pub use order_book::OrderCreation;pub use order_book::OrderInteractions;pub use order_book::OrderQuoteRequest;pub use order_book::OrderQuoteResponse;pub use order_book::OrderStatus;pub use order_book::OrderUid;pub use order_book::PartnerFeeResult;pub use order_book::ProtocolFeeAmountParams;pub use order_book::QuoteAmounts;pub use order_book::QuoteAmountsAndCostsParams;pub use order_book::QuoteAmountsAndCostsResult;pub use order_book::QuoteCosts;pub use order_book::QuoteData;pub use order_book::QuoteFeeComponent;pub use order_book::QuoteNetworkFee;pub use order_book::QuoteOrderParams;pub use order_book::QuoteSide;pub use order_book::RateLimiter;pub use order_book::RetryPolicy;pub use order_book::SolverCompetition;pub use order_book::SolverExecution;pub use order_book::SolverSettlement;pub use order_book::TotalSurplus;pub use order_book::Trade;pub use order_book::get_protocol_fee_amount;pub use order_book::get_quote_amounts_after_partner_fee;pub use order_book::get_quote_amounts_after_slippage;pub use order_book::get_quote_amounts_and_costs;pub use order_book::is_eth_flow_order;pub use order_book::transform_order;pub use order_signing::EIP1271_MAGICVALUE;pub use order_signing::ORDER_PRIMARY_TYPE;pub use order_signing::ORDER_TYPE_HASH;pub use order_signing::ORDER_UID_LENGTH;pub use order_signing::OrderDomain;pub use order_signing::OrderFlags;pub use order_signing::OrderTypedData;pub use order_signing::OrderUidParams;pub use order_signing::PRE_SIGNED;pub use order_signing::SignOrderCancellationParams;pub use order_signing::SignOrderCancellationsParams;pub use order_signing::SignOrderParams;pub use order_signing::SigningResult;pub use order_signing::TradeFlags;pub use order_signing::UnsignedOrder;pub use order_signing::build_order_typed_data;pub use order_signing::cancellations_hash;pub use order_signing::compute_order_uid;pub use order_signing::decode_order_flags;pub use order_signing::decode_signature_owner;pub use order_signing::decode_signing_scheme;pub use order_signing::decode_trade_flags;pub use order_signing::domain_separator;pub use order_signing::domain_separator_from;pub use order_signing::eip1271_result;pub use order_signing::encode_order_flags;pub use order_signing::encode_signing_scheme;pub use order_signing::encode_trade_flags;pub use order_signing::extract_order_uid_params;pub use order_signing::generate_order_id;pub use order_signing::get_domain;pub use order_signing::hash_order;pub use order_signing::hash_order_cancellation;pub use order_signing::hash_order_cancellations;pub use order_signing::hash_typed_data;pub use order_signing::hashify;pub use order_signing::invalidate_order_calldata;pub use order_signing::normalize_buy_token_balance;pub use order_signing::normalize_order;pub use order_signing::order_hash;pub use order_signing::pack_order_uid_params;pub use order_signing::presign_result;pub use order_signing::set_pre_signature_calldata;pub use order_signing::sign_order;pub use order_signing::sign_order_cancellation;pub use order_signing::sign_order_cancellations;pub use order_signing::signing_digest;pub use permit::Erc20PermitInfo;pub use permit::PERMIT_GAS_LIMIT;pub use permit::PermitHookData;pub use permit::PermitInfo;pub use permit::build_permit_calldata;pub use permit::build_permit_hook;pub use permit::permit_digest;pub use permit::permit_domain_separator;pub use permit::permit_type_hash;pub use permit::sign_permit;pub use settlement::encoder::EncodedInteraction;pub use settlement::encoder::InteractionStage;pub use settlement::encoder::SettlementEncoder;pub use settlement::reader::AllowListReader;pub use settlement::reader::SettlementReader;pub use settlement::refunds::OrderRefund;pub use settlement::refunds::RefundType;pub use settlement::refunds::ethflow_refund_calldata;pub use settlement::refunds::settlement_refund_calldata;pub use settlement::simulator::SimulationResult;pub use settlement::simulator::TradeSimulator;pub use settlement::vault::VAULT_ACTIONS;pub use settlement::vault::grant_role_calldata;pub use settlement::vault::required_vault_role_calls;pub use settlement::vault::required_vault_role_selectors;pub use settlement::vault::revoke_role_calldata;pub use settlement::vault::vault_role_hash;pub use subgraph::Bundle;pub use subgraph::DailyTotal;pub use subgraph::DailyVolume;pub use subgraph::HourlyTotal;pub use subgraph::HourlyVolume;pub use subgraph::LAST_DAYS_VOLUME_QUERY;pub use subgraph::LAST_HOURS_VOLUME_QUERY;pub use subgraph::PairDaily;pub use subgraph::PairHourly;pub use subgraph::SubgraphApi;pub use subgraph::SubgraphBlock;pub use subgraph::SubgraphMeta;pub use subgraph::SubgraphOrder;pub use subgraph::SubgraphPair;pub use subgraph::SubgraphSettlement;pub use subgraph::SubgraphToken;pub use subgraph::SubgraphTrade;pub use subgraph::SubgraphUser;pub use subgraph::TOTALS_QUERY;pub use subgraph::TokenDailyTotal;pub use subgraph::TokenHourlyTotal;pub use subgraph::TokenTradingEvent;pub use subgraph::Total;pub use subgraph::Totals;pub use subgraph::UniswapPool;pub use subgraph::UniswapToken;pub use trading::Amounts;pub use trading::BuildAppDataParams;pub use trading::DEFAULT_FEE_SLIPPAGE_FACTOR_PCT;pub use trading::DEFAULT_QUOTE_VALIDITY;pub use trading::DEFAULT_SLIPPAGE_BPS;pub use trading::DEFAULT_VOLUME_SLIPPAGE_BPS;pub use trading::ETH_FLOW_DEFAULT_SLIPPAGE_BPS;pub use trading::GAS_LIMIT_DEFAULT;pub use trading::LimitOrderAdvancedSettings;pub use trading::LimitTradeParameters;pub use trading::LimitTradeParametersFromQuote;pub use trading::MAX_SLIPPAGE_BPS;pub use trading::NetworkFee;pub use trading::OrderPostingResult;pub use trading::PartnerFeeCost;pub use trading::PostTradeAdditionalParams;pub use trading::ProtocolFeeCost;pub use trading::QuoteAmountsAndCosts;pub use trading::QuoteResults;pub use trading::QuoteResultsWithSigner;pub use trading::QuoterParameters;pub use trading::SlippageToleranceRequest;pub use trading::SlippageToleranceResponse;pub use trading::SwapAdvancedSettings;pub use trading::TradeParameters;pub use trading::TradingAppDataInfo;pub use trading::TradingSdk;pub use trading::TradingSdkConfig;pub use trading::TradingTransactionParams;pub use trading::adjust_eth_flow_limit_order_params;pub use trading::adjust_eth_flow_order_params;pub use trading::apply_percentage;pub use trading::apply_settings_to_limit_trade_parameters;pub use trading::bps_to_percentage;pub use trading::build_app_data;pub use trading::calculate_gas_margin;pub use trading::calculate_unique_order_id;pub use trading::generate_app_data_from_doc;pub use trading::get_default_slippage_bps;pub use trading::get_default_utm_params;pub use trading::get_eth_flow_cancellation;pub use trading::get_eth_flow_contract;pub use trading::get_is_eth_flow_order;pub use trading::get_order_deadline_from_now;pub use trading::get_order_to_sign;pub use trading::get_order_typed_data;pub use trading::get_quote_raw;pub use trading::get_quote_with_signer;pub use trading::get_settlement_cancellation;pub use trading::get_settlement_contract;pub use trading::get_slippage_percent;pub use trading::get_trade_parameters_after_quote;pub use trading::get_trader;pub use trading::map_quote_amounts_and_costs;pub use trading::percentage_to_bps;pub use trading::post_co_w_protocol_trade;pub use trading::post_cow_protocol_trade;pub use trading::post_sell_native_currency_order;pub use trading::resolve_order_book_api;pub use trading::resolve_signer;pub use trading::resolve_slippage_suggestion;pub use trading::suggest_slippage_bps;pub use trading::suggest_slippage_from_fee;pub use trading::suggest_slippage_from_volume;pub use trading::swap_params_to_limit_order_params;pub use trading::unsigned_order_for_signing;pub use traits::CowSigner;pub use traits::IpfsClient;pub use traits::OrderbookClient;pub use traits::RpcProvider;pub use types::ATTESTATION_PREFIX_CONST;pub use types::ATTESTATOR_ADDRESS;pub use types::ATTESTION_VERSION_BYTE;pub use types::EcdsaSigningScheme;pub use types::HUNDRED_THOUSANDS;pub use types::LIMIT_CONCURRENT_REQUESTS;pub use types::MAX_UINT32;pub use types::MAX_UINT256;pub use types::ONE;pub use types::ONE_HUNDRED_BPS;pub use types::OrderKind;pub use types::PriceQuality;pub use types::SigningScheme;pub use types::TokenBalance;pub use types::ZERO;pub use types::ZERO_ADDRESS;pub use types::ZERO_HASH;pub use weiroll::WEIROLL_ADDRESS;pub use weiroll::WeirollCommand;pub use weiroll::WeirollCommandFlags;pub use weiroll::WeirollContractRef;pub use weiroll::WeirollPlanner;pub use weiroll::WeirollScript;pub use weiroll::create_weiroll_contract;pub use weiroll::create_weiroll_delegate_call;pub use weiroll::create_weiroll_library;pub use weiroll::define_read_only;pub use weiroll::get_static;
Modules§
- app_
data CoWProtocol order app-data — metadata schema and hash generation.- bridging
- Cross-chain bridge aggregator and provider abstractions.
- browser_
wallet - Browser wallet integration via
EIP-1193. - common
- Common utility functions ported from the
TypeScriptSDKcommonpackage. - composable
CoWProtocol composable (conditional) orders.- config
- Chain configuration, contract addresses, token constants, and executor
params for the
CoWProtocol SDK. - cow_
shed CowShedproxy contract helpers.- erc20
ERC-20calldata builders for allowance management and token queries.- error
- Error type for the
CoWProtocol SDK. - ethflow
EthFlowcontract helpers — encodecreateOrdercalldata for native-currency orders.- flash_
loans - Flash loan provider helpers and calldata builders.
- onchain
- On-chain data reading via raw JSON-RPC
eth_call. - order_
book CoWProtocol orderbook API client and types.- order_
signing - EIP-712 order digest, signing utilities, and core signing types.
- permit
- EIP-2612 permit utilities for
CoWProtocol pre-interaction hooks. - settlement
- Settlement encoding and contract interaction layer for
CoWProtocol. - subgraph
CoWProtocol subgraph client — query historical trading data viaGraphQL.- trading
- High-level trading SDK and fee-breakdown types.
- traits
- Injectable trait abstractions for testing and composition.
- types
- Shared primitive enums and constants used across all sub-modules.
- wasm
wasm-bindgenexports for browser and Node.js usage.- weiroll
- Weiroll script builder and types.