Saltar al contenido principal

¿Por qué usar Gold?

  • Proporciona un formato claro y estructurado para transferencias de activos.
  • Define fuentes, destinos y montos explícitamente.
  • Soporta lógica de transacciones avanzada, como la distribución de saldos basada en porcentajes o montos 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 utilizando una estructura jerárquica. A continuación se muestra un ejemplo:
(Transaction v1
  (chart-of-accounts-group-name ACCOUNT_SLIP_10000)
  (description "description for the Transaction not for the operation")
  (metadata
    (key value)
    (anotherKey anotherValue)
  )
  (send USD 10000|2
    (source
      (from @originAccount :amount USD 10000|2
        (chart-of-accounts PAYMENT_001)
        (description "shown on the statement")
        (metadata
          (key value)
          (anotherKey anotherValue)
        )
      )
    )
    (distribute
      (to @destinationAccount :amount USD 10000|2
        (chart-of-accounts PAYMENT_101)
        (description "operation description")
        (metadata
          (key value)
        )
      )
    )
  )
)

Jerarquía del DSL

A continuación se muestra la estructura jerárquica de un archivo .gold, ilustrando las relaciones clave:
└─ Transacción
   ├─ chart-of-accounts-group-name
   ├─ description
   ├─ code
   ├─ pending
   ├─ metadata
   │   └─ key value (n)
   ├─ send
   │   ├─ source
   │   │  └─ from
   │   │     ├─ description
   │   │     ├─ chart-of-accounts
   │   │     └─ metadata
   │   │        └─ key value (n)
   │   └─ distribute
   │      └─ to
   │         ├─ description
   │         ├─ chart-of-accounts
   │         └─ metadata
   └─           └─ key value (n)

Comprensión de palabras clave del DSL

Transacción

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

send

Especifica el activo y el monto a transferir, incluyendo las cuentas de origen desde las cuales se debitarán los fondos. Múltiples cuentas from pueden agruparse usando source. Formato: send {asset_code} {value}|{scale}

distribute

Define las cuentas de destino donde se acreditarán los fondos. Múltiples cuentas to pueden incluirse dentro de distribute.

Notaciones de valores en transacciones

El DSL gold soporta diferentes formas de expresar valores dentro de una Transacción:
  • :amount – Notación estándar que especifica el activo, monto y escala.
  • :share – Especifica un porcentaje del monto total del 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
  (chart-of-accounts-group-name PIX_OUT)
  (metadata
    (anyKey anyValue)
    (anotherKey anotherValue)
  )
  (code PIX_OUT)
  (description "description for the Transacción not for the operation")
  (send BRL $amount+$fee|Transaction
    (source
      (from $sourceAccount :amount BRL $amount|2
        (description "PIX shipping")
        (chart-of-accounts pix_out_debit_82891231)
      )
      (from $sourceAccount :amount BRL $fee|2
        (description "PIX shipping rate")
        (chart-of-accounts pix_out_fee_debit)
      )
    )
    (distribute
      (to @fees/PIX_OUT :amount BRL $fee|2
        (chart-of-accounts pix_out_fee_credit)
      )
      (distribute :remaining
        (to @external/BRL :remaining
          (chart-of-accounts pix_out_external)
          (description "internalTransactionId 99839218")
        )
      )
    )
  )
)

Desglose:

  • (Transacción v1) – Define una nueva Transacción usando la versión 1.
  • (chart-of-accounts-group-name PIX_OUT) – Categoriza la Transacción.
  • (metadata …) – Almacena datos adicionales de la Transacción.
  • (send BRL amount+amount+fee|2) – Especifica el monto total enviado.
  • (source …) – Detalla las cuentas de origen desde las cuales se debita el monto.
  • (distribute …) – Asigna los fondos a las cuentas apropiadas.
  • (distribute :remaining …) – Asegura que cualquier saldo restante sea manejado.
Este formato garantiza una forma estructurada, transparente y eficiente de gestionar transacciones en Midaz.