Railgun Relayer Unshield logo

Catalog action EVM Onchain railgun

Gasless unshield ERC20 tokens from Railgun private balance to any public address. B3OS relayer pays gas; fee deducted from token amount. No ETH required on recipient. Ideal for: anonymous gas funding, fresh wallet funding, privacy-preserving distributions.

At a Glance

FieldValue
Action IDrailgun-unshield-via-relayer
CategoryEVM Onchain
Connectorrailgun
Requires gasNo
Funds movementNone declared
Tagsblockchain, privacy, railgun, unshield, zk, gasless, relay, wallet-funding

Payload Schema

FieldTypeRequiredDescription
chainIdnumberYesChain ID. Supported: Ethereum (1), BNB Chain (56), Polygon (137), Arbitrum (42161)
tokenAddressstringYesERC20 token address to unshield (e.g., WETH address)
amountstringYesTotal amount to unshield in wei (relayer fee is deducted, recipient receives amount minus fee). When deductRelayerFee is true, the actual unshield total is reduced by the fee percentage first.
recipientAddressstringYesPublic address to receive unshielded tokens
deductRelayerFeebooleanNoWhen true, subtracts the relayer fee from the input amount before unshielding. Use this when passing the full private balance as amount — ensures unshield succeeds by leaving room for the broadcaster fee. Without this flag, amount is treated as the total to unshield (fee included).

Result Schema

FieldTypeRequiredDescription
statusstringYesStatus of the unshield operation
transactionHashstringNoTransaction hash of the unshield on-chain
blockNumbernumberNoBlock number where the transaction was confirmed
relayerFeestringNoFee deducted by relayer in token wei
amountReceivedstringNoAmount received by recipient after relayer fee (in wei)
gasUsedstringNoGas used for the unshield transaction
proofTimenumberNoTime taken to generate ZK proof in milliseconds
errorCodestringNoError code if status is error
errorMessagestringNoError message if status is error

Examples

json
{ "type": "railgun-unshield-via-relayer", "payload": { "chainId": 1, "tokenAddress": "0x0000000000000000000000000000000000000000", "amount": "1000000", "recipientAddress": "0x0000000000000000000000000000000000000000" }, "children": [], "connector": { "type": "railgun", "id": "conn_railgun" }}

Payload fields can use workflow expressions such as {{$trigger.body.amount}}, {{$nodes.fetch.result.price}}, and {{$props.asset}} when the value should come from a trigger, prior node, or reusable workflow prop.

Ask a question... ⌘I