转到令牌转换的方法

Blockchain App Builder 自动生成可用于转换使用令牌分类框架标准的可替换令牌的方法。

标记转换方法包括 exchange pool 的概念。汇兑池帐户由其他令牌帐户提供资金。铸造代币时,您可以指定将一定百分比的铸造代币传输到交换池帐户。

标记转换过程

转换标记的典型流遵循以下步骤:
  1. 调用 InitializeExchangePoolUser 方法以初始化交换池用户。
  2. 调用 CreateExchangePoolAccounts 方法以创建交换池帐户。为要从其转换或转换为的每种类型的可替换令牌创建交换池帐户。
  3. 调用 AddConversionRate 方法以设置要转换的每对令牌的转换率。
  4. 通过以下方式之一为汇兑池令牌账户提供资金:
    • 使用标准传输方法将令牌传输到交换池令牌账户。
    • 在铸造标记时调用 MintWithFundingExchangePoolToken 方法,该方法可以将一定百分比的铸造标记转移到交换池帐户。
  5. 调用 TokenConversion 方法以在两个可替换标记之间转换。单个用户可以在两个令牌帐户之间转换令牌,或者一对用户可以直接将令牌从一个帐户转换为另一个帐户。
  6. 汇兑池用户可以查看汇兑池账户余额和账户事务处理。
    • 调用 GetAccount 方法以查看每个交换池令牌帐户的余额。
    • 调用 GetAccountTransactionHistoryGetAccountTransactionHistoryWithFilters 方法以查看每个交换池令牌帐户的帐户事务。

自动生成的令牌转换方法

Blockchain App Builder 自动生成在不同类型的可替换代币之间转换的方法。控制器方法必须为公共且可调用。公共方法名称以大写字符开头。以小写字符开头的方法名称是专用的。

InitializeExchangePoolUser
此方法初始化交换池用户,这是一次性活动。此方法只能由链代码的 Token Admin 调用。
func (t *Controller) InitializeExchangePoolUser(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.InitializeExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.InitializeExchangePoolUser(org_id, user_id)
}
参数:
  • org_id: string- 当前组织中用户的成员服务提供商 (membership service provider,MSP) ID。
  • user_id: string- 用户的用户名或电子邮件 ID。
返回:
  • 成功后,将包含交换池用户详细信息的消息。
返回值示例:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}
CreateExchangePoolAccounts
此方法为给定的一组令牌 ID 创建交换池令牌帐户。此方法只能由链代码的 Token Admin 调用。
func (t *Controller) CreateExchangePoolAccounts(token_ids []string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.InitializeExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    var tokens []interface{}
    for _, tokenId := range token_ids {
        token, err := t.getTokenObject(tokenId)
        if err != nil {
            return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
        }
        tokens = append(tokens, token.Interface())
    }
    return t.Ctx.TokenConvertor.CreateExchangePoolAccounts(tokens)
}
参数:
  • token_ids: string []- 标记 ID 的数组。最多可以指定十个令牌 ID。
返回:
  • 成功后,包含已创建的交换池帐户详细信息的对象列表。
返回值示例:
[
    {
        "AccountId": "oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034",
        "Status": "created",
        "TokenId": "USD"
    },
    {
        "AccountId": "oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0",
        "Status": "created",
        "TokenId": "INR"
    }
]
AddConversionRate
此方法为一对令牌添加转换率。令牌转换率最多可以指定八个小数位。此方法只能由链代码的 Token Admin 调用。
func (t *Controller) AddConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.AddConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.AddConversionToken(from_token_id, to_token_id, token_conversion_rate)
}
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
  • token_conversion_rate: float64- 将 from_token_id 标记转换为 to_token_id 标记的速率。
返回:
  • 成功后,转换率对象的 JSON 表示形式。
返回值示例:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
GetConversionRate
此方法获取一对令牌的当前转换率。链代码的 Token Admin、任何 Org Admin 以及任何令牌帐户所有者都可以调用此方法。
func (t *Controller) GetConversionRate(from_token_id string, to_token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    conversionRateId, err := t.Ctx.TokenConversionRate.GetConversionRateId(from_token_id, to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting conversationRateId. Error: %s", err)
    }
    return t.Ctx.TokenConversionRate.Get(conversionRateId)
}
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
返回:
  • 成功后,转换率对象的 JSON 表示形式。
返回值示例:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
UpdateConversionRate
此方法将更新一对令牌的当前转换率。令牌转换率最多可以指定八个小数位。此方法只能由链代码的 Token Admin 调用。
func (t *Controller) UpdateConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.UpdateConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.UpdateTokenConversionRate(from_token_id, to_token_id, token_conversion_rate)
}
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
  • token_conversion_rate: float64- 将 from_token_id 标记转换为 to_token_id 标记的速率。
返回:
  • 成功后,更新后的折换率对象的 JSON 表示形式。
返回值示例:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 15
}
MintWithFundingExchangePool
此方法根据指定的令牌 ID 和数量在调用者的账户中生成令牌。从铸币数量中获得的代币百分比随后会转移到交换池代币账户。
func (t *Controller) MintWithFundingExchangePool(token_id string, token_quantity float64, percentage_token_to_exchangePool float64) (interface{}, error) {
    token, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
    }
    return t.Ctx.TokenConvertor.MintWithFundingExchangePool(token.Interface(), token_quantity, percentage_token_to_exchangePool)
}
参数:
  • token_id: string- 要铸造的令牌的 ID。
  • token_quantity: float64 - 要铸造的标记总数。
  • percentage_token_to_exchange_pool: float64- 要传输到交换池令牌帐户的铸造令牌百分比。
返回:
  • 成功后,将出现一条消息,指示成功铸造和为交换池提供资金。
返回值示例:
{
    "msg": "successfully minted 100 tokens to AccountId: 'oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1' (OrgId: Org1MSP, User-Id: admin) and Successfully transfered 80 tokens to exchange pool account with AccountId: 'oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0' (OrgId: Org1MSP, UserId: exchangepooluser) "
}
TokenConversion
此方法将令牌从调用者的帐户转换为由 to_token_idto_org_idto_user_id 值指定的帐户。链代码的 Token Admin 和任何令牌帐户所有者都可以调用此方法。交换池用户无法调用此方法。
func (t *Controller) TokenConversion(from_token_id string, to_token_id string, to_org_id string, to_user_id string, token_quantity float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.TokenConversion", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    from_token, err := t.getTokenObject(from_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
    }
    to_token, err := t.getTokenObject(to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting to_token asset details. error: %s", err)
    }
    return t.Ctx.TokenConvertor.TokenConversion(from_token.Interface(), to_token.Interface(), to_org_id, to_user_id, token_quantity)
}
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
  • to_org_id: string- 当前组织中用于接收令牌的用户的成员资格服务提供商 (membership service provider,MSP) ID。
  • to_user_id: string- 要接收令牌的用户的用户名或电子邮件 ID。
  • token_quantity: float64 –要传输的令牌总数。
返回:
  • 成功后,将出现一条消息,指明标记转换成功。
返回值示例:
{
    "msg": "succesfully converted 5 of tokens with tokenId: [USD] from AccountId: 'oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb' (OrgId: Org1MSP, UserId: admin) to 75 of tokens with tokenId: [INR] to AccountId: 'oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e' ( OrgId: Org1MSP, UserId: user ) as per the conversion rate of 15"
}
GetConversionHistory
此方法返回指定令牌帐户的令牌转换历史记录。此方法可由链代码的 Token Admin、指定组织的 Org Admin 以及令牌帐户所有者调用。
func (t *Controller) GetConversionHistory(token_id string, org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionHistory", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
    if err != nil {
        return nil, fmt.Errorf("error in generating the accoint_id. Error: %s", err)
    }
    return t.Ctx.Account.GetTokenConversionHistory(account_id, org_id, user_id)
}
参数:
  • token_id: string- 令牌的 ID。
  • org_id: string- 当前组织中用户的成员服务提供商 (membership service provider,MSP) ID。
  • user_id: string- 用户的用户名或电子邮件 ID。
返回:
  • 成功时,包含转换历史记录详细信息的 JSON 对象。
返回值示例:
[
    {
        "balance": 95,
        "conversion_rate": 15,
        "converted_amount": 75,
        "from_account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "from_token_id": "USD",
        "onhold_balance": 0,
        "timestamp": "2022-12-01T00:54:33+05:30",
        "to_account_id": "oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e",
        "to_token_id": "INR",
        "transacted_amount": 5,
        "transaction_id": "otransaction~e1f5c32ab3cdc17a51ff0edda6bcc71b5acec3320a69f68a4ae455ed416657fa",
        "transaction_type": "TOKEN_CONVERSION_DEBIT"
    }
]
GetConversionRateHistory
此方法返回一对令牌的令牌转换率历史记录。链代码的 Token Admin、任何 Org Admin 以及任何令牌帐户所有者都可以调用此方法。
func (t *Controller) GetConversionRateHistory(from_token_id string, to_token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionRateHistory", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    conversion_rate_id, err := t.Ctx.TokenConversionRate.GetConversionRateId(from_token_id, to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting conversionRateId. Error: %s", err)
    }
    return t.Ctx.TokenConversionRate.History(conversion_rate_id)
}
参数:
  • from_token_id: string- 要转换的标记的 ID,用于计算转换率。
  • to_token_id: string- 要转换为的标记的 ID,用于计算转换率。
返回:
  • 成功后,具有折换率历史记录详细信息的 JSON 对象。
返回值示例:
[
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:48:58+05:30",
    "TxId": "d6c5332278d33beddbc48e535029af424fef2129bf49f4906f9b527e101d95f1",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 15,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  },
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:47:15+05:30",
    "TxId": "e8796578351e948827d5dfe242ab4be59019ae67d69d3bfd6db255a268d57017",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 10,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  }
]
GetExchangePoolUser
此方法返回交换池用户的 org_iduser_id 值。此方法只能由链代码的 Token Admin 调用。
func (t *Controller) GetExchangePoolUser() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.GetExchangePoolUser()
}
参数:
返回:
  • 成功后,将显示一条消息,其中包含有关交换池用户的信息。
返回值示例:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}
InitializeExchangePoolUser
此方法初始化交换池用户,这是一次性活动。此方法只能由链代码的 Token Admin 调用。
func (t *Controller) InitializeExchangePoolUser(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.InitializeExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.InitializeExchangePoolUser(org_id, user_id)
}
参数:
  • org_id: string- 当前组织中用户的成员服务提供商 (membership service provider,MSP) ID。
  • user_id: string- 用户的用户名或电子邮件 ID。
返回:
  • 成功后,将包含交换池用户详细信息的消息。
返回值示例:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}
CreateExchangePoolAccounts
此方法为给定的一组令牌 ID 创建交换池令牌帐户。此方法只能由链代码的 Token Admin 调用。
func (t *Controller) CreateExchangePoolAccounts(token_ids []string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.InitializeExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    var tokens []interface{}
    for _, tokenId := range token_ids {
        token, err := t.getTokenObject(tokenId)
        if err != nil {
            return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
        }
        tokens = append(tokens, token.Interface())
    }
    return t.Ctx.TokenConvertor.CreateExchangePoolAccounts(tokens)
}
参数:
  • token_ids: string []- 标记 ID 的数组。最多可以指定十个令牌 ID。
返回:
  • 成功后,包含已创建的交换池帐户详细信息的对象列表。
返回值示例:
[
    {
        "AccountId": "oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034",
        "Status": "created",
        "TokenId": "USD"
    },
    {
        "AccountId": "oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0",
        "Status": "created",
        "TokenId": "INR"
    }
]
AddConversionRate
此方法为一对令牌添加转换率。令牌转换率最多可以指定八个小数位。此方法只能由链代码的 Token Admin 调用。
func (t *Controller) AddConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.AddConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.AddConversionToken(from_token_id, to_token_id, token_conversion_rate)
}
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
  • token_conversion_rate: float64- 将 from_token_id 标记转换为 to_token_id 标记的速率。
返回:
  • 成功后,转换率对象的 JSON 表示形式。
返回值示例:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
GetConversionRate
此方法获取一对令牌的当前转换率。此方法可以由指定组织的 Token AdminToken AuditorOrg AdminOrg Auditor 调用,也可以由任何令牌帐户所有者调用。
func (t *Controller) GetConversionRate(from_token_id string, to_token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    conversionRateId, err := t.Ctx.TokenConversionRate.GetConversionRateId(from_token_id, to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting conversationRateId. Error: %s", err)
    }
    return t.Ctx.TokenConversionRate.Get(conversionRateId)
}
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
返回:
  • 成功后,转换率对象的 JSON 表示形式。
返回值示例:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
UpdateConversionRate
此方法将更新一对令牌的当前转换率。令牌转换率最多可以指定八个小数位。此方法只能由链代码的 Token Admin 调用。
func (t *Controller) UpdateConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.UpdateConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.UpdateTokenConversionRate(from_token_id, to_token_id, token_conversion_rate)
}
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
  • token_conversion_rate: float64- 将 from_token_id 标记转换为 to_token_id 标记的速率。
返回:
  • 成功后,更新后的折换率对象的 JSON 表示形式。
返回值示例:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 15
}
MintWithFundingExchangePool
此方法根据指定的令牌 ID 和数量在调用者的账户中生成令牌。从铸币数量中获得的代币百分比随后会转移到交换池代币账户。
func (t *Controller) MintWithFundingExchangePool(token_id string, token_quantity float64, percentage_token_to_exchangePool float64) (interface{}, error) {
    token, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
    }
    return t.Ctx.TokenConvertor.MintWithFundingExchangePool(token.Interface(), token_quantity, percentage_token_to_exchangePool)
}
参数:
  • token_id: string- 要铸造的令牌的 ID。
  • token_quantity: float64 - 要铸造的标记总数。
  • percentage_token_to_exchange_pool: float64- 要传输到交换池令牌帐户的铸造令牌百分比。
返回:
  • 成功后,将出现一条消息,指示成功铸造和为交换池提供资金。
返回值示例:
{
    "msg": "successfully minted 100 tokens to AccountId: 'oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1' (OrgId: Org1MSP, User-Id: admin) and Successfully transfered 80 tokens to exchange pool account with AccountId: 'oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0' (OrgId: Org1MSP, UserId: exchangepooluser) "
}
TokenConversion
此方法将令牌从调用者的帐户转换为由 to_token_idto_org_idto_user_id 值指定的帐户。链代码的 Token Admin 和任何令牌帐户所有者都可以调用此方法。交换池用户无法调用此方法。
func (t *Controller) TokenConversion(from_token_id string, to_token_id string, to_org_id string, to_user_id string, token_quantity float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.TokenConversion", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    from_token, err := t.getTokenObject(from_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
    }
    to_token, err := t.getTokenObject(to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting to_token asset details. error: %s", err)
    }
    return t.Ctx.TokenConvertor.TokenConversion(from_token.Interface(), to_token.Interface(), to_org_id, to_user_id, token_quantity)
}
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
  • to_org_id: string- 当前组织中用于接收令牌的用户的成员资格服务提供商 (membership service provider,MSP) ID。
  • to_user_id: string- 要接收令牌的用户的用户名或电子邮件 ID。
  • token_quantity: float64 –要传输的令牌总数。
返回:
  • 成功后,将出现一条消息,指明标记转换成功。
返回值示例:
{
    "msg": "succesfully converted 5 of tokens with tokenId: [USD] from AccountId: 'oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb' (OrgId: Org1MSP, UserId: admin) to 75 of tokens with tokenId: [INR] to AccountId: 'oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e' ( OrgId: Org1MSP, UserId: user ) as per the conversion rate of 15"
}
GetConversionHistory
此方法返回指定令牌帐户的令牌转换历史记录。此方法可由指定组织的 Token AdminToken AuditorOrg AdminOrg Auditor 以及指定的帐户所有者调用。
func (t *Controller) GetConversionHistory(token_id string, org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionHistory", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
    if err != nil {
        return nil, fmt.Errorf("error in generating the accoint_id. Error: %s", err)
    }
    return t.Ctx.Account.GetTokenConversionHistory(account_id, org_id, user_id)
}
参数:
  • token_id: string- 令牌的 ID。
  • org_id: string- 当前组织中用户的成员服务提供商 (membership service provider,MSP) ID。
  • user_id: string- 用户的用户名或电子邮件 ID。
返回:
  • 成功时,包含转换历史记录详细信息的 JSON 对象。
返回值示例:
[
    {
        "balance": 95,
        "conversion_rate": 15,
        "converted_amount": 75,
        "from_account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "from_token_id": "USD",
        "onhold_balance": 0,
        "timestamp": "2022-12-01T00:54:33+05:30",
        "to_account_id": "oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e",
        "to_token_id": "INR",
        "transacted_amount": 5,
        "transaction_id": "otransaction~e1f5c32ab3cdc17a51ff0edda6bcc71b5acec3320a69f68a4ae455ed416657fa",
        "transaction_type": "TOKEN_CONVERSION_DEBIT"
    }
]
GetConversionRateHistory
此方法返回一对令牌的令牌转换率历史记录。此方法可由 Token AdminToken AuditorOrg AdminOrg Auditor 或任何令牌帐户所有者调用。
func (t *Controller) GetConversionRateHistory(from_token_id string, to_token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionRateHistory", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    conversion_rate_id, err := t.Ctx.TokenConversionRate.GetConversionRateId(from_token_id, to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting conversionRateId. Error: %s", err)
    }
    return t.Ctx.TokenConversionRate.History(conversion_rate_id)
}
参数:
  • from_token_id: string- 要转换的标记的 ID,用于计算转换率。
  • to_token_id: string- 要转换为的标记的 ID,用于计算转换率。
返回:
  • 成功后,具有折换率历史记录详细信息的 JSON 对象。
返回值示例:
[
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:48:58+05:30",
    "TxId": "d6c5332278d33beddbc48e535029af424fef2129bf49f4906f9b527e101d95f1",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 15,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  },
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:47:15+05:30",
    "TxId": "e8796578351e948827d5dfe242ab4be59019ae67d69d3bfd6db255a268d57017",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 10,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  }
]
GetExchangePoolUser
此方法返回交换池用户的 org_iduser_id 值。此方法只能由链代码的 Token AdminToken Auditor 调用。
func (t *Controller) GetExchangePoolUser() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.GetExchangePoolUser()
}
参数:
返回:
  • 成功后,将显示一条消息,其中包含有关交换池用户的信息。
返回值示例:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}

标记转换 SDK 方法

InitializeExchangePoolUser
此方法初始化交换池用户,这是一次性活动。此方法只能由链代码的 Token Admin 调用。
Ctx.TokenConvertor.InitializeExchangePoolUser(org_id string, user_id string) (interface{}, error)
参数:
  • org_id: string- 当前组织中用户的成员服务提供商 (membership service provider,MSP) ID。
  • user_id: string- 用户的用户名或电子邮件 ID。
返回:
  • 成功后,将包含交换池用户详细信息的消息。
返回值示例:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}
CreateExchangePoolAccounts
此方法为给定的一组令牌 ID 创建交换池令牌帐户。此方法只能由链代码的 Token Admin 调用。
Ctx.TokenConvertor.CreateExchangePoolAccounts(tokens []interface{}) (interface{}, error)
参数:
  • token_ids: string []- 标记 ID 的数组。
返回:
  • 成功后,包含已创建的交换池帐户详细信息的对象列表。
返回值示例:
[
    {
        "AccountId": "oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034",
        "Status": "created",
        "TokenId": "USD"
    },
    {
        "AccountId": "oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0",
        "Status": "created",
        "TokenId": "INR"
    }
]
AddConversionToken
此方法将添加具有指定标记的新转换率的标记。令牌转换率最多可以指定八个小数位。此方法只能由链代码的 Token Admin 调用。
Ctx.TokenConvertor.AddConversionToken(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error)
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
  • token_conversion_rate: float64- 将 from_token_id 标记转换为 to_token_id 标记的速率。
返回:
  • 成功后,转换率对象的 JSON 表示形式。
返回值示例:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
Get
此方法获取一对令牌的当前转换率。链代码的 Token Admin 和任何令牌帐户所有者都可以调用此方法。
Ctx.TokenConversionRate.Get(id string) (ConversionRate, error)
参数:
  • id: string- 令牌转换率对象的 ID。
返回:
  • 成功后,转换率对象的 JSON 表示形式。
返回值示例:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
UpdateTokenConversionRate
此方法将更新一对令牌的当前转换率。令牌转换率最多可以指定八个小数位。此方法只能由链代码的 Token Admin 调用。
Ctx.TokenConvertor.UpdateTokenConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error)
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
  • token_conversion_rate: float64- 将 from_token_id 标记转换为 to_token_id 标记的速率。
返回:
  • 成功后,更新后的折换率对象的 JSON 表示形式。
返回值示例:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 15
}
MintWithFundingExchangePool
此方法根据指定的令牌 ID 和数量在调用者的账户中生成令牌。从铸币数量中获得的代币百分比随后会转移到交换池代币账户。
Ctx.TokenConvertor.MintWithFundingExchangePool(token interface{}, token_quantity float64, percentage_token_to_exchangePool float64) (interface{}, error)
参数:
  • token_id: string- 要铸造的令牌的 ID。
  • token_quantity: float64 - 要铸造的标记总数。
  • percentage_token_to_exchange_pool: float64- 要传输到交换池令牌帐户的铸造令牌百分比。
返回:
  • 成功后,将出现一条消息,指示成功铸造和为交换池提供资金。
返回值示例:
{
    "msg": "successfully minted 100 tokens to AccountId: 'oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1' (OrgId: Org1MSP, User-Id: admin) and Successfully transfered 80 tokens to exchange pool account with AccountId: 'oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0' (OrgId: Org1MSP, UserId: exchangepooluser) "
}
TokenConversion
此方法将令牌从调用者的帐户转换为由 to_token_idto_org_idto_user_id 值指定的帐户。链代码的 Token Admin 和任何令牌帐户所有者都可以调用此方法。交换池用户无法调用此方法。
Ctx.TokenConvertor.TokenConversion(from_token interface{}, to_token interface{}, to_org_id string, to_user_id string, token_quantity float64) (interface{}, error)
参数:
  • from_token_id: string- 要转换的令牌的 ID。
  • to_token_id: string- 要转换为的令牌的 ID。
  • to_org_id: string- 当前组织中用于接收令牌的用户的成员资格服务提供商 (membership service provider,MSP) ID。
  • to_user_id: string- 要接收令牌的用户的用户名或电子邮件 ID。
返回:
  • 成功后,将出现一条消息,指明标记转换成功。
返回值示例:
{
    "msg": "succesfully converted 5 of tokens with tokenId: [USD] from AccountId: 'oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb' (OrgId: Org1MSP, UserId: admin) to 75 of tokens with tokenId: [INR] to AccountId: 'oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e' ( OrgId: Org1MSP, UserId: user ) as per the conversion rate of 15"
}
GetTokenConversionHistory
此方法返回指定令牌帐户的令牌转换历史记录。链代码的 Token Admin 和令牌帐户所有者可以调用此方法。
Ctx.Account.GetTokenConversionHistory(account_id string, org_id string, user_id string) (interface{}, error)
参数:
  • account_id: string- 可变令牌帐户的 ID。
  • org_id: string- 当前组织中用户的成员服务提供商 (membership service provider,MSP) ID。
  • user_id: string- 用户的用户名或电子邮件 ID。
返回:
  • 成功时,包含转换历史记录详细信息的 JSON 对象。
返回值示例:
[
    {
        "balance": 95,
        "conversion_rate": 15,
        "converted_amount": 75,
        "from_account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "from_token_id": "USD",
        "onhold_balance": 0,
        "timestamp": "2022-12-01T00:54:33+05:30",
        "to_account_id": "oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e",
        "to_token_id": "INR",
        "transacted_amount": 5,
        "transaction_id": "otransaction~e1f5c32ab3cdc17a51ff0edda6bcc71b5acec3320a69f68a4ae455ed416657fa",
        "transaction_type": "TOKEN_CONVERSION_DEBIT"
    }
]
history
此方法返回一对令牌的令牌转换率历史记录。链代码的 Token Admin、任何 Org Admin 以及任何令牌帐户所有者都可以调用此方法。
Ctx.TokenConversionRate.History(conversion_rate_id string) (interface{}, error)
参数:
  • conversion_rate_id: string- 转换率对象的 ID。
返回:
  • 成功后,具有折换率历史记录详细信息的 JSON 对象。
返回值示例:
[
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:48:58+05:30",
    "TxId": "d6c5332278d33beddbc48e535029af424fef2129bf49f4906f9b527e101d95f1",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 15,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  },
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:47:15+05:30",
    "TxId": "e8796578351e948827d5dfe242ab4be59019ae67d69d3bfd6db255a268d57017",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 10,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  }
]
GetExchangePoolUser
此方法返回交换池用户的 org_iduser_id 值。此方法只能由链代码的 Token Admin 调用。
Ctx.TokenConvertor.GetExchangePoolUser()
参数:
返回:
  • 成功后,将显示一条消息,其中包含有关交换池用户的信息。
返回值示例:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}