仮想 Ubuntu 上で Symbol を動かして、ちょっとだけノードと通信してみましょう。
環境
前提とする環境は以下の通りです。
- Windows11
- WSL2 上の Ubuntu24
通信するために使用するのは以下の通りです。
- VSCode
- Node.js
- TypeScript
WSL2
Ubuntu の導入
以下を参考にしてください。
Symbol のビルド
以下を参考にしてください。
Symbol テストネットで起動
以下を参考にしてください。
Windows に TypeScript 環境構築
Node.js のインストール
好きな方法で各々インストールしてください。私は、環境管理が大変なのでVoltaを使用してインストールします。
winget install Volta.Volta
最新の LTS をインストールします。
volta install node
yarn もインストールします。
volta install yarn
TypeScript プロジェクトの作成
任意の場所にプロジェクト用のフォルダを作成します。作成したら VSCode で作成したフォルダを開きます。
これからのコマンド入力は VSCode のターミナルから行った方がスムーズに作業が進むと思います。
プロジェクトフォルダの初期化
yarn がnode_modulesフォルダを作成するようファイルを作成します。
echo "nodeLinker: node-modules" > .yarnrc.yml
プロジェクトフォルダを初期化します。
yarn init
念のためバージョンのピン留めもしておきます。
volta pin node
volta pin npm
volta pin yarn
パッケージのインストール
Symbol-SDK をインストールします。
yarn add symbol-sdk
開発用パッケージのインストール
開発時に使用するパッケージをインストールします。
yarn add -D typescript tsx eslint prettier eslint-config-prettier @types/node @typescript-eslint/eslint-plugin @typescript-eslint/parser
ESLint の設定
.eslintrc.jsonを作成&編集。
{
"extends": [
"plugin:@typescript-eslint/recommended",
"prettier"
]
}
Prettier の設定
.prettierrc.jsonを作成&編集。
{
"tabWidth": 2,
"printWidth": 80,
"trailingComma": "es5",
"semi": false,
"singleQuote": true
}
tsconfig.json の作成
tsconfig.jsonを作成&編集。
{
"compilerOptions": {
"declaration": true,
"module": "NodeNext",
"outDir": "dist",
"rootDir": "src",
"strict": true,
"target": "es2022",
"moduleResolution": "node16",
"composite": true
},
"include": [
"./src/**/*"
],
"ts-node": {
"esm": true
}
}
package.json の編集
package.jsonに"type": "module"を追加します。これにより、ES モジュールとして扱われるようになります。
{
"name": "symcomm",
"packageManager": "yarn@4.5.1",
"type": "module",
...
動作確認
確認のため簡単なコードを動かしてます。
import { Bip32 } from 'symbol-sdk'
import { Address, Network, SymbolFacade } from 'symbol-sdk/symbol'
// ニーモニック生成
const bip32 = new Bip32()
const mnemonic = bip32.random()
console.log(`mnemonic: ${mnemonic}`)
// faced生成
const facade = new SymbolFacade(Network.TESTNET)
// ニーモニックから10件アカウントを生成する
const bip32Node = bip32.fromMnemonic(mnemonic, '')
for (let i = 0; i < 10; i++) {
// Bip32Path生成
const bip32Path = facade.bip32Path(i)
// Bip32Pathから子孫Bip32Path生成
const childBip32Node = bip32Node.derivePath(bip32Path)
// 子孫Bip32Pathからキーペア生成
const keyPair = SymbolFacade.bip32NodeToKeyPair(childBip32Node)
// 公開鍵からアドレス生成
const address = new Address(
facade.network.publicKeyToAddress(keyPair.publicKey)
)
// 表示
console.log(
`[${i}]`,
`Addr:${address.toString()}`,
`PubK:${keyPair.publicKey.toString()}`,
`PriK:${keyPair.privateKey.toString()}`
)
}
実行します。
yarn tsx .\src\test.ts
ニーモニックと 10 件のアカウントが表示されれば OK です。
証明書の作成
SSL ソケット通信なので証明書が必要です。
作るのが少し面倒なのでsimple-symbol-node-cert-cliを使って作成します。
simple-symbol-node-cert-cliをインストールします。
npm install -g simple-symbol-node-cert-cli
新規に証明書を作成します。
ノードと証明書を同じにするために、ノード側にあるprivatekeys.yamlファイルをコピーして以下を実行します。
simple-symbol-node-cert-cli generate