
カスタムsignet Bitcoinの立て方
※この記事を書いた時の実行環境はUbuntu 20.04(x86-64)、Bitcoin Core v23.0
元ネタはここ
参考にしたのはここ
これらを参考にカスタムsignet(評価用ビットコイン)を立てる。
これを使わなくてもsignetを始められる。その場合はデフォルトsignet(グローバルsignetとも呼称)となる。faucetもある。
自分でカスタムsignetができれば承認時間も1block10分より短くできるし、自分がマイナーになるのでfaucetも不要。
1.Bitcoin Coreおよびカスタムsignet用マイニングソフトを用意する
Bitcoin Coreは普通にバイナリ版をダウンロードしてくれば良い。
ソースからビルドしてもいいけど。
カスタムsignet用マイニングソフトはbitcoin coreのソース一式に同梱される。
なのでgit cloneしてくればいい。
mkdir src
cd src
git clone https://github.com/bitcoin/bitcoin.git
contrib/signet/minerというパイソンスクリプトとtest/ディレクトリ一式があれば他は無くても動くっぽい。
2.signetchallengeで使用する公開鍵、およびその秘密鍵とビットコインアドレスを用意する
詳しくはここを見よ。
とりあえず公開鍵とその秘密鍵が必要。
ここで作るのが手っ取り早い。mainnet用に作るのは絶対NGだが評価用なのでそこはご愛嬌。
Coin種別を「BTC - Bitcoin Reg test」にしてニーモニック生成。
下の方をみると公開鍵など一式表示される。コピペしておく。
3.カスタムsignet用Bitcoin Coreを立ち上げる
bitcoindやbitcoin-cli、bitcoin-qtがあるディレクトリへパスを通す。
ホームディレクトリに.bitcoinというディレクトリを作り、さらにsignetというディレクトリを作る。そこにbitcoin.confファイルを作る。
そのbitcoin.confファイルを以下のように編集する。
signet=1
[signet]
listen=1
server=1
rpcuser=bitcoiner
rpcpassword=donttrustverify
rpcport =38332
rpcbind =0.0.0.0
# 51,21,<pub_key>,51,ae
signetchallenge=5121xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx51ae
上記コメントの通りxxxxの箇所には先程作った公開鍵に置き換えること。
出来たら以下コマンドでBitcoin Coreを起動する。QTつまりGUI版となる。(CUI版はとっつきづらいんだもん)
bitcoin-qt -conf=$HOME/.bitcoin/signet/bitcoin.conf
起動したらウォレットを作る。Descripterのチェックは外す。メニューのウィンドウ→コンソールを選ぶ。importprivkeyでさっき作った秘密鍵をインポートする。
importprivkey <秘密鍵>
メインウィンドウに戻り、受取ボタンを押してマイニングしたコインの受取用アドレスを作る。Base58(Legacy)でも良いしBech32(Segwit)でも良い。
4.カスタムsignetでマイニングする
先程githubからクローンしたcontrib/signetディレクトリに移動する。以下のコマンドを実行して採掘難易度を算出する。--seconds ?? で指定秒間隔となるように難易度を計算させる。
./miner \
--cli="bitcoin-cli -datadir=$HOME/.bitcoin/signet" \
calibrate \
--grind-cmd="bitcoin-util grind" \
--seconds 30
上記例だと30秒間隔となる難易度(正確にはbits)を算出させたが、実際にやってみると2分30秒だった。微調整は・・がんばれ
以下のコマンドでマイニングを始める。
まずはジェネシスブロックを作る。
./miner \
--cli="bitcoin-cli -datadir=$HOME/.bitcoin/signet" \
generate \
--address <受取アドレス> \
--grind-cmd="bitcoin-util grind" \
--nbits=<さっき算出した難易度> \
--set-block-time=$(date +%s)
--set-block-time=$(date +%s)でジェネシスブロックのタイムがこのコマンド実行した時になる。date -d '-1 month' +%sとやると現時刻から1ヶ月前にすることができる。
継続的にマイニングさせたいなら以下コマンド
./miner \
--cli="bitcoin-cli -datadir=$HOME/.bitcoin/signet" \
generate \
--address <受取アドレス> \
--grind-cmd="bitcoin-util grind" \
--nbits=<さっき算出した難易度> \
--ongoing
仮に1ヶ月前をジェネシスブロックの時刻とすると、現時刻まで追いつくのにCPUパワーをフルに使ってマイニングするので注意!追いつくとほぼアイドリング状態まで落ち着く。マイニングしたコインは100ブロック経過すれば利用可能になる。承認間隔にも依るが1週間前でも十分かもしれない。
【メモ】
$HOME/.bitcoin/signet ディレクトリにブロックチェーンやウォレットのデータ一式がある。
今作ったブロックチェーンが気に入らないならbitcoin.conf以外のデータを削除し、上記手順の秘密鍵のインポートからやればよい。