Skip to main content

Networks

Use a built-in EVM network or add a custom network. EVM wallets use networkType: "NETWORK_TYPE_EVM".

Signing request types

To sign transactions you build yourself or messages you format yourself, use raw signing.

Wallet

Create a wallet with networkType: "NETWORK_TYPE_EVM". The same address works across EVM networks. Fund it on the selected network with its native coin for transaction fees and any assets being sent.

Transfer assets

This example sends 1 USDC on Ethereum Mainnet (chainId: "1"). Fund the wallet with at least 1 USDC and enough ETH for transaction fees. CreateSigningRequest
amount: "1000000" sends 1 USDC (six decimals). The example uses Circle’s Ethereum Mainnet USDC contract. For another built-in EVM network, use its chain ID, USDC contract and native fee coin.

Send the native coin

To send 0.001 ETH instead, replace evmSendErc20 with this payload:
value is an integer string in wei. ETH covers both the transfer amount and its transaction fee.

Call or deploy a contract

Use evmSendCustom for token approvals, swaps, NFT transfers, and other contract interactions. input carries the ABI-encoded calldata or deployment bytecode as base64 bytes in REST JSON.
value: "0" calls the contract without sending ETH. To attach ETH, set its amount in wei.
Convert hex calldata or deployment bytecode to base64, omitting its 0x prefix:

Sign and track

Sign the request. For custom EVM networks, broadcast the returned signed transaction before querying its receipt. The UUID identifies the signing request; the returned txHash identifies the EVM transaction. Query eth_getTransactionReceipt on the same network:
Use txHash as <TRANSACTION_HASH>. Receipt result.status: "0x1" indicates successful execution; "0x0" indicates failure. result: null means the provider has no receipt; poll with an interval and timeout. For the USDC example, also verify the USDC contract’s Transfer event matches the sender, recipient and amount. Apply the selected network’s confirmation policy before settlement. After a timeout, check the existing request and on-chain result before creating another request.

Use a custom EVM network

Add the network in the vault’s Dashboard settings, including its chain ID, RPC URL, and Legacy or EIP-1559 transaction type. Use that vault’s EVM wallet and fund it on the custom network.

Create and sign a transaction

For a custom network, supply the chain ID, gas settings, and nonce explicitly. Obtain the gas estimate and pending nonce from that network’s RPC; API values below are decimal strings.
maxFee is the gas price on Legacy networks and the fee cap on EIP-1559 networks. For EIP-1559, gasFee.maxPriorityFee sets the tip in wei per gas. gasLimit is in gas units. MPCVault transaction simulation and calldata decoding are unavailable for custom networks.

Broadcast and confirm

Sign the request and save signedTransaction and txHash. On custom EVM networks, your application broadcasts the transaction. The returned signedTransaction is serialized transaction hex with a 0x prefix; pass it directly to the network’s RPC:
Use txHash with the receipt query above on the custom network’s RPC. Setting broadcastTx does not enable MPCVault broadcasting for custom networks.

Sign messages on the custom network

Use either message example with the custom chainId. vaultUuid identifies the vault where that custom network was added. Message signing uses the same EIP-191 or EIP-712 format and returns the same signature fields. For EIP-712, set the typed-data domain’s chainId to the custom network as well.

Sign a message

Use evmMessage with TYPE_PERSONAL_SIGN for EIP-191 messages or TYPE_SIGN_TYPED_DATA for EIP-712 structured data. Both use base64-encoded content in REST JSON.
This signs the UTF-8 text MPCVault integration example. MPCVault applies the Ethereum signed-message prefix.
Sign the message request using signingRequest.uuid, then read the shared signature format. For evmMessage, the API client signer returns V: "0" or "1"; App signing returns "27" or "28".