Skip to main content

Crate cow_rs

Crate cow_rs 

Source
Expand description

cow-rs — Rust SDK for the CoW Protocol.

Organised into sub-modules mirroring the TypeScript SDK packages:

ModulePurpose
configChain IDs, contract addresses, token constants
order_bookOrderbook HTTP client and API types
order_signingEIP-712 digest and ECDSA signing
tradingHigh-level TradingSdk and fee-breakdown types
app_dataOrder metadata schema and keccak256 hashing
subgraphHistorical trading data via GraphQL
composableConditional orders (TWAP) and Merkle multiplexer
onchainOn-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::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
CoW Protocol 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 TypeScript SDK common package.
composable
CoW Protocol composable (conditional) orders.
config
Chain configuration, contract addresses, token constants, and executor params for the CoW Protocol SDK.
cow_shed
CowShed proxy contract helpers.
erc20
ERC-20 calldata builders for allowance management and token queries.
error
Error type for the CoW Protocol SDK.
ethflow
EthFlow contract helpers — encode createOrder calldata 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
CoW Protocol orderbook API client and types.
order_signing
EIP-712 order digest, signing utilities, and core signing types.
permit
EIP-2612 permit utilities for CoW Protocol pre-interaction hooks.
settlement
Settlement encoding and contract interaction layer for CoW Protocol.
subgraph
CoW Protocol subgraph client — query historical trading data via GraphQL.
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-bindgen exports for browser and Node.js usage.
weiroll
Weiroll script builder and types.