Paquete de código de cadena de Stablecoin

Oracle Blockchain Platform Digital Assets Edition incluye código de cadena de ejemplo para un escenario de ciclo de vida de stablecoin.

El código de cadena de stablecoin admite el ciclo de vida completo de una stablecoin, representada por un token fungible basado en el estándar extendido Token Taxonomy Framework. Puede utilizar métodos de código de cadenas para acuñar, transferir, retener y grabar tokens con aprobaciones basadas en roles.

El paquete de código de cadena de stablecoin se puede descargar desde la consola de Oracle Blockchain Platform e incluye los siguientes componentes.
  • Stablecoin.zip, un archivo de almacenamiento que contiene el código de cadena empaquetado para el despliegue.
  • Stablecoin.yaml, un archivo de especificación que puede utilizar con Blockchain App Builder para andamiar el código de cadena Stablecoin.
  • Stablecoin_postman_collection.json, una recopilación Postman que permite probar las API en el código de cadena.
  • README.md, una guía paso a paso para trabajar con el código de cadenas.

Para obtener el paquete de código de cadena de stablecoin, en la consola de activos digitales de Oracle Blockchain Platform, haga clic en el separador Activos digitales y, a continuación, seleccione Aplicación de Statablecoin.

Archivo de especificaciones

El archivo de especificación de stablecoin (Stablecoin.yml) se basa en el archivo de especificación ampliado de Token Taxonomy Framework. Además del activo stablecoin, el archivo de especificación define los activos AccountPolicyCheck, ApprovalPolicyCheck y ApprovalTransactions.
#
# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. 
#

assets:

# Token asset to manage the complete lifecycle of stablecoin

    - name: stablecoin # Asset name
      type: token # Asset type
      standard: ttf+   # Token standard

      anatomy:
          type: fungible # Token type 
          unit: fractional # Token unit

      behavior: # Token behaviors
          - divisible:
                decimal: 2 
          - mintable: 
                mint_approval_required: true  
          - transferable 
          - burnable:
                burn_approval_required: true 
          - holdable
          - roles:
                minter_role_name: minter
                burner_role_name: burner
                notary_role_name: notary
                mint_approver_role_name: notary
                burn_approver_role_name: notary 

      properties: # Custom asset attributes for stablecoin

          - name: currencyName # The currency name that the stablecoin is pegged with
            type: string
            mandatory: true

          - name: conversionRate # The currency to stablecoin conversion rate
            type: float
            mandatory: true

# Generic asset to maintain the account policy and approval policy details

    - name: AccountPolicyCheck # Asset name

      properties: # Asset attributes 

          - name: accountPolicyId
            type: string
            mandatory: true
            id: true
            derived:
              strategy: concat
              format: ["APID~%1~%2","orgId","userId"]

          - name: orgId
            type: string
            mandatory: true
            validate: required()

          - name: userId
            type: string
            mandatory: true
            validate: required()

          - name: kycCompliance  
            type: string
            validate: /^\s*(true|false)\s*$/
            mandatory: true            

          - name: amlCompliance 
            type: string
            validate: /^\s*(true|false)\s*$/
            mandatory: true

          - name: riskScore 
            type: float
            validate: min(0)

          - name: restrictionFlag 
            type: string
            validate: /^\s*(true|false)\s*$/ 
            mandatory: true

      methods:
          crud: [create, update, getById, delete]
          others: [getHistoryById, getByRange]  

    - name: ApprovalPolicyCheck # Asset name
      
      properties: # Asset attributes 

          - name: approvalPolicyId
            type: string
            mandatory: true
            id: true
            derived:
              strategy: concat
              format: ["GPID~%1~%2","transactionLowerLimit","transactionUpperLimit"]

          - name: transactionLowerLimit
            type: string
            validate: required()

          - name: transactionUpperLimit
            type: string
            validate: required()

          - name: numberOfApprovalsRequired
            type: number
            mandatory: true
            validate: min(0)

          - name: approverDetails
            type: approverDetails[]
 

      methods:
          crud: [create, update, getById, delete]
          others: [getHistoryById, getByRange]    

    - name: approverDetails # Asset name
      type: embedded
      properties: # Asset attributes 

          - name: approverOrgId  
            type: string
            mandatory: true
            validate: required()

          - name: approverUserId  
            type: string
            mandatory: true
            validate: required()

          - name: approvalSequence  
            type: number
            mandatory: true
            validate: positive()

    - name: ApprovalTransactions # Asset name
      
      properties: # Asset attributes 

          - name: approvalTransactionId
            type: string
            mandatory: true
            id: true
            derived:
              strategy: concat
              format: ["%1~%2","approvalOperationId","approverAccountId"]

          - name: approvalOperationId
            type: string
            mandatory: true

          - name: fromAccountId
            type: string  
            mandatory: true

          - name: toAccountId
            type: string
            mandatory: true

          - name: approverAccountId
            type: string
            mandatory: true   

          - name: totalApprovals
            type: number 
            mandatory: true 
            validate: min(0)

          - name: timestamp
            type: string 
            mandatory: true             

      methods:
          crud: [getById ]
          others: []
          
customMethods:

  - "getApproverDetailsByTransferAmount(Amount: number)" # Customized method for fetching approver details