Expand description
Typed building blocks for Polymarket relayer payloads.
The crate is split into two layers:
- generic calldata builders in modules like
erc20,erc1155, andctf - Polymarket V2 collateral helpers in
collateral - deposit-wallet relayer builders in
deposit_wallet - Safe-specific payload construction in
safe
The optional [client] module adds a raw relayer HTTP client behind the
client feature.
§Examples
Build a gasless Safe execution draft for an ERC-20 approval:
use alloy_primitives::{Address, U256, address, b256};
use polyrel::{
NonEmptyCalls, erc20,
safe::{self, ChainId, SafeExecutionContext, SafeGasParams, SafeNonce},
};
let call = erc20::approve(
address!("2791Bca1f2de4661ED88A30C99A7a9449Aa84174"),
address!("4d97dcd97ec945f40cf65f87097ace5ea0476045"),
U256::from(1_000_000_u64),
);
let context = SafeExecutionContext::builder()
.owner(address!("6e0c80c90ea6c15917308f820eac91ce2724b5b5"))
.chain_id(ChainId::new(137.try_into().unwrap()))
.safe_factory(address!("aacfeea03eb1561c4e67d661e40682bd20e3541b"))
.safe_init_code_hash(
b256!("2bce2127ff07fb632d16c8347c4ebf501f4841168bed00d9e6ef715ddb6fcecf"),
)
.safe_multisend(address!("a238cbeb142c10ef7ad8442c6d1f9e89e07e7761"))
.nonce(SafeNonce::new(U256::ZERO))
.gas_params(
SafeGasParams::builder()
.safe_txn_gas(U256::ZERO)
.base_gas(U256::ZERO)
.gas_price(U256::ZERO)
.gas_token(Address::ZERO)
.refund_receiver(Address::ZERO)
.build(),
)
.build();
let _draft = safe::build_execution_draft(&context, NonEmptyCalls::from_one(call)).unwrap();Create a relayer client when the client feature is enabled:
use alloy_primitives::address;
use polyrel::client::{RelayerApiKeyAuth, RelayerBaseUrl, RelayerClient};
use secrecy::SecretString;
let base_url = RelayerBaseUrl::parse("https://relayer-v2.polymarket.com")?;
let _client = RelayerClient::new(base_url).authenticate_relayer(RelayerApiKeyAuth::new(
SecretString::from("replace-me"),
address!("6e0c80c90ea6c15917308f820eac91ce2724b5b5"),
));Build a deposit-wallet deployment request and a follow-up wallet batch:
use alloy_primitives::{U256, address};
use polyrel::{
NonEmptyCalls, deposit_wallet, erc20,
safe::ChainId,
};
let create_context = deposit_wallet::DepositWalletCreateContext::builder()
.owner(address!("6e0c80c90ea6c15917308f820eac91ce2724b5b5"))
.deposit_wallet_factory(address!("00000000000fb5c9adea0298d729a0cb3823cc07"))
.deposit_wallet_implementation(address!("58ca52ebe0dadfdf531cde7062e76746de4db1eb"))
.build();
let create_draft = deposit_wallet::build_create_draft(&create_context);
let deposit_wallet = create_draft.deposit_wallet_address();
let approve = erc20::approve(
address!("c011a7e12a19f7b1f670d46f03b03f3342e82dfb"),
address!("4d97dcd97ec945f40cf65f87097ace5ea0476045"),
U256::MAX,
);
let batch_context = deposit_wallet::DepositWalletBatchContext::builder()
.owner(address!("6e0c80c90ea6c15917308f820eac91ce2724b5b5"))
.chain_id(ChainId::new(137.try_into().unwrap()))
.deposit_wallet_factory(address!("00000000000fb5c9adea0298d729a0cb3823cc07"))
.deposit_wallet(deposit_wallet)
.nonce(deposit_wallet::DepositWalletNonce::new(U256::ZERO))
.deadline(deposit_wallet::DepositWalletDeadline::new(U256::from(1_760_000_000_u64)))
.build();
let _batch_draft =
deposit_wallet::build_batch_draft(&batch_context, NonEmptyCalls::from_one(approve))
.unwrap();Modules§
- collateral
- Polymarket V2 pUSD collateral helpers. Polymarket V2 collateral helpers for pUSD wrap, unwrap, and CTF adapter flows.
- ctf
- Conditional Tokens Framework calldata builders.
- deposit_
wallet - Polymarket deposit-wallet relayer builders. Polymarket deposit-wallet relayer builders.
- erc20
- ERC-20 calldata builders.
- erc1155
- ERC-1155 calldata builders.
- neg_
risk - Neg-risk adapter calldata builders.
- polymarket
- Polymarket-specific approval recipes built on top of the generic token helpers.
- safe
- Safe-specific payload construction for deployment and execution requests.
Structs§
- Call
- Generic EVM call envelope used throughout the crate. Generic EVM call envelope used by the builders in this crate.
- NonEmpty
Calls - Non-empty collection of
Callvalues. Non-empty collection ofCallvalues.
Enums§
- Polyrel
Error - Error type used by the crate. Error type for payload construction and relayer client operations.