コンテンツにスキップ

コントラクトAPI

契約APIは以下の機能を提供します。

  • コントラクトリソースを登録、照会、変更する
  • コントラクトをデプロイ、照会、変更し、コントラクトメソッドを実行する

前提条件: API認証トークンを取得する

契約APIを呼び出すには、APIのヘッダーに認証トークンを追加する必要があります。これがAPI認証トークンを取得する方法です。

  1. Hive コンソールにサインアップし、AppCenter > ゲームリスト > 新しいゲームを登録します。
  2. AppCenter > AppIDリスト > 新しいAppIDを登録して新しいAppIDを作成します。
    • 新しいAppIDを登録: ウェブログインAppID
    • 使用目的: ブロックチェーン
    • 使用するAppID: “自動生成されたAppID”または“追加情報”付きの“自動生成されたAppID”を選択します。
  3. Hive コンソール > ブロックチェーン > API認証キーを検索し、ゲーム名を選択して検索し、IDとシークレットキーを取得します。
  4. auth-token APIのリクエストボディにIDとシークレットキーを挿入し、このAPIを呼び出します。
  5. APIレスポンスのdata.accessTokenとしてAPI認証キーを取得できます。

契約リソースを登録する

契約のリソースを登録します。契約名(contractName)、契約の説明(contractDesc)、および契約がコンパイルされた後に生成されるバイトコードとABI/スキームを登録します。

Note
  • 契約のリソースはブロックチェーンに記録されません。
  • 契約はSolidityまたはRustで記述する必要があります。

リクエストURL

ライブURL https://bc-api.qpyou.cn/core/v1/contract/resource
サンドボックスURL https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource
HTTPメソッド POST
コンテンツタイプ application/json

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization APIを呼び出すために必要な認証トークン string Y
x-network ブロックチェーンネットワーク string Y

リクエストボディ

フィールド名 説明 タイプ 必須
from コントラクトオーナーのアドレス 文字列 Y
contractName コントラクト名 文字列 Y
contractDesc コントラクトの説明 文字列 Y
contractAbi コントラクトがコンパイルされたときに生成されるアプリケーションバイナリインターフェース。 ファイル Y
contractBytecode コントラクトがコンパイルされたときに生成されるバイトコード ファイル Y

レスポンス

フィールド名 説明 タイプ
code APIリクエスト結果コード、0: 成功 数字
message 結果メッセージ 文字列
data APIレスポンスデータ JSON
data.resourceId 契約リソースID 数字

リクエストサンプル

curl -X 'POST' 
  'https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource' 
  -H 'accept: */*' 
  -H 'x-network: polygon' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20ydXMuYzJ4d2...' 
  -H 'Content-Type: multipart/form-data' 
  -F 'from=0xD6e69da7f1be111394dfef4C48eaC9b52ddf2Fd0' 
  -F 'contractName=Com2us Sample Token Contract' 
  -F 'contractDesc=Fungible Token Contract' 
  -F 'contractAbi=@erc20-capped.json;type=application/json' 
  -F 'contractBytecode=@erc20-capped.code'

応答サンプル

// polygon
{
  "code": 0,
  "message": "success",
  "data": {
    "resourceId": 1
  }
}
// xpla
{
  "code": 0,
  "message": "success",
  "data": {
    "rawTx": "02f873830138810c8451f4d5c08451f4d5cf83018c0694572f47db51a98...",
    "resourceId": 1
  }
}

クエリ契約リソース情報

登録された契約リソースの情報を返します。

リクエストURL

ライブURL https://bc-api.qpyou.cn/core/v1/contract/resource
サンドボックスURL https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource
HTTPメソッド GET
コンテンツタイプ application/json

ヘッダー パラメータ

フィールド名 説明 タイプ 必須
Authorization APIを呼び出すために必要な認証トークン 文字列 Y
x-network ブロックチェーンネットワーク 文字列 Y

クエリパラメータ

フィールド名 説明 タイプ 必須
resourceId 契約リソースID 文字列 N

応答

フィールド名 説明 タイプ
code APIリクエスト結果コード、0: 成功 数字
message 結果メッセージ 文字列
data APIレスポンスデータ json
data.resourceId 契約リソースID 数字
data.network ブロックチェーンネットワーク 文字列
data.tenantId 契約リソースを登録した者のID 文字列
data.contractName 契約名 文字列
data.contractDesc 契約の説明 文字列
data.codeId 契約コードID(XPLAブロックチェーンのみ) 文字列
data.updatedAt 契約が登録された日付 文字列
data.createdAt 契約が修正された日付 文字列

リクエストサンプル

curl -X 'GET' 
  'https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource?resourceId=1' 
  -H 'accept: */*' 
  -H 'x-network: polygon' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb...'

応答サンプル

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "resourceId": 1,
      "network": "polygon",
      "tenantId": "com.com2us.c2xwallet.global.normal",
      "contractName": "Com2us Sample Token Contract",
      "contractDesc": "Fungible Token Contract",
      "codeId": null,
      "updatedAt": "2023-07-27T18:05:25.000Z",
      "createdAt": "2023-07-27T18:05:25.000Z"
    }
  ]
}

契約リソースを変更する

登録された契約リソースを変更します。契約の説明(contractDesc)、バイトコード、またはABI/スキームを変更します。

リクエストURL

ライブURL https://bc-api.qpyou.cn/core/v1/contract/resource/{resourceId}
サンドボックスURL https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource/{resourceId}
HTTPメソッド PATCH
コンテンツタイプ application/json

パスパラメータ

フィールド名 説明 タイプ 必須
resourceId 契約リソースID 文字列 Y

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization APIを呼び出すために必要な認証トークン 文字列 Y
x-network ブロックチェーンネットワーク 文字列 Y

リクエストボディ

フィールド名 説明 タイプ 必須
from コントラクトオーナーのアドレス 文字列 Y
contractDesc コントラクトの説明 文字列 N
codeId これはコントラクトコードIDです(XPLAブロックチェーン専用)。XPLAブロックチェーンにコントラクトをデプロイするときに取得されます。 文字列 N
contractAbi コントラクトがコンパイルされると生成されるアプリケーションバイナリインターフェース。 ファイル N
contractBytecode コントラクトがコンパイルされると生成されるバイトコード ファイル N
Note

XPLAブロックチェーンに契約デプロイのトランザクションを送信し、txHashを取得してXPLAエクスプローラーで検索すると、イベントログでcodeIdを見つけることができます。

応答

フィールド名 説明 タイプ
code APIリクエスト結果コード、0: 成功 数字
message 結果メッセージ 文字列
data APIレスポンスデータ JSON
data.resourceId 契約リソースID 数字

リクエストサンプル

curl -X 'PATCH' 
  'https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource/1' 
  -H 'accept: */*' 
  -H 'x-network: polygon' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNv...' 
  -H 'Content-Type: multipart/form-data' 
  -F 'from=0xD6e69da7f1be111394dfef4C48eaC9b52ddf2Fd0' 
  -F 'contractDesc=Fungible Token Contract' 
  -F 'codeId=20' 

応答サンプル

{
  "code": 0,
  "message": "success",
  "data": {
    "resourceId": 1
  }
}

コントラクトをデプロイ

以前に登録された契約リソース(バイトコードとABI/スキーム)に基づいて新しい契約を展開できるトランザクションを作成します。このAPIは、すべてのタイプ(NFTやFT、すなわちファンジブルトークンを含む)の契約を展開できます。

リクエストURL

ライブURL https://bc-api.qpyou.cn/core/v1/contract/resource/{resourceId}
サンドボックスURL https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource/{resourceId}
HTTPメソッド POST
コンテンツタイプ application/json

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization APIを呼び出すために必要な認証トークン string Y
x-network ブロックチェーンネットワーク string Y

パスパラメータ

フィールド名 説明 タイプ 必須
resourceId 契約リソースID 文字列 Y

リクエストボディ

フィールド名 説明 タイプ 必須
from コントラクトをデプロイするウォレットアドレス 文字列 Y
message コントラクトをデプロイするために必要な初期設定情報 JSON Y
encoded 戻されるトランザクションがエンコードされているかどうか
* true: エンコードされた生トランザクション文字列(data.rawTx)を受け取ります。
* false: デコードされた data.rawTx(JSON)を受け取ります。
ブール値 N

応答

フィールド名 説明
code APIリクエスト結果コード、0: 成功 数字
message 結果メッセージ 文字列
data APIレスポンスデータ JSON
data.rawTx トランザクションデータ 文字列またはJSON
data.instanceId コントラクトインスタンスID 数字

リクエストサンプル

curl -X 'POST' 
  'https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource/2' 
  -H 'accept: */*' 
  -H 'x-network: polygon' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb...' 
  -H 'Content-Type: application/json' 
  -d '{
  "from": "0xD6e69da7f1be111394dfef4C48eaC9b52ddf2Fd0",
  "message": {
    "name": "testft",
    "symbol": "tft",
    "decimals": 6,
    "initialSupply": "1000000000"
  },
  "encoded": true
}'

応答サンプル

{
  "code": 0,
  "message": "success",
  "data": {
    "rawTx": "02f91c9c830138811a84513619a084513619b...",
    "instanceId": 1
  }
}

デプロイされた契約情報を取得

ブロックチェーンに展開された契約情報を返します。

リクエストURL

ライブURL https://bc-api.qpyou.cn/core/v1/contract/instance
サンドボックスURL https://sandbox-bc-api.qpyou.cn/core/v1/contract/instance
HTTPメソッド GET
コンテンツタイプ application/json

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization APIを呼び出すために必要な認証トークン 文字列 Y
x-network ブロックチェーンネットワーク 文字列 Y

クエリパラメータ

フィールド名 説明 タイプ 必須
instanceId 契約インスタンスID 文字列 N

応答

フィールド名 説明 タイプ
code APIリクエスト結果コード、0: 成功 数字
message 結果メッセージ 文字列
data APIレスポンスデータ 配列
data.resourceId 契約リソースID 数字
data.instanceId 契約インスタンスID 数字
data.contractAddress 契約アドレス 文字列
data.initMsg 契約をデプロイする際の初期設定情報 JSON
data.createdAt 契約がブロックチェーンに記録された日付 文字列
data.network ブロックチェーンネットワーク情報 文字列
data.tenantId 契約デプロイヤーのID 文字列

リクエストサンプル

curl -X 'GET' 
  'https://sandbox-bc-api.qpyou.cn/core/v1/contract/instance?instanceId=1' 
  -H 'accept: */*' 
  -H 'x-network: polygon' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20yd...'

応答サンプル

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "resourceId": 2,
      "instanceId": 1,
      "contractAddress": null,
      "initMsg": {
        "name": "testft",
        "symbol": "tft",
        "decimals": 6,
        "initialSupply": "1000000000"
      },
      "createdAt": "2023-07-28T17:35:22.000Z",
      "network": "polygon",
      "tenantId": "com.com2us.c2xwallet.global.normal"
    }
  ]
}

コントラクトインスタンスアドレスを変更する

デプロイされた契約アドレスを契約インスタンスID(instanceId)で更新します。

リクエストURL

ライブURL https://bc-api.qpyou.cn/core/v1/contract/instance/{instanceId}
サンドボックスURL https://sandbox-bc-api.qpyou.cn/core/v1/contract/instance/{instanceId}
HTTPメソッド PATCH
コンテンツタイプ application/json

パスパラメータ

フィールド名 説明 タイプ 必須
instanceId 契約インスタンスID 文字列 Y

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization APIを呼び出すために必要な認証トークン 文字列 Y
x-network ブロックチェーンネットワーク 文字列 Y

クエリパラメータ

フィールド名 説明 タイプ 必須
contractAddress コントラクトアドレス 文字列 Y

応答

フィールド名 説明 タイプ
コード APIリクエスト結果コード、0: 成功 数字
メッセージ 結果メッセージ 文字列

リクエストサンプル

curl -X 'PATCH' 
  'https://sandbox-bc-api.qpyou.cn/core/v1/contract/instance/1?contractAddress=0x78ce8698bd69fc96d425a82ae6813f553a673e63' 
  -H 'accept: */*' 
  -H 'x-network: polygon' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJp...'

応答サンプル

{
  "code": 0,
  "message": "success"
}

クエリ契約メソッドリスト

契約リソースID(resourceId)による契約メソッドのリストを返します。

リクエストURL

ライブURL https://bc-api.qpyou.cn/core/v1/contract/resource/{resourceId}/methods
サンドボックスURL https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource/{resourceId}/methods
HTTPメソッド GET
コンテンツタイプ application/json

パスパラメータ

フィールド名 説明 タイプ 必須
resourceId 契約リソースID 文字列 Y

ヘッダー パラメータ

フィールド名 説明 タイプ 必須
Authorization APIを呼び出すために必要な認証トークン 文字列 Y
x-network ブロックチェーンネットワーク 文字列 Y

応答

フィールド名 説明 タイプ
code APIリクエスト結果コード、0: 成功 number
message 結果メッセージ String
data APIレスポンスデータ array
data.methodName コントラクトメソッド名 string
data.type コントラクトメソッドタイプ
* execute: コントラクトにデータを挿入するか、コントラクト内の既存データを変更する
* query: コントラクト情報を取得する
string

リクエストサンプル

curl -X 'GET' 
  'https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource/1/methods' 
  -H 'accept: */*' 
  -H 'x-network: polygon' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20yd...'

応答サンプル

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "methodName": "allowance",
      "type": "query"
    },
    {
      "methodName": "totalSupply",
      "type": "query"
    },
    ...
  ]
}

契約メソッド情報を取得

契約リソースID(resourceId)とメソッド名(method)を使用して契約メソッドを実行するために必要な関数シグネチャを返します。

リクエストURL

ライブURL https://bc-api.qpyou.cn/core/v1/contract/resource/{resourceId}/method/{method}
サンドボックスURL https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource/{resourceId}/method/{method}
HTTPメソッド GET
コンテンツタイプ application/json

パスパラメータ

フィールド名 説明 タイプ 必須
resourceId 契約リソースID 文字列 Y
method 契約メソッド名 文字列 Y

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization APIを呼び出すために必要な認証トークン string Y
x-network ブロックチェーンネットワーク string Y

応答

フィールド名 説明 タイプ
code APIリクエスト結果コード、0: 成功 数字
message 結果メッセージ 文字列
data これは契約メソッドを実行するために必要なデータです(メソッド名とメソッドの入力パラメータ)。 JSON

リクエストサンプル

curl -X 'GET' 
  'https://sandbox-bc-api.qpyou.cn/core/v1/contract/resource/2/method/balanceOf' 
  -H 'accept: */*' 
  -H 'x-network: polygon' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20...'

レスポンスサンプル

{
  "code": 0,
  "message": "success",
  "data": {
    "balanceOf": {
      "account": "address"
    }
  }
}

コントラクトメソッドを実行する

メソッドの名前とメソッドの入力パラメータ(message)を使用して契約メソッドを実行します。

リクエストURL

ライブURL https://bc-api.qpyou.cn/core/v1/contract/instance/{instanceId}/query
サンドボックスURL https://sandbox-bc-api.qpyou.cn/core/v1/contract/instance/{instanceId}/query
HTTPメソッド POST
コンテンツタイプ application/json

パスパラメータ

フィールド名 説明 タイプ 必須
instanceId 契約インスタンスID 文字列 Y

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
Authorization APIを呼び出すために必要な認証トークン 文字列 Y
x-network ブロックチェーンネットワーク 文字列 Y

リクエストボディ

フィールド名 説明 タイプ 必須
from コントラクトメソッドを実行するために要求するウォレットアドレス 文字列 Y
message コントラクトメソッド名とメソッドの入力パラメータ 文字列 Y
encoded 戻り値のトランザクションがエンコードされているかどうか
* true: エンコードされた生トランザクション文字列(data.rawTx)を受け取る。
* false: デコードされたdata.rawTx(JSON)を受け取る。
ブール値 N

応答

フィールド名 説明 タイプ
code APIリクエスト結果コード、0: 成功 数値
message 結果メッセージ 文字列
data コントラクトメソッド実行後に返される値 JSON

リクエストサンプル

curl -X 'POST' 
  'https://sandbox-bc-api.qpyou.cn/core/v1/contract/instance/1/query' 
  -H 'accept: */*' 
  -H 'x-network: polygon' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb2...' 
  -H 'Content-Type: application/json' 
  -d '{
  "from": "0xD6e69da7f1be111394dfef4C48eaC9b52ddf2Fd0",
  "message": {
    "balanceOf": {
      "account": "0xD6e69da7f1be111394dfef4C48eaC9b52ddf2Fd0"
    }
  },
  "encoded": true
}'

一般的に、契約メソッドは2つのタイプに分けられます:クエリタイプと実行タイプです。クエリタイプメソッドはデータを単に照会し、実行タイプメソッドは契約に新しいデータを書き込むか、契約内の既存のデータを修正します。実行タイプは常に生のトランザクションを返し、クエリタイプとは異なります。

応答サンプル: クエリタイプ

{
  "code": 0,
  "message": "success",
  "data": "1000000000"
}

応答サンプル: 実行タイプ(encodedtrue

{
  "code": 0,
  "message": "success",
  "data": {
    "rawTx": "02f8738301388181c2846fc23ac0846fc23ad882cdc49494853bdc9c6add50d7...",
  }
}

応答サンプル: 実行タイプ(encodedfalse

{
  "code": 0,
  "message": "success",
  "data": {
    "rawTx": {
      "from": "0x9428e6eF51FEb2201676deEc11B7E36F7c1F0765",
      "to": "0x94853BdC9c6AdD50D7842D1A3117fab385457470",
      "data": "0xa9059cbb000000000000000000000000fbd488d1b00604d3b05124d80e35fea...",
      "nonce": 224,
      "chainId": 80001,
      "gas": 52676,
      "maxFeePerGas": 1575000048,
      "maxPriorityFeePerGas": 1575000000
    }
  }
}