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 TransferRestriction 資產。
#
# Copyright (c) 2026, 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

# AccountPolicyCheck — Defines policies for an account to decide whether an account is eligible to transact

    - name: AccountPolicyCheck # Asset name

      properties: # Asset attributes 

          - name: accountPolicyId   #Unique derived ID for the account policy, ensuring one policy per account. 
            type: string
            mandatory: true
            id: true
            derived:
              strategy: concat
              format: ["APID~%1~%2","orgId","userId"]

          - name: orgId             # Organization owning the account. 
            type: string
            mandatory: true
            validate: required()

          - name: userId           # Account holder identifier linked to this policy.
            type: string
            mandatory: true
            validate: required()

          - name: kycCompliance    # Indicates whether KYC verification is complete. Required for transaction eligibility. If true, the account can transfer stablecoins.  
            type: string
            validate: /^\s*(true|false)\s*$/
            mandatory: true            

          - name: amlCompliance    # Indicates AML screening status. Prevents suspicious accounts from transacting. If true, the account can transfer stablecoins.
            type: string
            validate: /^\s*(true|false)\s*$/
            mandatory: true

          - name: riskScore       # Quantitative risk indicator.
            type: float
            validate: min(0)

          - name: restrictionFlag   #Transaction blocking flag. If true, hold operations are limited to the lowest bucket range defined in the approval policy, and any amount above that range is rejected; 
                                    #for transfer operations, the account can transfer only within the bucket limits specified in the TransferRestriction asset.
            type: string
            validate: /^\s*(true|false)\s*$/ 
            mandatory: true

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


# ApprovalPolicyCheck — Maps transaction amount slabs to approval rules

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

          - name: approvalPolicyId               # Unique derived identifier for each approval slab based on amount range.
            type: string
            mandatory: true
            id: true
            derived:
              strategy: concat
              format: ["GPID~%1~%2","transactionLowerLimit","transactionUpperLimit"]

          - name: transactionLowerLimit         # Minimum transaction amount where this rule applies.
            type: float
            validate: min(0)
            mandatory: true

          - name: transactionUpperLimit         # Maximum transaction amount covered by this rule.
            type: float
            validate: min(0)
            mandatory: true

          - name: numberOfApprovalsRequired     # Total approvals needed for transactions in this range.
            type: number
            mandatory: true
            validate: min(0)

          - name: approverDetails               # List of authorized approvers and their sequence for this slab.
            type: approverDetails[]
 

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

# ApproverDetails (Embedded) — Defines the list of approvers along with the approval sequences

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

          - name: approverOrgId       # Organization to which the approver belongs.
            type: string
            mandatory: true
            validate: required()

          - name: approverUserId      # Specific user authorized to approve. 
            type: string
            mandatory: true
            validate: required()

          - name: approvalSequence    # Order of approval when sequential approvals are enforced.
            type: number
            mandatory: true
            validate: positive()

# ApprovalTransactions — Tracks approval progress for a specific operation            

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

          - name: approvalTransactionId    # Unique ID for each approval action tied to operation and approver.
            type: string
            mandatory: true
            id: true
            derived:
              strategy: concat
              format: ["%1~%2~%3","approvalOperationId","approverOrgId", "approverUserId"]

          - name: approvalOperationId      # Identifier of the original transaction requiring approval.
            type: string
            mandatory: true

          - name: fromAccountId            # Source account involved in the operation.
            type: string  
            mandatory: true

          - name: toAccountId              # Destination account for the operation.
            type: string
            mandatory: true

          - name: approverOrgId            # Organization of the approver performing the action.
            type: string
            mandatory: true   

          - name: approverUserId           # User who approved the operation.
            type: string
            mandatory: true               

          - name: receivedApprovalsCount   # Number of approvals completed so far.
            type: number 
            mandatory: true 
            validate: min(0)

          - name: requiredApprovalsCount   # Total approvals needed before execution.
            type: number 
            mandatory: true 
            validate: min(0)            

          - name: timestamp                # Time when the approval was recorded for audit traceability.
            type: string 
            mandatory: true             

      methods:
          crud: [getById ]
          others: []

# TransferRestriction — Defines global transaction boundaries          

    - name: TransferRestriction # Asset name
      
      properties: # Asset attributes 

          - name: id                        # Unique identifier for the restriction rule.
            type: string
            mandatory: true
            id: true

          - name: transactionLowerLimit    # Smallest allowable transfer amount in the system.
            type: number
            mandatory: true
            default: 0
            validate: min(0)  

          - name: transactionUpperLimit    # Largest allowable transfer amount without special governance.
            type: number  
            mandatory: true  
            default: 1000000
            validate: min(0)            

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

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