Input Fields
Arkade leverages the unknown field mechanism by introducing its own field namespace under key type222
(0xDE
), enabling protocol-specific functionality while remaining interoperable with standard tooling. Each field appears in the PSBT input map under key type 0xDE
, following the PSBT unknown-field encoding rules.
Name | Type | Key | Purpose | Value Format |
---|---|---|---|---|
taptree | 0xDE | 0x74617074726565 (“taptree”) | A list of tapscript leaves | Sequence of tapscript leaves (depth + version + script). |
expiry | 0xDE | 0x657870697279 (“expiry”) | Specifies relative timelock (CSV) for input spending | BIP68 sequence encoding |
cosigner | 0xDE | 0x636F7369676E6572 (“cosigner”) + <uint32_key_index> | Identifies indexed Musig2 cosigner public keys | 33-byte compressed public key |
condition | 0xDE | 0x636F6E646974696F6E (“condition”) | Adds custom witness elements for script execution | raw witness bytes |
Field Details
Taptree Field
Taptree Field
Field:
Purpose: Embeds a Taproot script tree for complex input spending conditions.
Key Format:
Value Format: TapTree encoding (variable length)The TapTree is encoded as a sequence of tapscript leaves, where each leaf contains:
taptree
Purpose: Embeds a Taproot script tree for complex input spending conditions.
Key Format:
0xDE
+ "taptree"
(7 bytes)Value Format: TapTree encoding (variable length)The TapTree is encoded as a sequence of tapscript leaves, where each leaf contains:
- Depth (1 byte): Always 1 for single-level trees
- Leaf version (1 byte): Always tapscript version (
0xC0
) - Script length (compact size): Length of the script in bytes
- Script bytes: The actual tapscript
Expiry Field
Expiry Field
Field:
Purpose: Defines a relative locktime (CSV) condition for the input.
Key Format:
Value Format: BIP68 sequence encoding (1–5 bytes, little-endian)Example:
expiry
Purpose: Defines a relative locktime (CSV) condition for the input.
Key Format:
0xDE
+ "expiry"
(6 bytes)Value Format: BIP68 sequence encoding (1–5 bytes, little-endian)Example:
Cosigner Field
Cosigner Field
Field:
Purpose: Specifies indexed Musig2 cosigner public keys.
Key Format:
Value Format: 33-byte compressed public keyIndex is a 4-byte big-endian integer appended to the base key. This allows multiple cosigner fields per input, each with a unique index for proper ordering.Example:
cosigner
Purpose: Specifies indexed Musig2 cosigner public keys.
Key Format:
0xDE
+ "cosigner"
+ <uint32_index>
(11 bytes)Value Format: 33-byte compressed public keyIndex is a 4-byte big-endian integer appended to the base key. This allows multiple cosigner fields per input, each with a unique index for proper ordering.Example:
Condition Field
Condition Field
Field:
Purpose: Provides additional witness elements for custom script execution.
Key Format:
Value Format: PSBT witness encoding (compact size + data)Each witness includes:
condition
Purpose: Provides additional witness elements for custom script execution.
Key Format:
0xDE
+ "condition"
(9 bytes)Value Format: PSBT witness encoding (compact size + data)Each witness includes:
- Number of witness elements (compact size)
- For each element: length (compact size) + data
Reference Implementations
The reference implementations are available in thearkd
codebase:
PSBT fields
Core field definitions and encoding/decoding