From 7ec37e170430e1f3480d8acd98928ad6d9e17fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kaan=20Uzdo=C4=9Fan?= Date: Tue, 4 Aug 2026 14:27:51 +0300 Subject: [PATCH] Rename `layout` to `customEncoding`; expand JSON examples Two mechanical changes, no semantic ones. 1. Rename the `layout` key to `customEncoding` everywhere it refers to the mechanism: the Specification heading and prose, all JSON examples in the ERC, the companion JSON Schema (including the `$layout` definition group and every `#/$layout/...` reference), and the example descriptors under assets/erc-0000/. Two occurrences are deliberately left alone: the `title:` frontmatter, and "an ABI-encoded `array` data layout" under `sequence`, which uses "layout" as an ordinary English word rather than as the key name. 2. Reformat every JSON block in the ERC, replacing the mix of single-line and multi-line styles with one consistent rule: any object or array that contains another object or array is expanded one level per line, while a flat one holding only scalars stays on a single line if it fits in 100 columns. So nesting is always visible, but short leaf entries such as { "path": "to", "label": "To" } are not spread over four lines. Verified: all 47 `$ref`s in the schema still resolve, all 12 example descriptors validate against the renamed schema (the pre-rename `layout` key is rejected by it, so the check is not vacuous), and every JSON block in the ERC round-trips through a parser unchanged apart from whitespace. Co-Authored-By: Claude Opus 4.8 --- ERCS/erc-0000.md | 287 ++++++++++++------ .../erc7730-non-abi-dispatch.schema.json | 72 ++--- .../example-balancer-relayer-library.json | 18 +- assets/erc-0000/example-erc7579-execute.json | 6 +- assets/erc-0000/example-safe-multisend.json | 2 +- .../example-uniswap-v4-initialize.json | 2 +- assets/erc-0000/example-universal-router.json | 2 +- .../example-wormhole-token-bridge.json | 4 +- 8 files changed, 249 insertions(+), 144 deletions(-) diff --git a/ERCS/erc-0000.md b/ERCS/erc-0000.md index 25b41e5f504..1487c75f2a2 100644 --- a/ERCS/erc-0000.md +++ b/ERCS/erc-0000.md @@ -26,7 +26,7 @@ Instead, we can add some features to ERC-7730 that would allow us to cover the m ## Specification -### `layout` +### `customEncoding` The main mechanism for declaring any parameter whose contents cannot be expressed using Solidity-friendly ABI-encoded data structures. @@ -36,22 +36,28 @@ It can also be provided to values of other formats if these represent some neste { "sendPacked(bytes data)": { "fields": [ - { + { "path": "data", - "layout": { + "customEncoding": { "type": "object", "fields": [ - { "name": "to", "schema": { "type": "address" } }, - { "name": "amount", "schema": { "type": "uint", "bytes": 32 } } - ] - } + { + "name": "to", + "schema": { "type": "address" } + }, + { + "name": "amount", + "schema": { "type": "uint", "bytes": 32 } + } + ] } - ] - } + } + ] + } } ``` -Every `layout` node consumes a well-defined, computable number of bytes from its buffer. +Every `customEncoding` node consumes a well-defined, computable number of bytes from its buffer. The `switch`'s path-sourced form is an exception as it reads an already-resolved value instead of parsing bytes. ### `sequence` @@ -63,21 +69,44 @@ The elements count for `sequence` parameters is optional, and decoding may conti For example, for a byte array with each byte representing a different element: ```json -{ "runCommands(bytes commands)": { - "fields": [ - { "path": "commands", "layout": { "type": "sequence", "element": { "type": "uint", "bytes": 1 } } } - ] -}} +{ + "runCommands(bytes commands)": { + "fields": [ + { + "path": "commands", + "customEncoding": { + "type": "sequence", + "element": { "type": "uint", "bytes": 1 } + } + } + ] + } +} ``` Alternatively, `count` MAY give a literal element count, or `countFrom` may name a sibling field decoded earlier in the same object, sizing the sequence from a previously-decoded value – as with a Wormhole VAA's guardian-signature array, sized by its own `numSignatures` byte, in the Test Case below. ```json -{ "name": "signatures", "schema": { "type": "sequence", "countFrom": "numSignatures", - "element": { "type": "object", "fields": [ - { "name": "guardianIndex", "schema": { "type": "uint", "bytes": 1 } }, - { "name": "signature", "schema": { "type": "bytes", "length": 65 } } - ]}}} +{ + "name": "signatures", + "schema": { + "type": "sequence", + "countFrom": "numSignatures", + "element": { + "type": "object", + "fields": [ + { + "name": "guardianIndex", + "schema": { "type": "uint", "bytes": 1 } + }, + { + "name": "signature", + "schema": { "type": "bytes", "length": 65 } + } + ] + } + } +} ``` ### `object` @@ -87,22 +116,44 @@ The mechanism for declaring an entry in a `sequence` data structure that is not It can also be used as a stand-in for any other complex data structure in the formating process. ```json -{ "batchCalls(bytes transactions)": { - "fields": [ - { "path": "transactions", "layout": { "type": "sequence", "element": { "type": "object", "fields": [ - { "name": "operation", "schema": { "type": "uint", "bytes": 1 } }, - { "name": "to", "schema": { "type": "address" } } - ]}}} - ] -}} +{ + "batchCalls(bytes transactions)": { + "fields": [ + { + "path": "transactions", + "customEncoding": { + "type": "sequence", + "element": { + "type": "object", + "fields": [ + { + "name": "operation", + "schema": { "type": "uint", "bytes": 1 } + }, + { + "name": "to", + "schema": { "type": "address" } + } + ] + } + } + } + ] + } +} ``` An `object`'s field entries may carry `format`,`params`, `label` and `schema` parameters. This allows a packed field to declare how it should be displayed using relative paths to that object's own sibling members. ```json -{ "name": "callData", "schema": { "type": "bytes" }, "label": "Execution", "format": "calldata", - "params": { "calleePath": "target", "amountPath": "value" } } +{ + "name": "callData", + "schema": { "type": "bytes" }, + "label": "Execution", + "format": "calldata", + "params": { "calleePath": "target", "amountPath": "value" } +} ``` ### `bitfield` @@ -110,10 +161,17 @@ This allows a packed field to declare how it should be displayed using relative A fixed-width value whose individual bits or bit ranges each carry independent, named meaning – unlike `object`, whose fields are always byte-aligned and never overlap. ```json -{ "type": "bitfield", "bytes": 20, "fields": [ - { "name": "beforeSwap", "bit": 7 }, - { "name": "poolId", "bits": [19, 8] } -]} +{ + "type": "bitfield", + "bytes": 20, + "fields": [ + { "name": "beforeSwap", "bit": 7 }, + { + "name": "poolId", + "bits": [19, 8] + } + ] +} ``` Each entry is either `{name, bit}` (a single flag, decoded as `bool`) or `{name, bits: [hi, lo]}` (an inclusive bit range, decoded as an unsigned integer). @@ -123,48 +181,74 @@ Each entry is either `{name, bit}` (a single flag, decoded as `bool`) or `{name, The mechanism that allows the decoding to choose the format based on a certain parameter decoded previously. Represents a common pattern of carrying the decoding format flag separately form the data being decoded. ```json -{ "execute(uint8 kind,bytes data)": { - "fields": [ - { "path": "data", "switch": { - "expression": { "path": "kind" }, - "cases": { - "0x00": { "(address to,uint256 amount)": { - "fields": [ - { "path": "to", "label": "To" }, - { "path": "amount", "label": "Amount" } - ] - }}, - "0x01": { "(address from,address to,uint256 amount,uint256 deadline)": { - "fields": [ - { "path": "from", "label": "From" }, - { "path": "to", "label": "To" }, - { "path": "amount", "label": "Amount" }, - { "path": "deadline", "label": "Deadline", "format": "date", "params": { "encoding": "timestamp" } } - ] - }} +{ + "execute(uint8 kind,bytes data)": { + "fields": [ + { + "path": "data", + "switch": { + "expression": { "path": "kind" }, + "cases": { + "0x00": { + "(address to,uint256 amount)": { + "fields": [ + { "path": "to", "label": "To" }, + { "path": "amount", "label": "Amount" } + ] + } + }, + "0x01": { + "(address from,address to,uint256 amount,uint256 deadline)": { + "fields": [ + { "path": "from", "label": "From" }, + { "path": "to", "label": "To" }, + { "path": "amount", "label": "Amount" }, + { + "path": "deadline", + "label": "Deadline", + "format": "date", + "params": { "encoding": "timestamp" } + } + ] + } + } + } + } } - }} - ] -}} + ] + } +} ``` When a `switch` case's tuple resolves to an array (`(...)[]`), its own `fields` can address that array's elements with `.[]` in place of the missing array name, e.g. `.[].callData`. `#.` inside a case's own `fields` still resolves against the absolute root of the structured data. -`switch` can also appear as a `layout` node instead of a field-level key: +`switch` can also appear as a `customEncoding` node instead of a field-level key: ```json -{ "exampleCall(uint256 outputReference)": { - "fields": [ - { "path": "outputReference", "label": "Save result as", "layout": { +{ + "exampleCall(uint256 outputReference)": { + "fields": [ + { + "path": "outputReference", + "label": "Save result as", + "customEncoding": { "type": "switch", - "expression": { "type": "uint", "bytes": 32, "mask": "0xfff0000000000000000000000000000000000000000000000000000000000000" }, + "expression": { + "type": "uint", + "bytes": 32, + "mask": "0xfff0000000000000000000000000000000000000000000000000000000000000" + }, "cases": { - "0xba10000000000000000000000000000000000000000000000000000000000000": { "label": "Set by an earlier step, not known yet", "intent": "info" }, + "0xba10000000000000000000000000000000000000000000000000000000000000": { + "label": "Set by an earlier step, not known yet", + "intent": "info" + }, "$default": { "format": "raw" } } - }} - ] + } + } + ] } } ``` @@ -172,7 +256,7 @@ When a `switch` case's tuple resolves to an array (`(...)[]`), its own `fields` `mask` is available on any `switch` expression and is applied to the raw value before matching `cases`. It lets a dispatch tag share space with unrelated bits, as with `UniversalRouter`'s revert-allowed flag in the Test Case below. -Inside a `layout` tree, `switch`'s inline form may also use `payloadFrom` in place of `$index`, naming a sibling ABI-decoded array to read at the same index as the enclosing `sequence` element. +Inside a `customEncoding` tree, `switch`'s inline form may also use `payloadFrom` in place of `$index`, naming a sibling ABI-decoded array to read at the same index as the enclosing `sequence` element. ### `operation` @@ -193,16 +277,24 @@ The mechanism to declare that some data represents an interaction with an extern This is an equivalent of `calldata` format from ERC-7730 for contracts that perform their own encoding of the calldata, or execute `delegatecall` and `staticcall` operations. ```json -{ "executeSendReward(address account,uint256 amount)": { - "fields": [ - { "path": "account", "label": "Account" }, - { "path": "amount", "label": "Amount" }, - { "interaction": { - "to": "target", - "signature": "grantReward(address,uint256)", - "args": [ { "path": "account" }, { "path": "amount" } ] } } - ] -}} +{ + "executeSendReward(address account,uint256 amount)": { + "fields": [ + { "path": "account", "label": "Account" }, + { "path": "amount", "label": "Amount" }, + { + "interaction": { + "to": "target", + "signature": "grantReward(address,uint256)", + "args": [ + { "path": "account" }, + { "path": "amount" } + ] + } + } + ] + } +} ``` A wallet MUST resolve the matched target's own `intent`/`interpolatedIntent`/`fields` using the bound `args` values in place of that target's own decoded parameters, applying the same unknown-selector fallback if `to`'s descriptor has no entry matching `signature`. @@ -214,21 +306,34 @@ A [structured data format specification](./erc-7730.md) MAY declare a top-level A mechanism for element in a `sequence` to reference their position for indexing into other `sequence` or array-like parameters. ```json -{ "execute(bytes commands,bytes[] inputs)": { - "fields": [ - { "path": "commands", "layout": { "type": "sequence", "element": { "type": "uint", "bytes": 1 } } }, - { "path": "inputs[]", "switch": { - "expression": { "path": "commands[$index]" }, - "cases": { - "0x00": { "(address to)": { - "fields": [ - { "path": "to", "label": "To" } - ] - }} +{ + "execute(bytes commands,bytes[] inputs)": { + "fields": [ + { + "path": "commands", + "customEncoding": { + "type": "sequence", + "element": { "type": "uint", "bytes": 1 } + } + }, + { + "path": "inputs[]", + "switch": { + "expression": { "path": "commands[$index]" }, + "cases": { + "0x00": { + "(address to)": { + "fields": [ + { "path": "to", "label": "To" } + ] + } + } + } + } } - }} - ] -}} + ] + } +} ``` ## Test Cases @@ -339,7 +444,7 @@ function open(OnchainCrossChainOrder calldata order) external; #### What makes this encoding unusual 1. `orderData`'s ABI type is selected by `orderDataType`, a `bytes32` equal to the `keccak256` hash of the target tuple's own Solidity type string (`keccak256("AcrossOrderData(address inputToken,...)")`) rather than a small, contract-defined enum – an open-ended, hash-keyed dispatch. -2. Both the tag and the payload are already plain sibling ABI parameters of `open` itself, so no `layout` node is needed – only `switch`. +2. Both the tag and the payload are already plain sibling ABI parameters of `open` itself, so no `customEncoding` node is needed – only `switch`. Using ERC-0000, this input can be described for Clear Signing – see [ERC-7683 Order Example](../assets/erc-0000/example-erc7683-order.json). @@ -373,7 +478,7 @@ library Hooks { #### What makes this encoding unusual 1. `key.hooks` is an ordinary ABI `address` parameter, but its lowest 14 bits are individually meaningful flags (`beforeSwap`, `afterSwap`, `beforeAddLiquidity`, etc.) chosen by **mining a vanity address at hook-deployment time** – the address *is* the bitfield, with no separate flags parameter anywhere in the call. -2. Unlike every other Test Case here, this needs no `sequence` or `switch` at all – just a `bitfield` layout attached directly to an already-ABI-decoded scalar, to tell a signer which of a hook's callbacks it is trusting to run on every swap/mint/burn against this pool. +2. Unlike every other Test Case here, this needs no `sequence` or `switch` at all – just a `bitfield` `customEncoding` node attached directly to an already-ABI-decoded scalar, to tell a signer which of a hook's callbacks it is trusting to run on every swap/mint/burn against this pool. Using ERC-0000, this input can be described for Clear Signing – see [Uniswap v4 Initialize Example](../assets/erc-0000/example-uniswap-v4-initialize.json). diff --git a/assets/erc-0000/erc7730-non-abi-dispatch.schema.json b/assets/erc-0000/erc7730-non-abi-dispatch.schema.json index 8151c17d8bb..5ff95311dac 100644 --- a/assets/erc-0000/erc7730-non-abi-dispatch.schema.json +++ b/assets/erc-0000/erc7730-non-abi-dispatch.schema.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "version": "2.0.0", "type": "object", - "description": "Full schema for ERC-7730 descriptors, including the layout/switch/interaction keys and the operation calldata param defined by the non-ABI-dispatch companion ERC (requires 7730). Based on erc7730-v2.schema.json; see that file for the unmodified base ERC-7730 schema, and the companion ERC's Specification section for the normative prose this schema encodes.", + "description": "Full schema for ERC-7730 descriptors, including the customEncoding/switch/interaction keys and the operation calldata param defined by the non-ABI-dispatch companion ERC (requires 7730). Based on erc7730-v2.schema.json; see that file for the unmodified base ERC-7730 schema, and the companion ERC's Specification section for the normative prose this schema encodes.", "properties": { "$schema": { "title": "Schema", @@ -353,7 +353,7 @@ "$ref": "#/$definitions/id" }, "switch": { - "$ref": "#/$layout/topLevelSwitch" + "$ref": "#/$customEncoding/topLevelSwitch" } }, "required": [ @@ -552,14 +552,14 @@ "$ref": "#/$format/encryptionParameters", "description": "If present, the field value is encrypted. The format specifies how to display the decrypted value." }, - "layout": { - "$ref": "#/$layout/node" + "customEncoding": { + "$ref": "#/$customEncoding/node" }, "switch": { - "$ref": "#/$layout/fieldSwitch" + "$ref": "#/$customEncoding/fieldSwitch" }, "interaction": { - "$ref": "#/$layout/interaction" + "$ref": "#/$customEncoding/interaction" } }, "allOf": [ @@ -718,11 +718,11 @@ { "not": { "required": [ - "layout", + "customEncoding", "format" ] }, - "$comment": "layout MUST NOT combine with format (non-abi-dispatch companion ERC, ### layout)." + "$comment": "customEncoding MUST NOT combine with format (non-abi-dispatch companion ERC, ### customEncoding)." }, { "not": { @@ -737,10 +737,10 @@ "not": { "required": [ "interaction", - "layout" + "customEncoding" ] }, - "$comment": "interaction is mutually exclusive with layout (non-abi-dispatch companion ERC, ### interaction)." + "$comment": "interaction is mutually exclusive with customEncoding (non-abi-dispatch companion ERC, ### interaction)." } ], "unevaluatedProperties": false @@ -1021,7 +1021,7 @@ "description": "The path to the associated spender, if the calldata can be associated with a container value." }, "operation": { - "$ref": "#/$layout/operationParam" + "$ref": "#/$customEncoding/operationParam" } }, "anyOf": [ @@ -1386,33 +1386,33 @@ }, "$id": "https://eips.ethereum.org/assets/eip-7730/erc7730-non-abi-dispatch.schema.json", "title": "ERC-7730 Non-ABI Dispatch Companion Schema", - "$layout": { + "$customEncoding": { "node": { - "title": "A layout node", + "title": "A customEncoding node", "oneOf": [ { - "$ref": "#/$layout/uint" + "$ref": "#/$customEncoding/uint" }, { - "$ref": "#/$layout/bytes" + "$ref": "#/$customEncoding/bytes" }, { - "$ref": "#/$layout/address" + "$ref": "#/$customEncoding/address" }, { - "$ref": "#/$layout/bool" + "$ref": "#/$customEncoding/bool" }, { - "$ref": "#/$layout/bitfield" + "$ref": "#/$customEncoding/bitfield" }, { - "$ref": "#/$layout/object" + "$ref": "#/$customEncoding/object" }, { - "$ref": "#/$layout/sequence" + "$ref": "#/$customEncoding/sequence" }, { - "$ref": "#/$layout/switchNode" + "$ref": "#/$customEncoding/switchNode" } ] }, @@ -1573,7 +1573,7 @@ "type": "string" }, "schema": { - "$ref": "#/$layout/node" + "$ref": "#/$customEncoding/node" }, "label": { "type": "string" @@ -1606,7 +1606,7 @@ "const": "sequence" }, "element": { - "$ref": "#/$layout/node" + "$ref": "#/$customEncoding/node" }, "count": { "type": "integer", @@ -1623,20 +1623,20 @@ "additionalProperties": false }, "switchNode": { - "title": "switch used as a layout node (inline, reads from the buffer at the cursor)", + "title": "switch used as a customEncoding node (inline, reads from the buffer at the cursor)", "type": "object", "properties": { "type": { "const": "switch" }, "expression": { - "$ref": "#/$layout/node" + "$ref": "#/$customEncoding/node" }, "payloadFrom": { "type": "string" }, "cases": { - "$ref": "#/$layout/switchCases" + "$ref": "#/$customEncoding/switchCases" } }, "required": [ @@ -1672,12 +1672,12 @@ "additionalProperties": false }, { - "$ref": "#/$layout/node" + "$ref": "#/$customEncoding/node" } ] }, "cases": { - "$ref": "#/$layout/switchCases" + "$ref": "#/$customEncoding/switchCases" } }, "required": [ @@ -1690,7 +1690,7 @@ "title": "A switch cases map, including the reserved $default key", "type": "object", "additionalProperties": { - "$ref": "#/$layout/switchCaseValue" + "$ref": "#/$customEncoding/switchCaseValue" } }, "switchCaseValue": { @@ -1701,12 +1701,12 @@ { "type": "object", "properties": { - "layout": { - "$ref": "#/$layout/node" + "customEncoding": { + "$ref": "#/$customEncoding/node" } }, "required": [ - "layout" + "customEncoding" ], "additionalProperties": false }, @@ -1714,7 +1714,7 @@ "type": "object", "properties": { "switch": { - "$ref": "#/$layout/fieldSwitch" + "$ref": "#/$customEncoding/fieldSwitch" } }, "required": [ @@ -1812,7 +1812,7 @@ "type": "object", "properties": { "switch": { - "$ref": "#/$layout/topLevelSwitch" + "$ref": "#/$customEncoding/topLevelSwitch" } }, "required": [ @@ -1824,7 +1824,7 @@ "type": "object", "properties": { "interaction": { - "$ref": "#/$layout/interaction" + "$ref": "#/$customEncoding/interaction" } }, "required": [ @@ -1945,5 +1945,5 @@ ] } }, - "$comment": "This is a full schema, not a thin extension of erc7730-v2.schema.json: composing new properties onto a schema closed with additionalProperties:false (calldataParameters) or reached only via $ref (field, whose own unevaluatedProperties:false does not see sibling allOf properties across a $ref boundary - verified empirically, not just by reading the spec) does not validate the way a thin allOf+$ref extension would suggest. Everything here is spliced directly into the same base schema objects instead. One side effect worth knowing: because field is modified in place rather than duplicated, layout/switch/interaction are also available inside $display/fieldGroup's and $display/reference's own nested fields, not just top-level display.formats.*.fields[], even though no current example exercises that." + "$comment": "This is a full schema, not a thin extension of erc7730-v2.schema.json: composing new properties onto a schema closed with additionalProperties:false (calldataParameters) or reached only via $ref (field, whose own unevaluatedProperties:false does not see sibling allOf properties across a $ref boundary - verified empirically, not just by reading the spec) does not validate the way a thin allOf+$ref extension would suggest. Everything here is spliced directly into the same base schema objects instead. One side effect worth knowing: because field is modified in place rather than duplicated, customEncoding/switch/interaction are also available inside $display/fieldGroup's and $display/reference's own nested fields, not just top-level display.formats.*.fields[], even though no current example exercises that." } \ No newline at end of file diff --git a/assets/erc-0000/example-balancer-relayer-library.json b/assets/erc-0000/example-balancer-relayer-library.json index 761d647326b..2112a7d135b 100644 --- a/assets/erc-0000/example-balancer-relayer-library.json +++ b/assets/erc-0000/example-balancer-relayer-library.json @@ -37,7 +37,7 @@ { "path": "authorization", "label": "Signed authorization", - "layout": { + "customEncoding": { "type": "object", "fields": [ { @@ -88,7 +88,7 @@ { "path": "poolId", "label": "Pool", - "layout": { + "customEncoding": { "type": "object", "fields": [ { @@ -167,7 +167,7 @@ { "path": "minBptAmountOut", "label": "Minimum pool tokens out", - "layout": { + "customEncoding": { "type": "switch", "expression": { "type": "uint", @@ -212,7 +212,7 @@ { "path": "outputReference", "label": "Save result as", - "layout": { + "customEncoding": { "type": "switch", "expression": { "type": "uint", @@ -239,7 +239,7 @@ { "path": "poolId", "label": "Pool", - "layout": { + "customEncoding": { "type": "object", "fields": [ { @@ -304,7 +304,7 @@ { "path": "bptAmountIn", "label": "Pool tokens in", - "layout": { + "customEncoding": { "type": "switch", "expression": { "type": "uint", @@ -348,7 +348,7 @@ { "path": "bptAmountIn", "label": "Pool tokens in", - "layout": { + "customEncoding": { "type": "switch", "expression": { "type": "uint", @@ -390,7 +390,7 @@ { "path": "bptAmountIn", "label": "Pool tokens in", - "layout": { + "customEncoding": { "type": "switch", "expression": { "type": "uint", @@ -440,7 +440,7 @@ { "path": "outputReferences[].key", "label": "Save result as", - "layout": { + "customEncoding": { "type": "switch", "expression": { "type": "uint", diff --git a/assets/erc-0000/example-erc7579-execute.json b/assets/erc-0000/example-erc7579-execute.json index 50624e5f014..e3707f3c2f3 100644 --- a/assets/erc-0000/example-erc7579-execute.json +++ b/assets/erc-0000/example-erc7579-execute.json @@ -31,7 +31,7 @@ { "path": "mode", "label": "Mode", - "layout": { + "customEncoding": { "type": "object", "fields": [ { @@ -81,7 +81,7 @@ }, "cases": { "0x00": { - "layout": { + "customEncoding": { "type": "object", "fields": [ { @@ -129,7 +129,7 @@ } }, "0xff": { - "layout": { + "customEncoding": { "type": "object", "fields": [ { diff --git a/assets/erc-0000/example-safe-multisend.json b/assets/erc-0000/example-safe-multisend.json index 462cee3c456..2e50dd1bb31 100644 --- a/assets/erc-0000/example-safe-multisend.json +++ b/assets/erc-0000/example-safe-multisend.json @@ -27,7 +27,7 @@ { "path": "transactions", "label": "Batched calls", - "layout": { + "customEncoding": { "type": "sequence", "element": { "type": "object", diff --git a/assets/erc-0000/example-uniswap-v4-initialize.json b/assets/erc-0000/example-uniswap-v4-initialize.json index abc75ad1783..900e6744b3e 100644 --- a/assets/erc-0000/example-uniswap-v4-initialize.json +++ b/assets/erc-0000/example-uniswap-v4-initialize.json @@ -52,7 +52,7 @@ { "path": "key.hooks", "label": "Hook permissions", - "layout": { + "customEncoding": { "type": "bitfield", "bytes": 20, "fields": [ diff --git a/assets/erc-0000/example-universal-router.json b/assets/erc-0000/example-universal-router.json index 7bb0bcd0955..cf56fca3f11 100644 --- a/assets/erc-0000/example-universal-router.json +++ b/assets/erc-0000/example-universal-router.json @@ -35,7 +35,7 @@ { "path": "commands", "label": "Commands", - "layout": { + "customEncoding": { "type": "sequence", "element": { "type": "uint", diff --git a/assets/erc-0000/example-wormhole-token-bridge.json b/assets/erc-0000/example-wormhole-token-bridge.json index cbc1d85e039..17b197d719c 100644 --- a/assets/erc-0000/example-wormhole-token-bridge.json +++ b/assets/erc-0000/example-wormhole-token-bridge.json @@ -27,7 +27,7 @@ { "path": "encodedVm", "label": "Signed message (VAA)", - "layout": { + "customEncoding": { "type": "object", "fields": [ { @@ -95,7 +95,7 @@ "expression": { "type": "uint", "bytes": 1 }, "cases": { "0x01": { - "layout": { + "customEncoding": { "type": "object", "fields": [ {