Stablecoin 鏈碼套件

Oracle Blockchain Platform Digital Assets Edition 包含穩定貨幣生命週期案例的鏈碼範例。

穩定幣鏈碼支援穩定幣的完整生命週期,由基於延伸記號分類架構標準的有趣記號所代表。您可以使用鏈碼方法來進行任務型核准的提示、轉移、保留和燒錄權杖。

穩定的鏈碼套件可以從 Oracle Blockchain Platform 主控台下載,並且包含下列元件。
  • Stablecoin.zip,包含要部署之封裝鏈碼的封存檔案。
  • Stablecoin.yaml,您可以與區塊鏈應用程式建置器搭配使用的規格檔案,用來編排 Stablecoin 鏈碼。
  • Stablecoin_postman_collection.json 是一種 Postman 集合,可讓您測試鏈碼中的 API。
  • README.md,使用鏈碼的逐步指引。

若要取得穩定的鏈碼套件,請在 Oracle Blockchain Platform Digital Assets 主控台中按一下數位資產頁籤,然後選取 Stablecoin 應用程式

規格檔案

穩定幣規格檔案 (Stablecoin.yml) 是以延伸的「記號分類架構」規格檔案為基礎。除了 stablecoin 資產之外,規格檔案還定義了 AccountPolicyCheckApprovalPolicyCheckApprovalTransactions 資產。
#
# 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