{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/wallet/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Cross-chain raw signing for EVM wallets","description":"User guides, API reference, and support resources.","siteUrl":"https://docs.ripple.com/products/custody","lang":"en-US","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"cross-chain-raw-signing-for-evm-wallets","__idx":0},"children":["Cross-chain raw signing for EVM wallets"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Today we are releasing ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["cross-chain raw signing"]}," in Wallet-as-a-Service (Palisade). EVM wallets can now raw-sign transactions for chain IDs that Wallet-as-a-Service (Palisade) doesn't natively integrate. A new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}," policy matcher controls access."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Cross-chain raw signing returns a signature only — no broadcast. You are responsible for submitting the signed transaction to the target chain."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"background","__idx":1},"children":["Background"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Customers need to sign EVM transactions for chains that Wallet-as-a-Service (Palisade) hasn't yet onboarded — for example, custom L2s, testnets, or newer EVM chains. Previously, raw signing rejected any transaction whose chain ID didn't match the wallet's native blockchain. Cross-chain raw signing lifts that restriction for EVM wallets while keeping authorization under explicit policy control."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"key-features","__idx":2},"children":["Key features"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Same endpoint"]}," — Cross-chain raw signing uses the existing raw transaction endpoint. No new endpoints, wallet types, or transaction actions."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["New ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}," matcher"]}," — Add a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}," matcher on a wallet policy to allow raw signing for a specific EVM chain ID. Wallet-as-a-Service skips policies without a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}," matcher for cross-chain transactions — you must explicitly authorize each chain ID."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Sign-only"]}," — Cross-chain raw signing forces ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sign_only=true"]},". Wallet-as-a-Service rejects requests with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sign_only=false"]}," for a non-native chain ID with HTTP 400."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["EVM-only"]}," — Available for EVM wallets only, for EVM chain IDs only."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Natively-integrated chain IDs rejected"]}," — Wallet-as-a-Service rejects a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}," matcher value that matches a chain it already integrates natively. Use the standard raw signing flow for those chains."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Matcher scoping"]}," — Combine ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USER"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["API_CREDENTIAL"]},", or other matchers to scope cross-chain signing authority per user, per credential, or per counterparty."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"example","__idx":3},"children":["Example"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Allow API credential ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cred-uuid"]}," to sign up to 5 transactions per 24 hours on chain ID ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["10"]}," (Optimism):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"limitType\": \"ROLLING_DURATION\",\n  \"symbol\": \"ETH\",\n  \"limitQty\": \"5\",\n  \"duration\": \"86400s\",\n  \"matchers\": [\n    { \"type\": \"CHAIN_ID\",       \"value\": \"10\" },\n    { \"type\": \"API_CREDENTIAL\", \"value\": \"cred-uuid\" }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"documentation","__idx":4},"children":["Documentation"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/transactions/raw-signing#cross-chain-raw-signing-evm"},"children":["Cross-chain raw signing"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/policies/policies-reference#chain_id"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHAIN_ID"]}," matcher reference"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/transactions/cross-chain-transactions"},"children":["Cross-chain transactions"]}]}]}]},"headings":[{"value":"Cross-chain raw signing for EVM wallets","id":"cross-chain-raw-signing-for-evm-wallets","depth":1},{"value":"Background","id":"background","depth":2},{"value":"Key features","id":"key-features","depth":2},{"value":"Example","id":"example","depth":2},{"value":"Documentation","id":"documentation","depth":2}],"frontmatter":{"title":"Cross-chain raw signing for EVM wallets","seo":{"title":"Cross-chain raw signing for EVM wallets"}},"lastModified":"2026-04-28T09:46:25.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/wallet/changelogs/cross-chain-raw-signing","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}