Saltar al contenido principal
Esta función está obsoleta y se eliminará en la próxima versión.Actualice sus flujos de trabajo lo antes posible para evitar errores o tiempo de inactividad.
Midaz usa un Lenguaje Específico de Dominio (DSL) llamado gold para estructurar transacciones financieras de manera legible e intuitiva. Diseñado para equipos de negocio, gold simplifica el modelado de transacciones al permitir que las operaciones se procesen a través de archivos .gold. Estos archivos hacen que los movimientos financieros sean más accesibles y estén alineados con la lógica contable.

¿Por qué usar Gold?

  • Proporciona un formato claro y estructurado para transferencias de activos.
  • Define fuentes, destinos y cantidades de manera explícita.
  • Admite lógica de transacción avanzada, como distribuir saldos basados en porcentajes o cantidades restantes.
  • Mejora la automatización y consistencia en los flujos de trabajo financieros.

Estructura de un archivo .gold


Un archivo .gold representa una transacción usando una estructura jerárquica. Aquí hay un ejemplo:
(transaction v1
	(transaction route ID)
  (description "descripción de la transacción, no de la operación")
  (metadata
    (key valor)
    (anotherKey otroValor)
  )
  (send USD 10000
    (source
     (from @originAccount :amount USD 10000
				(transaction route ID)
        (description "mostrada en el extracto")
        (metadata
          (key valor)
          (anotherKey otroValor)
        )
      )
    )
    (distribute
     (to @destinationAccount :amount USD 10000
				(transaction route ID)
        (description "descripción de la operación")
        (metadata
          (key valor)
        )
      )
    )
  )
)

Jerarquía del DSL


A continuación se muestra la estructura jerárquica de un archivo .gold, ilustrando las relaciones clave:
└─ transaction
   ├─ route
   ├─ description
   ├─ code
   ├─ pending
   ├─ metadata
   └─ key value (n)
   ├─ send
   ├─ source
  └─ from
     ├─ description
     ├─ route
     └─ metadata
        └─ key value (n)
   └─ distribute
      └─ to
         ├─ description
         ├─ route
         └─ metadata
   └─           └─ key value (n)

Comprensión de las palabras clave del DSL


transaction

Abre un nuevo bloque de transacción, donde se definen todos los elementos relacionados.

send

Especifica el activo y la cantidad a transferir, incluyendo las cuentas de origen de las cuales se debitarán los fondos. Se pueden agrupar múltiples cuentas from usando source. Formato: send {asset_code} {value}

distribute

Define las cuentas de destino donde se acreditarán los fondos. Se pueden incluir múltiples cuentas to dentro de distribute.

Notaciones de valor en transacciones

El DSL gold admite diferentes formas de expresar valores dentro de una transacción:
  • :amount – Notación estándar que especifica el activo, cantidad y escala.
  • :share – Especifica un porcentaje de la cantidad total send.
  • :remaining – Asigna el saldo restante después de todas las demás distribuciones.

Ejemplo: Flujo de transacción Pix Out


Este ejemplo demuestra una transacción Pix Out en formato .gold:
(transaction v1
	(transaction route ID)
  (metadata
    (anyKey valor)
    (anotherKey otroValor)
  )
  (code PIX_OUT)
  (description "descripción de la transacción, no de la operación")
  (send BRL $amount+$fee
    (source
     (from $sourceAccount :amount BRL $amount
				(transaction route ID)
        (description "Envío por PIX")
      )
     (from $sourceAccount :amount BRL $fee
				(transaction route ID)
        (description "Tarifa de envío por PIX")
      )
    )
    (distribute
     (to @fees/PIX_OUT :amount BRL $fee
				(transaction route ID)
      )
      (distribute :remaining
        (to @external/BRL :remaining
          (description "internalTransactionId 99839218")
        )
      )
    )
  )
)

Desglose:

  • (transaction v1) – Define una nueva transacción usando la versión 1.
  • (Transaction route ID) – Categoriza la transacción.
  • (metadata …) – Almacena datos adicionales de la transacción.
  • (send BRL fee|2) – Especifica la cantidad total enviada.
  • (source …) – Detalla las cuentas de origen de las cuales se debita la cantidad.
  • (distribute …) – Asigna los fondos a las cuentas apropiadas.
  • (distribute :remaining …) – Asegura que cualquier saldo restante sea manejado.
Este formato asegura una forma estructurada, transparente y eficiente de gestionar transacciones en Midaz.
I