Skip to main content
These templates keep an app-owned wallet to addresses you already know: the recipients it pays and the contracts it calls. Replace the placeholder addresses with your own before you publish.

Allow only known recipients

Use this when the wallet should only pay addresses you control or have vetted. The policy denies an ETH transfer on Base to any address outside the list.
  1. On your Development key, open Permissions, select the Guardrails tab, and select Add or New Guardrail.
  2. Enter a Guardrail Policy Name. In Networks, clear Ethereum (1), select Base (8453), and select Continue.
  3. Select Transfer ETH, then Add Condition. Keep Recipient address, choose is one of, and enter the addresses separated by commas.
  4. Select Review, then Save Draft, then Activate on the draft.
Test it on your Development key: sign a transfer to a listed address and one to an unlisted address. Only the second is denied.
The rule covers native ETH transfers only. On Solana, Cosmos, Stellar or Sui, choose the Native transfer action in the form and add the same Recipient address condition with addresses in that network’s format.

Allow one function on one contract

Use this when the wallet should only ever call a single protocol function, such as a deposit. The policy denies a contract call on Base unless it calls deposit on the listed contract.
  1. On your Development key, open Permissions, select the Guardrails tab, and select Add or New Guardrail.
  2. Enter a Guardrail Policy Name. In Networks, clear Ethereum (1), select Base (8453), and select Continue.
  3. Select Call a contract. Enter the contract in Contract Address and deposit in Function Name. No condition is needed.
  4. Select Review. The Review step warns that no conditions are set, but the contract and function still limit the rule, as the Normalized policy JSON shows. Select Save Draft, then Activate on the draft.
Para reads the contract and function only from calls it can decode with the contract’s ABI. The rule starts with a request.classification check, so a call Para cannot decode does not match it and stays allowed. To deny those calls too, use the next template.
Test it on your Development key: sign a deposit call on the listed contract, then a call to another function. Only the second is denied.
Adding a second Call a contract action in the form does not widen the list. Each action becomes its own rule that denies every call outside its own contract and function, so two actions together deny every decoded call. To list several contracts or functions, use the next template.

Allow listed contracts and functions

Use this when the wallet works with a few contracts and calls Para cannot decode must not slip through. The Developer Portal forms cannot express it, so publish it as JSON.
guardrail-contract-allowlist.json
The policy has two rules:
  • listed-contracts-only checks request.target, the contract the transaction calls. Para reads it from every contract call, decoded or not, so a call to any unlisted contract is denied.
  • listed-functions-only checks the function on calls Para can decode, and denies anything other than deposit or withdraw.
Test it on your Development key: sign a call to a listed contract, a call to an unlisted contract, and a call to another function on a listed contract. Only the first signs.
Contract calls are the call_contract action. ERC-20 transfers and approvals, NFT transfers, Safe transactions and deployments are separate actions, so this policy does not limit them. On Solana, Cosmos, Stellar or Sui, the form’s Execution target action pins the program or contract a transaction calls. A Solana transaction that creates the recipient’s associated token account and then sends one TransferChecked to it is a transfer_tokens request, so this policy does not limit it either.

Publish your allowlists

Test recipients and contracts are often not the ones you use in production. Para reviews the policies active on your Development key and applies them to production, so make sure the lists hold your production addresses before you request a production review.