builder-relayer-client-rust
Utilities and helpers for building, signing and encoding transactions intended for Builder/Relayer workflows and Gnosis Safe interactions.
Overview
This crate focuses on producing properly-formed EIP-712 typed data and transaction payloads for two main flows:
- Safe transaction signing (SafeTx): build type-packed payloads, compute struct hash, and sign with EIP-712 compatible signatures.
- Safe creation (SafeCreate): helper to build signing payloads used when deploying/initializing a Safe via the builder relayer.
The crate intentionally separates typed-data construction logic from signing implementations so that alternative signers (hardware keys, remote signers) can be integrated.
Key features
- EIP-712 typed-data builders for Safe and SafeCreate flows.
- SafeTransaction args normalization (optional
safe_addressderivation, transaction packing, operation type handling). - MultiSend calldata encoding and selector helpers.
- Signature packing and v-byte normalization to match TypeScript SDK behavior.
Quick start
Run examples (some require credentials):
API surface
Public modules of interest:
builder::safe— helpers to build safe transaction requests and safe create requests.signer— traits and test signers (e.g.DummySigner) used by examples and tests.encode::safe— encoding helpers for MultiSend and calldata.
Environment variables
PK— local EOA private key used byDummySignerexamples.BUILDER_API_KEY,BUILDER_SECRET_B64,BUILDER_PASSPHRASE— used when constructing builder auth headers.
Tests & Verification
This crate contains a set of compatibility tests (tests/signature_compatibility_tests.rs) which assert parity against known TypeScript reference outputs for signatures and encodings. Run cargo test to execute them locally.
Contributing
- Add tests for any new signing or encoding behavior you introduce.
- Run
cargo fmtandcargo clippywhen filing PRs.
License
Dual-licensed under MIT OR Apache-2.0. See LICENSE files at repository root.
Example output
Representative output from running deploy_safe (values will differ):
Transaction request built: { type: "safe", signature: "0x...", to: "0x..." }
Signed SafeTx signature: 0x...
FAQ
- Q: What signer implementations are supported?
- A: The crate defines signer traits and ships a
DummySignerfor examples/tests. You can implementAbstractSignerto plug hardware or remote signers.
Examples index (auto-generated)
Short descriptions for the examples included in examples/:
approve_tokens.rs— Approve token allowance used before submitting orders or interacting with contracts.builder_auth_execute.rs— Demonstrates building a builder auth header and executing a transaction.client_execute.rs— Example of client-side execute flow against a relayer.client_get_transactions.rs— Poll relayer for transactions associated with a request.client_poll.rs— Polling pattern example for long-running requests.ctf_operations.rs— Demo of CTF-specific operations (project-specific).deploy_safe.rs— Build and sign a Safe transaction request; usesSafeTransactionArgs.deploy_safe_create.rs— Build the SafeCreate typed data to initialize a new Safe.monitor_transactions.rs— Monitor transaction status via the relayer / provider.multisend_batch.rs— Build a MultiSend batch and its calldata.quick_start.rs— Short script demonstrating the basic auth + build + sign flow.relayer_client_demo.rs— End-to-end relayer client demo.