IONをBitcoin Testnet上で動かす
本稿はDIDの一実装であるIONをBitcoin Testnet上で動かしたメモである。 ION/Sidetree/IPFS共に実装がそれぞれまだ変更が激しく、本稿の記述は2022.01.11時点の内容である。
構築環境
構築手順
1. Bitcoinのインストール/テストネットのセットアップ
- Bitcoinのインストール
- https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.md
- IONの公式では
v0.18.0
で動かしているが、ここではv22.0
で動かした
bitcoin.conf
の作成~/.bitcoin/bitcoin.conf
に以下を作成rpcpassword
には任意の値を設定するtestnet=1 server=1 rpcuser=admin rpcpassword={任意の値} txindex=1
- Bitcoinをtestnetで起動
- ブロックの同期がスタートする
- 数時間で完了
- 本稿執筆現在で30GB程度
bitcoind -testnet
同期の終了を確認するには以下のコマンドで
blocks
とheaders
の値を確認するbitcoin-cli -testnet getblockchaininfo
- ブロックの同期がスタートする
- ION用の鍵の生成
walletの生成
bitcoin-cli -testnet createwallet default
アドレスの生成
bitcoin-cli -testnet getnewaddress
鍵の確認
bitcoin-cli -testnet dumpprivkey <getnewaddressで生成したaddress>
2. IONのインストール
- 依存関係
- IPFS
- https://docs.ipfs.io/install/command-line/#official-distributions
- NOTE: go-ipfsの最新版(v0.11.0)ではIONから書き込みが正常に行えなかったため、ION v1.0.3リリース当時の最新版 go-ipfs v0.9.1をインストールする
インストール
wget https://ipfs.io/ipns/dist.ipfs.io/go-ipfs/v0.9.1/go-ipfs_v0.9.1_linux-amd64.tar.gz
tar -xvzf go-ipfs_v0.9.1_linux-amd64.tar.gz
cd go-ipfs sudo bash install.sh
- インストールの確認
ipfs --version
IPFSの初期化
ipfs init
起動
ipfs daemon
- MongoDB
- https://docs.mongodb.com/v4.4/tutorial/install-mongodb-on-debian/
- 最新版はv5.0だが、ESXi上のdebian10では起動しなかったためv4.4をインストール
- node
- nodenvでインストール
- IPFS
- ION本体
リポジトリのクローンと
v1.0.3
へのチェックアウトgit clone https://github.com/decentralized-identity/ion git checkout refs/tags/v1.0.3
ionの設定ファイルの記述
- テンプレートは
json
ディレクトリにあるので、任意のフォルダに移動する - ここでは
~/.ion
中に配置する testnet-bitcoin-config.json
{ "bitcoinDataDirectory": "[FILL THIS IN!]", "bitcoinFeeSpendingCutoffPeriodInBlocks": 1, "bitcoinFeeSpendingCutoff": 0.001, "bitcoinPeerUri": "http://localhost:18332", "bitcoinRpcUsername": "", "bitcoinRpcPassword": "", "bitcoinWalletOrImportString": "[FILL THIS IN!]", "databaseName": "ion-testnet-bitcoin", "genesisBlockNumber": 1900000, "logRequestError": true, "mongoDbConnectionString": "mongodb://localhost:27017/", "port": 3002, "sidetreeTransactionFeeMarkupPercentage": 1, "sidetreeTransactionPrefix": "ion:", "transactionPollPeriodInSeconds": 60, "valueTimeLockUpdateEnabled": false, "valueTimeLockAmountInBitcoins": 0, "valueTimeLockPollPeriodInSeconds": 600, "valueTimeLockTransactionFeesAmountInBitcoins": 0.0001 }
- テンプレートは
IONのビルド
npm i npm run build
設定ファイルを読み込むための環境変数の設定
export ION_BITCOIN_CONFIG_FILE_PATH=~/.ion/testnet-bitcoin-config.json export ION_BITCOIN_VERSIONING_CONFIG_FILE_PATH=~/.ion/testnet-bitcoin-versioning.json
- IONのBitcoin Serviceの起動
- Blockchainを全てチェックするため、時間がかかる
npm run bitcoin
- IONのCore Serviceの起動
- Bitcoin Serviceで発見されたDIDとIPFS上の情報を照合するので、こちらも時間がかかる
npm run core
3. 確認
- curlでresolve可能なことを確認する
- ここでresolveできるDIDはIONのドキュメント上でバージョンごとに異なるようなので注意
Core Serviceの起動してからしばらくしないとresolveできるようにならない
curl http://localhost:3000/identifiers/did:ion:test:EiClWZ1MnE8PHjH6y4e4nCKgtKnI1DK1foZiP61I86b6pw
4. DIDの作成とresolve
IONのコマンドラインツールを使って新規にDIDを作成する。
- Testnet Bitcoinの入手
- ION CLIのインストール
npm install -g .
- DID作成のためのPayloadの作成
- 実行したディレクトリに
{DID}-RecoveryPrivateKey.json
と{DID}-SigningPrivateKey.json
が作成される
npx ion operation create
- 実行したディレクトリに
- ペイロードを以下のエンドポイントにPOST