Saltar al contenido principal

Referencia de Tipos de Transaction

Todos los cambios de estado en ULedger se realizan mediante transactions firmadas. Este documento cataloga cada tipo de transaction, sus campos requeridos, quién puede enviarla y qué hace.

Todas las transactions comparten un envelope común:

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

Transactions de Billetera​

TX_CREATE_WALLET​

Crea una nueva billetera on-chain.

CampoTipoDescripción
publicKeystringClave pública comprimida en hexadecimal de la nueva billetera.
keyTypestringAlgoritmo de clave: secp256k1, ed25519, mldsa87, bls12377.
authGroupsmap{ "admin": {...}, "wallet": {...} } con booleanos CRUD.
capabilitiesarrayCapabilities iniciales opcionales (deben ser ⊆ las capabilities del padre).

Quién puede enviarla: Cualquier billetera registrada con wallet.Create == true en sus auth groups. La billetera que la envía se convierte en el Parent de la nueva billetera.

Reglas de procesamiento:

  1. Derivar la dirección de la nueva billetera como SHA256(lowercase(publicKey)).
  2. Validar que el padre exista y tenga el permiso CanCreateWallets().
  3. Validar la herencia de capabilities (capabilities del hijo ⊆ capabilities del padre).
  4. Crear la billetera y establecer Parent = sender.
  5. Agregar la dirección de la nueva billetera al array SatelliteWallets del remitente.

ALTER_WALLET​

Modifica una billetera existente: habilitar/deshabilitar, actualizar auth groups, actualizar capabilities.

CampoTipoDescripción
walletAddressstringDirección de la billetera a modificar.
enabledboolHabilitar o deshabilitar la billetera.
authGroupsmapAuth groups de reemplazo (opcional).
capabilitiesarrayCapabilities de reemplazo (opcional).

Quién puede enviarla: El padre de la billetera, o cualquier billetera con autoridad admin sobre la billetera.

Reglas de procesamiento para deshabilitar: Cascada BFS: todas las billeteras en SatelliteWallets (de forma recursiva) también se deshabilitan. Esto es atómico.

Reglas de procesamiento para capabilities: El reemplazo debe ser un subconjunto de las capabilities de la billetera padre.


Transactions de Entity​

CREATE_ENTITY​

Crea una nueva entity organizacional.

CampoTipoDescripción
namestring3–64 caracteres, minúsculas, alfanumérico + guion.
entityTypestringORGANIZATION, DEPARTMENT, PERSONAL, SERVICE, DEVICE, AGENT.
parentstringDirección de la entity padre (vacía para la raíz).
metadatamapMetadatos clave-valor opcionales.

Quién puede enviarla: Para la entity raíz: una billetera raíz (wallet.Parent == ""). Para una entity hija: una billetera con ManageChildren == true en la entity padre.

Reglas de procesamiento:

  • El padre debe existir, estar habilitado y admitir el tipo de hijo solicitado.
  • Una billetera raíz que crea una entity raíz no debe tener ya una afiliación wallet.Entity.
  • El remitente se convierte en el propietario de la entity; se vincula automáticamente con el rol admin y con todos los permisos.
  • Se establece el backlink wallet.Entity en la billetera creadora.

ALTER_ENTITY​

Actualiza los metadatos o el estado de habilitación de la entity.

CampoTipoDescripción
entityAddressstringEntity a modificar.
metadatamapMetadatos de reemplazo o combinados.
enabledboolHabilitar o deshabilitar la entity.

Quién puede enviarla: Billetera con ManageMetadata == true (para metadatos) o el propietario de la entity (para habilitar/deshabilitar).


TRANSFER_ENTITY​

Cambia el propietario de la entity a una nueva billetera.

CampoTipoDescripción
entityAddressstringEntity a transferir.
newOwnerAddressstringDirección de la billetera del nuevo propietario.

Quién puede enviarla: Cualquier billetera con TransferOwnership == true en la entity.

Reglas de procesamiento: Se elimina el backlink wallet.Entity del propietario anterior; se establece el del nuevo propietario.


Vincula una billetera a una entity con un rol y un conjunto de permisos.

CampoTipoDescripción
entityAddressstringEntity a la que se vincula.
walletAddressstringBilletera a vincular.
rolestring"admin" o "member" (se almacena, no se consulta para la autorización).
permissionsobjectBits de EntityPermission.

Quién puede enviarla: Billetera con ManageWallets == true en la entity.

Reglas de procesamiento: Si role == "admin", se establece el backlink wallet.Entity en la billetera vinculada.


Elimina una billetera de la lista de miembros de una entity.

CampoTipoDescripción
entityAddressstringEntity de la que se desvincula.
walletAddressstringBilletera a eliminar.

Quién puede enviarla: Billetera con ManageWallets == true en la entity.


SET_ENTITY_ACCESS_LIST​

Modifica la lista negra o la lista de confianza de la entity.

CampoTipoDescripción
entityAddressstringEntity cuya lista de acceso se modifica.
operationstringADD_BLACKLIST, REMOVE_BLACKLIST, ADD_TRUSTED, REMOVE_TRUSTED.
targetAddressstringDirección de billetera a agregar o eliminar.

Quién puede enviarla: Billetera con ManageAccessList == true en la entity.


Transactions de Recuperación de Entity​

CONFIGURE_ENTITY_RECOVERY​

Establece la configuración de billeteras de recuperación para una entity.

CampoTipoDescripción
entityAddressstringEntity a configurar.
recoveryWalletsarrayDirecciones de billeteras autorizadas para aprobar la recuperación.
thresholdintNúmero de aprobaciones requeridas para ejecutar la recuperación.

Quién puede enviarla: Solo el propietario de la entity.

Reglas de procesamiento: Se almacena como PendingRecoveryConfig con un período de espera antes de la activación.


REQUEST_ENTITY_RECOVERY​

Inicia un proceso de recuperación para una entity.

CampoTipoDescripción
entityAddressstringEntity a recuperar.
newOwnerAddressstringBilletera propuesta como nuevo propietario.

Quién puede enviarla: Cualquier billetera. (Las billeteras de recuperación deben aprobar a continuación.)


APPROVE_ENTITY_RECOVERY​

Emite un voto de aprobación en una recuperación en curso.

CampoTipoDescripción
entityAddressstringEntity en proceso de recuperación.

Quién puede enviarla: Una billetera incluida en la lista RecoveryConfig.recoveryWallets de la entity.


EXECUTE_ENTITY_RECOVERY​

Ejecuta una recuperación una vez alcanzado el umbral de aprobaciones.

CampoTipoDescripción
entityAddressstringEntity a recuperar.

Quién puede enviarla: Cualquier billetera (una vez alcanzado el umbral).

Reglas de procesamiento: El propietario de la entity cambia al newOwnerAddress de la solicitud de recuperación. Se elimina el backlink del propietario anterior; se establece el del nuevo propietario.


CANCEL_ENTITY_RECOVERY​

Cancela una recuperación en curso.

CampoTipoDescripción
entityAddressstringEntity cuya recuperación se cancela.

Quién puede enviarla: El propietario de la entity o las billeteras de recuperación.


Transactions de Smart Contract​

DEPLOY_SMART_CONTRACT​

Despliega un nuevo contract WASM.

CampoTipoDescripción
sourceCodebytesBinario WASM (o texto WAT).
gasLimituint64Presupuesto de gas para la ejecución del despliegue.
isUpgradeableboolIndica si el contract puede actualizarse.
governanceModestringEtiqueta opcional del modo de gobernanza.

Quién puede enviarla: Cualquier billetera registrada.

Reglas de procesamiento: Dirección del contract = ID de la transaction. Propietario = billetera que despliega. Versión = 1.


INVOKE_SMART_CONTRACT​

Llama a una función de un contract desplegado.

CampoTipoDescripción
contractAddressstringDirección del contract de destino.
functionstringNombre de la función a llamar.
argsarrayArgumentos de la función.
gasLimituint64Presupuesto de gas para la ejecución.

Quién puede enviarla: Cualquier billetera con una capability contract:invoke válida (o cualquier billetera si no hay capabilities configuradas en la chain).

Reglas de procesamiento: La ejecución se realiza en un sandbox. Los cambios de almacenamiento se revierten en caso de fallo. El gas se consume independientemente del éxito.


UPGRADE_SMART_CONTRACT​

Reemplaza el bytecode de un contract.

CampoTipoDescripción
contractAddressstringContract a actualizar.
sourceCodebytesNuevo binario WASM.
gasLimituint64Presupuesto de gas.

Quién puede enviarla: El propietario del contract (o una billetera con permiso de actualización). El contract debe tener IsUpgradeable == true.

Reglas de procesamiento: PreviousVersion = versión actual. Version se incrementa. El bytecode anterior se conserva para el rollback.


ROLLBACK_SMART_CONTRACT​

Revierte un contract a su versión de bytecode anterior.

CampoTipoDescripción
contractAddressstringContract a revertir.

Quién puede enviarla: El propietario del contract.

Reglas de procesamiento: Version se decrementa. El bytecode se restaura al estado de PreviousVersion.


Transactions de Token (Nativas)​

Token Fungible (equivalente a ERC-20)​

TransactionDescripción
CREATE_TOKENDespliega un nuevo token fungible. Campos: name, symbol, decimals, initialSupply.
MINT_TOKENEmite nuevo suministro. Campos: tokenAddress, amount, recipient. Solo el propietario.
BURN_TOKENQuema suministro. Campos: tokenAddress, amount. Solo el titular.
TRANSFER_TOKENTransfiere tokens. Campos: tokenAddress, recipient, amount.
APPROVE_TOKENAprueba al que gasta. Campos: tokenAddress, spender, amount.
TRANSFER_FROM_TOKENEl que gasta transfiere en nombre del aprobador. Campos: tokenAddress, from, to, amount.

Token No Fungible (equivalente a ERC-721)​

TransactionDescripción
MINT_NFTEmite un único NFT. Campos: collectionAddress, tokenId, metadata.
TRANSFER_NFTTransfiere la propiedad del NFT. Campos: collectionAddress, tokenId, recipient.
APPROVE_NFTAprueba al que gasta para un NFT específico.
SET_APPROVAL_FOR_ALLAprueba a un operador para todos los NFTs de una colección.

Multi-Token (equivalente a ERC-1155)​

TransactionDescripción
MINT_MULTI_TOKENEmite múltiples tipos de token en una sola transaction.
TRANSFER_MULTI_TOKENTransferencia por lotes de múltiples tipos de token.
CONVERT_TOKENConvierte un balance de token fungible en un token no fungible.

Transactions de Datos y de Sistema​

TX_DATA​

Envía datos arbitrarios a la chain. Se utiliza para:

  • Registrar eventos off-chain con una marca de tiempo y una firma on-chain.
  • Enviar blobs de datos cuyo hash debe ser demostrable.
  • Impulsar la producción de bloques (las data transactions no-op avanzan la altura de la chain para pruebas).
CampoTipoDescripción
payloadbytesDatos arbitrarios (hasta 64 KiB).

Quién puede enviarla: Cualquier billetera con la capability data:submit (o sin restricción de capabilities).

Reglas de procesamiento: El payload se almacena en el registro de la transaction. No se realizan cambios de estado más allá de registrar la transaction.


CHECKPOINT_MARKER​

Transaction de sistema escrita por el sidecar de Helix cuando se finaliza un checkpoint STARK.

No es enviada por usuarios ni agentes. Es escrita por el proceso sidecar de Helix. Marca el bloque en el que se ancló una prueba de checkpoint. La prueba incluida puede verificarse con la herramienta checkpoint_verify.


Transactions de Autenticación​

AUTHENTICATE_INTERNAL​

Autentica una billetera mediante un flujo de desafío-respuesta on-chain. Se utiliza para demostrar el control de una billetera sin enviar una transaction que cambie el estado.

AUTHENTICATE_EXTERNAL​

Extiende las credenciales externas (identidades off-chain) anclándolas a un evento de autenticación on-chain.