changedOutput schema / anyOf
Previous value: -[
- {
- "additionalProperties": false,
- "properties": {
- "data": {
- "additionalProperties": false,
- "properties": {
- "approval": {
- "additionalProperties": {},
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "approvalData": {
- "additionalProperties": {},
- "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "deposit": {
- "additionalProperties": {},
- "description": "DEPOSIT only",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "executionType": {
- "enum": [
- "DEPOSIT",
- "TRANSACTION",
- "SIGNATURE"
- ],
- "type": "string"
- },
- "fee": {
- "additionalProperties": {},
- "description": "When your key sets a fee on a route with none of its own: { amount, address, chainId, transaction? }, paid by the user to RAVN in the input token; deposit.amount (or the transaction) already leaves it out. On DEPOSIT (Rift, private swaps) and on EVM TRANSACTION (Eco, Layerswap, Mayan routes paying no referrer). EVM: send `transaction` exactly as given — on its own, or, for an ERC-20 fee, in the same wallet batch or relay as the swap (EIP-5792 / 7702 / 4337; one fee-bearing swap per batch). A native-coin deposit or fee is never batched: send each as a plain tx of its own from a regular wallet. Sent on its own, send the fee once the deposit or swap has confirmed: a fee paid on a swap the venue refunds stays with RAVN and nothing is owed on it. Then pass the on-chain hash of the tx that carried it (not a batch id or userOpHash) as txHash on every ravn_status poll — it counts once confirmed. Bitcoin (no `transaction`): pay `amount` sats to `address` as an extra output of the SAME transaction that pays the deposit — pass them to ravn_btc_prepare_send as feeAddress/feeAmountSats. Solana deposit (no `transaction`): add the fee to the SAME transaction that pays the deposit exactly deposit.amount — SOL: a System transfer of `amount` lamports to `address`; a token: createAssociatedTokenAccountIdempotent for `address` and the input mint (under the mint's token program), then transferChecked of `amount` to that associated token account; a fee in a transaction of its own isn't found. A Solana TRANSACTION RAVN builds has no `fee`: it's already inside transaction.serialized — send it from the signing wallet itself. Skip it and the swap still fills, but no fee is owed",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "quoteToken": {
- "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
- "type": "string"
- },
- "sandbox": {
- "const": true,
- "description": "A sandbox quote's execution: a test, send nothing from it",
- "type": "boolean"
- },
- "statusRef": {
- "description": "Poll ravn_status with this. Always set for DEPOSIT and SIGNATURE, and on a TRANSACTION whenever the venue tracks the swap by its own key (compose, Relay, Layerswap, Garden…); otherwise poll a TRANSACTION with the origin tx hash",
- "type": "string"
- },
- "submit": {
- "additionalProperties": {},
- "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "transaction": {
- "additionalProperties": {},
- "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "typedData": {
- "additionalProperties": {},
- "description": "SIGNATURE only",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- }
- },
- "required": [
- "executionType",
- "quoteToken"
- ],
- "type": "object"
- },
- "meta": {
- "additionalProperties": false,
- "properties": {
- "requestId": {
- "type": "string"
- },
- "version": {
- "type": "string"
- }
- },
- "required": [
- "requestId",
- "version"
- ],
- "type": "object"
- }
- },
- "required": [
- "data",
- "meta"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "error": {
- "additionalProperties": false,
- "properties": {
- "code": {
- "type": "string"
- },
- "details": {},
- "message": {
- "type": "string"
- }
- },
- "required": [
- "code",
- "message"
- ],
- "type": "object"
- },
- "meta": {
- "additionalProperties": false,
- "properties": {
- "requestId": {
- "type": "string"
- },
- "version": {
- "type": "string"
- }
- },
- "required": [
- "requestId",
- "version"
- ],
- "type": "object"
- }
- },
- "required": [
- "error",
- "meta"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "properties": {
+ "data": {
+ "additionalProperties": false,
+ "properties": {
+ "approval": {
+ "additionalProperties": {},
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "approvalData": {
+ "additionalProperties": {},
+ "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "batch": {
+ "description": "Whether `calls` may go in one atomic wallet batch (EIP-5792); simulate first, and send them one by one if that fails",
+ "type": "boolean"
+ },
+ "calls": {
+ "description": "EVM: every transaction to send, in order ({ to, data, value, chainId }: approval reset, approval, the swap or the deposit transfer, RAVN's fee). Each once the one before has succeeded (stop if one reverts), or all in one atomic wallet batch when `batch` is true",
+ "items": {
+ "additionalProperties": {},
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "deposit": {
+ "additionalProperties": {},
+ "description": "DEPOSIT only: { address, amount, chainId?, expiresAt?, psbt?, transaction? }. psbt (Bitcoin, from a bc1q userAddress): the deposit, RAVN's fee output and change, ready to sign and broadcast. transaction (Solana deposit carrying RAVN's fee): deposit and fee in one unsigned transaction, to sign and send within a minute",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "executionType": {
+ "enum": [
+ "DEPOSIT",
+ "TRANSACTION",
+ "SIGNATURE"
+ ],
+ "type": "string"
+ },
+ "fee": {
+ "additionalProperties": {},
+ "description": "When your key sets a fee on a route with none of its own: { amount, address, chainId, transaction? }, paid by the user to RAVN in the input token; deposit.amount (or the transaction) already leaves it out. On DEPOSIT (Rift, private swaps) and on EVM TRANSACTION (Eco, Layerswap, Mayan routes paying no referrer). EVM: send `transaction` exactly as given — on its own, or, for an ERC-20 fee, in the same wallet batch or relay as the swap (EIP-5792 / 7702 / 4337; one fee-bearing swap per batch). A native-coin deposit or fee is batched only where `batch` says so (beside a NEAR deposit on Ethereum, Base or Polygon); otherwise send each as a plain tx of its own from a regular wallet. Sent on its own, send the fee once the deposit or swap has confirmed: a fee paid on a swap the venue refunds stays with RAVN and nothing is owed on it. Then pass the on-chain hash of the tx that carried it (not a batch id or userOpHash) as txHash on every ravn_status poll — it counts once confirmed. Bitcoin (no `transaction`): pay `amount` sats to `address` as an extra output of the SAME transaction that pays the deposit — pass them to ravn_btc_prepare_send as feeAddress/feeAmountSats. Solana deposit (no `transaction`): add the fee to the SAME transaction that pays the deposit exactly deposit.amount — SOL: a System transfer of `amount` lamports to `address`; a token: createAssociatedTokenAccountIdempotent for `address` and the input mint (under the mint's token program), then transferChecked of `amount` to that associated token account; a fee in a transaction of its own isn't found. A Solana TRANSACTION RAVN builds has no `fee`: it's already inside transaction.serialized — send it from the signing wallet itself. Skip it and the swap still fills, but no fee is owed",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "quoteToken": {
+ "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token",
+ "type": "string"
+ },
+ "sandbox": {
+ "const": true,
+ "description": "A sandbox quote's execution: a test, send nothing from it",
+ "type": "boolean"
+ },
+ "statusRef": {
+ "description": "Poll ravn_status with this. Always set for DEPOSIT and SIGNATURE, and on a TRANSACTION whenever the venue tracks the swap by its own key (compose, Relay, Layerswap, Garden…); otherwise poll a TRANSACTION with the origin tx hash",
+ "type": "string"
+ },
+ "submit": {
+ "additionalProperties": {},
+ "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "transaction": {
+ "additionalProperties": {},
+ "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "typedData": {
+ "additionalProperties": {},
+ "description": "SIGNATURE only",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "executionType",
+ "quoteToken"
+ ],
+ "type": "object"
+ },
+ "meta": {
+ "additionalProperties": false,
+ "properties": {
+ "requestId": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "requestId",
+ "version"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "data",
+ "meta"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "error": {
+ "additionalProperties": false,
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "details": {},
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "message"
+ ],
+ "type": "object"
+ },
+ "meta": {
+ "additionalProperties": false,
+ "properties": {
+ "requestId": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "requestId",
+ "version"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "error",
+ "meta"
+ ],
+ "type": "object"
+ }
+]