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

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

專案會自動產生記號週期類別和函數,包括 CRUD 和非 CRUD 方法。系統會自動支援引數驗證、封送處理 (Marshal) / 解除封送處理 (unmarshal) 以及透明保存功能。

如需鷹架專案的相關資訊,以及與記號無關的方法,請參閱 Scaffolded Go Chaincode Project

Model

OchainModel 類別中擷取「通透保存功能 (Transparent Persistence Capability)」或簡化的 ORM。

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
}

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

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

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

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

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

附註:

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

自動產生的記號方法

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

存取控制管理的方法

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"
        }
    ]
}

記號組態管理的方法

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 陣列是必要參數。
參數範例:Mac OSX 與 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> - 將記號資產當作此方法的參數傳送。記號資產的特性會在模型檔案中說明。
傳回值:
  • 成功時,所建立權杖資產的 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> - 將記號資產當作此方法的參數傳送。記號資產的特性會在模型檔案中說明。
傳回值:
  • 成功時,憑證資產的更新 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 資料庫 SQL 豐富查詢,且只能在連線至遠端 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
}
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 
}
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 - 帳戶的目前保留餘額。
  • BapAccountVersion - 內部使用的帳戶物件參數。
  • Status - 使用者帳戶的目前狀態。
傳回值範例:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 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,
          "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,
          "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,
          "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 資料庫 SQL 豐富查詢,且只能在連線至遠端 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,
            "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,
            "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,
            "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 - 要搜尋的角色名稱。
傳回值:
  • 成功時,帳戶 ID 的 JSON 陣列。
傳回值範例:
{
    "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。
傳回值:
  • 成功時,帳戶 ID 的 JSON 陣列。
傳回值範例:
{
    "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}
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"
        }
    ]
}
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"
    ]
}

交易歷史記錄管理的方法

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 - 表示何時刪除交易的時戳。將會刪除早於指定時間的交易資產。

記號行為管理方法 - 可調整行為

IssueTokens
這個方法會提示記號,然後由方法的呼叫程式所擁有。呼叫者必須具有帳戶與較小者角色。可提示的記號數目受規格檔案中 mintable 行為的 max_mint_quantity 特性限制。如果未指定 max_mint_quantity 特性,則可提示不限數目的記號。數量必須在規格檔案中 divisible 行為的 decimal 參數所指定的小數值內。只有具備較小角色的帳戶 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 - 要進行 mint 的記號數目。
傳回值:
  • 成功時,會出現含有帳戶詳細資訊的訊息。
傳回值範例:
{"msg":"Successfully minted 100 tokens to account oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetTotalMintedTokens
此方法會傳回指定記號的 Minted 記號總數。此方法只能由鏈碼的 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}

記號行為管理方法 - 可傳輸行為

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 - 要傳輸的記號數目。
    舉例而言:
    [{
    	"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
此方法會解除記號的保留。移轉未完成,所有保留的變數替代字會再次可供原始擁有者使用。Account Owner ID 可在指定的時間限制內以 notary 角色呼叫此方法,或在指定的時間限制之後由付款人、受款人或公證人呼叫。
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"
}

記號行為管理方法 - 可燒錄行為

BurnTokens
此方法會停用或燒錄來自交易呼叫程式帳戶的記號。這個方法的呼叫程式必須具有一個帳戶以及 burner 角色。數量必須在規格檔案中 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)"}

自訂方法

您可以使用記號 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 使用者的成功訊息和詳細資訊。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{"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 使用者的成功訊息與詳細資料。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
GetAllAdmins
此方法會傳回 Token Admin 記號鏈碼的所有使用者清單。
Ctx.GetAllAdmins() (interface{}, error)
參數:
傳回值:
  • 成功時,會列出 Token Admin 記號鏈碼的所有使用者清單。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]
GetAllAdminUsers
此方法會傳回 Token Admin 記號鏈碼的所有使用者清單。
Ctx.Admin.GetAllAdminUsers() (interface{}, error) 
參數:
傳回值:
  • 成功時,會以 map[string]interface{} 表單作為記號鏈碼 Token Admin 的所有使用者清單。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{"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] 是常數 TOKENargs[1]account_id 引數 (如有需要)。
傳回值:
  • 如果發生錯誤,則為布林回應與錯誤訊息。
IsUserTokenAdmin
如果函數的呼叫程式是 Token Admin,此方法會傳回布林值 true。否則,方法會傳回 false
Ctx.Auth.IsUserTokenAdmin()  (bool, error)
參數:
  • user_id - 使用者的使用者名稱或電子郵件 ID。
  • org_id - 目前網路組織中使用者的成員服務提供者 (MSP) ID。
傳回值:
  • 如果發生錯誤,則為布林回應與錯誤訊息。
傳回值範例:
{"result":false}
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"
        }
    ]
}

記號組態管理的方法

GetTokenDecimals
此方法會傳回小數記號可用的小數位數。如果未指定 divisible 行為,則預設值為 0。
Ctx.Token.GetTokenDecimals(token_id string) (int, error)
參數:
傳回值:
  • 成功時,記號在數字資料類型中的小數位數。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
1
GetAllTokens
此方法會傳回儲存在狀態資料庫中的所有記號資產。此方法使用 Berkeley 資料庫 SQL 豐富查詢,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
Ctx.Token.GetAllTokens()  (interface{}, error)
參數:
傳回值:
  • 成功時,所有權杖資產的對應陣列。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
"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 資料庫 SQL 豐富查詢,且只能在連線至遠端 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"
        }
    }
]
Get
如果權杖物件存在於狀態資料庫中,這個方法就會傳回該物件。此方法只能由記號鏈碼的 Token Admin 呼叫。
Ctx.Get(Id string, result ...interface{}) (interface{}, error)
參數:
  • token_id: string - 要傳回的記號 ID。
  • result - 變數引數,其中第一個引數 result[0] 是必要類型之空白 Token 物件的參照。
傳回值:
  • 成功時,會對應記號資產資料。變數引數 result[0] 包含記號資料。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
    "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"
}
IsTokenType
此方法會測試指定的記號 ID 是否存在記號資產。
Ctx.Model.IsTokenType(token_id: string) error
參數:
  • token_id: string - 要檢查的記號 ID。
傳回值:
  • 如果具有指定 ID 的記號資產存在,則不會發生錯誤。否則,包含錯誤訊息的非空值錯誤物件。
傳回值範例:
nil
Save
此方法會建立記號,並將其特性儲存在狀態資料庫中。
Ctx.Token.Save(args ...interface{}) (interface{}, error)
參數:
  • token_id: string - 要傳回的記號 ID。
  • args - 變數引數,其中第一個引數 args[0] 是要新增至分類帳之必要類型變數替代字 struct 資料的參考。
傳回值:
  • 成功時,含有儲存至狀態資料庫之記號相關詳細資訊的 interface{} 物件。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
    "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
}
GetByRange
此方法會在內部呼叫結構 getStateByRange 方法。即使從分類帳傳回任何具有指定 ID 的資產,此方法會將資產轉換成呼叫程式資產類型。
Ctx.Token.GetByRange(startId string, endId string, asset ...interface{}) ([]map[string]interface{}, error)
參數:
  • startId: string - 範圍的開始索引鍵。此索引鍵包含在範圍內。
  • endId: string - 範圍的結束索引鍵。此索引鍵已從範圍中排除。
  • asset[0] - 所需類型記號的空白片段。如果方法執行成功,就會包含要求的結果。
傳回值:
  • 成功時,包含記號之記號資產詳細資訊的對應片段 (其中的 token_id 值在指定的範圍內)。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
[{
    "Key": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
    "Record": {
        "AccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "AssetType": "oaccount",
        "Balance": 99,
        "BalanceOnHold": 1,
        "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,
        "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,
        "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"
    }
}]
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"
        }
    }
]

帳戶管理方法

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
}
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 
}
GetAccountWithStatus
此方法會傳回指定帳戶的帳戶詳細資訊,包括帳戶狀態。
Ctx.Account.GetAccountWithStatus(account_id string) (interface{}, error)
參數:
  • account_id: string - 帳戶的 ID。
傳回值:
  • 成功時,要求的帳戶詳細資訊。發生錯誤時,拒絕並顯示錯誤訊息。
傳回值範例:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 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
}
GetAccountHistory
此方法會傳回指定帳戶的帳戶歷史記錄詳細資料陣列。
Ctx.Account.History(account_id string) ([]interface{}, error)
參數:
  • account_id: string - 帳戶的 ID。
傳回值:
  • 成功時,包含帳戶歷史記錄詳細資料的 map[string]interface{} 陣列。帳戶資料會顯示在地圖的 Value 索引鍵下方。發生錯誤時,包含錯誤訊息的非零錯誤物件。傳回值與 "GetAccountHistory" 方法相同。
傳回值範例:
[
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:31:15Z",
      "TxId": "adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 100,
          "BalanceOnHold": 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,
          "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,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "",
          "TokenName": "",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  }
]
GetAccountOnHoldBalance
此方式會傳回指定科目的保留餘額。
Ctx.Account.getAccountOnHoldBalance(account_id: string)
參數:
  • account_id: string - 帳戶的 ID。
傳回值:
  • 成功時,具有目前保留餘額與成功訊息的承諾物件。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
   "holding_balance":0,
   "msg":"Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
此方法會傳回所有帳戶的清單。此方法使用 Berkeley 資料庫 SQL 豐富查詢,且只能在連線至遠端 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,
            "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。
  • 發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
   "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。
傳回值:
  • 成功時,會有訊息字串與目前餘額的介面。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
    "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,
            "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,
            "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。
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時,它會傳回含有成功訊息的對應,指出新增角色至帳戶。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
   "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。
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時,它會傳回含有成功訊息的對應,指出從帳戶移除角色。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
  "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 - 要搜尋的角色名稱。
傳回值:
  • 成功時,帳戶 ID 的 JSON 陣列。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{"accounts":["oaccount~obptok~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
GetUsersByRole
此方法會針對指定的角色和記號,傳回所有使用者的清單。
Ctx.Role.GetUsersByRole(token_id string, user_role string) (interface{}, error)
參數:
  • token_id: string - 記號的 ID。
  • role: string - 要搜尋的角色名稱。
傳回值:
  • 成功時,使用者物件的 JSON 陣列。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
    "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。
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時,它會傳回含有成功訊息的對應,指出從帳戶移除角色。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
    "result": false
}
RoleCheck
此方法會檢查提供的帳戶 ID 是否為任何角色的成員。
Ctx.Token.RoleCheck(account_id string, tokenAsset interface{}) (bool, error)
參數:
  • account_id: string - 要檢查的帳戶 ID。
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 如果指定的帳戶具有任何角色,則成功訊息和布林值 true 。否則,布林值會是 false 。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{ result: true }
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"
        }
    ]
}
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"
    ]
}

交易歷史記錄管理的方法

GetAccountTransactionHistory
此方式會傳回指定科目的交易歷史記錄明細陣列。
Ctx.Account.GetAccountTransactionHistory(account_id string) (interface{}, error)
參數:
  • account_id: string - 帳戶的 ID。
傳回值:
  • 傳回值與 "GetAccountTransactionHistory" 方法相同。
  • 成功時,JSON 帳戶交易物件陣列。
  • 發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
[
  {
      "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 參數所指定的小數值內。只有具備較小角色的帳戶 AccountOwner 才能呼叫此方法。
Ctx.Token.Mint(quantity float64, tokenAsset interface{}) (interface{}, error)
參數:
  • quantity: number - 要進行 mint 的記號數目。
  • tokenAsset - 要 Mint 的記號資產參照。
傳回值:
  • 成功時會顯示成功訊息。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
  "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)
參數:
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時,數字資料類型中提示記號總計的成功訊息和對應。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{"msg":"total minted amount for token with id digiCurr101 is 0","quantity":0}
GetNetTokens
此方法會傳回系統中指定記號可用的記號淨數量。網路記號是記號被燒錄後剩餘的記號量。在方程式形式中:淨記號 = 提示的記號總計 - 消耗的記號總計。如果沒有燒錄記號,則淨記號的數目等於提示的記號總數。
Ctx.Token.GetNetTokens(tokenAsset interface{}) (map[string]interface{}, error)
參數:
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時,數字資料類型中記號的成功訊息與淨數量對應。發生錯誤時會顯示錯誤訊息。
傳回值範例:
{"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。
傳回值:
  • 成功時,數字資料類型中變數替代字的最大可修改數量。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
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 - 要傳輸的記號總數。
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時會顯示成功訊息。發生錯誤時,包含錯誤訊息的非零錯誤物件。傳回值與 "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
    }]
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時,包含已移轉記號數目的成功訊息。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
    "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
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時會顯示成功訊息。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
 "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 - 要保留的記號總數。
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時會顯示成功訊息。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{"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
此方法會解除記號的保留。移轉未完成,所有保留的變數替代字會再次可供原始擁有者使用。Account Owner ID 可在指定的時間限制內以 notary 角色呼叫此方法,或在指定的時間限制之後由付款人、受款人或公證人呼叫。
Ctx.Token.ReleaseHold(operation_id string, tokenAsset interface{}) (interface{}, error)
參數:
  • operation_id: string - 識別保留作業的唯一 ID。通常這個 ID 會由用戶端應用程式傳送。
  • tokenAsset - tokenAsset 引數包含要操作之記號資料的參照。
傳回值:
  • 成功時會顯示成功訊息。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{"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 - 保留到期的持續時間。
  • 發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
    "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 與變數替代字的保留餘額。發生錯誤時,包含錯誤訊息的非零錯誤物件。
傳回值範例:
{
    "holding_balance": 10,
    "msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

記號行為管理方法 - 可燒錄行為

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