VPS で Tezos を動かす

前の記事で Tezos の簡単な使い方を調べてみた。

で、「 Tezos 最初の起動時に全ての取引データを持ってくる」と書いたのだが、実際は起動後も、必要な取引の情報を持ってこないといけない。そうなると node を立てっぱなしにしておいた方が良いのだが、ずっとPCのCPUやメモリの一部を占有されているのは都合が悪い場合も多い（普段無駄になっている計算機資源が有効活用できて良いじゃないか、と言われればそうかも？　でも電気代とか考えると……）。特に私はノートPCで環境を作ってしまったのでちょっと動かしっぱなしというのは厳しい。

そういう用途なら VPS 借りてその上で動かしておけば良いだろう、という事で、 VPS の上に Tezos 環境を構築してみた。

## VPS を用意する

何でも良いと思うのだが、ディスクへの書き込み速度が速い方が良いから SSD 使える方が良いよ、と聞いたので ConoHa にしてみた。

https://www.conoha.jp/conoha/

普通に Ubuntu20.04 のサーバを借りて、 ssh で入って環境を作っていく。

## tmux を入れる

リモート環境でプログラムを動かし続けたい場合、 ssh が切断されると走らせてたプログラムも殺された、みたいな事が起こると嫌なので、 tmux を入れる。デーモンモードで動かしても良いのだが、ターミナルが残ってくれている方が嬉しい事が多いように思うので。

普通に apt で入れた。

```bash
$ apt install tmux
```

apt で入る tmux は古いぞ、という情報をたくさん見たのだが、そこまでは古くなかった。

```bash
$ tmux -V
tmux 3.0a
```

最新が `3.2a` で、 `3.0a` は2019年12月らしい（一年半前はまぁ古いかもしれない）。

https://github.com/tmux/tmux/releases

```bash
$ tmux
```

で tmux 管理下でコンソールが開ける。以降はその上で実行していく。

## Tezos を入れる

今回はバイナリを直接ダウンロードして使ってみる。

https://github.com/serokell/tezos-packaging/releases

Zcash を入れる。

```bash
$ wget https://raw.githubusercontent.com/zcash/zcash/master/zcutil/fetch-params.sh
$ chmod +x fetch-params.sh
$ ./fetch-params.sh
```

```bash
$ tezos-client --version
fcfb53bf (2021-06-23 09:49:04 +0200) (9.3)
```

テストネットワークに繋ぐ。

```bash
$ tezos-node config init --data-dir ~/.tezos-node-florencenet --network florencenet

$ tezos-node identity generate --data-dir ~/.tezos-node-florencenet

$ tezos-node run --data-dir ~/.tezos-node-florencenet --rpc-addr 127.0.0.1
```

これはテストネットワークであってもそれなりに時間がかかる。数日くらい放置していた。

node の準備ができている事を確認する。

```bash
$ tezos-client -E http://127.0.0.1:8732 bootstrapped
```

全ての準備が整ったら、試しに送金をしてみよう。

## ノードを跨いだ送金

前回の記事では、同じノード内の自分の財布の間で Tezos を送受してみた。
今回はノードを跨いだ、実質的に別のユーザの間での Tezos 送金を試してみる。

まず、 VPS サーバの方で新しい財布を作る。

```bash
$ tezos-client gen keys john

$ tezos-client list known addresses
john: tz1UFqmkCgdaMPeRMSrrK3o5GFCJyxrqabN4 (unencrypted sk known)

$ tezos-client -E http://127.0.0.1:8732 get balance for john
0 ꜩ
```

次に、手元の PC から transfer を使って、この VPS 上の財布に送金してみる。
VPS 上で付けた john という名前を、勿論手元の Tezos node は知らないので、ハッシュを使って相手を指定する。

```bash
$ tezos-client transfer 100 from alice to tz1UFqmkCgdaMPeRMSrrK3o5GFCJyxrqabN4 --dry-run
Fatal error:
  The operation will burn ꜩ0.06425 which is higher than the configured burn cap (ꜩ0).
   Use `--burn-cap 0.06425` to emit this operation.
```

burn-cap を指定して再実行。

```bash
$ tezos-client transfer 1 from alice to tz1UFqmkCgdaMPeRMSrrK3o5GFCJyxrqabN4 --burn-cap 0.06425 --dry-run
Node is bootstrapped.
Estimated gas: 1427 units (will add 100 for safety)
Estimated storage: 257 bytes added (will add 20 for safety)
Operation: 0xca213389cb8cf9294236dfc36fd987251c22b37de70ec92338b381633da19c966c00171a1241c251c214200ce57fece5cfb9005192279703b7c616f70b950280c2d72f00005e86dd7a03cf9defc39f7ff4a319785bbbcebbb300f15d34542221d5df4c9ef0a201c6ec43370453348fcb005b86571028df157bb828f51f4bb593d531f95d13f2435921c6b89b80822695c72366f64d345eb8180a
Operation hash is 'ooppwkcAasAeF6jWjtMUteEGrVnqV5oTtHyv2r5SrXt7DNqoGHZ'
Simulation result:
  Manager signed operations:
    From: tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k
    Fee to the baker: ꜩ0.000407
    Expected counter: 369463
    Gas limit: 1527
    Storage limit: 277 bytes
    Balance updates:
      tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k .................. -ꜩ0.000407
      fees(the baker who will include this operation,158) ... +ꜩ0.000407
    Transaction:
      Amount: ꜩ100
      From: tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k
      To: tz1UFqmkCgdaMPeRMSrrK3o5GFCJyxrqabN4
      This transaction was successfully applied
      Consumed gas: 1427
      Balance updates:
        tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k ... -ꜩ100
        tz1UFqmkCgdaMPeRMSrrK3o5GFCJyxrqabN4 ... +ꜩ100
        tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k ... -ꜩ0.06425
```

では、 dry-run を外して本番実行。

```bash
$ tezos-client transfer 100 from alice to tz1UFqmkCgdaMPeRMSrrK3o5GFCJyxrqabN4 --burn-cap 0.06425
Node is bootstrapped.
Estimated gas: 1427 units (will add 100 for safety)
Estimated storage: 257 bytes added (will add 20 for safety)
Operation successfully injected in the node.
Operation hash is 'ooaHAv4KWLERykbWdGDQjJzn7doAp6KPjCoZ8oRrY8SXR9pMWBb'
Waiting for the operation to be included...
Operation found in block: BLVRxqie6vFXDS7p5q7bk2bQRffnQEALUXLrNhU3zt99MPGGYxH (pass: 3, offset: 0)
This sequence of operations was run:
  Manager signed operations:
    From: tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k
    Fee to the baker: ꜩ0.000407
    Expected counter: 369463
    Gas limit: 1527
    Storage limit: 277 bytes
    Balance updates:
      tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k ............. -ꜩ0.000407
      fees(tz1PirboHQVqkYqLSWfHUHEy3AdhYUNJpvGy,158) ... +ꜩ0.000407
    Transaction:
      Amount: ꜩ100
      From: tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k
      To: tz1UFqmkCgdaMPeRMSrrK3o5GFCJyxrqabN4
      This transaction was successfully applied
      Consumed gas: 1427
      Balance updates:
        tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k ... -ꜩ100
        tz1UFqmkCgdaMPeRMSrrK3o5GFCJyxrqabN4 ... +ꜩ100
        tz1MkBTzqno1mtFMufRqhrArPqXXhtF6x92k ... -ꜩ0.06425

The operation has only been included 0 blocks ago.
We recommend to wait more.
Use command
  tezos-client wait for ooaHAv4KWLERykbWdGDQjJzn7doAp6KPjCoZ8oRrY8SXR9pMWBb to be included --confirmations 30 --branch BMUwQpxU3gCzDjw25pf8x2zgdsps5czkjRymXBrWUMQGmvc8gaw
and/or an external block explorer.
```

VPS サーバの方へ移り、確認する。

```bash
$ tezos-client -E http://127.0.0.1:8732 get balance for john
100 ꜩ
```

ちゃんとノード越しに送金されている！