このトピックでは、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.crt
、client.key
、client.crt
の 3 つの証明書ファイルが必要です。
契約ブロックチェーンで証明書を申請していない場合は、「無料クイックエクスペリエンス」チャプターのブロックチェーンへのアクセスの手順に従って、証明書関連のファイルを生成できます。
証明書ファイル | 説明 | ソース |
ca.crt | 契約ブロックチェーンでは、この証明書ファイルはサーバー認証に使用されます。 | この証明書ファイルは、BaaS プラットフォームでダウンロードできます。 |
client.key | RSA 秘密鍵。 | BaaS が提供する 鍵生成ツールを使用して、RSA 秘密鍵を生成できます。 |
client.crt | RSA 証明書。 | 鍵生成ツールを使用して、証明書申請ファイル |
契約ブロックチェーンアカウントの準備
契約ブロックチェーンでトランザクションを送信する場合は、ブロックチェーンに既に存在するアカウントを使用する必要があります。 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 プロトコルを使用する場合はサーバー名を参照します。 |
|
port | true | オープンブロックチェーンノードのポート番号。 数字のみである必要があります。 | 18130 |
clients | false | 複数のアドレス | [{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 進数の文字列です。 |
|
userPrivateKey | true | アカウントの秘密鍵。 キーは 16 進数の文字列です。 |
|
userRecoverPublicKey | true | アカウントのリカバリ公開鍵。 キーは 16 進数の文字列です。 |
|
userRecoverPrivateKey | true | アカウントのリカバリ秘密鍵。 キーは 16 進数の文字列です。 |
|
passphrase | true |
| 123abc |
checkServerIdentity | false | この構成項目は TLS 接続に使用され、ブール型です。 この構成は、サーバーホスト名のチェックを有効にするかどうかを決定します。 つまり、 | false |
tx_querycount | false | トランザクションを送信した後、 | 5 |
tx_querytime | false | トランザクションを送信した後、 | 200 |