トークン・タクソノミ・フレームワークのスキャフォールド済Goプロジェクト

ブロックチェーン・アプリケーション・ビルダーは、トークン仕様ファイルから入力を受け取り、完全に機能するチェーンコード・プロジェクトを生成します。

プロジェクトは、CRUDおよびCRUD以外のメソッドを含むトークン・ライフサイクル・クラスおよび関数を自動的に生成します。引数の検証、マーシャリング/アンマーシャリングおよび透過的な永続性機能はすべて自動的にサポートされます。

スキャフォールドされたプロジェクトおよびトークンに直接関連しないメソッドの詳細は、「スキャフォールドされたGo Chaincodeプロジェクト」を参照してください。

モデル

透過的永続性機能(または簡素化されたORM)は、OchainModelクラスで取得されます。

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

コントローラ

メインコントローラは1つのみです。

type Controller struct {
    Ctx trxcontext.TrxContext
}

クラス、関数またはファイルはいくつでも作成できますが、メイン・コントローラ・クラス内で定義されているメソッドのみが呼出し可能です。その他のメソッドは非表示です。

トークンSDKメソッドを使用して、ビジネス・アプリケーションのカスタム・メソッドを記述できます。

カスタム・メソッドで複数のトークンSDKメソッドを使用する場合は、状態データベースの同じキーと値のペアに影響するメソッドを使用しないでください。

かわりに、次のコード・スニペットに示すように、BulkTransferTokensメソッドを使用して、コール元のアカウントから複数のアカウントに転送します。

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

ノート:

状態データベースの同じキーと値のペアに影響を与える可能性があるカスタム・メソッドで複数のトークンSDKメソッドを使用する場合は、トークン・チェーンコードのMVCC最適化を有効にします。詳細は、MVCC Optimizationを参照してください。

自動生成されたトークン・メソッド

ブロックチェーン・アプリケーション・ビルダーは、トークンおよびトークンのライフサイクルをサポートするメソッドを自動的に生成します。これらの方法を使用すると、追加のコーディングなしで、トークンの初期化、ロールとアカウントの管理、その他のトークン・ライフサイクル・タスクの完了を行うことができます。コントローラメソッドを呼び出すには、publicである必要があります。パブリック・メソッド名は大文字で始まります。小文字で始まるメソッド名はprivateです。

アクセス制御管理のメソッド

AddTokenAdmin
このメソッドは、ユーザーをチェーンコードのToken Adminとして追加します。このメソッドは、チェーンコードのToken Adminによってのみコールできます。
func (t *Controller) AddTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddAdmin", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddTokenAdmin(org_id, user_id)
}
パラメータ:
  • org_id string - 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • user_id string - ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、チェーンコードのToken Adminとして追加されたユーザーの詳細を含むメッセージ。
戻り値の例:
{
    "msg": "Successfully added Token Admin (Org_Id: Org1MSP, User_Id: user1)"
}
RemoveTokenAdmin
このメソッドは、チェーンコードのToken Adminとしてユーザーを削除します。このメソッドは、チェーンコードのToken Adminによってのみコールできます。
func (t *Controller) RemoveTokenAdmin(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveAdmin", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.RemoveAdmin(org_id, user_id)
}
パラメータ:
  • org_id string - 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • user_id string - ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、チェーンコードのToken Adminとして削除されたユーザーの詳細を含むメッセージ。
戻り値の例:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsTokenAdmin
このメソッドは、ファンクションのコール元がToken Adminの場合はブール値trueを戻し、それ以外の場合はfalseを戻します。Token AdminまたはOrg 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 AdminまたはOrg 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()
}
パラメータ:
  • なし
戻り値:
  • 成功すると、OrgIdおよびUserIdオブジェクトを含む管理者の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()
}
パラメータ:
  • なし
戻り値:
  • 成功すると、OrgIdおよびUserIdオブジェクトを含むJSONリストが表示されます。
戻り値の例:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}

トークン構成管理のメソッド

Init
このメソッドは、チェーンコードのデプロイ時にコールされます。すべてのToken Adminは、必須のadminListパラメータのuser_idおよびorg_id情報によって識別されます。user_idは、インスタンス所有者またはインスタンスにログインしているユーザーのユーザー名または電子メールIDです。org_idは、現在のネットワーク組織のユーザーのメンバーシップ・サービス・プロバイダ(MSP) IDです。
Token Adminユーザーは、AddTokenAdminおよびRemoveTokenAdminメソッドをコールして、他の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 AdminまたはOrg 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 AdminまたはOrg 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 AdminまたはOrg 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 AdminまたはOrg Adminによってのみコールできます。この方法では、Berkeley DB 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
このメソッドは、fungibleトークンをアカウントに関連付けます。このメソッドは、チェーンコードの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 DB 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_idおよびuser_id)を返します。このメソッドは、チェーンコードの任意のユーザーがコールできます。
func (t *Controller) GetUserByAccountId(account_id string) (interface{}, error) {
    return t.Ctx.Account.GetUserByAccountById(account_id)
}
パラメータ:
  • account_id string - アカウントのID。
戻り値:
  • 成功すると、ユーザー詳細のJSONオブジェクト(org_idtoken_idおよびuser_id)。
戻り値の例:
{"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 - 指定したユーザーを追加するロールの名前。mintableおよびburnableの動作は、仕様ファイルのminter_role_nameおよびburner_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 - 指定したユーザーから削除するロールの名前。mintableおよびburnableの動作は、仕様ファイルのminter_role_nameおよびburner_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_idおよびuser_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のドキュメントを参照してください。StartTimeおよびEndTimeプロパティは、RFC-3339形式で指定する必要があります。
次に例を示します:

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のドキュメントを参照してください。StartTimeおよびEndTimeプロパティは、RFC-3339形式で指定する必要があります。
次に例を示します:

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パラメータで指定された10進値内である必要があります。このメソッドは、minterロールを持つアカウントのAccountOwnerによってのみコールできます。
func (t *Controller) IssueTokens(token_id string, quantity float64) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Mint(quantity, tokenAssetValue.Interface())
}
パラメータ:
  • token_id string - トークンのID。
  • quantity float64 - ミントするトークンの数。
戻り値:
  • 成功すると、アカウントの詳細を含むメッセージが表示されます。
戻り値の例:
{"msg":"Successfully minted 100 tokens to account oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetTotalMintedTokens
このメソッドは、指定されたトークンのミント・トークンの合計数を返します。このメソッドは、チェーンコードのToken AdminまたはOrg 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 AdminまたはOrg 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パラメータで指定された10進値内である必要があります。このメソッドは、アカウントの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パラメータで指定された10進値内に、アカウントがすでに作成されている必要があります。このメソッドは、アカウントの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
このメソッドは、トークンの保留を解除します。転送が完了しておらず、保持されているすべてのトークンを元の所有者が再度使用できます。このメソッドは、指定された制限時間内にnotaryロールを持つAccount Owner ID、または指定された制限時間後に支払者、受取人または公証人によってコールできます。
func (t *Controller) ReleaseHoldTokens(token_id string, operation_id string) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
パラメータ:
  • token_id string - トークンのID。
  • operation_id string - 保留操作を識別する一意のID。通常、このIDはクライアント・アプリケーションによって渡されます。
戻り値:
  • 成功すると、保留が解除されたことを示すメッセージが表示されます。
戻り値の例:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
このメソッドは、指定されたアカウントのすべての保持IDのリストを返します。このメソッドは、チェーンコードのToken Admin、指定された組織のOrg Admin、またはアカウントのAccount Ownerによってコールできます。
func (t *Controller) GetOnHoldIds(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetOnHoldIds", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetOnHoldIDs(account_id)
}
パラメータ:
  • token_id string - トークンのID。
  • org_id string - 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • user_id string - ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、IDを保持するJSONリストが表示されます。保持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
このメソッドは、トランザクション・コール元のアカウントからトークンを非アクティブ化または書き込みます。このメソッドのコール元には、アカウントとバーナーの役割が必要です。数量は、仕様ファイルのdivisible動作のdecimalパラメータで指定された10進値内である必要があります。このメソッドは、Burnerロールを持つアカウントの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メソッドを使用して、1つの方法で複数の転送を行います。

次の例は、カスタム・メソッドでトークン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 AdminまたはAccountOwnerによってのみコールできます。この機能を使用して、操作が意図したユーザーのみが実行されるようにできます。未承認のアクセスはエラーになります。アクセス制御ファンクションを使用するには、../lib/authモジュールからAuthorizationクラスをインポートします。
import { Authorization } from '../lib/auth';
AddAdmin
このメソッドは、トークン・チェーンコードのToken Adminとしてユーザーを追加します。
Ctx.AddAdmin(org_id string, user_id string) (interface{}, error)
パラメータ:
  • user_id - ユーザーのユーザー名または電子メールID。
  • org_id - 現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
戻り値:
  • 成功すると、追加されたToken Adminユーザーの成功メッセージおよび詳細が表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: user2)"}
RemoveAdmin
このメソッドは、トークン・チェーンコードのToken Adminとしてユーザーを削除します。
Ctx.RemoveAdmin(org_id string, user_id string) (interface{}, error)
パラメータ:
  • user_id - ユーザーのユーザー名または電子メールID。
  • org_id - 現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
戻り値:
  • 成功すると、削除されたToken Adminユーザーの成功メッセージおよび詳細が表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
GetAllAdmins
このメソッドは、トークン・チェーンコードのToken Adminであるすべてのユーザーのリストを返します。
Ctx.GetAllAdmins() (interface{}, error)
パラメータ:
  • なし
戻り値:
  • 成功すると、トークン・チェーンコードのToken Adminであるすべてのユーザーのリストが表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]
GetAllAdminUsers
このメソッドは、トークン・チェーンコードのToken Adminであるすべてのユーザーのリストを返します。
Ctx.Admin.GetAllAdminUsers() (interface{}, error) 
パラメータ:
  • なし
戻り値:
  • 成功すると、map[string]interface{}形式のトークン・チェーンコードのToken Adminであるすべてのユーザーのリストが表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]}
CheckAuthorization
このメソッドは、チェーンコードにアクセス制御を追加するために使用します。自動生成されたトークン・メソッドの多くは、アクセス制御を使用します。SDKレシーバとアクセス制御を持つメソッドの間のマッピングについては、oChainUtil.goファイルを参照してください。独自のアクセス制御を使用するか、アクセス制御を無効にするには、自動的に生成されたコントローラメソッドおよびカスタムメソッドからアクセス制御コードを削除します。
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)
パラメータ:
  • なし
戻り値:
  • 成功すると、OrgIdおよびUserIdオブジェクトを含む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)
パラメータ:
  • なし
戻り値:
  • 成功した場合、数値のデータ型のトークンの小数点以下の桁数。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
1
GetAllTokens
このメソッドは、状態データベースに保存されているすべてのトークン・アセットを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
Ctx.Token.GetAllTokens()  (interface{}, error)
パラメータ:
  • なし
戻り値:
  • 成功したら、すべてのトークン・アセットのマップの配列。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetTokensByName
このメソッドは、指定された名前を持つすべてのトークン・アセットを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートの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]には、トークン・データが含まれます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "holdable", "roles"],
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter",
        "notary_role_name": "notary"
    },
    "Mintable": {
        "Max_mint_quantity": 20000
    },
    "Divisible": {
        "Decimal": 1
    },
    "Token_to_currency_ratio": 1,
    "Currency_representation": "DOLLAR"
}
IsTokenType
このメソッドは、指定されたトークンIDのトークン・アセットが存在するかどうかをテストします。
Ctx.Model.IsTokenType(token_id: string) error
パラメータ:
  • token_id: string - チェックするトークンのID。
戻り値:
  • 指定されたIDのトークン・アセットが存在する場合は、nilエラーです。それ以外の場合は、エラーメッセージを含むnil以外のエラーオブジェクト。
戻り値の例:
nil
Save
このメソッドはトークンを作成し、そのプロパティを状態データベースに保存します。
Ctx.Token.Save(args ...interface{}) (interface{}, error)
パラメータ:
  • token_id: string - 返すトークンのID。
  • args - 可変引数。最初の引数args[0]は、レジャーに追加するために必要な型のトークンstructデータの参照です。
戻り値:
  • 成功すると、状態データベースに保存されたトークンに関する詳細を含むinterface{}オブジェクト。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
Update
このメソッドは、トークン・プロパティを更新します。トークン・アセットの作成後は、token_desc値とそのカスタム・プロパティのみを更新できます。
Ctx.Token.Update(args ...interface{}) (interface{}, error)
パラメータ:
  • 元帳で更新するために必要なタイプのトークンstructデータへの参照を含むアセット。
戻り値:
  • 成功すると、トークン詳細を含む約束メッセージ。エラーの場合、エラー・メッセージを含む拒否。
戻り値の例:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetByRange
このメソッドは、ファブリックのgetStateByRangeメソッドを内部的にコールします。指定されたIDを持つアセットがレジャーから返されても、このメソッドはアセットをコールヤ・アセット・タイプにキャストします。
Ctx.Token.GetByRange(startId string, endId string, asset ...interface{}) ([]map[string]interface{}, error)
パラメータ:
  • startId: string - 範囲の開始キー。このキーは範囲に含まれます。
  • endId: string - 範囲の終了キー。このキーは範囲から除外されます。
  • asset[0] - 必要なタイプのトークンの空のスライス。メソッドが正常に実行されると、リクエストされた結果が含まれます。
戻り値:
  • 成功すると、token_id値が指定された範囲内にあるトークンのトークン・アセット詳細を含むマップのスライス。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
[{
    "Key": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
    "Record": {
        "AccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "AssetType": "oaccount",
        "Balance": 99,
        "BalanceOnHold": 1,
        "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
このメソッドは、fungibleトークンをアカウントに関連付けます。このメソッドは、チェーンコードの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キーの下に表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。戻り値は、"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。
戻り値:
  • 成功時に、現在の保留残高と成功メッセージを含むpromiseオブジェクト。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
   "holding_balance":0,
   "msg":"Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
このメソッドは、すべてのアカウントのリストを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートの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。
戻り値:
  • 成功すると、次の3つのプロパティを含むJSONオブジェクトとの約束。
    • user_id - ユーザーのユーザー名または電子メールID。
    • org_id - 現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
    • token_id - トークンのID。
  • エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
   "org_id":"Org1MSP",
   "token_id":"digiCurr101",
   "user_id":"user1"
}
GetAccountBalance
このメソッドは、指定された勘定科目の勘定科目残高を返します。
Ctx.GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error)
パラメータ:
  • account_id: string - アカウントのID。
戻り値:
  • 成功すると、メッセージ文字列と現在のバランスを持つインタフェース。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
    "msg": "Current Balance of +p2uaMTsU9D74l9XpHQ2c55ic/2gbO4NZITC4Zq4P8E= is: 200",
    "user_balance": 200
}
GetAllOrgAccounts
このメソッドは、指定された組織に属するすべてのトークン・アカウントのリストを返します。
Ctx.Account.GetAllOrgAccounts(org_id string) (interface{}, error)
パラメータ:
  • org_id: string - 組織のメンバーシップ・サービス・プロバイダ(MSP) ID。
戻り値:
  • 成功すると、指定した組織のすべてのアカウントのリストが表示されます。
戻り値の例:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "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 - 指定したユーザーを追加するロールの名前。mintableおよびburnableの動作は、仕様ファイルのminter_role_nameおよびburner_role_nameプロパティに対応します。同様に、notaryロールは、仕様ファイルのnotary_role_nameプロパティに対応します。
  • account_id: number - ロールを追加するアカウントID。
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功すると、アカウントへのロールの追加を示す成功メッセージを含むマップが返されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
   "msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"
}
RemoveRoleMember
このメソッドは、指定されたユーザーおよびトークンからロールを削除します。
Ctx.Token.RemoveRoleMember(role string, account_id string, tokenAsset interface{}) (interface{}, error)
パラメータ:
  • role: string - 指定したユーザーから削除するロールの名前。mintableおよびburnableの動作は、仕様ファイルのminter_role_nameおよびburner_role_nameプロパティに対応します。同様に、notaryロールは、仕様ファイルのnotary_role_nameプロパティに対応します。
  • account_id: number - ロールを削除するアカウントID。
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功すると、アカウントからのロールの削除を示す成功メッセージを含むマップが返されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
  "msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"
}
GetAccountsByRole
このメソッドは、指定されたロールおよびトークンのすべてのアカウントのリストを返します。
Ctx.Role.GetAccountsByRole(token_id string, user_role string) (interface{}, error)
パラメータ:
  • token_id: string - トークンのID。
  • role: string - 検索するロールの名前。
戻り値:
  • 成功すると、アカウントIDのJSON配列。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{"accounts":["oaccount~obptok~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
GetUsersByRole
このメソッドは、指定されたロールおよびトークンのすべてのユーザーのリストを返します。
Ctx.Role.GetUsersByRole(token_id string, user_role string) (interface{}, error)
パラメータ:
  • token_id: string - トークンのID。
  • role: string - 検索するロールの名前。
戻り値:
  • 成功すると、ユーザー・オブジェクトのJSON配列になります。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
    "Users": [
        {
            "token_id":"digiCurr101",
            "user_id": "user1",
            "org_id": "Org1MSP"
        }
    ]
}
IsInRole
このメソッドは、ユーザーおよびトークンに指定されたロールがあるかどうかを示します。
Ctx.Token.IsInRole(role string, account_id string, tokenAsset interface{}) (bool, error)
パラメータ:
  • role: string - チェックするロールの名前。
  • account_id: number - チェックするアカウントID。
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功すると、アカウントからのロールの削除を示す成功メッセージを含むマップが返されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
    "result": false
}
RoleCheck
このメソッドは、指定されたアカウントIDが任意のロールのメンバーかどうかを確認します。
Ctx.Token.RoleCheck(account_id string, tokenAsset interface{}) (bool, error)
パラメータ:
  • account_id: string - チェックするアカウントID。
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 指定されたアカウントに役割がある場合、成功メッセージとブール値 true。そうでない場合はブール値false。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{ 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アカウント・トランザクション・オブジェクトの配列。
  • エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
[
  {
      "NumberOfSubTransactions": 2,
      "balance": 160,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:51:48Z",
      "token_id": "t1",
      "transacted_amount": 20,
      "transaction_id": "otransaction~bd3e8d7d0bcdbed0469a2fccfe95f7ebbeb1987d8385bccf5c84bf80251e748c",
      "transaction_type": "BULKTRANSFER"
  },
  {
      "balance": 180,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:47:14Z",
      "token_id": "t1",
      "transacted_account": "oaccount~692a7465c01e36b694cb8ae86e6c6584240aa1f865fde54f95f32429eadd4097",
      "transacted_amount": 10,
      "transaction_id": "otransaction~250996f1df6a36a1b647f522efcaaf48fd70452d711c247fc4cd475b8e752b08",
      "transaction_type": "DEBIT"
  },
  {
      "balance": 190,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:47:08Z",
      "token_id": "t1",
      "transacted_account": "oaccount~bb5a0b57d895327c8a8cd1f267310cbf3ae542bc854fab8188b5083a969d72fb",
      "transacted_amount": 10,
      "transaction_id": "otransaction~664325a25ae6b19b23693c66f83811184e0a78fabb49122359a2dbf209f32976",
      "transaction_type": "DEBIT"
  },
  {
      "balance": 200,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:46:46Z",
      "token_id": "t1",
      "transacted_account": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
      "transacted_amount": 100,
      "transaction_id": "otransaction~7f49564b1eb61d4c8be0ef61cd5e635b533ca533907944e4ec500f390237fd6b",
      "transaction_type": "MINT"
  },
  {
      "balance": 100,
      "onhold_balance": 0,
      "timestamp": "2023-08-28T19:31:15Z",
      "token_id": "t1",
      "transacted_account": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
      "transacted_amount": 100,
      "transaction_id": "otransaction~adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "transaction_type": "MINT"
  }
]
GetAccountTransactionHistoryWithFilters
このメソッドは、指定されたトランザクションのトランザクション履歴詳細の配列を返します。このメソッドは、リモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
t.Ctx.Account.GetAccountTransactionHistoryWithFilters (transaction_id: string, filters?: SubTransactionFilters)
パラメータ:
  • Transaction_id: string - トランザクションのID。
  • filters: string - オプション・パラメータ。空の場合は、すべてのレコードが返されます。PageSizeプロパティは、戻すレコード数を決定します。PageSizeが0の場合、デフォルトのページ・サイズは20です。Bookmarkプロパティは、返されるレコードの開始索引を決定します。詳細は、Hyperledger Fabricのドキュメントを参照してください。StartTimeおよびEndTimeプロパティは、RFC-3339形式で指定する必要があります。
次に例を示します:

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のドキュメントを参照してください。StartTimeおよびEndTimeプロパティは、RFC-3339形式で指定する必要があります。
次に例を示します:

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パラメータで指定された10進値内である必要があります。このメソッドは、minterロールを持つアカウントのAccountOwnerによってのみコールできます。
Ctx.Token.Mint(quantity float64, tokenAsset interface{}) (interface{}, error)
パラメータ:
  • quantity: number - ミントするトークンの数。
  • tokenAsset - ミントするトークン・アセットへの参照。
戻り値:
  • 成功すると、成功メッセージが表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
  "msg":"Successfully minted 1000 tokens to Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}
GetTotalMintedTokens
このメソッドは、ミントされたトークンの合計数を返します。
Ctx.Token.GetTotalMintedTokens(tokenAsset interface{}) (map[string]interface{}, error)
パラメータ:
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功時には、成功メッセージと、数値データ型の合計ミント・トークンのマップ。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{"msg":"total minted amount for token with id digiCurr101 is 0","quantity":0}
GetNetTokens
このメソッドは、指定されたトークンについてシステムで使用可能なトークンの正味数量を返します。ネット・トークンは、トークンが書き込まれた後に残るトークンの量です。方程式形式: net tokens = total minted tokens - total burned tokens。トークンが書き込まれていない場合、ネット・トークンの数は、ミント・トークンの合計数に等しくなります。
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。
戻り値:
  • 成功した場合、数値データ型のトークンの最大最小可能量。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
20000

トークン動作管理のメソッド- 転送可能な動作

Transfer
このメソッドは、呼び出し元から指定されたアカウントにトークンを転送します。メソッドのコール元にはアカウントが必要です。数量は、仕様ファイルのdivisible動作のdecimalパラメータで指定された10進値内である必要があります。このメソッドは、アカウントのAccountOwnerによってのみコールできます。
Ctx.Token.Transfer(to_account_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
パラメータ:
  • to_account_id: string - トークンを受信するアカウントID。
  • quantity: number - 転送するトークンの合計数。
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功すると、成功メッセージが表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。戻り値は、"TransferTokens"メソッドと同じです。
戻り値の例:
{     "msg":"Successfully transferred 50 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP,  User-Id: admin) to account id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"
}
BulkTransfer
このメソッドは、呼出し元アカウントからflowオブジェクトで指定されたアカウントへのトークンの一括転送を実行するために使用されます。このメソッドのコール元には、アカウントがすでに作成されている必要があります。
Ctx.Token.BulkTransfer(flow []map[string]interface{}, tokenAsset interface{}) (interface{}, error)
パラメータ:
  • flow: object[] - 受け側の詳細と数量を指定するJSONオブジェクトの配列。転送数量は、仕様ファイルのdivisible動作のdecimalパラメータで指定された10進数内である必要があります。たとえば次のようにします。
    [{
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user1",
    	"quantity": 10
    }, {
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user2",
    	"quantity": 10
    }]
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功時に、転送されたトークンの数を含む成功メッセージ。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}

トークン動作管理のメソッド- 保持可能な動作

Hold
このメソッドは、to_account_idアカウントを持つトークンの所有者のかわりに保留を作成します。公証人勘定が指定されており、保留の完了または解除を担当します。保留が作成されると、支払人から指定されたトークン残高が保留になります。保留残高は、保留が完了または解除されるまで転送できません。このメソッドのコール元には、アカウントがすでに作成されている必要があります。
Ctx.Token.Hold(operation_id string, to_account_id string, notary_account_id string, quantity float64, TimeToExpiration string, tokenAsset)) (interface{}, error)
パラメータ:
  • operation_id: string - 保留操作を識別する一意のID。通常、このIDはクライアント・アプリケーションによって渡されます。
  • to_account_id: string - トークンを受信するアカウントのID。
  • notary__account_id: string - 公証人アカウントのID。
  • quantity: number - 保留中のトークンの合計数。
  • time_to_expiration: date - 保留が期限切れになるまでの期間。永続保留の場合は、0を指定します。それ以外の場合は、RFC-3339形式を使用します。例: 2021-06-02T12
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功すると、成功メッセージが表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
 "msg": "account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1) is successfully holding 10 tokens",
}
ExecuteHold
このメソッドはトークンの保留を完了し、以前に保留されていた特定数のトークンを受領者に転送します。quantity値が実際の保留値より小さい場合、残りの金額はトークンの元の所有者が再度使用できます。このメソッドは、notaryロールを持つAccountOwner IDによってのみコールできます。
Ctx.Token.ExecuteHold(operation_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
パラメータ:
  • operation_id: string - 保留操作を識別する一意のID。通常、このIDはクライアント・アプリケーションによって渡されます。
  • quantity: number - 保留中のトークンの合計数。
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功すると、成功メッセージが表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{"msg":"Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) has successfully executed '1' tokens(digiCurr101) from the hold with Operation Id 'op1'"}
ReleaseHold
このメソッドは、トークンの保留を解除します。転送が完了しておらず、保持されているすべてのトークンを元の所有者が再度使用できます。このメソッドは、指定された制限時間内にnotaryロールを持つAccount Owner ID、または指定された制限時間後に支払者、受取人または公証人によってコールできます。
Ctx.Token.ReleaseHold(operation_id string, tokenAsset interface{}) (interface{}, error)
パラメータ:
  • operation_id: string - 保留操作を識別する一意のID。通常、このIDはクライアント・アプリケーションによって渡されます。
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功すると、成功メッセージが表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
このメソッドは、指定されたユーザーおよびトークンのすべての保持IDのリストを返します。
Ctx.Account.GetOnHoldIDs(account_id string) (map[string]interface{}, error)
パラメータ:
  • token_id - トークンのID。
  • org_id - 現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • user_id - ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、IDを保持するリストを持つJSONオブジェクト。保持IDは、アセット・タイプ(ohold)、トークン名、トークンIDおよび操作IDを連結して形成されます。
戻り値の例:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationID
このメソッドは、指定された操作IDおよびトークンの保留トランザクション詳細を返します。
Ctx.Hold.GetOnHoldDetailsWithOperationID(token_id string, operation_id string) (Hold, error)
パラメータ:
  • token_id: string - トークンのID。
  • operation_id: string - 保留操作を識別する一意のID。通常、このIDはクライアント・アプリケーションによって渡されます。
戻り値:
  • 戻り値は、"GetOnHoldDetailsWithOperationId"メソッドと同じです。
  • 成功時に、指定された操作IDおよびトークンの保留トランザクション詳細を含むpromiseオブジェクト。ホールド・オブジェクトには次のプロパティが含まれます。
    • holding_id - トランザクションの保持ID。
    • operation_id: string - 保留操作を識別する一意のID。通常、このIDはクライアント・アプリケーションによって渡されます。
    • from_account_id - 保留トークンの現在の所有者のアカウントID。
    • to_account_id - 受信者のアカウントID。
    • notary_account_id - 公証人のアカウントID。
    • token_id: string - 保存されたトークンのID。
    • quantity - 保留IDの保留中のトークンの量。
    • time_to_expiration - 保留が期限切れになるまでの期間。
  • エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
    "AssetType": "ohold",
    "HoldingId": "ohold~digicur~digiCurr101~op1",
    "OperationId": "op1",
    "TokenName": "digicur",
    "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "ToAccountId": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "NotaryAccountId": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "TokenId": "digiCurr101",
    "Quantity": 2,
    "TimeToExpiration": "0"
}
GetOnHoldBalanceWithOperationID
このメソッドは、指定された操作IDおよびトークンの保留残高を返します。
Ctx.Hold.GetOnHoldBalanceWithOperationID(token_id string, operation_id string) (map[string]interface{}, error)
パラメータ:
  • token_id: string - トークンのID。
  • operation_id: string - 保留操作を識別する一意のID。通常、このIDはクライアント・アプリケーションによって渡されます。
戻り値:
  • 成功すると、指定された操作IDおよびトークンの保留残高。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
    "holding_balance": 10,
    "msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

トークン動作管理のメソッド- バーナブル動作

Burn
このメソッドは、トランザクション・コール元のアカウントからトークンを非アクティブ化または書き込みます。このメソッドのコール元には、アカウントとバーナーの役割が必要です。数量は、仕様ファイルのdivisible動作のdecimalパラメータで指定された10進値内である必要があります。
Ctx.Token.Burn(quantity float64 , tokenAsset interface{}) (interface{}, error)
パラメータ:
  • quantity: number - 書き込むトークンの合計数。
  • tokenAsset - tokenAsset引数には、操作するトークン・データの参照が含まれます。
戻り値:
  • 成功すると、成功メッセージが表示されます。エラー時、エラーメッセージを含む非NILエラーオブジェクト。
戻り値の例:
{
 "msg":"Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}