權杖分類架構的鷹架式 Go 專案

Blockchain App Builder 會從您的權杖規格檔案進行輸入,並產生功能完整的鷹架式鏈碼專案。

專案會自動產生權杖生命週期類別和函數,包括 CRUD 和非 CRUD 方法。系統會自動支援引數驗證、封送處理 (Marshall) / 取消封送處理 (unmarshal) 以及通透保存功能。

如需結構化專案與與變數替代字無關的方法相關資訊,請參閱 Scaffolded Go Chaincode Project

Model

「通透持續性功能 (Transparent Persistence Capability)」或簡化的 ORM 會擷取到 OchainModel 類別中。

package src
type Digicur struct {
    AssetType               string                 `json:"AssetType" final:"otoken"`
    Token_id                string                 `json:"Token_id" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
    Token_name              string                 `json:"Token_name" final:"digicur"`
    Token_desc              string                 `json:"Token_desc" validate:"max=256"`
    Token_type              string                 `json:"Token_type" final:"fungible" validate:"regexp=^fungible$"`
    Behavior                []string               `json:"Behavior" final:"[\"divisible\",\"mintable\",\"transferable\",\"burnable\",\"holdable\",\"roles\"]"`
    Roles                   map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\",\"burner_role_name\":\"burner\",\"notary_role_name\":\"notary\"}"`
    Mintable                map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
    Divisible               map[string]interface{} `json:"Divisible" final:"{\"Decimal\":1}"`
    Token_to_currency_ratio int                    `json:"Token_to_currency_ratio" validate:"int"`
    Currency_representation string                 `json:"Currency_representation" validate:"string"`
    Metadata                interface{}            `json:"Metadata,omitempty"`
}

控制器

只有一個主要控制器。

type Controller struct {
    Ctx trxcontext.TrxContext
}

您可以建立不限數目的類別、函數或檔案,但只能呼叫在 main Controller 類別中定義的方法。其他方法則會隱藏。

您可以使用記號 SDK 方法,為您的商業應用程式撰寫自訂方法。

如果您在自訂方法中使用多個記號 SDK 方法,請不要使用會影響狀態資料庫中相同索引鍵 - 值組的方法。

請改用 BulkTransferTokens 方法,從呼叫者的帳戶轉移到多個帳戶,如以下程式碼片段所示。

BulkTransferTokens(token_id string, flow: []map[string]interface{})

附註:

如果您在可能影響狀態資料庫中相同索引鍵 - 值組的自訂方法中使用多個記號 SDK 方法,請對記號鏈碼啟用 MVCC 最佳化。如需詳細資訊,請參閱 MVCC Optimization

自動產生的權杖方法

Blockchain App Builder 會自動產生支援權杖和權杖生命週期的方法。您可以使用這些方法來初始化記號、管理角色和帳戶,以及完成其他記號生命週期工作,而無需進行任何其他編碼。控制器方法必須為 public,才能呼叫。公用方法名稱的開頭是大寫字元。以小寫字元開頭的方法名稱是私密的。

存取控制管理方法

AddTokenAdmin
此方法會將使用者新增為鏈碼的 Token Admin。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) AddTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddAdmin", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddTokenAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為鏈碼 Token Admin 的使用者詳細資料。
傳回值範例:
{
    "msg": "Successfully added Token Admin (Org_Id: Org1MSP, User_Id: user1)"
}
RemoveTokenAdmin
此方法會移除使用者作為鏈碼的 Token Admin。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) RemoveTokenAdmin(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveAdmin", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.RemoveAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含被移除為鏈碼 Token Admin 的使用者詳細資料。
傳回值範例:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsTokenAdmin
如果函數的呼叫程式是 Token Admin,則此方法會傳回布林值 true,否則會傳回 falseToken AdminOrg Admin 可以對區塊鏈網路中的任何其他使用者呼叫此功能。其他使用者只能在自己的帳戶上呼叫此方法。
func (t *Controller) IsTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.IsTokenAdmin", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil || !auth {
            return false, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Auth.IsUserTokenAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 如果呼叫程式是 Token Admin,則方法會傳回 true,否則會傳回 false
傳回值範例:
{"result":false}
GetAllTokenAdmins
此方法會傳回鏈碼為 Token Admin 的所有使用者清單。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。
func (t *Controller) GetAllTokenAdmins() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetAllAdmins", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.GetAllAdmins()
}
參數:
傳回值:
  • 成功時,包含 OrgIdUserId 物件的 JSON 管理員清單。
傳回值範例:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user2"}]}
AddOrgAdmin
此方法會將使用者新增為組織的 Org Admin。只有鏈碼的 Token Admin 或指定的組織 Org Admin 才能呼叫此方法。
func (t *Controller) AddOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddOrgAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為組織 Org Admin 的使用者詳細資訊。
傳回值範例:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
此方法會移除使用者作為組織的 Org Admin。只有鏈碼的 Token Admin 或指定的組織 Org Admin 才能呼叫此方法。
func (t *Controller) RemoveOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.RemoveOrgAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含作為組織 Org Admin 移除之使用者的詳細資料。
傳回值範例:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
此方法會傳回屬於組織 Org Admin 的所有使用者清單。只有鏈碼的 Token Admin 或任何 Org Admin 才能呼叫此方法。
func (t *Controller) GetOrgAdmins() (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetOrgAdmins", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.GetAllOrgAdmins()
}
參數:
傳回值:
  • 成功時,包含 OrgIdUserId 物件的 JSON 清單。
傳回值範例:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddTokenAdmin
此方法會將使用者新增為鏈碼的 Token Admin。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) AddTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddAdmin", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddTokenAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為鏈碼 Token Admin 的使用者詳細資料。
傳回值範例:
{
    "msg": "Successfully added Token Admin (Org_Id: Org1MSP, User_Id: user1)"
}
RemoveTokenAdmin
此方法會移除使用者作為鏈碼的 Token Admin。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) RemoveTokenAdmin(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveAdmin", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.RemoveAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含被移除為鏈碼 Token Admin 的使用者詳細資料。
傳回值範例:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsTokenAdmin
如果函數的呼叫程式是 Token Admin,則此方法會傳回布林值 true,否則會傳回 false。此函數只能由 Token AdminToken AuditorOrg AdminOrg Auditor 呼叫。
func (t *Controller) IsTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.IsTokenAdmin", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil || !auth {
            return false, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Auth.IsUserTokenAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 如果呼叫程式是 Token Admin,則方法會傳回 true,否則會傳回 false
傳回值範例:
{"result":false}
GetAllTokenAdmins
此方法會傳回鏈碼為 Token Admin 的所有使用者清單。只有 Token AdminToken Auditor 才能呼叫此方法。
func (t *Controller) GetAllTokenAdmins() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetAllAdmins", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.GetAllAdmins()
}
參數:
傳回值:
  • 成功時,包含 OrgIdUserId 物件的 JSON 管理員清單。
傳回值範例:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user2"}]}
AddOrgAdmin
此方法會將使用者新增為組織的 Org Admin。只有鏈碼的 Token Admin 或指定的組織 Org Admin 才能呼叫此方法。
func (t *Controller) AddOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddOrgAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為組織 Org Admin 的使用者詳細資訊。
傳回值範例:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
此方法會移除使用者作為組織的 Org Admin。只有鏈碼的 Token Admin 或指定的組織 Org Admin 才能呼叫此方法。
func (t *Controller) RemoveOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.RemoveOrgAdmin(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含作為組織 Org Admin 移除之使用者的詳細資料。
傳回值範例:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
此方法會傳回屬於組織 Org Admin 的所有使用者清單。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
func (t *Controller) GetOrgAdmins() (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetOrgAdmins", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.GetAllOrgAdmins()
}
參數:
傳回值:
  • 成功時,包含 OrgIdUserId 物件的 JSON 清單。
傳回值範例:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddTokenAuditor
此方法會將使用者新增為鏈碼的 Token Auditor。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) AddTokenAuditor(org_id string, user_id string) (interface{}, error)
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為鏈碼 Token Auditor 的使用者詳細資料。
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "f0888dd52f39dfa669275cc8f35d0b47b37b8407d384493d16970fcbb377f937",
        "payload": {
            "msg": "Successfully added Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 268
    }
}
RemoveTokenAuditor
此方法會移除使用者作為鏈碼的 Token Auditor。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) RemoveTokenAuditor(org_id string, user_id string) (interface{}, error)
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含被移除為鏈碼 Token Auditor 的使用者詳細資料。
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "2f01f48eceaf2dff175f98b96a5bdd22c949f48fc5683ce86d6141cc4892aee3",
        "payload": {
            "msg": "Successfully removed Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 270
    }
}
GetTokenAuditors
此方法會傳回鏈碼的所有 Token Auditors。只有鏈碼的 Token AdminToken Auditor 才能呼叫此方法。
func (t *Controller) GetTokenAuditors() (interface{}, error)
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "18eaa81b04d43db64f28287bab1cf6609e2a1d8ff84852ff73849ddb9a9dfba1",
        "payload": {
            "auditors": [
                {
                    "OrgId": "CB",
                    "UserId": "auditor_user_cb"
                }
            ]
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 269
    }
}
AddOrgAuditor
此方法會將使用者新增為鏈碼的 Org Auditor。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。
func (t *Controller) AddOrgAuditor(org_id string, user_id string) (interface{}, error)
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為鏈碼 Org Auditor 的使用者詳細資料。
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "3d5ec46003c68c6208d43c82894bd6da5c0b763339cc5212e09b71d39d0d80e2",
        "payload": {
            "msg": "Successfully added Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 271
    }
}
RemoveOrgAuditor
此方法會移除使用者作為鏈碼的 Org Auditor。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。
func (t *Controller) RemoveOrgAuditor(org_id string, user_id string) (interface{}, error)
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含被移除為鏈碼 Org Auditor 的使用者詳細資料。
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "713a120641afbc4dfaeac73b82c9fd51df6fcfd7d4d9a82553d3c487bf11f530",
        "payload": {
            "msg": "Successfully removed Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 273
    }
}
GetOrgAuditors
此方法會傳回鏈碼的所有 Org Auditors。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
func (t *Controller) GetOrgAuditors() (interface{}, error)
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "07656bf434616d7a3d7fe4fb81dc80c8cc608991648adfd9f6f2f2b9f6ddf468",
        "payload": {
            "auditors": [
                {
                    "OrgId": "CB",
                    "UserId": "cb"
                },
                {
                    "OrgId": "CB",
                    "UserId": "issuer_user_cb"
                }
            ]
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 272
    }
}

權杖組態管理方法

Init
部署鏈碼時會呼叫此方法。每個 Token Admin 都是由必要 adminList 參數中的 user_idorg_id 資訊所識別。user_id 是執行處理擁有者或登入執行處理之使用者的使用者名稱或電子郵件 ID。org_id 是目前網路組織中使用者的成員服務提供者 (MSP) ID。
任何 Token Admin 使用者都可以透過呼叫 AddTokenAdminRemoveTokenAdmin 方法來新增和移除其他 Token Admin 使用者。
func (t *Controller) Init(adminList []admin.TokenAdminAsset) (interface{}, error) {
    list, err := t.Ctx.Admin.InitAdmin(adminList)
    if err != nil {
        return nil, fmt.Errorf("initializing admin list failed %s", err.Error())
    }
    return list, nil
}
參數:
  • adminList array – 指定權杖管理員清單的 {user_id, org_id} 資訊陣列。adminList 陣列是必要參數。
參數範例:macOS 與 Linux CLI:
'[{"user_id":"userid", "org_id":"OrgMSPId"}]'
參數範例:Microsoft Windows CLI:
"[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"
Oracle Blockchain Platform 主控台參數範例:
["[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"]
Initialize<Token Name>Token
此方法會建立記號並初始化記號特性。資產及其特性會儲存在狀態資料庫中。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) InitializeDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Save", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Save(&asset)
}
參數:
  • asset <Token Class> – 將記號資產當作參數傳遞給此方法。記號資產的特性會有所不同,並在記號規格檔案中說明。請勿在規格檔案中包含標示為唯讀的參數。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 asset 參數。

    Visual Studio 程式碼:使用 GUI 傳送對應至權杖類別欄位的個別參數。

    CLI / Postman:傳送包含記號規格欄位的序列化 JSON 字串,如下列範例所示。

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

傳回值:
  • 成功時,所建立權杖資產的 JSON 表示法。
傳回值範例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
Update<Token Name>Token
此方法會更新記號特性。記號資產建立後,只能更新 token_desc 特性和自訂特性。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) UpdateDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Update", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Update(&asset)
}
參數:
  • asset <Token Class> – 將記號資產當作參數傳遞給此方法。記號資產的特性會有所不同,並在記號規格檔案中說明。請勿在規格檔案中包含標示為唯讀的參數。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 asset 參數。

    Visual Studio 程式碼:使用 GUI 傳送對應至權杖類別欄位的個別參數。

    CLI / Postman:傳送包含記號規格欄位的序列化 JSON 字串,如下列範例所示。

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

傳回值:
  • 成功時,更新的權杖資產 JSON 表示法。
傳回值範例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenDecimals
此方法會傳回針對分數記號設定的小數位數。如果未指定記號的 divisible 行為,則預設值為 0。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。
func (t *Controller) GetTokenDecimals(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenDecimals", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    tokenDecimal, err := t.Ctx.Token.GetTokenDecimals(token_id)
    if err != nil {
        return nil, fmt.Errorf("Error in GetTokenDecimals %s", err.Error())
    }
    response := make(map[string]interface{})
    response["msg"] = fmt.Sprintf("Token Id: %s has %d decimal places.", token_id, tokenDecimal)
    return response, nil
}
參數:
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,會顯示記號小數位數的 JSON 字串。
傳回值範例:
{"msg":"Token Id: digiCurr101 has 1 decimal places."}
GetTokenById
如果某個記號物件存在於狀態資料庫中,這個方法會傳回該物件。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。
func (t *Controller) GetTokenById(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Get", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    tokenAsset, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return tokenAsset.Interface(), err
}
參數:
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,代表權杖資產的 JSON 物件。
傳回值範例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenHistory
此方法會傳回所指定記號 ID 的記號歷史記錄。所有使用者都可以呼叫此方法。
func (t *Controller) GetTokenHistory(token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenHistory", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.History(token_id)
}
參數:
  • tokenId: string – 記號的 ID。
傳回值:
  • 成功時,代表權杖歷史記錄的 JSON 物件。
傳回值範例:
[
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:46:33Z",
        "TxId": "12333b8a4f63aa9b3a34072efcbd7df546c6d1e7d82a7a9596e899383656d6f7",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "updated description",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:04:25Z",
        "TxId": "99702e2dad7554a5ee4716a0d01d3e394cbce39bea8bade265d8911f30ebad0b",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetAllTokens
這個方法會傳回狀態資料庫中儲存的所有記號。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。
func (t *Controller) GetAllTokens() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetAllTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Token.GetAllTokens()
}
參數:
傳回值:
  • 成功時,代表所有權杖資產的 JSON 物件。
傳回值範例:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 2,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetTokensByName
此方法會傳回具有指定名稱的所有記號物件。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
func (t *Controller) GetTokensByName(token_name string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokensByName", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Token.GetTokensByName(token_name)
}
參數:
  • token_name string – 要擷取之記號的名稱。名稱對應至規格檔案中的 Token_name 特性。此值為記號的類別名稱。
傳回值:
  • 成功時,所有與名稱相符之記號資產的 JSON 物件。
傳回值範例:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "key": "obp2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "",
            "Token_id": "obp2",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
Init
部署鏈碼時會呼叫此方法。每個 Token Admin 都是由必要 adminList 參數中的 user_idorg_id 資訊所識別。user_id 是執行處理擁有者或登入執行處理之使用者的使用者名稱或電子郵件 ID。org_id 是目前網路組織中使用者的成員服務提供者 (MSP) ID。
任何 Token Admin 使用者都可以透過呼叫 AddTokenAdminRemoveTokenAdmin 方法來新增和移除其他 Token Admin 使用者。
func (t *Controller) Init(adminList []admin.TokenAdminAsset) (interface{}, error) {
    list, err := t.Ctx.Admin.InitAdmin(adminList)
    if err != nil {
        return nil, fmt.Errorf("initializing admin list failed %s", err.Error())
    }
    return list, nil
}
參數:
  • adminList array – 指定權杖管理員清單的 {user_id, org_id} 資訊陣列。adminList 陣列是必要參數。
參數範例:macOS 與 Linux CLI:
'[{"user_id":"userid", "org_id":"OrgMSPId"}]'
參數範例:Microsoft Windows CLI:
"[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"
Oracle Blockchain Platform 主控台參數範例:
["[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"]
Initialize<Token Name>Token
此方法會建立記號並初始化記號特性。資產及其特性會儲存在狀態資料庫中。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) InitializeDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Save", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Save(&asset)
}
參數:
  • asset <Token Class> – 將記號資產當作參數傳遞給此方法。記號資產的特性會有所不同,並在記號規格檔案中說明。請勿在規格檔案中包含標示為唯讀的參數。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 asset 參數。

    Visual Studio 程式碼:使用 GUI 傳送對應至權杖類別欄位的個別參數。

    CLI / Postman:傳送包含記號規格欄位的序列化 JSON 字串,如下列範例所示。

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

傳回值:
  • 成功時,所建立權杖資產的 JSON 表示法。
傳回值範例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
Update<Token Name>Token
此方法會更新記號特性。記號資產建立後,只能更新 token_desc 特性和自訂特性。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) UpdateDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Update", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Update(&asset)
}
參數:
  • asset <Token Class> – 將記號資產當作參數傳遞給此方法。記號資產的特性會有所不同,並在記號規格檔案中說明。請勿在規格檔案中包含標示為唯讀的參數。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 asset 參數。

    Visual Studio 程式碼:使用 GUI 傳送對應至權杖類別欄位的個別參數。

    CLI / Postman:傳送包含記號規格欄位的序列化 JSON 字串,如下列範例所示。

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

傳回值:
  • 成功時,更新的權杖資產 JSON 表示法。
傳回值範例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenDecimals
此方法會傳回針對分數記號設定的小數位數。如果未指定記號的 divisible 行為,則預設值為 0。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
func (t *Controller) GetTokenDecimals(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenDecimals", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    tokenDecimal, err := t.Ctx.Token.GetTokenDecimals(token_id)
    if err != nil {
        return nil, fmt.Errorf("Error in GetTokenDecimals %s", err.Error())
    }
    response := make(map[string]interface{})
    response["msg"] = fmt.Sprintf("Token Id: %s has %d decimal places.", token_id, tokenDecimal)
    return response, nil
}
參數:
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,會顯示記號小數位數的 JSON 字串。
傳回值範例:
{"msg":"Token Id: digiCurr101 has 1 decimal places."}
GetTokenById
如果某個記號物件存在於狀態資料庫中,這個方法會傳回該物件。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
func (t *Controller) GetTokenById(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Get", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    tokenAsset, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return tokenAsset.Interface(), err
}
參數:
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,代表權杖資產的 JSON 物件。
傳回值範例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenHistory
此方法會傳回所指定記號 ID 的記號歷史記錄。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
func (t *Controller) GetTokenHistory(token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenHistory", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.History(token_id)
}
參數:
  • tokenId: string – 記號的 ID。
傳回值:
  • 成功時,代表權杖歷史記錄的 JSON 物件。
傳回值範例:
[
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:46:33Z",
        "TxId": "12333b8a4f63aa9b3a34072efcbd7df546c6d1e7d82a7a9596e899383656d6f7",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "updated description",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:04:25Z",
        "TxId": "99702e2dad7554a5ee4716a0d01d3e394cbce39bea8bade265d8911f30ebad0b",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetAllTokens
這個方法會傳回狀態資料庫中儲存的所有記號。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
func (t *Controller) GetAllTokens() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetAllTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Token.GetAllTokens()
}
參數:
傳回值:
  • 成功時,代表所有權杖資產的 JSON 物件。
傳回值範例:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 2,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetTokensByName
此方法會傳回具有指定名稱的所有記號物件。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
func (t *Controller) GetTokensByName(token_name string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokensByName", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Token.GetTokensByName(token_name)
}
參數:
  • token_name string – 要擷取之記號的名稱。名稱對應至規格檔案中的 Token_name 特性。此值為記號的類別名稱。
傳回值:
  • 成功時,所有與名稱相符之記號資產的 JSON 物件。
傳回值範例:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "key": "obp2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "",
            "Token_id": "obp2",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]

帳戶管理方法

CreateAccount
這個方法會為指定的使用者與記號建立帳號。必須為任何需要記號的使用者建立帳戶。帳戶會追蹤餘額、保留餘額及交易歷史記錄。帳戶 ID 是一組英數字元,前面加上 oaccount~<token asset name>~,後面接著執行處理擁有者的使用者名稱或電子郵件 ID (user_id) 雜湊,或登入執行處理的使用者 (目前網路組織中使用者的成員服務提供者 ID (org_id)。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。
unc (t *Controller) CreateAccount(org_id string, user_id string, token_type string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.CreateAccount", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.CreateAccount(org_id, user_id, token_type)
}
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
  • token_type: string – 記號的類型,必須是 fungible
傳回值:
  • 成功時,所建立帳戶的 JSON 物件。BapAccountVersion 參數是在科目物件中定義供內部使用。
傳回值範例:
{ 
   "AssetType":"oaccount",
   "AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "BapAccountVersion": 0,
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0,
   "OnHoldBurnBalance":0
}
AssociateTokenToAccount
此方法會將有趣的記號與帳戶建立關聯。只有鏈碼的 Token Admin 或相關組織的 Org Admin 才能呼叫此方法。
func (t *Controller) AssociateTokenToAccount(account_id string, token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.AssociateToken", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.AssociateToken(account_id, token_id)
}
參數:
  • account_id string – 帳戶的 ID。
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,已更新帳戶的 JSON 物件。BapAccountVersion 參數是在科目物件中定義供內部使用。
傳回值範例:
{ 
"AssetType":"oaccount", 
"AccountId":"oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb", 
"BapAccountVersion": 0,
"UserId":"admin", 
"OrgId":"Org1MSP", 
"AccountType":"fungible", 
"TokenId":"token1", 
"TokenName":"loyaltok", 
"Balance":0, 
"BalanceOnHold":0, 
"OnHoldBurnBalance":0
}
GetAccount
此方法會傳回指定使用者和記號的帳戶詳細資訊。只有鏈碼的 Token Admin、指定組織的 Org Admin 或帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) GetAccount(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccount", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountWithStatus(account_id)
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含下列特性的 JSON 帳戶物件:
  • AccountId – 使用者帳戶的 ID。
  • UserId – 使用者的使用者名稱或電子郵件 ID。
  • OrgId – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • TokenId – 記號的 ID。
  • Balance – 帳戶的目前餘額。
  • BalanceOnHold – 帳戶的目前保留結餘。
  • OnHoldBurnBalance – 目前等待燒錄核准的保留結餘。
  • BapAccountVersion – 內部使用的帳戶物件參數。
  • Status – 使用者帳戶的目前狀態。
傳回值範例:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 0,
  "OnHoldBurnBalance": 0,
  "BapAccountVersion": 8,
  "OrgId": "appdev",
  "Status": "active",
  "TokenId": "obp1",
  "TokenName": "obptok",
  "TokenType": "fungible",
  "UserId": "idcqa"
}
GetAccountHistory
此方法會傳回指定使用者和權杖的帳戶歷史記錄詳細資訊。只有鏈碼的 Token Admin 或帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) GetAccountHistory(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.History", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.History(account_id)
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含下列特性的 JSON 帳戶物件陣列:
  • TxId - 分類帳所傳回之交易的交易 ID。
  • Timestamp – 交易的時間。
  • IsDelete – 指示是否刪除記錄的布林值。
  • Value – 帳戶物件的 JSON 字串。BapAccountVersion 參數是在科目物件中定義供內部使用。
傳回值範例:
[
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:31:15Z",
      "TxId": "adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 100,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 1,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:30:23Z",
      "TxId": "8fbeda2ba60ba175091faae5ae369247775f2cba45c4d6d1ead6f0b05be84743",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:29:54Z",
      "TxId": "19bb296ae71709e91b097ba5d9ebd7f7522095880382fbf5913334a46a6026aa",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "",
          "TokenName": "",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  }
]
GetAccountOnHoldBalance
此方法會傳回指定帳戶與變數替代字的目前保留餘額。只有鏈碼的 Token Admin、指定組織的 Org Admin 或帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) GetAccountOnHoldBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountOnHoldBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountOnHoldBalance(account_id)
      return response, err
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,代表目前保留餘額的 JSON。
傳回值範例:
{
    "holding_balance": 0,
    "msg": "Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
這個方法會傳回所有帳號的清單。只有鏈碼的 Token Admin 才能呼叫此方法。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
func (t *Controller) GetAllAccounts() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllAccounts", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Account.GetAllAccounts()
}
參數:
傳回值:
  • 成功時,所有帳戶的 JSON 陣列。
傳回值範例:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 100,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 1,
            "OrgId": "appdev",
            "TokenId": "t1",
            "TokenName": "obptok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    }
]
GetUserByAccountId
此方法會傳回指定帳戶的使用者詳細資訊 (org_iduser_id)。鏈碼的任何使用者都可以呼叫這個方法。
func (t *Controller) GetUserByAccountId(account_id string) (interface{}, error) {
    return t.Ctx.Account.GetUserByAccountById(account_id)
}
參數:
  • account_id string – 帳戶的 ID。
傳回值:
  • 成功時,使用者詳細資訊 (org_idtoken_iduser_id) 的 JSON 物件。
傳回值範例:
{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}
GetAccountBalance
此方法會傳回指定帳戶與變數替代字的目前餘額。只有鏈碼的 Token Admin、指定組織的 Org Admin 或帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountBalance(account_id)
      return response, err
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,代表目前帳戶餘額的 JSON。
傳回值範例:
{"msg":"Current Balance of oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f is 0","user_balance":0}
GetAllOrgAccounts
此方法會傳回屬於指定組織的所有記號帳戶清單。只有鏈碼的 Token Admin 或指定的組織 Org Admin 才能呼叫此方法。
func (t *Controller) GetAllOrgAccounts(org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllOrgAccounts", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAllOrgAccounts(org_id)
}
參數:
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織的所有客戶清單。
傳回值範例:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    },
    {
        "key": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
        "valueJson": {
            "AccountId": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "example_minter"
        }
    }
]
CreateAccount
這個方法會為指定的使用者與記號建立帳號。必須為任何需要記號的使用者建立帳戶。帳戶會追蹤餘額、保留餘額及交易歷史記錄。帳戶 ID 是一組英數字元,前面加上 oaccount~<token asset name>~,後面接著執行處理擁有者的使用者名稱或電子郵件 ID (user_id) 雜湊,或登入執行處理的使用者 (目前網路組織中使用者的成員服務提供者 ID (org_id)。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。
func (t *Controller) CreateAccount(org_id string, user_id string, token_type string, daily_limits ...account.AccountDailyLimits) (interface{}, error) {
auth, err := t.Ctx.Auth.CheckAuthorization("Account.CreateAccount", "TOKEN", map[string]string{"org_id": org_id})
if err != nil && !auth {
return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
}
return t.Ctx.Account.CreateAccount(org_id, user_id, token_type, daily_limits...)
}
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
  • token_type: string – 記號的類型,必須是 fungible
  • daily_limits: JSON – 指定每日交易 (max_daily_amount) 中可使用的記號數目上限,以及每日可完成的交易數目上限 (max_daily_transactions) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 daily_limits 參數。

    Visual Studio 程式碼:{ "max_daily_amount": 1000, "max_daily_transactions": 100 }

    CLI / Postman: "{\"max_daily_amount\":1000,\"max_daily_transactions\":100}"

傳回值:
  • 成功時,所建立帳戶的 JSON 物件。BapAccountVersion 參數是在科目物件中定義供內部使用。
傳回值範例:
{ 
   "AssetType":"oaccount",
   "AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "BapAccountVersion": 0,
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0,
   "OnHoldBurnBalance":0,
   "max_daily_amount": 1000,
   "max_daily_transactions": 100
}
AssociateTokenToAccount
此方法會將有趣的記號與帳戶建立關聯。只有鏈碼的 Token Admin 或相關組織的 Org Admin 才能呼叫此方法。
func (t *Controller) AssociateTokenToAccount(account_id string, token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.AssociateToken", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.AssociateToken(account_id, token_id)
}
參數:
  • account_id string – 帳戶的 ID。
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,已更新帳戶的 JSON 物件。BapAccountVersion 參數是在科目物件中定義供內部使用。
傳回值範例:
{ 
"AssetType":"oaccount", 
"AccountId":"oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb", 
"BapAccountVersion": 0,
"UserId":"admin", 
"OrgId":"Org1MSP", 
"AccountType":"fungible", 
"TokenId":"token1", 
"TokenName":"loyaltok", 
"Balance":0, 
"BalanceOnHold":0, 
"OnHoldBurnBalance":0
}
GetAccount
此方法會傳回指定使用者和記號的帳戶詳細資訊。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) GetAccount(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccount", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountWithStatus(account_id)
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含下列特性的 JSON 帳戶物件:
  • AccountId – 使用者帳戶的 ID。
  • UserId – 使用者的使用者名稱或電子郵件 ID。
  • OrgId – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • TokenId – 記號的 ID。
  • Balance – 帳戶的目前餘額。
  • BalanceOnHold – 帳戶的目前保留結餘。
  • OnHoldBurnBalance – 目前等待燒錄核准的保留結餘。
  • BapAccountVersion – 內部使用的帳戶物件參數。
  • Status – 使用者帳戶的目前狀態。
傳回值範例:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 0,
  "OnHoldBurnBalance": 0,
  "BapAccountVersion": 8,
  "OrgId": "appdev",
  "Status": "active",
  "TokenId": "obp1",
  "TokenName": "obptok",
  "TokenType": "fungible",
  "UserId": "idcqa"
}
GetAccountHistory
此方法會傳回指定使用者和權杖的帳戶歷史記錄詳細資訊。只有鏈碼的 Token Admin 或帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) GetAccountHistory(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.History", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.History(account_id)
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含下列特性的 JSON 帳戶物件陣列:
  • TxId - 分類帳所傳回之交易的交易 ID。
  • Timestamp – 交易的時間。
  • IsDelete – 指示是否刪除記錄的布林值。
  • Value – 帳戶物件的 JSON 字串。BapAccountVersion 參數是在科目物件中定義供內部使用。
傳回值範例:
[
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:31:15Z",
      "TxId": "adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 100,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 1,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:30:23Z",
      "TxId": "8fbeda2ba60ba175091faae5ae369247775f2cba45c4d6d1ead6f0b05be84743",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:29:54Z",
      "TxId": "19bb296ae71709e91b097ba5d9ebd7f7522095880382fbf5913334a46a6026aa",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "",
          "TokenName": "",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  }
]
GetAccountOnHoldBalance
此方法會傳回指定帳戶與變數替代字的目前保留餘額。此方法只能由指定組織的 Token AdminToken AuditorOrg AdminOrg Auditor 或指定的帳戶擁有者呼叫。
func (t *Controller) GetAccountOnHoldBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountOnHoldBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountOnHoldBalance(account_id)
      return response, err
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,代表目前保留餘額的 JSON。
傳回值範例:
{
    "holding_balance": 0,
    "msg": "Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
這個方法會傳回所有帳號的清單。只有鏈碼的 Token AdminToken Auditor 才能呼叫此方法。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
func (t *Controller) GetAllAccounts() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllAccounts", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Account.GetAllAccounts()
}
參數:
傳回值:
  • 成功時,所有帳戶的 JSON 陣列。
傳回值範例:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 100,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 1,
            "OrgId": "appdev",
            "TokenId": "t1",
            "TokenName": "obptok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    }
]
GetUserByAccountId
此方法會傳回指定帳戶的使用者詳細資訊 (org_iduser_id)。此方法只能由 Token AdminToken Auditor 呼叫,或由指定組織的 Org AdminOrg Auditor 呼叫。
func (t *Controller) GetUserByAccountId(account_id string) (interface{}, error) {
    return t.Ctx.Account.GetUserByAccountById(account_id)
}
參數:
  • account_id string – 帳戶的 ID。
傳回值:
  • 成功時,使用者詳細資訊 (org_idtoken_iduser_id) 的 JSON 物件。
傳回值範例:
{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}
GetAccountBalance
此方法會傳回指定帳戶與變數替代字的目前餘額。此方法只能由指定組織的 Token AdminToken AuditorOrg AdminOrg Auditor 或指定的帳戶擁有者呼叫。
func (t *Controller) GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountBalance(account_id)
      return response, err
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,代表目前帳戶餘額的 JSON。
傳回值範例:
{"msg":"Current Balance of oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f is 0","user_balance":0}
GetAllOrgAccounts
此方法會傳回屬於指定組織的所有記號帳戶清單。此方法只能由 Token AdminToken Auditor 呼叫,或由指定組織的 Org AdminOrg Auditor 呼叫。
func (t *Controller) GetAllOrgAccounts(org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllOrgAccounts", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAllOrgAccounts(org_id)
}
參數:
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織的所有客戶清單。
傳回值範例:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    },
    {
        "key": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
        "valueJson": {
            "AccountId": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "example_minter"
        }
    }
]

角色管理方法

AddRole
此方法會新增角色至指定的使用者和記號。只有鏈碼的 Token Admin 或具有指定角色之指定組織的 Org Admin 才能呼叫此方法。
func (t *Controller) AddRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.AddRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.AddRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • user_role string – 要新增至指定使用者的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。同樣地,notary 角色對應至規格檔案的 notary_role_name 特性。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含帳戶詳細資訊的訊息。
傳回值範例:
 {"msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
RemoveRole
這個方法會從指定的使用者和記號中移除角色。只有鏈碼的 Token Admin 或同時具有指定角色之指定組織的 Org Admin 才能呼叫此方法。
func (t *Controller) RemoveRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.RemoveRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.RemoveRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • user_role string – 要從指定使用者移除的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。同樣地,notary 角色對應至規格檔案的 notary_role_name 特性。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含帳戶詳細資訊的訊息。
傳回值範例:
{"msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"}
GetAccountsByRole
此方法會傳回指定角色和記號的所有帳戶 ID 清單。只有鏈碼的 Token Admin 才能呼叫此方法。
func (t *Controller) GetAccountsByRole(token_id string, user_role string) (interface{}, error) {
    auth, err:= t.Ctx.Auth.CheckAuthorization("Role.GetAccountsByRole", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Role.GetAccountsByRole(token_id, user_role)
}
參數:
  • token_id string – 記號的 ID。
  • user_role string – 要搜尋的角色名稱。
傳回值:
  • 成功時,JSON 帳戶 ID 陣列。
傳回值範例:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetAccountsByUser
此方法會傳回指定組織 ID 與使用者 ID 之所有帳戶 ID 的清單。只有鏈碼的 Token Admin、指定組織的 Org Admin 或參數中指定的 Account Owner 才能呼叫此方法。
func (t *Controller) GetAccountsByUser(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountsByUser", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountsByUser(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,JSON 帳戶 ID 陣列。
傳回值範例:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetUsersByRole
此方法會傳回指定角色和記號之所有使用者的清單。只有鏈碼的 Token Admin 或參數中指定的 Account Owner 才能呼叫此方法。
func (t *Controller) GetUsersByRole(token_id string, user_role string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetUsersByRole", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetUsersByRole(token_id, user_role)
}
參數:
  • token_id string – 記號的 ID。
  • user_role string – 要搜尋的角色名稱。
傳回值:
  • 成功時,使用者物件的 JSON 陣列 (org_iduser_id)。
傳回值範例:
{"Users":[{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}]}
IsInRole
此方法會傳回布林值,指示使用者和記號是否具有指定的角色。只有鏈碼的 Token Admin、指定組織的 Org Admin 或帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) IsInRole(token_id string, org_id string, user_id string, user_role string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.IsInRole", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      result, err := t.Ctx.Token.IsInRole(user_role, account_id, tokenAssetValue.Interface())
      if err != nil {
            return nil, fmt.Errorf("error in IsInRole %s", err.Error())
      }
      response := make(map[string]interface{})
      response["result"] = result
      return response, nil
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
  • user_role string – 要搜尋的角色名稱。
傳回值:
  • 成功時,布林結果的 JSON 字串。
傳回值範例:
{"result":false}
GetOrgAccountsByRole
此方法會傳回指定組織中具有指定角色之所有帳戶的相關資訊。只有鏈碼的 Token Admin 或指定的組織 Org Admin 才能呼叫此方法。
func (t *Controller) GetOrgAccountsByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgAccountsByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgAccountsByRole(token_id, user_role, org_id)
}
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要檢查的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織中具有指定角色的所有客戶清單。
傳回值範例:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
         "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
GetOrgUsersByRole
此方法會傳回指定組織中具有指定角色之所有使用者的相關資訊。只有鏈碼的 Token Admin 或指定的組織 Org Admin 才能呼叫此方法。
func (t *Controller) GetOrgUsersByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgUsersByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgUsersByRole(token_id, user_role, org_id)
}
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要檢查的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織中具有指定角色的所有使用者清單。
傳回值範例:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}
AddRole
此方法會新增角色至指定的使用者和記號。只有鏈碼的 Token Admin 或具有指定角色之指定組織的 Org Admin 才能呼叫此方法。
func (t *Controller) AddRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.AddRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.AddRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • user_role string – 要新增至指定使用者的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。同樣地,notary 角色對應至規格檔案的 notary_role_name 特性。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含帳戶詳細資訊的訊息。
傳回值範例:
 {"msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
RemoveRole
這個方法會從指定的使用者和記號中移除角色。只有鏈碼的 Token Admin 或同時具有指定角色之指定組織的 Org Admin 才能呼叫此方法。
func (t *Controller) RemoveRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.RemoveRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.RemoveRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • user_role string – 要從指定使用者移除的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。同樣地,notary 角色對應至規格檔案的 notary_role_name 特性。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含帳戶詳細資訊的訊息。
傳回值範例:
{"msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"}
GetAccountsByRole
此方法會傳回指定角色和記號的所有帳戶 ID 清單。只有 Token AdminToken Auditor 才能呼叫此方法。
func (t *Controller) GetAccountsByRole(token_id string, user_role string) (interface{}, error) {
    auth, err:= t.Ctx.Auth.CheckAuthorization("Role.GetAccountsByRole", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Role.GetAccountsByRole(token_id, user_role)
}
參數:
  • token_id string – 記號的 ID。
  • user_role string – 要搜尋的角色名稱。
傳回值:
  • 成功時,JSON 帳戶 ID 陣列。
傳回值範例:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetAccountsByUser
此方法會傳回指定組織 ID 與使用者 ID 之所有帳戶 ID 的清單。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor,或參數中指定的 Account Owner 才能呼叫此方法。
func (t *Controller) GetAccountsByUser(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountsByUser", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountsByUser(org_id, user_id)
}
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,JSON 帳戶 ID 陣列。
傳回值範例:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetUsersByRole
此方法會傳回指定角色和記號之所有使用者的清單。只有 Token AdminToken Auditor 才能呼叫此方法。
func (t *Controller) GetUsersByRole(token_id string, user_role string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetUsersByRole", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetUsersByRole(token_id, user_role)
}
參數:
  • token_id string – 記號的 ID。
  • user_role string – 要搜尋的角色名稱。
傳回值:
  • 成功時,使用者物件的 JSON 陣列 (org_iduser_id)。
傳回值範例:
{"Users":[{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}]}
IsInRole
此方法會傳回布林值,指示使用者和記號是否具有指定的角色。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或指定的帳戶擁有者才能呼叫此方法。
func (t *Controller) IsInRole(token_id string, org_id string, user_id string, user_role string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.IsInRole", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      result, err := t.Ctx.Token.IsInRole(user_role, account_id, tokenAssetValue.Interface())
      if err != nil {
            return nil, fmt.Errorf("error in IsInRole %s", err.Error())
      }
      response := make(map[string]interface{})
      response["result"] = result
      return response, nil
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
  • user_role string – 要搜尋的角色名稱。
傳回值:
  • 成功時,布林結果的 JSON 字串。
傳回值範例:
{"result":false}
GetOrgAccountsByRole
此方法會傳回指定組織中具有指定角色之所有帳戶的相關資訊。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
func (t *Controller) GetOrgAccountsByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgAccountsByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgAccountsByRole(token_id, user_role, org_id)
}
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要檢查的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織中具有指定角色的所有客戶清單。
傳回值範例:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
         "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
GetOrgUsersByRole
此方法會傳回指定組織中具有指定角色之所有使用者的相關資訊。此方法只能由 Token AdminToken Auditor 呼叫,或由指定組織的 Org AdminOrg Auditor 呼叫。
func (t *Controller) GetOrgUsersByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgUsersByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgUsersByRole(token_id, user_role, org_id)
}
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要檢查的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織中具有指定角色的所有使用者清單。
傳回值範例:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}

交易歷史記錄管理的方式

GetAccountTransactionHistory
此方法會傳回指定使用者與變數替代字的帳戶交易歷史記錄明細陣列。只有鏈碼的 Token Admin、指定組織的 Org Admin 或帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) GetAccountTransactionHistory(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistory", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }

      transactionArray, err := t.Ctx.Account.GetAccountTransactionHistory(account_id, org_id, user_id)
      return transactionArray, err
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含下列特性的 JSON 帳戶交易物件陣列:
  • balance – 帳戶餘額。
  • holding_id – 持有帳戶的 ID。
  • onhold_balance – 保留餘額。
  • timestamp – 交易的時間。
  • token_id – 記號的 ID。
  • transacted_account – 進行交易的帳戶。
  • transacted_amount - 交易金額。
  • transaction_id – 交易的 ID。
  • transaction_type – 交易類型。
傳回值範例:
[{
    "balance": 199,
    "onhold_balance": 0,
    "timestamp": "2021-08-16T17:42:32.905+05:30",
    "token_id": "digiCurr101",
    "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "transacted_amount": 1,
    "transaction_id": "otransaction~c8a9fa001aba6e0d8391b034655889df47eb5103713840b999a4ab41f5e57b38",
    "transaction_type": "DEBIT"
}, {
    "balance": 200,
    "onhold_balance": 0,
    "timestamp": "2021-08-16T17:41:59.262+05:30",
    "token_id": "digiCurr101",
    "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "transacted_amount": 100,
    "transaction_id": "otransaction~65a0bf8ae8108baa7495fbab91c205651c055e9f480f6808753287173026aa69",
    "transaction_type": "MINT"
}]
GetAccountTransactionHistoryWithFilters
此方法會傳回指定使用者與變數替代字的帳戶交易歷史記錄明細陣列。只有鏈碼的 Token Admin、指定組織的 Org Admin 或帳戶的 AccountOwner 才能呼叫此方法。只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫此方法。
func (t *Controller) GetAccountTransactionHistoryWithFilters(token_id string, org_id string, user_id string, filters ...account.AccountHistoryFilters) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistoryWithFilters", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }

      // sample format of filter: []string{"3", "", "2022-01-16T15:16:36+00:00", "2022-01-17T15:16:36+00:00"}
      transactionArray, err := t.Ctx.Account.GetAccountTransactionHistoryWithFilters(account_id, org_id, user_id, filters...)
      return transactionArray, err
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
範例:

ochain invoke GetAccountTransactionHistoryWithFilters 'token1' 'appbuilder12' 'user_minter' '{"PageSize":10,"Bookmark":"1","StartTime":"2022-01-25T17:41:42Z","EndTime":"2022-01-25T17:59:10Z"}'

[
  {
    "transaction_id": "otransaction~3f9c306b0ef6994885939c1a6eb5f063b06617ecb932d4a043f323ba53d55f9f",
    "transacted_amount": 200,
    "timestamp": "2022-02-15T18:27:13.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa324
1abd3598e05d05",
    "transaction_type": "DEBIT",
    "balance": 9200,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~f1d37c3abd5c85c0a399f246d8eb68257c49ab4fe4cdfd3501908583c51c421e",
    "transacted_amount": 200,
    "timestamp": "2022-02-15T18:27:02.000Z",
    "token_id": "token1",
    "transaction_type": "BULKTRANSFER",
    "number_of_sub_transactions": 2,
    "balance": 9600,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b",
    "transacted_amount": 200,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transaction_type": "BULKTRANSFER",
    "number_of_sub_transactions": 2,
    "balance": 9800,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~07331a1f7be99d6750973674a783da9ec9ca17df23747cdf52d388865d93f9a",
    "transacted_amount": 10000,
    "timestamp": "2022-02-15T18:26:30.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~88b62f329f20fffc6fc9231cb51019a5e9550c78b657123d140897
62397d2b55",
    "transaction_type": "MINT",
    "balance": 10000,
    "onhold_balance": 0
  }
]
GetSubTransactionsById
此方法會傳回指定異動的子異動歷史記錄明細陣列。
func (t *Controller) GetSubTransactionsById(transaction_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsById", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetSubTransactionsById(transaction_id)
}
參數:
  • transaction_id string – 交易的 ID。
範例:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
    "transaction_type": "DEBIT",
    "balance": 9900,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
    "transaction_type": "DEBIT",
    "balance": 9800,
    "onhold_balance": 0
  }
]
GetSubTransactionsByIdWithFilters
此方法會傳回指定異動的子異動歷史記錄明細陣列。
func (t *Controller) GetSubTransactionsByIdWithFilters(transaction_id string, filters ...account.SubTransactionFilters) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsByIdWithFilters", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetSubTransactionsByIdWithFilters(transaction_id, filters...)
}
參數:
  • transaction_id string – 交易的 ID。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
範例:

ochain invoke GetAccountSubTransactionHistoryWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
"transaction_type": "DEBIT",
"balance": 9900,
"onhold_balance": 0
},
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
"transaction_type": "DEBIT",
"balance": 9800,
"onhold_balance": 0
}
]
GetTransactionById
此方法會傳回 Transaction 資產的歷史記錄。
func (t *Controller) GetTransactionById(transaction_id string) (interface{}, error) {
    return t.Ctx.Transaction.GetTransactionById(transaction_id)
}
參數:
  • transaction_id string – 交易資產的 ID。
傳回值:
  • 成功時,交易歷史記錄的 JSON 陣列。
傳回值範例:
{
    "history": [
        {
            "IsDelete": "false",
            "Timestamp": "2021-08-16 20:19:05.028 +0530 IST",
            "TxId": "67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
            "Value": {
                "Amount": 3,
                "AssetType": "otransaction",
                "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "HoldingId": "ohold~digicur~digiCurr101~op2",
                "NumberOfSubTransactions": 0,
                "Timestamp": "2021-08-16T20:19:05+05:30",
                "ToAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "TokenId": "digiCurr101",
                "TransactionId": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
                "TransactionType": "RELEASEHOLD"
            }
        }
    ],
    "transaction_id": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220"
}
DeleteHistoricalTransactions
此方法會從狀態資料庫刪除較舊的交易。
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Transaction.DeleteHistoricalTransactions", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Transaction.DeleteHistoricalTransactions(timestamp)
}
參數:
  • timestamp string – 表示何時刪除交易的時戳。將刪除早於指定時間的交易資產。
GetAccountTransactionHistoryWithFiltersFromRichHistDB
func (t *Controller) GetAccountTransactionHistoryWithFiltersFromRichHistDB(token_id string, org_id string, user_id string, custom_endPoint string, bearer_token string, filters ...account.AccountHistoryFilters) (interface{}, error) {
account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
if err != nil {
return nil, err
}
auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistoryWithFilters", "TOKEN", map[string]string{"account_id": account_id})
if err != nil && !auth {
return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
}
// sample format of filter: []string{"3", "", "2022-01-16T15:16:36+00:00", "2022-01-17T15:16:36+00:00"}
transactionArray, err := t.Ctx.Account.GetAccountTransactionHistoryWithFiltersFromRichHistDB(account_id, org_id, user_id, custom_endPoint, bearer_token, filters...)
return transactionArray, err
}
參數:
  • token_id: string – 要提示的記號 ID。
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
  • custom_endpoint – Rich History 資料庫的 RESTful 服務端點。
  • bearer_token – RESTful 服務端點的存取授權記號。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
GetAccountTransactionHistory
此方法會傳回指定使用者與變數替代字的帳戶交易歷史記錄明細陣列。此方法只能由指定組織的 Token AdminToken AuditorOrg AdminOrg Auditor,或由指定的帳戶擁有者呼叫。
func (t *Controller) GetAccountTransactionHistory(token_id string, org_id string, user_id string) (interface{}, error) {
account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
if err != nil {
return nil, err
}
auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistory", "TOKEN", map[string]string{"account_id": account_id})
if err != nil && !auth {
return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
}



transactionArray, err := t.Ctx.Account.GetAccountTransactionHistory(account_id, org_id, user_id)
return transactionArray, err
}
參數:
  • token_id: string – 記號的 ID。
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
[
            {
                "transaction_id": "otransaction~64c5a4830949eae1424600f3d4a438c6f603a7c3ea31a68e374b899803999e22",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:37:28.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REJECT_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~a4537ef34a955b023b7c205b9abf06a6c79e4fdd761fb24f41b8eb34126b66c0",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:32.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "APPROVE_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~6237a759422bd9fb112742e8cd7e6450df5a74a32236d9b1005571afed8904a4",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:18.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~06b35071415d74aa1a7c18449149c937d886cae76a832c44cf8d98e84586e76e",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:35:46.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            }
 ]
GetAccountTransactionHistoryWithFilters
此方法會傳回指定使用者與變數替代字之科目交易歷史記錄明細的篩選陣列。此方法只能由指定組織的 Token AdminToken AuditorOrg AdminOrg Auditor,或由指定的帳戶擁有者呼叫。
func (t *Controller) GetAccountTransactionHistoryWithFilters(token_id string, filters ...account.AccountHistoryFilters) (interface{}, error) {
org_id, err := t.Ctx.Model.GetTransientMapKeyAsString(constants.OrgIdCC)
if err != nil {
return nil, err
}
user_id, err := t.Ctx.Model.GetTransientMapKeyAsString(constants.UserIdCC)
if err != nil {
return nil, err
}
account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
if err != nil {
return nil, err
}
auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistoryWithFilters", "TOKEN", map[string]string{"account_id": account_id})
if err != nil && !auth {
return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
}



// sample format of filter: []string{"3", "", "2022-01-16T15:16:36+00:00", "2022-01-17T15:16:36+00:00"}
transactionArray, err := t.Ctx.Account.GetReconciledTransactionHistory(account_id, org_id, user_id, filters...)
return transactionArray, err
}
參數:
  • token_id: string – 記號的 ID。
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
傳回值範例:
[
            {
                "transaction_id": "otransaction~64c5a4830949eae1424600f3d4a438c6f603a7c3ea31a68e374b899803999e22",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:37:28.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REJECT_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~a4537ef34a955b023b7c205b9abf06a6c79e4fdd761fb24f41b8eb34126b66c0",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:32.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "APPROVE_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~6237a759422bd9fb112742e8cd7e6450df5a74a32236d9b1005571afed8904a4",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:18.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~06b35071415d74aa1a7c18449149c937d886cae76a832c44cf8d98e84586e76e",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:35:46.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            }
 ]
GetSubTransactionsById
此方法會傳回指定異動的子異動歷史記錄明細陣列。只有呼叫交易的 Token AdminToken AuditorAccountOwner 才能呼叫此方法。
func (t *Controller) GetSubTransactionsById(transaction_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsById", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetSubTransactionsById(transaction_id)
}
參數:
  • transaction_id string – 交易的 ID。
範例:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
    "transaction_type": "DEBIT",
    "balance": 9900,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
    "transaction_type": "DEBIT",
    "balance": 9800,
    "onhold_balance": 0
  }
]
GetSubTransactionsByIdWithFilters
此方法會傳回指定異動的子異動歷史記錄明細陣列。
func (t *Controller) GetSubTransactionsByIdWithFilters(transaction_id string, filters ...account.SubTransactionFilters) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsByIdWithFilters", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetSubTransactionsByIdWithFilters(transaction_id, filters...)
}
參數:
  • transaction_id string – 交易的 ID。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
範例:

ochain invoke GetAccountSubTransactionHistoryWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
"transaction_type": "DEBIT",
"balance": 9900,
"onhold_balance": 0
},
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
"transaction_type": "DEBIT",
"balance": 9800,
"onhold_balance": 0
}
]
GetTransactionById
此方法會傳回 Transaction 資產的歷史記錄。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor,或交易參與者 (寄件者、收件者、公證人) 才能呼叫此方法。
func (t *Controller) GetTransactionById(transaction_id string) (interface{}, error) {
    return t.Ctx.Transaction.GetTransactionById(transaction_id)
}
參數:
  • transaction_id string – 交易資產的 ID。
傳回值:
  • 成功時,交易歷史記錄的 JSON 陣列。
傳回值範例:
{
    "history": [
        {
            "IsDelete": "false",
            "Timestamp": "2021-08-16 20:19:05.028 +0530 IST",
            "TxId": "67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
            "Value": {
                "Amount": 3,
                "AssetType": "otransaction",
                "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "HoldingId": "ohold~digicur~digiCurr101~op2",
                "NumberOfSubTransactions": 0,
                "Timestamp": "2021-08-16T20:19:05+05:30",
                "ToAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "TokenId": "digiCurr101",
                "TransactionId": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
                "TransactionType": "RELEASEHOLD"
            }
        }
    ],
    "transaction_id": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220"
}
DeleteHistoricalTransactions
此方法會從狀態資料庫刪除較舊的交易。
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Transaction.DeleteHistoricalTransactions", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Transaction.DeleteHistoricalTransactions(timestamp)
}
參數:
  • timestamp string – 表示何時刪除交易的時戳。將刪除早於指定時間的交易資產。

權杖行為管理方法 - 可變行為

IssueTokens
這個方法會提示該方法的呼叫程式所擁有的記號。來電者必須具有帳戶與次要角色。可提示的記號數目受規格檔案中 mintable 行為的 max_mint_quantity 特性所限制。如果未指定 max_mint_quantity 特性,則可以提示不限數目的記號。數量必須在規格檔案中 divisible 行為的 decimal 參數所指定的小數值內。只有具備 minter 角色之帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) IssueTokens(token_id string, quantity float64) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Mint(quantity, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • quantity float64 – 要提示的記號數目。
傳回值:
  • 成功時,包含帳戶詳細資訊的訊息。
傳回值範例:
{"msg":"Successfully minted 100 tokens to account oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetTotalMintedTokens
此方法會傳回指定記號的預期記號總數。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。
func (t *Controller) GetTotalMintedTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTotalMintedTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetTotalMintedTokens(tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,代表權杖總數的 JSON 字串。
傳回值範例:
{"msg":"total minted amount for token with id digiCurr101 is 1000","quantity":1000}
GetNetTokens
此方法會傳回系統中指定記號可用的記號總數。網路記號總計是記號燒錄後剩餘的記號數量。在方程式表單中,淨記號 = 總熔著記號 - 總燒錄記號。如果沒有燒錄記號,則網路記號的數目會等於總鑄幣的記號。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。
func (t *Controller) GetNetTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetNetTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetNetTokens(tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,表示記號淨數的 JSON 字串。
傳回值範例:
{"msg":"net minted amount for token with id digiCurr101 is 1000","quantity":1000}
RequestMint
礦工可以呼叫此方法,以傳送要求給礦工公證人以建立指定數量的權杖。
func (t *Controller) RequestMint(token_id string, operation_id string, notary_org_id string, notary_user_id string, quantity float64, timeToExpiration string, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
notary_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, notary_org_id, notary_user_id)
if err != nil {
return nil, fmt.Errorf("error in getting notary account id from org_id: %s and user_id: %s with token_id: %s, error %s ", notary_org_id, notary_user_id, token_id, err.Error())
 }
return t.Ctx.Token.Hold(operation_id, "", notary_account_id, quantity, timeToExpiration, tokenAssetValue.Interface(), constants.HoldMint, info_details...)
}
參數:
  • token_id: string – 要提示的記號 ID。
  • operation_id: string – 代表提示要求的唯一作業 ID。
  • notary_org_id: string – 將處理要求之礦產公證人的會員服務提供者 (MSP) ID。
  • notary_user_id: string – 將處理要求之礦產公證人的使用者名稱或電子郵件 ID。
  • quantity: number – 要提示的記號數量。
  • TimeToExpiration – 採礦要求到期且不再有效的時間。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin) has successfully submitted request to mint 100 tokens",
}
ApproveMint
礦工公證人可呼叫此方法,以核准採礦請求。
func (t *Controller) ApproveMint(token_id string, operation_id string) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
return t.Ctx.Token.ExecuteHold(operation_id, tokenAssetValue.Interface())
}
參數:
  • token_id: string – 要提示的記號 ID。
  • operation_id: string – 代表提示要求的唯一作業 ID。
傳回值範例:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin)"
}
RejectMint
礦物公證人可以呼叫此方法,以拒絕採礦要求。
func (t *Controller) RejectMint(token_id string, operation_id string) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
參數:
  • token_id: string – 要提示的記號 ID。
  • operation_id: string – 代表提示要求的唯一作業 ID。
傳回值範例:
{
 msg: "Successfully rejected mint request with Operation Id 'operation1' to mint 100 tokens of token id token"
}
IssueTokens
這個方法會提示該方法的呼叫程式所擁有的記號。
func (t *Controller) IssueTokens(token_id string, quantity float64, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
 }
return t.Ctx.Token.Mint(quantity, tokenAssetValue.Interface(), info_details...)
}
參數:
  • token_id: string – 記號的 ID。
  • quantity – 記號數目為 mint。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
GetTotalMintedTokens
此方法會傳回指定記號的預期記號總數。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
func (t *Controller) GetTotalMintedTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTotalMintedTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetTotalMintedTokens(tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,代表權杖總數的 JSON 字串。
傳回值範例:
{"msg":"total minted amount for token with id digiCurr101 is 1000","quantity":1000}
GetNetTokens
此方法會傳回系統中指定記號可用的記號總數。網路記號總計是記號燒錄後剩餘的記號數量。在方程式表單中,淨記號 = 總熔著記號 - 總燒錄記號。如果沒有燒錄記號,則網路記號的數目會等於總鑄幣的記號。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
func (t *Controller) GetNetTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetNetTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetNetTokens(tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,表示記號淨數的 JSON 字串。
傳回值範例:
{"msg":"net minted amount for token with id digiCurr101 is 1000","quantity":1000}

權杖行為管理方法 - 可轉移行為

TransferTokens
此方法會將記號從呼叫程式轉移至指定的帳戶。方法的呼叫程式必須要有帳戶。數量必須在規格檔案中 divisible 行為的 decimal 參數所指定的小數值內。只有帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) TransferTokens(token_id string, to_org_id string, to_user_id string, quantity float64) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Transfer(to_account_id, quantity, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • to_org_id string – 目前組織中接收者的成員服務提供者 (MSP) ID。
  • to_user_id string – 接收者的使用者名稱或電子郵件 ID。
  • quantity float64 – 要傳輸的記號數目。
傳回值:
  • 成功時,包含兩個帳戶詳細資料的訊息。
傳回值範例:
{"msg":"successfully transferred 1 tokens from account oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) to account oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : admin)"}
BulkTransferTokens
此方法會將變數替代字從呼叫者帳戶大量傳輸至 flow 物件中指定的帳戶。數量必須位於此方法之規格 file.The 呼叫程式中 divisible 行為的 decimal 參數所指定的小數值內,必須已建立帳戶。只有帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) BulkTransferTokens(token_id string, flow[]map[string]interface{}) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.BulkTransfer(flow, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • flow[]map[string]interface{} – 指定接收者詳細資訊和數量的 JSON 物件陣列。
    • to_org_id string – 目前組織中接收者的成員服務提供者 (MSP) ID。
    • to_user_id string – 接收者的使用者名稱或電子郵件 ID。
    • quantity float64 – 要傳輸的記號數目。
    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 flow 參數。
    Visual Studio 程式碼:
    [
      { "to_org_id": "Org1MSP", "to_user_id": "user1", "quantity": 10 },
      { "to_org_id": "Org1MSP", "to_user_id": "user2", "quantity": 10 }
    ]
    
    CLI / Postman:
    "[{ \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user1\", \"quantity\": 10 }, { \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user2\", \"quantity\": 10 }]"
傳回值:
  • 表示成功的訊息。
傳回值範例:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}
TransferTokens
此方法會將記號從呼叫程式轉移至指定的帳戶。
func (t *Controller) TransferTokens(token_id string, to_org_id string, to_user_id string, quantity float64, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
if err != nil {
return nil, err
 }
return t.Ctx.Token.Transfer(to_account_id, quantity, tokenAssetValue.Interface(), info_details...)
}
參數:
  • token_id: string – 記號的 ID。
  • to_org_id: string – 目前組織中接收者 (受款人) 的成員服務提供者 (MSP) ID。
  • to_user_id: string – 接收者的使用者名稱或電子郵件 ID。
  • quantity: number – 要傳輸的記號數目。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
 msg: "Successfully transferred 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) to account id: oaccount~7yuijg39b4e1e4136dd86a806020c97a930909325340481b8fdhjklliugbv699 (Org-Id: Org1MSP, User-Id: user)",
}
BulkTransferTokens
此方法會將變數替代字從呼叫者帳戶大量傳輸至 flow 物件中指定的帳戶。數量必須位於此方法之規格 file.The 呼叫程式中 divisible 行為的 decimal 參數所指定的小數值內,必須已建立帳戶。只有帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) BulkTransferTokens(token_id string, flow[]map[string]interface{}) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.BulkTransfer(flow, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • flow[]map[string]interface{} – 指定接收者詳細資訊和數量的 JSON 物件陣列。
    • to_org_id string – 目前組織中接收者的成員服務提供者 (MSP) ID。
    • to_user_id string – 接收者的使用者名稱或電子郵件 ID。
    • quantity float64 – 要傳輸的記號數目。
    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 flow 參數。
    Visual Studio 程式碼:
    [
      { "to_org_id": "Org1MSP", "to_user_id": "user1", "quantity": 10 },
      { "to_org_id": "Org1MSP", "to_user_id": "user2", "quantity": 10 }
    ]
    
    CLI / Postman:
    "[{ \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user1\", \"quantity\": 10 }, { \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user2\", \"quantity\": 10 }]"
傳回值:
  • 表示成功的訊息。
傳回值範例:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}

權杖行為管理方法 - 可保留行為

HoldTokens
此方法使用 to_account_id 帳戶代表權杖的擁有者建立保留。已指定公證人帳戶,該帳戶負責完成或解除保留。建立保留時,系統會保留付款人的指定變數替代字餘額。保留完成或解除之前,無法移轉保留餘額。此方法的來電者必須已建立帳戶。只有帳戶的 AccountOwner 才能呼叫此方法。
func (t *Controller) HoldTokens(token_id string, operation_id string, to_org_id string, to_user_id string, notary_org_id string, notary_user_id string, quantity float64, TimeToExpiration string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      notary_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, notary_org_id, notary_user_id)
      if err != nil {
            return nil, fmt.Errorf("error in getting notary account id from org_id: %s and user_id: %s with token_id: %s, error %s ", notary_org_id, notary_user_id, token_id, err.Error())
      }
      to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
      if err != nil {
            return nil, fmt.Errorf("error in getting to_account id from org_id: %s and user_id: %s with token_id: %s, error %s ", to_org_id, to_user_id, token_id, err.Error())
      }
      return t.Ctx.Token.Hold(operation_id, to_account_id, notary_account_id, quantity, TimeToExpiration, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • operation_id string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • to_org_id string – 目前組織中接收者的成員服務提供者 (MSP) ID。
  • to_user_id string – 接收者的使用者名稱或電子郵件 ID。
  • notary_org_id string – 目前組織中公證人的會員服務提供者 (MSP) ID。
  • notary_user_id string – 公證人的使用者名稱或電子郵件 ID。
  • quantity float64 – 保留的記號數目。
  • time_to_expiration – 保留到期的時間。為永久保留指定 0 。否則,請使用 RFC-3339 格式。例如,2021-06-02T12:46:06Z
傳回值:
  • 成功時,與來電者帳戶的訊息並保留詳細資料。
傳回值範例:
{"msg":"AccountId oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) is successfully holding 2 tokens"}
ExecuteHoldTokens
這個方法會完成記號的保留。權杖擁有者先前持有的權杖數量會移轉給接收者。如果 quantity 值小於實際保留值,則剩餘金額會再次提供給權杖的原始擁有者。只有具備 notary 角色的 AccountOwner ID 才能呼叫此方法。只有公證人才能完成保留。
func (t *Controller) ExecuteHoldTokens(token_id string, operation_id string, quantity float64) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ExecuteHold(operation_id, quantity, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • operation_id string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • quantity float64 – 要轉移的保留記號數目。
傳回值:
  • 成功時,訊息會包含來電者帳戶 ID 與交易數量。
傳回值範例:
{"msg":"Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) has successfully executed '1' tokens(digiCurr101) from the hold with Operation Id 'op1'"}
ReleaseHoldTokens
此方法會解除保留記號。轉帳未完成,所有保留的權杖都會再次提供給原始擁有者使用。具有 notary 角色的 Account Owner ID 可在指定的時間限制內呼叫此方法,或由付款人、受款人或公證人在指定的時間限制之後呼叫。
func (t *Controller) ReleaseHoldTokens(token_id string, operation_id string) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • operation_id string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 成功時,會出現一則訊息,指出已解除保留。
傳回值範例:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
此方法會傳回指定帳戶之所有持有 ID 的清單。此方法可由鏈碼的 Token Admin、指定組織的 Org Admin 或帳戶的 Account Owner 呼叫。
func (t *Controller) GetOnHoldIds(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetOnHoldIds", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetOnHoldIDs(account_id)
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,JSON 保留 ID 清單。保留 ID 是 ohold 資產類型的串連、記號的名稱、記號 ID 以及作業 ID。
傳回值範例:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationId
此方法會傳回指定作業 ID 與變數替代字的保留異動明細。任何人都可以呼叫這個方法。
func (t *Controller) GetOnHoldDetailsWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.Ctx.Hold.GetOnHoldDetailsWithOperationId(token_id, operation_id)
}
參數:
  • token_id string – 記號的 ID。
  • operation_id string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 成功時,包含下列特性的 JSON 保留物件:
  • HoldingId – 交易的持有 ID。
  • OperationId – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • FromAccountId - 保留權杖目前擁有者的帳戶 ID。
  • ToAccountId – 接收者的帳戶 ID。
  • NotaryAccountId – 公證人的帳戶 ID。
  • TokenId – 已儲存記號的 ID。
  • Quantity – 保留 ID 的記號數量。
  • TimeToExpiration – 保留到期前的持續時間。
傳回值範例:
{
    "AssetType": "ohold",
    "HoldingId": "ohold~digicur~digiCurr101~op1",
    "OperationId": "op1",
    "TokenName": "digicur",
    "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "ToAccountId": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "NotaryAccountId": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "TokenId": "digiCurr101",
    "Quantity": 2,
    "TimeToExpiration": "0"
}
GetOnHoldBalanceWithOperationId
此方法會傳回指定作業 ID 與變數替代字的保留餘額。任何人都可以呼叫這個方法。
func (t *Controller) GetOnHoldBalanceWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.Ctx.Hold.GetOnHoldBalanceWithOperationId(token_id, operation_id)
}
參數:
  • token_id string – 記號的 ID。
  • operation_id string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 成功時,一個 JSON 字串表示持有餘額。
傳回值範例:
{
	"holding_balance": 10,
	"msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}
HoldTokens
此方法使用 to_account_id 帳戶代表權杖的擁有者建立保留。
func (t *Controller) HoldTokens(token_id string, operation_id string, to_org_id string, to_user_id string, notary_org_id string, notary_user_id string, quantity float64, timeToExpiration string, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
notary_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, notary_org_id, notary_user_id)
if err != nil {
return nil, fmt.Errorf("error in getting notary account id from org_id: %s and user_id: %s with token_id: %s, error %s ", notary_org_id, notary_user_id, token_id, err.Error())
}
to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
if err != nil {
return nil, fmt.Errorf("error in getting to_account id from org_id: %s and user_id: %s with token_id: %s, error %s ", to_org_id, to_user_id, token_id, err.Error())
 }
return t.Ctx.Token.Hold(operation_id, to_account_id, notary_account_id, quantity, timeToExpiration, tokenAssetValue.Interface(), constants.HoldTransfer, info_details...)
}
參數:
  • token_id: string – 記號的 ID。
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • to_org_id: string – 目前組織中接收者的成員服務提供者 (MSP) ID。
  • to_user_id: string – 接收者的使用者名稱或電子郵件 ID。
  • notary_org_id: string – 目前組織中公證人的會員服務提供者 (MSP) ID。
  • notary_user_id: string – 公證人的使用者名稱或電子郵件 ID。
  • quantity: number – 保留的記號數目。
  • time_to_expiration – 保留到期的時間。為永久保留指定 0 。否則,請使用 RFC-3339 格式。例如,2021-06-02T12:46:06Z
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) is successfully holding 100 tokens",
}
ExecuteHoldTokens
這個方法會完成記號的保留。權杖擁有者先前持有的權杖數量會移轉給接收者。如果 quantity 值小於實際保留值,則剩餘金額會再次提供給權杖的原始擁有者。只有具備 notary 角色的 AccountOwner ID 才能呼叫此方法。只有公證人才能完成保留。
func (t *Controller) ExecuteHoldTokens(token_id string, operation_id string, quantity float64) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ExecuteHold(operation_id, quantity, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • operation_id string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • quantity float64 – 要轉移的保留記號數目。
傳回值:
  • 成功時,訊息會包含來電者帳戶 ID 與交易數量。
傳回值範例:
{"msg":"Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) has successfully executed '1' tokens(digiCurr101) from the hold with Operation Id 'op1'"}
ReleaseHoldTokens
此方法會解除保留記號。轉帳未完成,所有保留的權杖都會再次提供給原始擁有者使用。具有 notary 角色的 Account Owner ID 可在指定的時間限制內呼叫此方法,或由付款人、受款人或公證人在指定的時間限制之後呼叫。
func (t *Controller) ReleaseHoldTokens(token_id string, operation_id string) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • operation_id string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 成功時,會出現一則訊息,指出已解除保留。
傳回值範例:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
此方法會傳回指定帳戶之所有持有 ID 的清單。此方法可由指定組織的 Token AdminToken AuditorOrg AdminOrg Auditor 或指定的帳戶擁有者呼叫。
func (t *Controller) GetOnHoldIds(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetOnHoldIds", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetOnHoldIDs(account_id)
}
參數:
  • token_id string – 記號的 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,JSON 保留 ID 清單。保留 ID 是 ohold 資產類型的串連、記號的名稱、記號 ID 以及作業 ID。
傳回值範例:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationId
此方法會傳回指定作業 ID 與變數替代字的保留異動明細。只有 Token AdminToken Auditor 或交易參與者 (寄件者、收件者、公證人) 才能呼叫此方法。
func (t *Controller) GetOnHoldDetailsWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.Ctx.Hold.GetOnHoldDetailsWithOperationId(token_id, operation_id)
}
參數:
  • token_id string – 記號的 ID。
  • operation_id string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 成功時,包含下列特性的 JSON 保留物件:
  • HoldingId – 交易的持有 ID。
  • OperationId – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • FromAccountId - 保留權杖目前擁有者的帳戶 ID。
  • ToAccountId – 接收者的帳戶 ID。
  • NotaryAccountId – 公證人的帳戶 ID。
  • TokenId – 已儲存記號的 ID。
  • Quantity – 保留 ID 的記號數量。
  • TimeToExpiration – 保留到期前的持續時間。
傳回值範例:
{
    "AssetType": "ohold",
    "HoldingId": "ohold~digicur~digiCurr101~op1",
    "OperationId": "op1",
    "TokenName": "digicur",
    "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "ToAccountId": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "NotaryAccountId": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "TokenId": "digiCurr101",
    "Quantity": 2,
    "TimeToExpiration": "0"
}
GetOnHoldBalanceWithOperationId
此方法會傳回指定作業 ID 與變數替代字的保留餘額。只有 Token AdminToken Auditor 或交易參與者 (寄件者、收件者、公證人) 才能呼叫此方法。
func (t *Controller) GetOnHoldBalanceWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.Ctx.Hold.GetOnHoldBalanceWithOperationId(token_id, operation_id)
}
參數:
  • token_id string – 記號的 ID。
  • operation_id string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 成功時,一個 JSON 字串表示持有餘額。
傳回值範例:
{
	"holding_balance": 10,
	"msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

記號行為管理方法 - 可燃行為

BurnTokens
此方法會停用或燒錄交易呼叫者帳戶中的記號。此方法的來電者必須具有帳戶與燒錄者角色。數量必須在規格檔案中 divisible 行為的 decimal 參數所指定的小數值內。具有燒錄機角色之帳戶的 Account Owner 可以呼叫此方法。
func (t *Controller) BurnTokens(token_id string, quantity float64) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Burn(quantity, tokenAssetValue.Interface())
}
參數:
  • token_id string – 記號的 ID。
  • quantity float64 – 要燒錄的記號數目。
傳回值:
  • 成功時,會顯示已燒錄記號數量和帳戶 ID 的成功訊息。
傳回值範例:
{"msg":"Successfully burned 1 tokens from account id: oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e (org_id : Org1MSP, user_id : user2)"}
RequestBurn
燃燒器可以呼叫此方法,以傳送要求給燃燒器公證,以銷毀指定數量的記號,此記號必須小於或等於其可用餘額。當燒錄要求開始時,指定的金額會立即從可用餘額中扣除,並新增至 onhold_burn_balance 欄位。如果請求通過核准,則系統會燒錄權杖。如果要求被拒絕,則記號會從 onhold_burn_balance 欄位傳回至可用餘額。
func (t *Controller) RequestBurn(token_id string, operation_id string, notary_org_id string, notary_user_id string, quantity float64, timeToExpiration string, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
notary_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, notary_org_id, notary_user_id)
if err != nil {
return nil, fmt.Errorf("error in getting notary account id from org_id: %s and user_id: %s with token_id: %s, error %s ", notary_org_id, notary_user_id, token_id, err.Error())
 }
return t.Ctx.Token.Hold(operation_id, "", notary_account_id, quantity, timeToExpiration, tokenAssetValue.Interface(), constants.HoldBurn, info_details...)
}
參數:
  • token_id: string – 要燒錄的記號 ID。
  • operation_id: string – 代表燒錄要求的唯一作業 ID。
  • notary_org_id: string – 將處理要求的燒錄公證人會員服務提供者 (MSP) ID。
  • notary_user_id: string – 將處理要求之燒錄者公證人的使用者名稱或電子郵件 ID。
  • quantity: number – 要燒錄的記號數量。
  • time_to_expiration – 燒錄要求到期且不再有效的時間。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin) has successfully submitted request to mint 100 tokens",
}
ApproveBurn
燒錄機公證人可以呼叫此方法來核准燒錄要求。
func (t *Controller) ApproveBurn(token_id string, operation_id string) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
return t.Ctx.Token.ExecuteHold(operation_id, tokenAssetValue.Interface())
}
參數:
  • token_id: string – 要燒錄的記號 ID。
  • operation_id: string – 代表燒錄要求的唯一作業 ID。
傳回值範例:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin)"
}
RejectBurn
燃燒器公證可以呼叫此方法,以拒絕燒錄請求。
func (t *Controller) RejectBurn(token_id string, operation_id string) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
參數:
  • token_id: string – 要燒錄的記號 ID。
  • operation_id: string – 代表燒錄要求的唯一作業 ID。
傳回值範例:
{
 msg: "Successfully rejected burn request with Operation Id 'operation1' to burn 100 tokens of token id token",
}
GetAccountOnHoldBurnBalance
此方法會傳回指定使用者的暫停燒錄餘額。只有 Token AdminToken AuditorOrg AdminOrg Auditor 或帳戶擁有者才能呼叫此方法。
func (t *Controller) GetAccountOnHoldBurnBalance(token_id string, org_id string, user_id string) (interface{}, error) {
    account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountOnHoldBurnBalance", "TOKEN", map[string]string{"account_id": account_id})
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    response, err := t.Ctx.Account.GetAccountOnHoldBurnBalance(account_id)
    return response, err
}
參數:
  • token_id: string – 要燒錄的記號 ID。
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
  "msg": "Total On Hold Burning Balance is: 10",
  "onhold_burn_balance": 10
}
BurnTokens
此方法會停用或燒錄交易呼叫者帳戶中的記號。
func (t *Controller) BurnTokens(token_id string, quantity float64, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
 }
return t.Ctx.Token.Burn(quantity, tokenAssetValue.Interface(), info_details...)
}
參數:
  • token_id: string – 記號的 ID。
  • quantity – 要燒錄的記號數目。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}

自訂方式

您可以使用記號 SDK 方法,為您的商業應用程式撰寫自訂方法。

使用記號 SDK 方法時,請務必追蹤傳回值。此外,為了避免重複花費,請勿結合在狀態資料庫中相同索引鍵 - 值組上運作的多個非同步函數。請改用 BulkTransferTokens 方法,以一個方法進行多個傳輸。

下列範例顯示如何在自訂方法中使用記號 SDK 方法。呼叫 BuyTicket 方法時,會將 20 個權杖從來電者的帳戶轉移至賣方的帳戶,並傳回轉接的交易訊息。

func (t *Controller) BuyTicket(TokenId string, SellerOrgId string, SellerUserId string) (interface{}, error){
	token, err := t.Ctx.Token.Get(TokenId)
	if err != nil {
		return nil, err
	}
	
	/**
	* The following method t.Ctx.Account.GenerateAccountId(TokenId, SellerOrgId, SellerUserId) generates account id of the seller
	*/
	sellerAccountId, err := t.Ctx.Account.GenerateAccountId(TokenId, SellerOrgId, SellerUserId)
    if err != nil {
		return nil, err
	}   

	/**
	* The following method t.Ctx.Token.Transfer(sellerAccountId, 20, token) transfers the quantity 20 from caller's
	* account & to seller's account.
	*/
    transaction, err := t.Ctx.Token.Transfer(sellerAccountId, 20, token)
    if err != nil {
		return nil, err
	}
    return transaction, nil
}

權杖 SDK 方法

存取控制管理方法

權杖 SDK 提供存取控制功能。某些方法只能由記號的 Token AdminOrg AdminAccountOwner 呼叫。您可以使用此功能來確保只由預期的使用者執行作業。任何未授權的存取都會導致錯誤。若要使用存取控制功能,請從 ../lib/auth 模組匯入 Authorization 類別。
import { Authorization } from '../lib/auth';
AddAdmin
此方法會將使用者新增為權杖鏈碼的 Token Admin
Ctx.AddAdmin(org_id string, user_id string) (interface{}, error)
參數:
  • user_id – 使用者的使用者名稱或電子郵件 ID。
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,新增之 Token Admin 使用者的成功訊息和詳細資訊。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: user2)"}
RemoveAdmin
此方法會移除使用者作為記號鏈碼的 Token Admin
Ctx.RemoveAdmin(org_id string, user_id string) (interface{}, error)
參數:
  • user_id – 使用者的使用者名稱或電子郵件 ID。
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,已移除之 Token Admin 使用者的成功訊息和詳細資訊。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsUserTokenAdmin
如果函數的呼叫程式是 Token Admin,此方法會傳回布林值 true。否則,方法會傳回 false
Ctx.Auth.IsUserTokenAdmin()  (bool, error)
參數:
  • user_id – 使用者的使用者名稱或電子郵件 ID。
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
傳回值:
  • 布林回應與錯誤訊息 (如果發生錯誤)。
傳回值範例:
{"result":false}
GetAllAdmins
此方法會傳回記號鏈碼 Token Admin 的所有使用者清單。
Ctx.GetAllAdmins() (interface{}, error)
參數:
傳回值:
  • 成功時,代表權杖鏈碼 Token Admin 的所有使用者清單。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]
GetAllAdminUsers
此方法會傳回記號鏈碼 Token Admin 的所有使用者清單。
Ctx.Admin.GetAllAdminUsers() (interface{}, error) 
參數:
傳回值:
  • 成功時,以 map[string]interface{} 表單作為記號鏈碼 Token Admin 的所有使用者清單。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]}
CheckAuthorization
使用此方法將存取控制新增至您的鏈碼。許多自動產生的記號方法都使用存取控制。oChainUtil.go 檔案中描述 SDK 接收器與具有存取控制的方法之間的對應。若要使用自己的存取控制或停用存取控制,請從自動產生的控制器方法和自訂方法中移除存取控制碼。
var t TokenAccess
      var r RoleAccess
      var a AccountAccess
      var as AccountStatusAccess
      var h HoldAccess
      var ad AdminAccess
      var trx TransactionAccess
      var tc TokenConversionAccess
      var auth AuthAccess

      auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"}

      trx.DeleteHistoricalTransactions = []string{"Admin"}
      ad.AddAdmin = []string{"Admin"}
      ad.RemoveAdmin = []string{"Admin"}
      ad.GetAllAdmins = []string{"Admin", "OrgAdmin"}
      ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"}
      ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"}
      t.Save = []string{"Admin"}
      t.GetAllTokens = []string{"Admin", "OrgAdmin"}
      t.Update = []string{"Admin"}
      t.GetTokenDecimals = []string{"Admin", "OrgAdmin"}
      t.GetTokensByName = []string{"Admin", "OrgAdmin"}
      t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"}
      t.GetNetTokens = []string{"Admin", "OrgAdmin"}
      t.Get = []string{"Admin", "OrgAdmin"}
      t.GetTokenHistory = []string{"Admin", "OrgAdmin"}
      a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"}
      a.GetAllAccounts = []string{"Admin"}
      a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.History = []string{"Admin", "AccountOwner"}
      a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"}
      a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"}
      a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"}

      as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"}

      r.GetAccountsByRole = []string{"Admin"}
      r.GetUsersByRole = []string{"Admin"}
      r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"}
      r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"}

      tc.InitializeExchangePoolUser = []string{"Admin"}
      tc.AddConversionRate = []string{"Admin"}
      tc.UpdateConversionRate = []string{"Admin"}
      tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.TokenConversion = []string{"Admin", "AnyAccountOwner"}
      tc.GetExchangePoolUser = []string{"Admin"}
Ctx.Auth.CheckAuthorization(classFuncName string, args ...string) (bool, error)
參數:
  • classFuncName string – 接收器與方法之間的對應值,如 oChainUtil.go 檔案中所述。
  • args – 變數引數,其中 args[0] 是常數 TOKEN,而 args[1]account_id 引數 (若有需要)。
傳回值:
  • 布林回應與錯誤訊息 (如果發生錯誤)。
AddOrgAdmin
此方法會將使用者新增為組織的 Org Admin
Ctx.Admin.AddOrgAdmin(org_id, user_id) (interface{}, error)
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為組織 Org Admin 的使用者詳細資訊。
傳回值範例:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
此方法會移除使用者作為組織的 Org Admin
Ctx.Admin.RemoveOrgAdmin(org_id, user_id) (interface{}, error)
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含作為組織 Org Admin 移除之使用者的詳細資料。
傳回值範例:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
此方法會傳回屬於組織 Org Admin 的所有使用者清單。
Ctx.Admin.GetAllOrgAdmins() (interface{}, error)
參數:
傳回值:
  • 成功時,包含 OrgIdUserId 物件的 JSON 清單。
傳回值範例:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddAdmin
此方法會將使用者新增為權杖鏈碼的 Token Admin
Ctx.AddAdmin(org_id string, user_id string) (interface{}, error)
參數:
  • user_id – 使用者的使用者名稱或電子郵件 ID。
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,新增之 Token Admin 使用者的成功訊息和詳細資訊。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: user2)"}
RemoveAdmin
此方法會移除使用者作為記號鏈碼的 Token Admin
Ctx.RemoveAdmin(org_id string, user_id string) (interface{}, error)
參數:
  • user_id – 使用者的使用者名稱或電子郵件 ID。
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,已移除之 Token Admin 使用者的成功訊息和詳細資訊。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsUserTokenAdmin
如果函數的呼叫程式是 Token Admin,此方法會傳回布林值 true。否則,方法會傳回 false
Ctx.Auth.IsUserTokenAdmin()  (bool, error)
參數:
  • user_id – 使用者的使用者名稱或電子郵件 ID。
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
傳回值:
  • 布林回應與錯誤訊息 (如果發生錯誤)。
傳回值範例:
{"result":false}
GetAllAdmins
此方法會傳回記號鏈碼 Token Admin 的所有使用者清單。
Ctx.GetAllAdmins() (interface{}, error)
參數:
傳回值:
  • 成功時,代表權杖鏈碼 Token Admin 的所有使用者清單。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]
GetAllAdminUsers
此方法會傳回記號鏈碼 Token Admin 的所有使用者清單。
Ctx.Admin.GetAllAdminUsers() (interface{}, error) 
參數:
傳回值:
  • 成功時,以 map[string]interface{} 表單作為記號鏈碼 Token Admin 的所有使用者清單。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]}
CheckAuthorization
使用此方法將存取控制新增至您的鏈碼。許多自動產生的記號方法都使用存取控制。oChainUtil.go 檔案中描述 SDK 接收器與具有存取控制的方法之間的對應。若要使用自己的存取控制或停用存取控制,請從自動產生的控制器方法和自訂方法中移除存取控制碼。
var t TokenAccess
      var r RoleAccess
      var a AccountAccess
      var as AccountStatusAccess
      var h HoldAccess
      var ad AdminAccess
      var trx TransactionAccess
      var tc TokenConversionAccess
      var auth AuthAccess

      auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"}

      trx.DeleteHistoricalTransactions = []string{"Admin"}
      ad.AddAdmin = []string{"Admin"}
      ad.RemoveAdmin = []string{"Admin"}
      ad.GetAllAdmins = []string{"Admin", "OrgAdmin"}
      ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"}
      ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"}
      t.Save = []string{"Admin"}
      t.GetAllTokens = []string{"Admin", "OrgAdmin"}
      t.Update = []string{"Admin"}
      t.GetTokenDecimals = []string{"Admin", "OrgAdmin"}
      t.GetTokensByName = []string{"Admin", "OrgAdmin"}
      t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"}
      t.GetNetTokens = []string{"Admin", "OrgAdmin"}
      t.Get = []string{"Admin", "OrgAdmin"}
      t.GetTokenHistory = []string{"Admin", "OrgAdmin"}
      a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"}
      a.GetAllAccounts = []string{"Admin"}
      a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.History = []string{"Admin", "AccountOwner"}
      a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"}
      a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"}
      a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"}

      as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"}

      r.GetAccountsByRole = []string{"Admin"}
      r.GetUsersByRole = []string{"Admin"}
      r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"}
      r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"}

      tc.InitializeExchangePoolUser = []string{"Admin"}
      tc.AddConversionRate = []string{"Admin"}
      tc.UpdateConversionRate = []string{"Admin"}
      tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.TokenConversion = []string{"Admin", "AnyAccountOwner"}
      tc.GetExchangePoolUser = []string{"Admin"}
Ctx.Auth.CheckAuthorization(classFuncName string, args ...string) (bool, error)
參數:
  • classFuncName string – 接收器與方法之間的對應值,如 oChainUtil.go 檔案中所述。
  • args – 變數引數,其中 args[0] 是常數 TOKEN,而 args[1]account_id 引數 (若有需要)。
傳回值:
  • 布林回應與錯誤訊息 (如果發生錯誤)。
AddOrgAdmin
此方法會將使用者新增為組織的 Org Admin
Ctx.Admin.AddOrgAdmin(org_id, user_id) (interface{}, error)
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為組織 Org Admin 的使用者詳細資訊。
傳回值範例:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
此方法會移除使用者作為組織的 Org Admin
Ctx.Admin.RemoveOrgAdmin(org_id, user_id) (interface{}, error)
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含作為組織 Org Admin 移除之使用者的詳細資料。
傳回值範例:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
此方法會傳回屬於組織 Org Admin 的所有使用者清單。
Ctx.Admin.GetAllOrgAdmins() (interface{}, error)
參數:
傳回值:
  • 成功時,包含 OrgIdUserId 物件的 JSON 清單。
傳回值範例:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddTokenAuditor
此方法會將使用者新增為鏈碼的 Token Auditor
t.Ctx.Admin.AddTokenAuditor(org_id, user_id)
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為鏈碼 Token Auditor 的使用者詳細資料。
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "f0888dd52f39dfa669275cc8f35d0b47b37b8407d384493d16970fcbb377f937",
        "payload": {
            "msg": "Successfully added Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 268
    }
}
RemoveTokenAuditor
此方法會移除使用者作為鏈碼的 Token Auditor
t.Ctx.Admin.RemoveTokenAuditor(org_id, user_id)
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含被移除為鏈碼 Token Auditor 的使用者詳細資料。
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "2f01f48eceaf2dff175f98b96a5bdd22c949f48fc5683ce86d6141cc4892aee3",
        "payload": {
            "msg": "Successfully removed Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 270
    }
}
GetTokenAuditors
此方法會傳回鏈碼的所有 Token Auditors
t.Ctx.Admin.GetAllTokenAuditors()
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "18eaa81b04d43db64f28287bab1cf6609e2a1d8ff84852ff73849ddb9a9dfba1",
        "payload": {
            "auditors": [
                {
                    "OrgId": "CB",
                    "UserId": "auditor_user_cb"
                }
            ]
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 269
    }
}
AddOrgAuditor
此方法會將使用者新增為鏈碼的 Org Auditor
t.Ctx.Admin.AddOrgAuditor(org_id, user_id)
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為鏈碼 Org Auditor 的使用者詳細資料。
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "3d5ec46003c68c6208d43c82894bd6da5c0b763339cc5212e09b71d39d0d80e2",
        "payload": {
            "msg": "Successfully added Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 271
    }
}
RemoveOrgAuditor
此方法會移除使用者作為鏈碼的 Org Auditor
t.Ctx.Admin.RemoveOrgAuditor(org_id, user_id)
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含被移除為鏈碼 Org Auditor 的使用者詳細資料。
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "713a120641afbc4dfaeac73b82c9fd51df6fcfd7d4d9a82553d3c487bf11f530",
        "payload": {
            "msg": "Successfully removed Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 273
    }
}
GetOrgAuditors
此方法會傳回鏈碼的所有 Org Auditors
t.Ctx.Admin.GetAllOrgAuditors()
傳回值範例:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "07656bf434616d7a3d7fe4fb81dc80c8cc608991648adfd9f6f2f2b9f6ddf468",
        "payload": {
            "auditors": [
                {
                    "OrgId": "CB",
                    "UserId": "cb"
                },
                {
                    "OrgId": "CB",
                    "UserId": "issuer_user_cb"
                }
            ]
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 272
    }
}

權杖組態管理方法

Save
這個方法會建立一個記號,並將它的特性儲存到狀態資料庫中。
Ctx.Token.Save(args ...interface{}) (interface{}, error)
參數:
  • token_id: string – 要傳回之記號的 ID。
  • args – 變數引數,其中第一個引數 args[0] 是要新增至分類帳之必要類型的記號 struct 資料參考。
傳回值:
  • 成功時,含有已儲存至狀態資料庫之記號相關詳細資訊的 interface{} 物件。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
Update
此方法會更新記號特性。記號資產建立後,您只能更新 token_desc 值及其自訂特性。
Ctx.Token.Update(args ...interface{}) (interface{}, error)
參數:
  • 包含在分類帳中更新所需類型之變數替代字 struct 資料參考的資產。
傳回值:
  • 成功時,包含變數替代字明細的承諾訊息。發生錯誤時,拒絕並顯示錯誤訊息。
傳回值範例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenDecimals
此方法會傳回小數記號可用的小數位數。如果未指定 divisible 行為,則預設值為 0。
Ctx.Token.GetTokenDecimals(token_id string) (int, error)
參數:
傳回值:
  • 成功時,記號的小數位數即為數字資料類型。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
1
Get
如果某個記號物件存在於狀態資料庫中,這個方法會傳回該物件。只有記號鏈碼的 Token Admin 才能呼叫此方法。
Ctx.Get(Id string, result ...interface{}) (interface{}, error)
參數:
  • token_id: string – 要傳回之記號的 ID。
  • result – 變數引數,其中第一個引數 result[0] 是必要類型之空白 Token 物件的參照。
傳回值:
  • 記號資產資料對應成功。變數引數 result[0] 包含記號資料。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "holdable", "roles"],
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter",
        "notary_role_name": "notary"
    },
    "Mintable": {
        "Max_mint_quantity": 20000
    },
    "Divisible": {
        "Decimal": 1
    },
    "Token_to_currency_ratio": 1,
    "Currency_representation": "DOLLAR"
}
History
此方法會傳回所指定記號 ID 的記號歷史記錄。
Ctx.Token.History(tokenId string) (interface{}, error)
參數:
  • tokenId: string – 記號的 ID。
傳回值:
  • 成功時,代表權杖歷史記錄的 JSON 陣列。
傳回值範例:
[
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:46:33Z",
        "TxId": "12333b8a4f63aa9b3a34072efcbd7df546c6d1e7d82a7a9596e899383656d6f7",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "updated description",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:04:25Z",
        "TxId": "99702e2dad7554a5ee4716a0d01d3e394cbce39bea8bade265d8911f30ebad0b",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetAllTokens
此方法會傳回狀態資料庫中儲存的所有記號資產。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
Ctx.Token.GetAllTokens()  (interface{}, error)
參數:
傳回值:
  • 成功時,所有權杖資產的陣列對應。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetTokensByName
此方法會傳回具有指定名稱的所有記號資產。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
Ctx.Token.GetTokensByName(token_name string) (interface{}, error)
參數:
  • token_name string – 對應至模型之 Token_name 特性的記號名稱。此值為記號的類別名稱。
傳回值:
  • 它會傳回指定名稱之所有記號資產的對應陣列。
傳回值範例:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "key": "obp2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "",
            "Token_id": "obp2",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
IsTokenType
此方法會測試指定之記號 ID 的記號資產是否存在。
Ctx.Model.IsTokenType(token_id: string) error
參數:
  • token_id: string – 要檢查之記號的 ID。
傳回值:
  • 如果具有指定 ID 的記號資產存在,則會發生 nil 錯誤。否則,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
nil
GetByRange
此方法會在內部呼叫結構 getStateByRange 方法。即使分類帳傳回任何具有指定 ID 的資產,此方法仍會將資產轉換成呼叫者資產類型。
Ctx.Token.GetByRange(startId string, endId string, asset ...interface{}) ([]map[string]interface{}, error)
參數:
  • startId: string – 範圍的起始索引鍵。此金鑰包含在範圍內。
  • endId: string – 範圍的結束索引鍵。此按鍵已從範圍中排除。
  • asset[0] – 必要類型之記號的空白片段。如果方法執行成功,就會包含要求的結果。
傳回值:
  • 成功時,包含記號之記號資產詳細資訊 (其 token_id 值在指定範圍內) 的對應片段。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
[{
    "Key": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
    "Record": {
        "AccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "AssetType": "oaccount",
        "Balance": 99,
        "BalanceOnHold": 1,
        "OnHoldBurnBalance": 0,
        "BapAccountVersion": 0,
        "OrgId": "Org1MSP",
        "TokenId": "t1",
        "TokenName": "loyaltok123",
        "UserId": "u1"
    }
}, {
    "Key": "oaccount~loyaltok123~ac30c5ca924a2c7def61acf596d91e0cca70bc8cd233179df4efb2791b56336b",
    "Record": {
        "AccountId": "oaccount~loyaltok123~ac30c5ca924a2c7def61acf596d91e0cca70bc8cd233179df4efb2791b56336b",
        "AssetType": "oaccount",
        "Balance": 0,
        "BalanceOnHold": 0,
        "OnHoldBurnBalance": 0,
        "BapAccountVersion": 0,
        "OrgId": "Org1MSP",
        "TokenId": "t1",
        "TokenName": "loyaltok123",
        "UserId": "u2"
    }
}, {
    "Key": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
    "Record": {
        "AccountId": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
        "AssetType": "oaccount",
        "Balance": 0,
        "BapAccountVersion": 0,
        "BalanceOnHold": 0,
        "OnHoldBurnBalance": 0,
        "OrgId": "Org1MSP",
        "TokenId": "t1",
        "TokenName": "loyaltok123",
        "UserId": "admin"
    }
}, {
    "Key": "oadmin~Org1MSP~admin",
    "Record": {
        "AssetType": "oadmin",
        "Key": "oadmin~Org1MSP~admin",
        "OrgId": "Org1MSP",
        "UserId": "admin"
    }
}, {
    "Key": "ohold~loyaltok123~t1~op1",
    "Record": {
        "AssetType": "ohold",
        "FromAccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "HoldingId": "ohold~loyaltok123~t1~op1",
        "NotaryAccountId": "oaccount~loyaltok123~ac30c5ca924a2c7def61acf596d91e0cca70bc8cd233179df4efb2791b56336b",
        "OperationId": "op1",
        "Quantity": 1,
        "TimeToExpiration": "0",
        "ToAccountId": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
        "TokenId": "t1",
        "TokenName": "loyaltok123"
    }
}, {
    "Key": "ometadata~loyaltok123~t1",
    "Record": {
        "AssetType": "ometadata",
        "Metadata_id": "ometadata~loyaltok123~t1",
        "Token_id": "t1",
        "Token_name": "loyaltok123",
        "Total_minted_amount": 100,
        "Total_supply": 100
    }
}, {
    "Key": "orole~t1~minter~oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
    "Record": {
        "AccountID": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "AssetType": "orole",
        "Key": "orole~t1~minter~oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "RoleName": "minter",
        "TokenId": "t1"
    }
}, {
    "Key": "otransaction~4a774f6493f6521cab9eda96822cb3bb4103c0738ee2dbb9a193b868ace36fa5",
    "Record": {
        "Amount": 100,
        "AssetType": "otransaction",
        "FromAccountId": "",
        "HoldingId": "",
        "NumberOfSubTransactions": 0,
        "Timestamp": "2021-08-25T23:04:42+05:30",
        "ToAccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "TokenId": "t1",
        "TransactionId": "otransaction~4a774f6493f6521cab9eda96822cb3bb4103c0738ee2dbb9a193b868ace36fa5",
        "TransactionType": "MINT"
    }
}, {
    "Key": "otransaction~69f3cefbcb64b73f01a0eadff87169f456873ccebe61ca8da3eef3f465f0c129",
    "Record": {
        "Amount": 1,
        "AssetType": "otransaction",
        "FromAccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "HoldingId": "ohold~loyaltok123~t1~op1",
        "NumberOfSubTransactions": 0,
        "Timestamp": "2021-08-25T23:06:13+05:30",
        "ToAccountId": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
        "TokenId": "t1",
        "TransactionId": "otransaction~69f3cefbcb64b73f01a0eadff87169f456873ccebe61ca8da3eef3f465f0c129",
        "TransactionType": "ONHOLD"
    }
}, {
    "Key": "t1",
    "Record": {
        "AssetType": "otoken",
        "Behavior": ["divisible", "mintable", "transferable", "burnable", "holdable", "roles"],
        "Currency_Name": "a",
        "Divisible": {
            "Decimal": 2
        },
        "Effective_From_Date": "2020-09-09T00:00:00Z",
        "Mintable": {
            "Max_mint_quantity": 10000
        },
        "Roles": {
            "minter_role_name": "minter"
        },
        "Token_To_Currency_Ratio": 1,
        "Token_desc": "",
        "Token_id": "t1",
        "Token_name": "loyaltok123",
        "Token_type": "fungible"
    }
}]

帳戶管理方法

GenerateAccountId
此方法會傳回帳戶 ID,這是一組英數字元,前面加上 oaccount~<token asset name>~,後面接著執行處理擁有者的使用者名稱或電子郵件 ID (user_id) 雜湊,或登入執行處理的使用者、目前網路組織中使用者的成員服務提供者 ID (org_id) 以及唯一記號 ID (token_id)。
Ctx.Account.GenerateAccountId(token_id string, org_id string, user_id string) (string, error)
參數:
  • token_id: string – 記號的 ID。
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,產生的帳戶 ID。發生錯誤時,拒絕並顯示錯誤訊息。
傳回值範例:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
CreateAccount
這個方法會為指定的使用者與記號建立帳號。每個在任何時間點都有權杖的使用者都必須有帳戶。帳戶會追蹤使用者的餘額、保留餘額和交易歷史記錄。帳戶 ID 是一組英數字元,前面加上 oaccount~<token asset name>~,後面接著執行處理擁有者的使用者名稱或電子郵件 ID (user_id) 雜湊,或登入執行處理的使用者 (目前網路組織中使用者的成員服務提供者 ID (org_id)。只有鏈碼的 Token Admin 才能呼叫此方法。
t.Ctx.Account.CreateAccount(org_id string, user_id string, token_type string)
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
  • token_type: string – 記號的類型,必須是 fungible
傳回值:
  • 成功時,所建立的帳戶物件。發生錯誤時,拒絕並顯示錯誤訊息。
傳回值範例:
{
 "AssetType":"oaccount",
"AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "BapAccountVersion": 0,
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0,
   "OnHoldBurnBalance":0
}
AssociateToken
此方法會將有趣的記號與帳戶建立關聯。只有鏈碼的 Token Admin 才能呼叫此方法。
t.Ctx.Account.AssociateToken(account_id, token_id)
參數:
  • account_id string – 帳戶的 ID。
  • token_id string – 記號的 ID。
傳回值:
  • 成功時,已更新帳戶的 JSON 物件。
傳回值範例:
{ 
"AssetType":"oaccount", 
"AccountId":"oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb", 
"BapAccountVersion": 0,
"UserId":"admin", 
"OrgId":"Org1MSP", 
"AccountType":"fungible", 
"TokenId":"token1", 
"TokenName":"loyaltok", 
"Balance":0, 
"BalanceOnHold":0, 
"OnHoldBurnBalance":0
}
GetAccountWithStatus
此方法會傳回指定帳戶的帳戶詳細資料,包括帳戶狀態。
Ctx.Account.GetAccountWithStatus(account_id string) (interface{}, error)
參數:
  • account_id: string – 帳戶的 ID。
傳回值:
  • 成功時,要求的帳戶詳細資訊。發生錯誤時,拒絕並顯示錯誤訊息。
傳回值範例:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 0,
  "OnHoldBurnBalance": 0,
  "BapAccountVersion": 8,
  "OrgId": "appdev",
  "Status": "active",
  "TokenId": "obp1",
  "TokenName": "obptok",
  "TokenType": "fungible",
  "UserId": "idcqa"
}
GetAccount
此方法會傳回指定帳戶的帳戶詳細資料。
Ctx.Account.GetAccount(account_id string) (Account, error)
參數:
  • account_id: string – 帳戶的 ID。
傳回值:
  • 成功時,要求的帳戶詳細資訊。發生錯誤時,拒絕並顯示錯誤訊息。
傳回值範例:
{
    "AssetType": "oaccount",
    "BapAccountVersion": 0,
    "AccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "UserId": "user1",
    "OrgId": "Org1MSP",
    "TokenId": "digiCurr101",
    "TokenName": "digicur",
    "Balance": 0,
    "BalanceOnHold": 0,
    "OnHoldBurnBalance": 0
}
GetAccountHistory
此方法會傳回指定帳戶的帳戶歷史記錄詳細資料陣列。
Ctx.Account.History(account_id string) ([]interface{}, error)
參數:
  • account_id: string – 帳戶的 ID。
傳回值:
  • 成功時,包含帳戶歷史記錄詳細資料的 map[string]interface{} 陣列。帳戶資料會顯示在地圖中的 Value 金鑰底下。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。傳回值與 GetAccountHistory 方法相同。
傳回值範例:
[
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:31:15Z",
      "TxId": "adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 100,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 1,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:30:23Z",
      "TxId": "8fbeda2ba60ba175091faae5ae369247775f2cba45c4d6d1ead6f0b05be84743",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:29:54Z",
      "TxId": "19bb296ae71709e91b097ba5d9ebd7f7522095880382fbf5913334a46a6026aa",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "",
          "TokenName": "",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  }
]
GetAccountOnHoldBalance
此方法會傳回指定帳戶的保留結餘。
Ctx.Account.getAccountOnHoldBalance(account_id: string)
參數:
  • account_id: string – 帳戶的 ID。
傳回值:
  • 成功時,具有目前保留餘額與成功訊息的承諾物件。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
   "holding_balance":0,
   "msg":"Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
這個方法會傳回所有帳號的清單。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
Ctx.func (t *Controller) GetAllAccounts() (interface{}, error)
參數:
傳回值:
  • 成功時,會列出所有帳戶的 JSON 陣列。
傳回值範例:
"payload": [
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 100,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0, 
            "BapAccountVersion": 1,
            "OrgId": "appdev",
            "TokenId": "t1",
            "TokenName": "obptok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    }
]
GetUserByAccountId
此方法會傳回指定帳戶的使用者詳細資料。
Ctx.Account.GetUserByAccountById(account_id string) (interface{}, error)
參數:
  • account_id: string – 帳戶的 ID。
傳回值:
  • 成功時,具有包含三個特性之 JSON 物件的承諾:
    • user_id – 使用者的使用者名稱或電子郵件 ID。
    • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
    • token_id – 記號的 ID。
  • 發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
   "org_id":"Org1MSP",
   "token_id":"digiCurr101",
   "user_id":"user1"
}
GetAccountBalance
此方法會傳回指定帳戶的帳戶餘額。
Ctx.GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error)
參數:
  • account_id: string – 帳戶的 ID。
傳回值:
  • 成功時,含有訊息字串與目前餘額的介面。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
    "msg": "Current Balance of +p2uaMTsU9D74l9XpHQ2c55ic/2gbO4NZITC4Zq4P8E= is: 200",
    "user_balance": 200
}
GetAllOrgAccounts
此方法會傳回屬於指定組織的所有記號帳戶清單。
Ctx.Account.GetAllOrgAccounts(org_id string) (interface{}, error)
參數:
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織的所有客戶清單。
傳回值範例:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    },
    {
        "key": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
        "valueJson": {
            "AccountId": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "example_minter"
        }
    }
]

角色管理方法

AddRoleMember
此方法會新增角色至指定的使用者和記號。
Ctx.Token.AddRoleMember(role string, account_id string, tokenAsset interface{}) (interface{}, error)
參數:
  • role: string – 要新增至指定使用者的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。同樣地,notary 角色對應至規格檔案的 notary_role_name 特性。
  • account_id: number – 要新增角色的帳戶 ID。
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 在成功時,它會傳回包含成功訊息的地圖,指出角色已新增至帳戶。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
   "msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"
}
RemoveRoleMember
這個方法會從指定的使用者和記號中移除角色。
Ctx.Token.RemoveRoleMember(role string, account_id string, tokenAsset interface{}) (interface{}, error)
參數:
  • role: string – 要從指定使用者移除的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。同樣地,notary 角色對應至規格檔案的 notary_role_name 特性。
  • account_id: number – 從中移除角色的帳戶 ID。
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 在成功時,會傳回包含成功訊息的地圖,指出從帳戶中移除角色。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
  "msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"
}
GetAccountsByRole
此方法會傳回指定角色和記號的所有帳戶清單。
Ctx.Role.GetAccountsByRole(token_id string, user_role string) (interface{}, error)
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要搜尋的角色名稱。
傳回值:
  • 成功時,JSON 帳戶 ID 陣列。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"accounts":["oaccount~obptok~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
GetUsersByRole
此方法會傳回指定角色和記號之所有使用者的清單。
Ctx.Role.GetUsersByRole(token_id string, user_role string) (interface{}, error)
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要搜尋的角色名稱。
傳回值:
  • 成功時,JSON 使用者物件陣列。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
    "Users": [
        {
            "token_id":"digiCurr101",
            "user_id": "user1",
            "org_id": "Org1MSP"
        }
    ]
}
IsInRole
此方法指示使用者和記號是否具有指定的角色。
Ctx.Token.IsInRole(role string, account_id string, tokenAsset interface{}) (bool, error)
參數:
  • role: string – 要檢查的角色名稱。
  • account_id: number – 要檢查的帳戶 ID。
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 在成功時,會傳回包含成功訊息的地圖,指出從帳戶中移除角色。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
    "result": false
}
GetOrgAccountsByRole
此方法會傳回指定組織中具有指定角色之所有帳戶的相關資訊。
Ctx.Role.GetOrgAccountsByRole(token_id string, user_role string, org_id string) (interface{}, error)
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要檢查的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織中具有指定角色的所有客戶清單。
傳回值範例:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
         "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
GetOrgUsersByRole
此方法會傳回指定組織中具有指定角色之所有使用者的相關資訊。
Ctx.Role.GetOrgUsersByRole(token_id string, user_role string, org_id string) (interface{}, error)
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要檢查的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織中具有指定角色的所有使用者清單。
傳回值範例:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}
RoleCheck
此方法會檢查提供的帳戶 ID 是否為任何角色的成員。
Ctx.Token.RoleCheck(account_id string, tokenAsset interface{}) (bool, error)
參數:
  • account_id: string – 要檢查的帳戶 ID。
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 如果指定的帳戶具有任何角色,則成功訊息和布林值 true 。否則,布林值 false 。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{ result: true }

交易歷史記錄管理的方式

GetAccountTransactionHistory
此方法會傳回指定帳戶的交易記錄詳細資料陣列。
Ctx.Account.GetAccountTransactionHistory(account_id string) (interface{}, error)
參數:
  • account_id: string – 帳戶的 ID。
傳回值:
  • 傳回值與 GetAccountTransactionHistory 方法相同。
  • 成功時,JSON 帳戶交易物件陣列。
  • 發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
[
  {
      "NumberOfSubTransactions": 2,
      "balance": 160,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:51:48Z",
      "token_id": "t1",
      "transacted_amount": 20,
      "transaction_id": "otransaction~bd3e8d7d0bcdbed0469a2fccfe95f7ebbeb1987d8385bccf5c84bf80251e748c",
      "transaction_type": "BULKTRANSFER"
  },
  {
      "balance": 180,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:47:14Z",
      "token_id": "t1",
      "transacted_account": "oaccount~692a7465c01e36b694cb8ae86e6c6584240aa1f865fde54f95f32429eadd4097",
      "transacted_amount": 10,
      "transaction_id": "otransaction~250996f1df6a36a1b647f522efcaaf48fd70452d711c247fc4cd475b8e752b08",
      "transaction_type": "DEBIT"
  },
  {
      "balance": 190,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:47:08Z",
      "token_id": "t1",
      "transacted_account": "oaccount~bb5a0b57d895327c8a8cd1f267310cbf3ae542bc854fab8188b5083a969d72fb",
      "transacted_amount": 10,
      "transaction_id": "otransaction~664325a25ae6b19b23693c66f83811184e0a78fabb49122359a2dbf209f32976",
      "transaction_type": "DEBIT"
  },
  {
      "balance": 200,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:46:46Z",
      "token_id": "t1",
      "transacted_account": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
      "transacted_amount": 100,
      "transaction_id": "otransaction~7f49564b1eb61d4c8be0ef61cd5e635b533ca533907944e4ec500f390237fd6b",
      "transaction_type": "MINT"
  },
  {
      "balance": 100,
      "onhold_balance": 0,
      "timestamp": "2023-08-28T19:31:15Z",
      "token_id": "t1",
      "transacted_account": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
      "transacted_amount": 100,
      "transaction_id": "otransaction~adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "transaction_type": "MINT"
  }
]
GetAccountTransactionHistoryWithFilters
此方法會傳回指定交易之交易歷史記錄詳細資訊的陣列。只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫此方法。
t.Ctx.Account.GetAccountTransactionHistoryWithFilters (transaction_id: string, filters?: SubTransactionFilters)
參數:
  • Transaction_id: string – 交易的 ID。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
範例:

ochain invoke GetAccountTransactionHistoryWithFilters 'token1' 'appbuilder12' 'user_minter' '{"PageSize":10,"Bookmark":"1","StartTime":"2022-01-25T17:41:42Z","EndTime":"2022-01-25T17:59:10Z"}'

[
    {
        "balance": 90,
        "onhold_balance": 0,
        "timestamp": "2022-04-20T19:43:36Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~7a4d67118e623a876b77c67e76b819269a8d4a509aece5d2263fb274a9beb3b8",
        "transacted_amount": 5,
        "transaction_id": "otransaction~dd9986d3686e52264935558e42026fbf8a9af48b06a3256a58b453f5ada4e636",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 95,
        "onhold_balance": 0,
        "timestamp": "2022-04-20T19:43:22Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~0642308fc4c514c257ebf04326c63f990e2531bfd59d0b952056094da61e04ab",
        "transacted_amount": 5,
        "transaction_id": "otransaction~5e53424de3d691cf6b2a55ea3dc478c555d8784111c11847e594194d6c2e7755",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 100,
        "onhold_balance": 0,
        "timestamp": "2022-04-20T19:42:54Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~b63935592a702d30bedb87ae97b9b1ba7d0f346716adc4f5a4192220bf410d4e",
        "transacted_amount": 100,
        "transaction_id": "otransaction~94c467825ce9f66cc69958d38b169022a69eebc66b75b7d6e0b0585af2c3c228",
        "transaction_type": "MINT"
    }
]
GetSubTransactionsById
此方法會傳回指定交易之交易歷史記錄詳細資訊的陣列。
t.Ctx.Account.GetSubTransactionsById(transaction_id string)
參數:
  • transaction_id: string – 交易的 ID。
範例:

ochain invoke GetSubTransactionsById 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
    {
        "balance": 80,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~7a4d67118e623a876b77c67e76b819269a8d4a509aece5d2263fb274a9beb3b8",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c81e728d9d4c2f636f067f89cc14862c",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 85,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~0642308fc4c514c257ebf04326c63f990e2531bfd59d0b952056094da61e04ab",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c4ca4238a0b923820dcc509a6f75849b",
        "transaction_type": "DEBIT"
    }
]
GetSubTransactionsByIdWithFilters
此方法會傳回指定交易之交易歷史記錄詳細資訊的陣列。
t.Ctx.Account.GetSubTransactionsByIdWithFilters(transaction_id string, filters ...SubTransactionFilters)
參數:
  • transaction_id: string – 交易的 ID。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
範例:

ochain invoke GetSubTransactionsByIdWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
    {
        "balance": 80,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~7a4d67118e623a876b77c67e76b819269a8d4a509aece5d2263fb274a9beb3b8",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c81e728d9d4c2f636f067f89cc14862c",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 85,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~0642308fc4c514c257ebf04326c63f990e2531bfd59d0b952056094da61e04ab",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c4ca4238a0b923820dcc509a6f75849b",
        "transaction_type": "DEBIT"
    }
]
GetTransactionById
此方法會傳回 Transaction 資產的歷史記錄。
t.Ctx.Transaction.GetTransactionById(transaction_id string)
參數:
  • transaction_id string – 交易資產的 ID。
傳回值範例:
{
    "history": [
        {
            "IsDelete": "false",
            "Timestamp": "2021-08-16 20:19:05.028 +0530 IST",
            "TxId": "67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
            "Value": {
                "Amount": 3,
                "AssetType": "otransaction",
                "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "HoldingId": "ohold~digicur~digiCurr101~op2",
                "NumberOfSubTransactions": 0,
                "Timestamp": "2021-08-16T20:19:05+05:30",
                "ToAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "TokenId": "digiCurr101",
                "TransactionId": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
                "TransactionType": "RELEASEHOLD"
            }
        }
    ],
    "transaction_id": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220"
}
DeleteHistoricalTransactions
此方法會從狀態資料庫刪除較舊的交易。
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error)
參數:
  • time_to_expiration: Date – 表示何時刪除交易的時戳。將刪除早於指定時間的交易資產。
傳回值範例:
"payload": {
    "msg": "Successfuly deleted transaction older than date:2021-08-18T05:43:30Z",
    "transactions": [
        "otransaction~57d81f681aa215bb73d6c017d16be8b283d3fcb50051c85891a97d1d407fc342"
    ]
}

權杖行為管理方法 - 可變行為

Mint
這個方法會提示該方法的呼叫程式所擁有的記號。來電者必須具有帳戶與次要角色。可提示的記號數目受規格檔案中 mintable 行為的 max_mint_quantity 特性所限制。如果未指定 max_mint_quantity 特性,則可以提示不限數目的記號。數量必須在規格檔案中 divisible 行為的 decimal 參數所指定的小數值內。只有具備 minter 角色之帳戶的 AccountOwner 才能呼叫此方法。
Ctx.Token.Mint(quantity float64, tokenAsset interface{}) (interface{}, error)
參數:
  • quantity: number – 要提示的記號數目。
  • tokenAsset – 要提示之記號資產的參照。
傳回值:
  • 成功時,取得成功訊息。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
  "msg":"Successfully minted 1000 tokens to Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}
GetTotalMintedTokens
此方法會傳回所提示的記號總數。
Ctx.Token.GetTotalMintedTokens(tokenAsset interface{}) (map[string]interface{}, error)
參數:
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 成功時,數字資料類型中的成功訊息和預期記號總數對應。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"msg":"total minted amount for token with id digiCurr101 is 0","quantity":0}
GetNetTokens
此方法會傳回系統中指定記號可用記號的淨數量。網路記號是記號燒錄後剩餘的記號數量。方程式形式:淨記號 = 總鑄幣記號 - 總燃燒記號。如果沒有燒錄記號,則網路記號的數目會等於總鑄幣的記號。
Ctx.Token.GetNetTokens(tokenAsset interface{}) (map[string]interface{}, error)
參數:
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 成功時,成功訊息和數字資料類型中記號淨數量的對應。發生錯誤時,錯誤訊息。
傳回值範例:
{"msg":"net minted amount for token with id digiCurr101 is 0","quantity":0}
GetMaxMintQuantity
此方法會傳回記號的最大可移動數量。如果未指定 max_mint_quantity 行為,則預設值為 0,可提示任意數目的記號。
Ctx.Token.GetMaxMintQuantity(token_id string) (float64, error)
參數:
  • token_id: string – 要檢查的權杖 ID。
傳回值:
  • 成功時,權杖的可移動數量上限 (以數字資料類型表示)。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
20000

權杖行為管理方法 - 可轉移行為

Transfer
此方法會將記號從呼叫程式轉移至指定的帳戶。方法的呼叫程式必須要有帳戶。數量必須在規格檔案中 divisible 行為的 decimal 參數所指定的小數值內。只有帳戶的 AccountOwner 才能呼叫此方法。
Ctx.Token.Transfer(to_account_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
參數:
  • to_account_id: string – 接收記號的帳戶 ID。
  • quantity: number – 要傳輸的記號總數。
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 成功時,取得成功訊息。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。傳回值與 TransferTokens 方法相同。
傳回值範例:
{     "msg":"Successfully transferred 50 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP,  User-Id: admin) to account id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"
}
BulkTransfer
此方法會將變數替代字從呼叫者帳戶大量傳輸至 flow 物件中指定的帳戶。此方法的來電者必須已建立帳戶。
Ctx.Token.BulkTransfer(flow []map[string]interface{}, tokenAsset interface{}) (interface{}, error)
參數:
  • flow: object[] – 指定接收者詳細資訊和數量的 JSON 物件陣列。移轉數量必須在規格檔案中 divisible 行為的 decimal 參數所指定的小數值內。舉例而言:
    [{
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user1",
    	"quantity": 10
    }, {
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user2",
    	"quantity": 10
    }]
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 成功時,會出現包含已傳輸記號數目的成功訊息。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}

權杖行為管理方法 - 可保留行為

Hold
此方法使用 to_account_id 帳戶代表權杖的擁有者建立保留。已指定公證人帳戶,該帳戶負責完成或解除保留。建立保留時,系統會保留付款人的指定變數替代字餘額。保留完成或解除之前,無法移轉保留餘額。此方法的來電者必須已建立帳戶。
Ctx.Token.Hold(operation_id string, to_account_id string, notary_account_id string, quantity float64, TimeToExpiration string, tokenAsset)) (interface{}, error)
參數:
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • to_account_id: string – 接收記號的帳戶 ID。
  • notary__account_id: string – 公證帳戶的 ID。
  • quantity: number – 保留的記號總數。
  • time_to_expiration: date – 保留到期前的持續時間。為永久保留指定 0 。否則,請使用 RFC-3339 格式。例如,2021-06-02T12
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 成功時,取得成功訊息。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
 "msg": "account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1) is successfully holding 10 tokens",
}
ExecuteHold
此方法會完成記號的保留,將先前保留的指定記號數量轉移給接收者。如果 quantity 值小於實際保留值,則剩餘金額會再次提供給權杖的原始擁有者。只有具備 notary 角色的 AccountOwner ID 才能呼叫此方法。
Ctx.Token.ExecuteHold(operation_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
參數:
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • quantity: number – 保留的記號總數。
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 成功時,取得成功訊息。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"msg":"Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) has successfully executed '1' tokens(digiCurr101) from the hold with Operation Id 'op1'"}
ReleaseHold
此方法會解除保留記號。轉帳未完成,所有保留的權杖都會再次提供給原始擁有者使用。具有 notary 角色的 Account Owner ID 可在指定的時間限制內呼叫此方法,或由付款人、受款人或公證人在指定的時間限制之後呼叫。
Ctx.Token.ReleaseHold(operation_id string, tokenAsset interface{}) (interface{}, error)
參數:
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 成功時,取得成功訊息。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
此方法會傳回指定使用者和記號之所有保留 ID 的清單。
Ctx.Account.GetOnHoldIDs(account_id string) (map[string]interface{}, error)
參數:
  • token_id – 記號的 ID。
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
  • user_id – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,含有保留 ID 清單的 JSON 物件。持有 ID 是透過串連資產類型 (ohold)、記號名稱、記號 ID 和作業 ID 來形成。
傳回值範例:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationID
此方法會傳回指定作業 ID 與變數替代字的保留異動明細。
Ctx.Hold.GetOnHoldDetailsWithOperationID(token_id string, operation_id string) (Hold, error)
參數:
  • token_id: string – 記號的 ID。
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 傳回值與 GetOnHoldDetailsWithOperationId 方法相同。
  • 成功時,包含指定作業 ID 與變數替代字之保留異動明細的承諾物件。保留物件包含下列特性:
    • holding_id – 交易的持有 ID。
    • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
    • from_account_id - 保留權杖目前擁有者的帳戶 ID。
    • to_account_id – 接收者的帳戶 ID。
    • notary_account_id – 公證人的帳戶 ID。
    • token_id: string – 已儲存記號的 ID。
    • quantity – 保留 ID 的記號數量。
    • time_to_expiration – 保留到期前的持續時間。
  • 發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
    "AssetType": "ohold",
    "HoldingId": "ohold~digicur~digiCurr101~op1",
    "OperationId": "op1",
    "TokenName": "digicur",
    "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "ToAccountId": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "NotaryAccountId": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "TokenId": "digiCurr101",
    "Quantity": 2,
    "TimeToExpiration": "0"
}
GetOnHoldBalanceWithOperationID
此方法會傳回指定作業 ID 與變數替代字的保留餘額。
Ctx.Hold.GetOnHoldBalanceWithOperationID(token_id string, operation_id string) (map[string]interface{}, error)
參數:
  • token_id: string – 記號的 ID。
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 成功時,指定作業 ID 與記號的保留餘額。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
    "holding_balance": 10,
    "msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

記號行為管理方法 - 可燃行為

Burn
此方法會停用或燒錄交易呼叫者帳戶中的記號。此方法的來電者必須具有帳戶與燒錄者角色。數量必須在規格檔案中 divisible 行為的 decimal 參數所指定的小數值內。
Ctx.Token.Burn(quantity float64 , tokenAsset interface{}) (interface{}, error)
參數:
  • quantity: number – 要燒錄的記號總數。
  • tokenAssettokenAsset 引數包含要操作的記號資料參照。
傳回值:
  • 成功時,取得成功訊息。發生錯誤時,包含錯誤訊息的非 nil 錯誤物件。
傳回值範例:
{
 "msg":"Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}