chike0905の日記

何者かになりたい

IONをBitcoin Testnet上で動かす

本稿はDIDの一実装であるIONをBitcoin Testnet上で動かしたメモである。 ION/Sidetree/IPFS共に実装がそれぞれまだ変更が激しく、本稿の記述は2022.01.11時点の内容である。

構築環境

  • Debian 10
  • Bitcoin Core v22.0
  • ION v1.0.3
    • node v14.18.2
    • ipfs v0.9.1
    • MongoDB v4.4.11

構築手順

1. Bitcoinのインストール/テストネットのセットアップ

  • Bitcoinのインストール
  • bitcoin.conf の作成
    • ~/.bitcoin/bitcoin.conf に以下を作成
    • rpcpassword には任意の値を設定する

      testnet=1
      server=1
      rpcuser=admin
      rpcpassword={任意の値}
      txindex=1
      
  • Bitcoinをtestnetで起動
    • ブロックの同期がスタートする
      • 数時間で完了
      • 本稿執筆現在で30GB程度
      bitcoind -testnet
      
    • 同期の終了を確認するには以下のコマンドで blocksheaders の値を確認する

      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
    • node
      • nodenvでインストール
  • 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: testnetなので/home/username/.bitcoin/testnet3
        • bitcoinWalletOrImportString: 先ほど生成した秘密鍵
        • bitcoinRpcUsername: ~/.bitcoin/bitcoin.confに設定した値
        • bitcoinRpcPassword: ~/.bitcoin/bitcoin.confに設定した値
      {
        "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を作成する。

参考