仮想 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