JS SDK を使用すると、Node.js またはブラウザ環境からコントラクトブロックチェーンに接続し、トランザクションを送信し、オンチェーンデータをクエリできます。raw gRPC や HTTPS 呼び出しを自分で記述する必要はありません。
このガイドでは、SDK のインストール、必要な SSL 証明書とアカウント認証情報の準備、接続の初期化、およびライブブロッククエリによる接続の検証について説明します。
前提条件
開始する前に、以下をご確認ください:
v10 以上 v16 未満の Node.js — nodejs.org からダウンロードしてください
BaaS (Blockchain as a Service) プラットフォーム上のコントラクトブロックチェーンインスタンス
JS SDK パッケージ(
alipay-mychain-0.2.27.tgz)— ダウンロード手順については、「JS SDK の概要」をご参照ください。
ステップ 1: SDK のインストール
プロジェクトディレクトリで、以下を実行します:
npm i alipay-mychain-0.2.27.tgz --saveステップ 2: SSL 証明書の準備
ブロックチェーンノードへの TLS 接続を確立するには、3 つの証明書ファイルが必要です。
| ファイル | 目的 | 入手方法 |
|---|---|---|
ca.crt | サーバー認証用のルート証明書 | BaaS プラットフォームからダウンロード |
client.key | クライアント用の RSA 秘密鍵 | BaaS 鍵生成ツール |
client.crt | RSA クライアント証明書と、ペアのclient.key | 鍵生成ツールを使用して client.csr を生成し、BaaS プラットフォームに送信してから、承認された証明書をダウンロード |
まだ証明書を申請していない場合は、無料クイックエクスペリエンスの[ブロックチェーンへのアクセス]セクションに従って、3つすべてのファイルを生成してください。
ステップ 3: ブロックチェーンアカウントの準備
コントラクトブロックチェーン上の各トランザクションは、既存のアカウントによって署名される必要があります。SDK には、アカウントのアカウント名とその秘密鍵ファイルが必要です。
BaaS プラットフォームでアカウントを作成します。アカウント作成時に、アカウント名、公開鍵、および回復用公開鍵を指定します。user.key ファイルはアカウントの公開鍵に対応し、秘密鍵ファイルとして機能します。
SDK が読み取れるように、user.key を PEM 形式に変換します:
openssl ec -in user.key -passin pass:${key_password} -passout pass:${key_password} -aes256 -out user.pem${key_password} をご利用の秘密鍵のパスワードに置き換えてください。
user.pem と client.key は安全に保管してください。秘密鍵ファイルをバージョン管理にコミットしたり、ログで共有したりしないでください。
ステップ 4: 接続と検証
次の例では、ブロックチェーンへの接続を初期化し、QueryLastBlock を呼び出して接続が機能していることを確認します。
const Chain = require("@alipay/mychain/index.node") // Node.js 環境
const fs = require("fs")
// アカウントの秘密鍵をロード
const accountKey = fs.readFileSync("./certs/user.pem", { encoding: "utf8" })
const accountPassword = "<your-pem-password>" // user.pem のパスワードに置き換えてください
const keyInfo = Chain.utils.getKeyInfo(accountKey, accountPassword)
// keyInfo.privateKey と keyInfo.publicKey は 16 進数文字列です
// SSL 証明書をロードして接続を構成
const passphrase = "<your-client-key-password>" // client.key のパスワードに置き換えてください
const opt = {
host: "<node-ip>", // ターゲットブロックチェーンノードの 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)
// 最新ブロックをクエリして接続を検証
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)
})実行する前に、次のプレースホルダーを置き換えてください:
| プレースホルダー | 説明 | 例 |
|---|---|---|
<your-pem-password> | user.key | 123abc |
<your-client-key-password> | client.key | 123abc |
<node-ip> | ブロックチェーンノードの IP アドレス | 127.0.0.1 |
成功した場合の応答は次のようになります:
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フィールドが含まれます。値が0の場合は呼び出しが成功したことを意味し、それ以外の値はエラーコードです。トランザクションレシートのresultフィールドも同様に機能します。詳細については、「エラーコード」をご参照ください。
SDK リファレンス
環境別のインポート
// Node.js 環境 (TLS プロトコル)
const Chain = require("@alipay/mychain/index.node")
// ブラウザ環境
const Chain = require("@alipay/mychain")設定オプション
特に記載がない限り、すべての設定値は文字列です。
| オプション | 必須 | 説明 | 例 |
|---|---|---|---|
host | はい | ブロックチェーンノードの IP アドレス (TLS) またはサーバー名 (HTTPS) | 127.0.0.1、https://www.alipay.com または https://127.0.0.1 |
port | はい | ブロックチェーンノードのポート番号 (数字のみ) | 18130 |
clients | いいえ | {host, port} オブジェクトとしてバックアップノードの配列。設定されている場合、host と port は必須ではありません。プライマリノードが利用不可の場合、SDK はバックアップノードに切り替わります。 | [{host:'127.0.0.1',port:18130},{host:'127.0.0.2',port:18130}] |
timeout | はい | 接続タイムアウト (ミリ秒) | 30000 |
ca | はい | コントラクトブロックチェーンのルート証明書 | BaaS プラットフォームから取得 |
cert | はい | クライアント証明書ファイル | BaaS プラットフォームから取得 |
key | はい | 証明書申請のための証明書リクエストファイルを生成するために使用されるクライアント秘密鍵ファイル | 鍵生成ツールを使用して生成 |
userPublicKey | はい | アカウント公開鍵 (16 進数文字列) | 0x971c77d3... |
userPrivateKey | はい | アカウント秘密鍵 (16 進数文字列) | 0x4015e396... |
userRecoverPublicKey | はい | アカウント回復用公開鍵 (16 進数文字列) | 0xb961f6a1... |
userRecoverPrivateKey | はい | アカウント回復用秘密鍵 (16 進数文字列) | 0x44a973e5... |
passphrase | はい | client.key のパスワード。TLS または HTTPS 接続に使用されます。 | 123abc |
checkServerIdentity | いいえ | ブール値。true の場合、サーバーの CN フィールドがそのホスト名と一致することを検証します (TLS のみ)。デフォルト: false。 | false |
tx_querycount | いいえ | トランザクション送信後に QueryTransactionReceipt をポーリングする際の再試行回数。デフォルト: 3。 | 5 |
tx_querytime | いいえ | QueryTransactionReceipt のポーリング間隔 (ミリ秒)。デフォルト: 3000。 | 200 |
次のステップ
最初のトランザクションを送信する — 利用可能な操作については、JS SDK API リファレンスをご参照ください
エラーを処理する —
return_codeの値とその意味の完全なリストについては、「エラーコード」をご確認くださいSDK の全機能を確認する — 高度な使用方法とサポートされているすべての操作については、「JS SDK の概要」をご参照ください。