Skip to main content

Transaction Types Reference

All state changes on ULedger are effected through signed transactions. This document catalogs every transaction type, its required fields, who can submit it, and what it does.

Every transaction shares a common envelope:

{
"type": "<TRANSACTION_TYPE>",
"sender": "<wallet-address>",
"blockchainId": "<chain-id>",
"signature": "<hex-signature-of-payload>",
"payload": { ... }
}

Wallet Transactions​

TX_CREATE_WALLET​

Creates a new wallet on-chain.

FieldTypeDescription
publicKeystringCompressed hex public key of the new wallet.
keyTypestringKey algorithm: secp256k1, ed25519, mldsa87, bls12377.
authGroupsmap{ "admin": {...}, "wallet": {...} } with CRUD booleans.
capabilitiesarrayOptional initial capabilities (must be ⊆ parent's capabilities).

Who can submit: Any registered wallet with wallet.Create == true in its auth groups. The submitting wallet becomes the new wallet's Parent.

Processing rules:

  1. Derive new wallet address as SHA256(lowercase(publicKey)).
  2. Validate parent exists and has CanCreateWallets() permission.
  3. Validate capability inheritance (child caps ⊆ parent caps).
  4. Create wallet, set Parent = sender.
  5. Add new wallet address to sender's SatelliteWallets array.

ALTER_WALLET​

Modifies an existing wallet: enable/disable, update auth groups, update capabilities.

FieldTypeDescription
walletAddressstringAddress of the wallet to alter.
enabledboolEnable or disable the wallet.
authGroupsmapReplacement auth groups (optional).
capabilitiesarrayReplacement capabilities (optional).

Who can submit: The wallet's parent, or any wallet with admin authority over the wallet.

Processing rules for disable: BFS cascade: all wallets in SatelliteWallets (recursively) are also disabled. This is atomic.

Processing rules for capabilities: Replacement must be a subset of the parent wallet's capabilities.


Entity Transactions​

CREATE_ENTITY​

Creates a new organizational entity.

FieldTypeDescription
namestring3–64 chars, lowercase, alphanumeric + dash.
entityTypestringORGANIZATION, DEPARTMENT, PERSONAL, SERVICE, DEVICE, AGENT.
parentstringParent entity address (empty for root).
metadatamapOptional key-value metadata.

Who can submit: For root entity: a root wallet (wallet.Parent == ""). For child entity: a wallet with ManageChildren == true on the parent entity.

Processing rules:

  • Parent must exist, be enabled, and support the requested child type.
  • Root wallet creating a root entity must not already have a wallet.Entity affiliation.
  • Sender becomes entity owner; auto-linked as admin-role with full permissions.
  • wallet.Entity backlink set on the creating wallet.

ALTER_ENTITY​

Updates entity metadata or enabled state.

FieldTypeDescription
entityAddressstringEntity to alter.
metadatamapReplacement or merged metadata.
enabledboolEnable or disable the entity.

Who can submit: Wallet with ManageMetadata == true (for metadata) or entity owner (for enable/disable).


TRANSFER_ENTITY​

Changes the entity owner to a new wallet.

FieldTypeDescription
entityAddressstringEntity to transfer.
newOwnerAddressstringAddress of the new owner wallet.

Who can submit: Any wallet with TransferOwnership == true on the entity.

Processing rules: Old owner's wallet.Entity backlink is cleared; new owner's backlink is set.


Links a wallet to an entity with a role and permission set.

FieldTypeDescription
entityAddressstringEntity to link to.
walletAddressstringWallet to link.
rolestring"admin" or "member" (stored, not consulted for auth).
permissionsobjectEntityPermission bits.

Who can submit: Wallet with ManageWallets == true on the entity.

Processing rules: If role == "admin", sets wallet.Entity backlink on the linked wallet.


Removes a wallet from an entity's member list.

FieldTypeDescription
entityAddressstringEntity to unlink from.
walletAddressstringWallet to remove.

Who can submit: Wallet with ManageWallets == true on the entity.


SET_ENTITY_ACCESS_LIST​

Modifies the entity's blacklist or trusted list.

FieldTypeDescription
entityAddressstringEntity whose access list to modify.
operationstringADD_BLACKLIST, REMOVE_BLACKLIST, ADD_TRUSTED, REMOVE_TRUSTED.
targetAddressstringWallet address to add or remove.

Who can submit: Wallet with ManageAccessList == true on the entity.


Entity Recovery Transactions​

CONFIGURE_ENTITY_RECOVERY​

Sets the recovery wallet configuration for an entity.

FieldTypeDescription
entityAddressstringEntity to configure.
recoveryWalletsarrayWallet addresses authorized to approve recovery.
thresholdintNumber of approvals required to execute recovery.

Who can submit: Entity owner only.

Processing rules: Staged as PendingRecoveryConfig with a delay period before activation.


REQUEST_ENTITY_RECOVERY​

Initiates a recovery process for an entity.

FieldTypeDescription
entityAddressstringEntity to recover.
newOwnerAddressstringProposed new owner wallet.

Who can submit: Any wallet. (The recovery wallets must then approve.)


APPROVE_ENTITY_RECOVERY​

Casts an approval vote on an in-progress recovery.

FieldTypeDescription
entityAddressstringEntity under recovery.

Who can submit: A wallet in the entity's RecoveryConfig.recoveryWallets list.


EXECUTE_ENTITY_RECOVERY​

Executes a recovery after the threshold of approvals is met.

FieldTypeDescription
entityAddressstringEntity to recover.

Who can submit: Any wallet (after threshold is met).

Processing rules: Entity owner changes to the newOwnerAddress from the recovery request. Old owner's backlink cleared; new owner's backlink set.


CANCEL_ENTITY_RECOVERY​

Cancels an in-progress recovery.

FieldTypeDescription
entityAddressstringEntity whose recovery to cancel.

Who can submit: Entity owner or recovery wallets.


Smart Contract Transactions​

DEPLOY_SMART_CONTRACT​

Deploys a new WASM contract.

FieldTypeDescription
sourceCodebytesWASM binary (or WAT text).
gasLimituint64Gas budget for deployment execution.
isUpgradeableboolWhether the contract can be upgraded.
governanceModestringOptional governance mode label.

Who can submit: Any registered wallet.

Processing rules: Contract address = transaction ID. Owner = deploying wallet. Version = 1.


INVOKE_SMART_CONTRACT​

Calls a function in a deployed contract.

FieldTypeDescription
contractAddressstringTarget contract address.
functionstringFunction name to call.
argsarrayFunction arguments.
gasLimituint64Gas budget for execution.

Who can submit: Any wallet with a valid contract:invoke capability (or any wallet if no capabilities are set on the chain).

Processing rules: Execution is sandboxed. Storage changes are rolled back on failure. Gas is consumed regardless of success.


UPGRADE_SMART_CONTRACT​

Replaces a contract's bytecode.

FieldTypeDescription
contractAddressstringContract to upgrade.
sourceCodebytesNew WASM binary.
gasLimituint64Gas budget.

Who can submit: Contract owner (or wallet with upgrade permission). Contract must have IsUpgradeable == true.

Processing rules: PreviousVersion = current version. Version incremented. Old bytecode preserved for rollback.


ROLLBACK_SMART_CONTRACT​

Reverts a contract to its previous bytecode version.

FieldTypeDescription
contractAddressstringContract to roll back.

Who can submit: Contract owner.

Processing rules: Version decremented. Bytecode restored to PreviousVersion state.


Token Transactions (Native)​

Fungible Token (ERC-20 equivalent)​

TransactionDescription
CREATE_TOKENDeploy a new fungible token. Fields: name, symbol, decimals, initialSupply.
MINT_TOKENMint new supply. Fields: tokenAddress, amount, recipient. Owner-only.
BURN_TOKENBurn supply. Fields: tokenAddress, amount. Holder only.
TRANSFER_TOKENTransfer tokens. Fields: tokenAddress, recipient, amount.
APPROVE_TOKENApprove a spender. Fields: tokenAddress, spender, amount.
TRANSFER_FROM_TOKENSpender transfers on behalf of approver. Fields: tokenAddress, from, to, amount.

Non-Fungible Token (ERC-721 equivalent)​

TransactionDescription
MINT_NFTMint a single NFT. Fields: collectionAddress, tokenId, metadata.
TRANSFER_NFTTransfer NFT ownership. Fields: collectionAddress, tokenId, recipient.
APPROVE_NFTApprove a spender for a specific NFT.
SET_APPROVAL_FOR_ALLApprove an operator for all NFTs in a collection.

Multi-Token (ERC-1155 equivalent)​

TransactionDescription
MINT_MULTI_TOKENMint multiple token types in one transaction.
TRANSFER_MULTI_TOKENBatch transfer multiple token types.
CONVERT_TOKENConvert a fungible token balance into a non-fungible token.

Data and System Transactions​

TX_DATA​

Submits arbitrary data to the chain. Used for:

  • Recording off-chain events with an on-chain timestamp and signature.
  • Submitting data blobs whose hash must be provable.
  • Driving block production (no-op data transactions advance chain height for testing).
FieldTypeDescription
payloadbytesArbitrary data (up to 64 KiB).

Who can submit: Any wallet with data:submit capability (or no capability restriction).

Processing rules: Payload is stored in the transaction record. No state changes are made beyond recording the transaction.


CHECKPOINT_MARKER​

System transaction written by the Helix sidecar when a STARK checkpoint is finalized.

Not submitted by users or agents. Written by the Helix sidecar process. Marks the block at which a checkpoint proof was anchored. The embedded proof is verifiable by the checkpoint_verify tool.


Authentication Transactions​

AUTHENTICATE_INTERNAL​

Authenticates a wallet using an on-chain challenge-response flow. Used to prove control of a wallet without submitting a state-changing transaction.

AUTHENTICATE_EXTERNAL​

Extends external credentials (off-chain identities) by anchoring them to an on-chain authentication event.