Skip to main content

Gnosis Safe Components

White Rabbit provides a complete set of components for interacting with Gnosis Safe multisig wallets — from deployment to transaction execution and owner management.

Avoid public RPC endpoints

White Rabbit runs on shared infrastructure with a shared outbound IP pool. Public RPC URLs enforce rate limits per IP — under load this can cause errors across all workspaces sharing that IP. Use a private endpoint (Alchemy, Infura, QuickNode, or self-hosted). See Connecting to any chain.


BUILD_EVM_GNOSIS_SAFE_DEPLOYMENT

BUILD_EVM_GNOSIS_SAFE_DEPLOYMENT Workflow Component

Build the deployment transaction for a new Gnosis Safe proxy. Use GET_EVM_SAFE_ADDRESS first to predict the counterfactual address.

Config

None.

Inputs

FieldTypeDescription
jsonRpcUrlstringJSON-RPC endpoint
ownersstring[]Owner addresses
thresholdnumberRequired confirmations (e.g. 2 for 2-of-3)
saltNoncenumberNonce for CREATE2 address determinism

Outputs

FieldTypeDescription
deploymentTransactionobjectUnsigned deployment transaction

GET_EVM_SAFE_ADDRESS

GET_EVM_SAFE_ADDRESS Workflow Component

Predict the counterfactual address of a Safe before deploying it. Deterministic based on owners, threshold, and salt.

Config

None.

Inputs

FieldTypeRequiredDescription
jsonRpcUrlstringYesJSON-RPC endpoint
ownersstring[]YesOwner addresses (at least 1)
thresholdnumberYesConfirmation threshold (≥ 1)
saltNoncestringYesCREATE2 salt as a bigint string
singletonAddressstringNoCustom Safe singleton address (uses canonical default if omitted)
proxyFactoryAddressstringNoCustom SafeProxyFactory address
fallbackHandlerAddressstringNoCustom fallback handler address

Outputs

FieldTypeDescription
safeAddressstringPredicted Safe address (0x...)
initializerCalldatastringEncoded setup() calldata used during deployment

IS_EVM_SAFE_DEPLOYED

IS_EVM_SAFE_DEPLOYED Workflow Component

Check if a Safe is already deployed at the given address.

Config

None.

Inputs

FieldTypeDescription
jsonRpcUrlstringJSON-RPC endpoint
addressstringSafe address to check

Outputs

FieldTypeDescription
deployedbooleantrue if deployed

GET_EVM_GNOSIS_SAFE_NONCE

GET_EVM_GNOSIS_SAFE_NONCE Workflow Component

Read the current nonce from a deployed Safe. Required for building valid Safe transactions.

Config

None.

Inputs

FieldTypeDescription
jsonRpcUrlstringJSON-RPC endpoint
safeAddressstringDeployed Safe address

Outputs

FieldTypeDescription
noncenumberCurrent Safe nonce

BUILD_EVM_SAFE_SIGNATURE

BUILD_EVM_SAFE_SIGNATURE Workflow Component

Compute the EIP-712 typed data hash for a Safe transaction. Pass the hash to SIGN_WITH_KEY_SHARE to produce a valid Safe signature.

Config

FieldTypeDefaultDescription
mode'hash' | 'pre-validated''hash'Signature mode. 'hash' produces an EIP-712 typed-data hash for signing. 'pre-validated' marks the owner as pre-validated (no off-chain signature needed)

Inputs

FieldTypeDescription
safeAddressstringSafe address
chainIdnumberChain ID (from GET_EVM_CHAIN_ID)
tostringTarget address of the inner call
valuenumber?ETH value (default 0)
datastring?Calldata for inner call
operationnumber?0 = CALL, 1 = DELEGATECALL
noncenumberCurrent Safe nonce
ownerAddressstring?Signing owner address

Outputs

FieldTypeDescription
messageHashstringEIP-712 hash to sign
safeTransactionHashstringSafe-domain transaction hash

BUILD_EVM_SAFE_TRANSACTION

BUILD_EVM_SAFE_TRANSACTION Workflow Component

Assemble the final Safe multisig transaction calldata from inner calldata and collected signatures.

Config

FieldTypeDefaultDescription
operation'call' | 'delegatecall''call'EVM call type. Use 'delegatecall' only for module-level operations

Inputs

FieldTypeRequiredDescription
safeAddressstringYesGnosis Safe proxy address
innerTostringYesTarget address of the inner call
innerCalldatastringYesABI-encoded calldata for the inner call
innerValuestringNoETH value for the inner call (bigint string, default "0")
signaturesstring[]YesArray of owner signatures from SIGN_WITH_KEY_SHARE

Outputs

FieldTypeDescription
calldatastringEncoded execTransaction(...) calldata — pass as calldata to BUILD_EVM_TRANSACTION
tostringSafe proxy address (pass-through, use as to in BUILD_EVM_TRANSACTION)
valuestringETH value (always "0" — Safe holds no ETH for meta-txs)

MANAGE_SAFE_OWNERS

MANAGE_SAFE_OWNERS Workflow Component

Generate the calldata to add, remove, or swap a Safe owner, or change the signing threshold.

Config

FieldTypeRequiredDescription
action'addOwnerWithThreshold' | 'removeOwner' | 'swapOwner' | 'changeThreshold'YesOwner management operation to perform

Inputs

FieldTypeRequiredDescription
safeAddressstringYesGnosis Safe proxy address
ownerstringConditionalOwner to add, remove, or swap out (required for addOwner, removeOwner, swapOwner)
newOwnerstringConditionalReplacement owner address (required for swapOwner)
prevOwnerstringConditionalPredecessor address in the Safe's internal owners linked list (required for removeOwner, swapOwner)
thresholdnumberConditionalNew signing threshold (required for addOwnerWithThreshold, changeThreshold)

Outputs

FieldTypeDescription
calldatastringEncoded owner management calldata — pipe into BUILD_EVM_SAFE_TRANSACTION as innerCalldata
tostringSafe proxy address (target of the inner call)
valuestringETH value (always "0")

BUILD_EVM_MULTICALL

BUILD_EVM_MULTICALL Workflow Component

Bundle multiple MulticallItem objects into a single batched call. Use with BUILD_EVM_MULTICALL_ITEM and ARRAY_BUILDER.

Config

None.

Inputs

FieldTypeDescription
callsMulticallItem[]Array of call items (output of ARRAY_BUILDER)

Outputs

FieldTypeDescription
calldatastringEncoded multicall calldata

BUILD_EVM_MULTICALL_ITEM

BUILD_EVM_MULTICALL_ITEM Workflow Component

Construct a single call entry for a multicall batch.

Config

None.

Inputs

FieldTypeDescription
targetstringContract address to call
callDatastringABI-encoded calldata
allowFailureboolean?If true, a failure won't revert the entire batch
valuenumber?ETH value for this call

Outputs

FieldTypeDescription
callMulticallItemSingle item for use in BUILD_EVM_MULTICALL

Example: 2-of-3 Safe transaction

GENERATE_KEY_SHARE (×3 owners)

├──▶ COMPUTE_PUBLIC_KEY ──▶ COMPUTE_EVM_ADDRESS (owner 1)
├──▶ COMPUTE_PUBLIC_KEY ──▶ COMPUTE_EVM_ADDRESS (owner 2)
└──▶ COMPUTE_PUBLIC_KEY ──▶ COMPUTE_EVM_ADDRESS (owner 3)


GET_EVM_SAFE_ADDRESS (owners[], threshold=2, saltNonce=0)


IS_EVM_SAFE_DEPLOYED? → if not → BUILD_EVM_GNOSIS_SAFE_DEPLOYMENT


GET_EVM_GNOSIS_SAFE_NONCE + GET_EVM_CHAIN_ID + BUILD_EVM_CALLDATA


BUILD_EVM_SAFE_SIGNATURE (×2 owners)

SIGN_WITH_KEY_SHARE (×2)


BUILD_EVM_SAFE_TRANSACTION


BUILD_EVM_TRANSACTION → BROADCAST_EVM_TRANSACTION