# Raw signing

Raw signing with Ripple Custody (Wallet) offers the ability to sign any transaction type available to a blockchain. It can be used on any transaction type if enabled.

This is an important feature of the Ripple Custody (Wallet) platform as it means customers can benefit from all natively supported transaction types of a blockchain as soon as they become available, regardless of whether that blockchain or transaction type is currently supported by Ripple Custody (Wallet).

Raw signing can be enabled and disabled for a wallet from wallet settings.

Disabled by default
Raw signing is a powerful and insecure signing method. It is therefore disabled by default. Please only enable raw signing for individual wallets if you fully understand this feature.

API documentation
See the [Ripple Custody (Wallet) API reference](/products/wallet/api-docs/palisade-api/palisade-api) for the raw signing endpoints. For XRP Ledger transaction types, see [Submit XRP Ledger transactions via the API](/products/wallet/transactions/xrpl/xrpl-via-the-api).

In this section
- [Transaction encoding formats](/products/wallet/transactions/raw-signing/encoding-formats) – Encode `encodedTransaction` for EVM chains, XRP Ledger, Solana, TRON, and 1Money
- [1Money transaction types](/products/wallet/transactions/raw-signing/1money-transaction-types) – Payloads for 1Money token operations


## Automatic chain routing (EVM)

For EVM wallets, the platform automatically detects the target blockchain from the `chainId` field in the encoded transaction and routes to the correct connector. You don't need to specify a `blockchain` parameter — the encoded transaction is the source of truth.

- **Known chain ID** — If the chain ID matches a natively integrated chain (Ethereum, Arbitrum, Polygon, Base, BNB Chain, Avalanche, 1Money), the platform routes the transaction to that chain's connector. The platform supports both `signOnly=true` and `signOnly=false`.
- **Unknown chain ID** — If the chain ID doesn't match any natively integrated chain, the platform treats the transaction as [cross-chain](#cross-chain-raw-signing-evm): it signs only and requires a policy with an explicit `CHAIN_ID` matcher.


1Money wallets are an exception: raw transactions from a 1Money wallet always execute on 1Money, regardless of the chain ID in the encoded transaction.

Blockchain parameter deprecated
The `blockchain` field on the raw transaction request is deprecated. The platform ignores it for all raw transactions. For EVM wallets, the chain ID in the encoded transaction determines routing — a contradicting `blockchain` value is ignored with no error or warning. Raw transactions from non-EVM wallets and 1Money wallets always execute on the wallet's native blockchain.

### Example: cross-chain EVM routing

An Ethereum wallet can sign and broadcast an Arbitrum transaction without any override:

```
POST /v2/vaults/{vaultId}/wallets/{walletId}/transactions/raw
{
  "encodedTransaction": "<RLP-encoded transaction with Arbitrum chainId>",
  "signOnly": false
}
```

The platform extracts the Arbitrum chain ID from the encoded transaction, routes to the Arbitrum connector, and broadcasts the transaction.

Fund the target chain
The platform doesn't check the wallet's balance on the target chain before broadcasting. Your address is the same on every EVM chain, but it needs the native token for gas on the target chain. If the address isn't funded there, the network rejects the transaction and it fails with an insufficient funds reason.

## Cross-chain raw signing (EVM)

For EVM wallets, you can raw-sign transactions for chain IDs that Ripple Custody (Wallet) doesn't natively integrate — for example, custom L2s, testnets, or chains Ripple Custody (Wallet) hasn't yet onboarded.

Cross-chain raw signing uses the same raw transaction endpoint. When the platform detects a chain ID that doesn't match any natively integrated chain, it enforces sign-only, checks a chain-ID-scoped policy, and returns the signature. Ripple Custody (Wallet) doesn't broadcast the transaction — you submit the signed transaction to the target chain yourself.

### Requirements

- **EVM-only** — Available for EVM wallets only.
- **Sign-only** — The request must set `signOnly=true`. Ripple Custody (Wallet) rejects requests with `signOnly=false` for an unknown chain ID with HTTP 400.
- **Explicit `CHAIN_ID` matcher required** — The wallet must have a policy whose matchers include a `CHAIN_ID` matcher for the target chain ID. Base policies without matchers don't apply to cross-chain transactions — a base policy alone doesn't authorize the sign.
- **Natively integrated chain IDs rejected** — Ripple Custody (Wallet) rejects a `CHAIN_ID` matcher value that matches a chain it integrates natively (for example, Ethereum mainnet `1`). Use the standard raw signing flow for those chains.


### Flow

1. Create a policy on the EVM wallet that includes a `CHAIN_ID` matcher for each chain ID you want to allow. See [Policy reference](/products/wallet/governance-and-controls/policies/policy-reference#chain_id) for the matcher format.
2. Submit a raw transaction to the standard raw signing endpoint with `signOnly=true`. Encode the transaction using the EVM format described in [Transaction encoding formats](/products/wallet/transactions/raw-signing/encoding-formats#evm-chains-ethereum-base-polygon-avalanche-arbitrum-bnb-chain), setting the `chainId` field to the target chain ID.
3. The platform detects the unknown chain ID, evaluates the policy, and returns the signature on success.
4. Submit the signed transaction to the target chain yourself.


No broadcast
Cross-chain raw signing returns a signature only. Ripple Custody (Wallet) has no connector for the target chain and doesn't publish the transaction. You're responsible for broadcasting the transaction — and for funding the address with the target chain's native gas token when you submit it.

## Related topics

- [Send assets via the API](/products/wallet/transactions/send-assets#evm-cross-chain-transfers-via-the-api) — Execute a transfer on another EVM chain with the `blockchain` field
- [Track transactions via the API](/products/wallet/transactions/view-and-track-transactions) — Follow a raw transaction to confirmation