Testnet 参加方法
====
PyContractのTestnetへの参加方法を説明します。
ただ今、**close alpha**です。
Testtnetは頻繁に仕様変更が行われ新規作成される事が予想されます。
参加に制限はありません。
Testnet
----
branch [develop](https://github.com/namuyan/bc4py/tree/develop)
boot.json [text](https://pastebin.com/UeRRqNmZ)
Install
----
Ubuntu18.04, CentOS7, Raspberian or Windows10がインストールされたPCを用意します。慣れていない場合はUbuntu18.04が最も簡単なので選択してください。環境はローカルであれVPSであれポート開放を推奨します。
既に**前準備で必要ライブラリをインストールし、Python3を導入し、Userを作成しログインしたもの**とします。
#### 1.
```bash
mkdir blockchain-py && cd blockchain-py
wget -O boot.json https://pastebin.com/raw/UeRRqNmZ
git clone -b develop https://github.com/namuyan/bc4py
rm -rf bc4py/tests bc4py/doc && mv bc4py tmp && mv tmp/* . && rm -rf tmp
```
必要なファイルをDLします。
#### 2.
```bash
# for Linux
curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly
cargo -V # cargo X.XX.X-nightly
```
Rustの**nightly(特別な開発版)** インストールします。
~~対話型コンソールが開きコマンドを入力していきます。~~ 引数を与える事でコマンドを入力して操作する必要は無くなりました。
オプションを変更しないとstable(安定版)が勝手にインストールされますので**注意**して下さい。
完了しましたら`cargo -V`にてversionを確認して下さい。
もしもコマンドが効かない場合、変更を反映させる為、一度コンソールを閉じてまた開きます。
#### 3.
pipをインストールします。
`pip3 -V` によりpipの存在を確認します。
pipの存在を確認できる場合、`sudo pip3 install --upgrade pip`によりpipをUpgradeして下さい。pipの存在を確認できない場合、`curl -kL https://bootstrap.pypa.io/get-pip.py | python3`により新規にインストールし、そのあとに**忘れず**にpipをupgradeして下さい。
もしも`ImportError: cannnot import name 'main'`と出る場合、[こちらのブログ](https://laboradian.com/cannot-import-name-main-when-upgrading-pip/)をご覧下さい。
#### 4.
次に先ほど作成した**blockchain-py**フォルダへ移動します。
必要なPythonライブラリをインストールします。
```bash
pip3 install --user wheel
pip3 install --user setuptools
pip3 install --user setuptools-rust
apt-get install python3-dev
apt-get install libgmp3-dev
apt-get install libssl-dev
pip3 install --user -r requirements.txt
pip3 install --user -r requirements-c.txt
```
*requirements-c.txt* こちらのファイルにはコンパイルが必要になるものをリストしてあります。
*前準備* にて必要なコンパイラーソフトをインストールしておいてください。
PEP517のエラーが出る場合はnoteを参照して下さい。
#### 5.
```bash
screen -S p2p
python3 publicnode.py
```
仮想端末上にノードを起動します。
`curl 127.0.0.1:3000/public/getsysteminfo` により`booting:false` を確認できましたら同期が終了しています。
### 注意点
* ノード間の通信(P2P)には`2000(TCP/UDP)`、API(REST/WS)には`3000(TCP)`を使用します。
* ファイアーウォールにより、P2Pポートは解放、APIポートは**制限** を加えて下さい。
* APIポートはデフォルトでローカルのみ受け付けます。
前準備(CentOS7)
----
参考:[CentOS7にPython3.7をインストール](https://narito.ninja/blog/detail/20/)
#### 1.
```bash
yum update
adduser p2p
passwd p2p
usermod -aG wheel p2p
yum -y install git libffi-devel zlib-devel gcc gcc-c++
yum -y install xz bzip2 bzip2-devel sqlite-devel openssl-devel readline-devel
yum -y install ncurses-devel tk-devel
yum -y install gmp-devel mpfr-devel libmpc-devel
```
Rootユーザーにて`p2p`アカウントを作成し、必要なパッケージをインストールします。
#### 2.
```bash
curl -O https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
tar xf Python-3.7.2.tgz && rm Python-3.7.2.tgz
cd Python-3.7.2
./configure --enable-optimizations
make
sudo make altinstall
```
Python環境を整えます。
Python3.7.2を使用しましたがPython3.6以上ならば問題ありません。
#### 3.
```bash
python3.7 -V # Python 3.7.2
pip3.7 -V
pip3.7 install -U --user pip
```
バージョンチェック
`sudo`でPython3を使用したい場合は参考記事を参照して下さい。
CentOSはマイナーバージョンまで必要なので注意して下さい。
#### 4.
```bash
sudo ln -s /usr/local/bin/pip3.7 /usr/bin/pip3
sudo ln -s /usr/local/bin/python3.7 /usr/bin/python3
```
このように`pip3`へリンクを貼り付けると良さそうです。
さらにこれならば`sudo`も使用できます。
note
----
`ERROR: Could not build wheels for XXX which use PEP 517 and cannot be installed directly`
環境により生じるエラー、ソースを直接DLしコンパイルしなければならない。
`???.whl`は環境依存なので適宜修正して下さい。
```bash
git clone https://github.com/namuyan/ed25519-dalek
cd ed25519-dalek
cargo build --release
python3 setup.py bdist_wheel
pip3 install --user dist/????.whl
cd ..
git clone https://github.com/namuyan/multi-party-schnorr
cd multi-party-schnorr
cargo build --release
python3 setup.py bdist_wheel
pip3 install --user dist/????.whl
```