自作仮想通貨入門(5) - 単純な文字列置換
この章からいよいよLitecoinのソースコードに修正を加えていきます。
この章ではソースコードおよび関連ドキュメントに含まれるLitecoin関連の文字列を自作仮想通貨の通貨名に変更します。
この時点でLitecoinのどの名称を自分の仮想通貨の名称に変えるかを決めておきましょう。
また、待ち受けるサーバのポート番号についてもこの章で変更するので、ポート番号についても決めていきます。
ノード待受ポート番号については有名どころの仮想通貨およびその他サーバと被らないように設定しましょう。
RPC接続の待受ポート番号は一般的に自分自身で使うためものでありconfで変えられるので、最悪他の仮想通貨と被っても大丈夫です。
下記にLitecoinとRaccoinの比較表を記載しているので、Raccoinの表記を自分の仮想通貨の表記に置き換えて作業をしてください。
LitecoinとRaccoinの名称比較表
Litecoin | Raccoin | |
---|---|---|
正式名称 | Litecoin | Raccoin |
大文字名称 | LITECOIN | RACCOIN |
大文字略称 | LTC | XRI |
小文字名称 | litecoin | raccoin |
小文字略称 | ltc | xri |
1000分の1コイン | lites | mXRI |
100万分の1コイン | photon | uXRI |
LitecoinとRaccoinのP2P待受ポート番号比較表
Litecoin | Raccoin | |
---|---|---|
Mainnet | 9333/tcp | 8883/tcp |
Testnet | 19335/tcp | 19883/tcp |
Regtest | 19444/tcp | 20888/tcp |
LitecoinとRaccinのRPCポート番号比較表
Litecoin | Raccoin | |
---|---|---|
Mainnet | 9332/tcp | 8882/tcp |
Testnet | 19332/tcp | 19880/tcp |
Regtest | 19443/tcp | 20887/tcp |
文字列置換
実際にソースコードを修正していきます。 git cloneを使ってLitecoinをクローンしたため、単純にgrepを用いたファイル検索・置換を行うと.gitディレクトリ内の書き換えも発生してしまいます。 これを防ぐため、基本的にgitのls-filesサブコマンドを用いて置換を行っていきます。
正式名称の書き換え
$ git ls-files -z | xargs -0 sed -i '' -e 's/Litecoin/Raccoin/g'
大文字略称の書き換え
$ git ls-files -z | xargs -0 sed -i '' -e 's/LITECOIN/RACCOIN/g'
小文字略称の書き換え
gitコマンドではなく、ファイルを指定して置換を行います。
$ cat <<EOF|tr -d ''|tr '\n' '\0'| xargs -0 sed -i '' -e 's/ltc/xri/g'
./contrib/gitian-build.sh
./doc/release-process.md
./src/chainparams.cpp
./test/functional/test_framework/address.py
./test/functional/wallet_bumpfee.py
EOF
コラム:小文字略称の罠
小文字略称で単純な文字列検索・置換をすると意図しない置換が行われます。 具体的には下記ファイルで意図しない置換が行われることを確認しました。
./contrib/gitian-keys/petertodd-key.pgp
./src/leveldb/build_detect_platform
./src/test/data/base58_keys_valid.json
./test/util/data/txcreatemultisig3.json
./test/util/data/txcreateoutpubkey2.json
./test/util/data/txcreateoutpubkey2.json
petertodd-key.pgpファイルに至っては大変な置換が起きます・・・。
-emJqiaQez9pd/5BYtOSG8vLZpAxXfnOgDH/YK6u9WdoX7/RgTAltcoGazmyJHZHj
+emJqiaQez9pd/5BYtOSG8vLZpAxXfnOgDH/YK6u9WdoX7/RgTAxrioGazmyJHZHj
通貨単位の書き換え
Litecoinの基本通貨単位「LTC」に関しては単純な文字列置換で既に XRI に変更していますが、小数点以下の通貨も名称がつけられているので変更します。
$ sed -i '' -e 's/lites/mXRI/g' ./src/qt/bitcoinunits.cpp
$ sed -i '' -e 's/Lites/mXRI/g' ./src/qt/bitcoinunits.cpp
$ sed -i '' -e 's/photons/uXRI/g' ./src/qt/bitcoinunits.cpp
$ sed -i '' -e 's/Photons/uXRI/g' ./src/qt/bitcoinunits.cpp
ポート番号の書き換え
$ git ls-files | grep -v "doc/release-notes/release-notes-0.15.0.md" | tr '\n' '\0'| xargs -0 sed -i '' -e 's/9333/8883/g'
$ git ls-files | grep -v "src/qt/res/src/network_disabled.svg" | tr '\n' '\0' | xargs -0 sed -i '' -e 's/19335/19883/g'
$ git ls-files -z | xargs -0 sed -i '' -e 's/19444/20888/g'
$ git ls-files -z | xargs -0 sed -i '' -e 's/9332/8882/g'
$ git ls-files -z | xargs -0 sed -i '' -e 's/19332/19880/g'
$ git ls-files -z | xargs -0 sed -i '' -e 's/19443/20887/g'
「9333」と「19335」は 特定のファイルで意図しない部分で偶然一致してしまうので、該当ファイルを除外して置き換えています。
ファイル名の変更
litecoin がファイル名に含まれるものは、manのファイル名とGUIの起動時のスプラッシュ画像です。 renameコマンドはOSやバージョンによって全く挙動が異なるため、念のためmvコマンドで変更します。
$ cd ./doc/man/
$ mv litecoin-cli.1 raccoin-cli.1
$ mv litecoin-qt.1 raccoin-qt.1
$ mv litecoin-tx.1 raccoin-tx.1
$ mv litecoind.1 raccoind.1
$ cd ../../
$ mv ./src/qt/res/icons/litecoin_splash.png ./src/qt/res/icons/raccoin_splash.png
誤った名称変更の再修正
単純な文字列置換では本来変更すべきではない箇所まで変更してしまいます。 例として、下記のようなLitecoinの開発チームが開設したコミュニティやサービスがあります。
-
litecoin.org
ブランドサイト -
www.litecoinpool.org
採掘プール -
litecoin.info
Wiki -
https://travis-ci.org/litecoin-project/
ソースコードのテストサービス -
https://github.com/litecoin-project/
git@github.com:litecoin-project/litecoin.git
Litecoinのgithub -
https://groups.google.com/forum/#!forum/litecoin-dev
Googleグループ -
https://github.com/pooler/litecoin-seeder
DNSSeed のリスト
また、以下の著作権表示も該当します。
Copyright (C) 2011-2018 The Litecoin Core developers
これらのうち、コミュニティやサービスがリンク切れを起こすものに関しては大きな問題にはならないこと、またこの段階で様々なコミュニティを開設するのは自作仮想通貨を作るうえでは完全に蛇足であることから、ここでの修正はしません。 ただし、著作権表示については誤った表示のままだとソースコードのパクリと勘違いされるため、正しい記載に修正する必要があります。 以下のコマンドを実行し、著作権表示を修正します。
著作権表示の修正
$ git ls-files -z | xargs -0 sed -i '' -e 's/The Raccoin Core developers/The Litecoin Core developers/g'
ここまででソースコードの単純な置換は終了です。
次の章からは置換だけでは終わらない、ビットコインのよりディープな部分を解説しながら変更していきます。