すべてのプロダクト
Search
ドキュメントセンター

Blockchain as a Service:JS SDKクイックスタート

最終更新日:Jan 19, 2025

このトピックでは、JS SDKの使用方法を例を挙げて説明します。

環境

SDK のインストール

  • Node.js 公式 Web サイトから Node.js をダウンロードしてインストールします。 v10 以上 v16 未満のバージョンを使用することをお勧めします。

  • JS SDK をインストールします。 ダウンロード手順に従って、JS SDK をプロジェクトディレクトリにダウンロードし、そのディレクトリにインストールできます。

      npm i alipay-mychain-0.2.27.tgz --save

SSL 接続用のファイルの準備

SSL 接続を構築するには、ca.crtclient.keyclient.crt の 3 つの証明書ファイルが必要です。

契約ブロックチェーンで証明書を申請していない場合は、「無料クイックエクスペリエンス」チャプターのブロックチェーンへのアクセスの手順に従って、証明書関連のファイルを生成できます。

証明書ファイル

説明

ソース

ca.crt

契約ブロックチェーンでは、この証明書ファイルはサーバー認証に使用されます。

この証明書ファイルは、BaaS プラットフォームでダウンロードできます。

client.key

RSA 秘密鍵。

BaaS が提供する 鍵生成ツールを使用して、RSA 秘密鍵を生成できます。

client.crt

RSA 証明書。 client.key ファイルと対になっています。

鍵生成ツールを使用して、証明書申請ファイル client.csr を生成できます。 申請ファイルを BaaS プラットフォームに提出します。 申請が承認された後、証明書をダウンロードできます。

契約ブロックチェーンアカウントの準備

契約ブロックチェーンでトランザクションを送信する場合は、ブロックチェーンに既に存在するアカウントを使用する必要があります。 JS SDK では、アカウントのアカウント名秘密鍵ファイルが必要です。

BaaS プラットフォームでアカウントの作成を申請できます。 証明書を申請するには (ブロックチェーンへのアクセスの章の手順に従ってください)、アカウントの名前、公開鍵、およびリカバリ公開鍵を指定する必要があります。 アカウント公開鍵に対応する user.key ファイルは、アカウントの秘密鍵ファイルです。 この秘密鍵ファイルを JS SDK で簡単に使用できるように変換します。

openssl ec -in user.key -passin pass:${key_password} -passout pass:${key_password} -aes256 -out user.pem

: ${key_password} を秘密鍵のパスワードに置き換えます。

JS SDK の使用

既存のインスタンス chain を使用してブロックチェーンに接続します。 QueryLastBlock 操作を呼び出して、このインスタンスとブロックチェーン間の接続を確認できます。

const Chain = require("@alipay/mychain/index.node") //ノード環境で TLS プロトコルを使用する
const fs = require("fs")

const accountKey = fs.readFileSync("./certs/user.pem", { encoding: "utf8" })
const accountPassword = "123abc"  // ユーザー定義の user.pem パスワードに置き換える

const keyInfo = Chain.utils.getKeyInfo(accountKey, accountPassword)
//秘密鍵と公開鍵は 16 進数の文字列であり、出力できる
//console.log('private key:', keyInfo.privateKey.toString('hex'))
//console.log('public key:', keyInfo.publicKey.toString('hex'))

const passphrase = "123abc" //ユーザー定義の client.key パスワードに置き換える
//構成オプション
let opt = {
  host: '127.0.0.1',    //ターゲットブロックチェーンノードの IP
  port: 18130,          //ポート番号
  timeout: 30000,       //接続タイムアウトの時間構成
  cert: fs.readFileSync("./certs/client.crt", { encoding: "utf8" }),
  ca: fs.readFileSync("./certs/ca.crt", { encoding: "utf8" }),
  key: fs.readFileSync("./certs/client.key", { encoding: "utf8" }),
  userPublicKey: keyInfo.publicKey,
  userPrivateKey: keyInfo.privateKey,
  userRecoverPublicKey: keyInfo.publicKey,
  userRecoverPrivateKey: keyInfo.privateKey,
  passphrase: passphrase
}

//接続インスタンスを初期化する
const chain = Chain(opt)

//QueryLastBlock 操作を呼び出して、最後のブロックをクエリする
chain.ctr.QueryLastBlock({}, (err, data) => {
  console.log('raw data:', data)                                     //ブロック構造データ
  console.log('block hash:', data.block.block_header.hash)             //ブロックハッシュ
  console.log('block number:', data.block.block_header.block_number) //ブロックの高さ
})

成功した結果の例:

raw data: { msg_type: 58,
  sequence: 1,
  return_code: 0,
  group_id: '0x0000000000000000000000000000000000000000',
  block:
   { block_header:
      { hash:
         '0xe99d8958a45e8c87a7b10efc259828f06fe083995be52997f5d310f2b6d073a6',
        version: 2,
        block_number: 84265,
        parent_hash:
         '0x918b263a8e6c6fff594b89570970ef4bef24cf93aeed5347f7b250b070857c4b',
        transaction_root:
         '0x0000000000000000000000000000000000000000000000000000000000000000',
        receipt_root:
         '0x0000000000000000000000000000000000000000000000000000000000000000',
        state_root:
         '0x9f71cb9ce960e5637bad6da5be8daa2d7e557942208f241a60589b2de98e6c71',
        gas_used: 0,
        timestamp: 1547382477852,
        log_bloom:
         '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' },
     block_body:
      { transaction_list: [],
        receipt_list: [],
        consensus_proof:
         '0xf8f2f8c9b8419746989382c1613c6c3ce98bf79ac92a8d69952c22f4064194869c53b4075d517cfc98eda861212687e49b186c08d196770bd356762fa2a88d0288c0556f271a01b84138a97446a75c76a31d24880c343407bd7bc24608685c494240ac603cad62201a01a423718661b24e517ee6f6b2fee6d356b57833305860700cca81b0238f870400b841eaf508392d9098a3e7fb46f6f7aa4b53311e5a0d13e300d02025af7453ea130a6c27407c1da254578cae80ed498d4807587883f837c1716b0be8ae02cf955d6000e61e83014929a0e200d8bee723d820022d5c5a1f8fe6b521c0a4fff0b5ec03a7c6061276d68b58' } },
  api: 'QueryLastBlock' }
block hash: 0xe99d8958a45e8c87a7b10efc259828f06fe083995be52997f5d310f2b6d073a6
block number: 84265

:

結果の例には、return_code フィールドが含まれています。 return_code フィールドの値が 0 の場合、呼び出しは成功です。それ以外の場合は、呼び出しが失敗したことを示すエラーコードです。 トランザクションレシートの result フィールドも同じように機能します。 エラーコードの詳細については、「エラーコード」をご参照ください。

JS SDK リファレンス

JS SDK は、環境によって参照方法が異なります。

  • ノード環境:

    const Chain = require("@alipay/mychain/index.node")
  • Web 環境:

    const Chain = require("@alipay/mychain")

構成項目

ブロックチェーンに接続されたインスタンスを初期化する前に、構成を変更できます。 各構成項目について、以下に説明します。

: デフォルトでは、構成項目のデータ型は文字列です。

構成項目

必須

説明

サンプル値

host

true

ブロックチェーンノードの IP アドレスまたはサーバー名。 TLS プロトコルを使用する場合は IP アドレスを、HTTPS プロトコルを使用する場合はサーバー名を参照します。

127.0.0.1https://www.alipay.com または https://127.0.0.1

port

true

オープンブロックチェーンノードのポート番号。 数字のみである必要があります。

18130

clients

false

複数のアドレス host:port をバックアップとして指定できます。 プライマリノードに接続の問題が発生した場合、SDK はリスト内の他のノードに切り替えて再接続します。 このパラメータを構成する場合は、host パラメータと port パラメータを設定する必要はありません。

[{host:’127.0.0.1’,port:18130},

{host:’127.0.0.2’,port:18130}]

timeout

true

接続タイムアウトの時間構成。 単位はミリ秒です。

30000

ca

true

ターゲット契約ブロックチェーンのルート証明書。

BaaS プラットフォームで証明書を申請できます。

BaaS プラットフォームで証明書を申請できます。 詳細については、「無料クイックエクスペリエンス」をご参照ください。

cert

true

クライアント証明書ファイル。

BaaS プラットフォームで証明書を申請できます。

BaaS プラットフォームで証明書を申請できます。 詳細については、「無料クイックエクスペリエンス」をご参照ください。

key

true

クライアントによって生成された秘密鍵ファイル。 証明書申請用の証明書リクエストファイルを生成するために使用されます。

キー生成ツールを使用して、証明書申請ファイルを生成できます。

詳細については、「無料クイック体験」をご参照ください。

userPublicKey

true

アカウントの公開鍵。 キーは 16 進数の文字列です。

0x971c77d38bf220572fe8294d7884b184adeeb9bac4d61c1b3e1e924575e526152145763eaba40c8713c82cc2961fba98f71c8b93984d4e3d10b2ff53ea039551

userPrivateKey

true

アカウントの秘密鍵。 キーは 16 進数の文字列です。

0x4015e39643765014b874dbd35a53f1a01418c66f7c47da35f3a84122c743d9a3

userRecoverPublicKey

true

アカウントのリカバリ公開鍵。 キーは 16 進数の文字列です。

0xb961f6a1a43b9e7aa368be8d093ed7bec2d0ff85ff7646ec968d86bd546151efbd037cfe09933684b5c98978a1593074cdff465de3a3620089f5634911bf7b2e

userRecoverPrivateKey

true

アカウントのリカバリ秘密鍵。 キーは 16 進数の文字列です。

0x44a973e5286f1d3513561360bb0214235425b942a4649c7d371f780ca1ee0e80

passphrase

true

client.key ファイルのユーザー定義パスワード。 このパスワードは、TLS または HTTPS 接続に使用されます。

123abc

checkServerIdentity

false

この構成項目は TLS 接続に使用され、ブール型です。 この構成は、サーバーホスト名のチェックを有効にするかどうかを決定します。 つまり、CN フィールドがホスト名と一致するかどうかを確認します。 デフォルト値は false です。

false

tx_querycount

false

トランザクションを送信した後、QueryTransactionReceipt 操作を呼び出してレシートをクエリできます。 この構成項目では、再試行回数を設定できます。 再試行回数は数値で、デフォルト値は 3 です。

5

tx_querytime

false

トランザクションを送信した後、QueryTransactionReceipt 操作を呼び出してレシートをクエリできます。 この構成項目では、時間間隔を設定できます。 時間間隔は数値で、デフォルト値は 3,000 ミリ秒です。

200