Solanaノードサーバーをローカル起動したときのログメッセージの確認方法

課題

Rustでmsg!で出力したメッセージは、Solana ExplorerだとProgram Logで確認ができる。
以下は SolanaサンプルのHello World をdevnetにデプロイしたあとの実行例。Program Logにログが残っている。

Solana Explorer

しかし、localhostの場合($ solana-test-validatorで起動した場合)は、Solana Explorer上から閲覧することはできない。

対策

localhostでログ確認したい場合は、solana logsを起動しておくと、トランザクションが走るたびに出力されるようになる。

% solana logs
Streaming transaction logs. Confirmed commitment
Transaction executed in slot 2765:
  Signature: 3rKeNuLYZARbDTtqiy5owQe6gTQhZ1SACWrnauALmD2KjX6LhuS2rdCUj1e246qYbDo5zCxV4JvLKxx7Dd1EwHxK
  Status: Ok
  Log Messages:
    Program Bi8Xvx9VENCUwtE2jdo4CyQLRrZCpSzKiaGsZCCtqGRc invoke [1]
    Program log: Hello World Rust program entrypoint
    Program log: Greeted 12 time(s)!
    Program Bi8Xvx9VENCUwtE2jdo4CyQLRrZCpSzKiaGsZCCtqGRc consumed 1186 of 200000 compute units
    Program Bi8Xvx9VENCUwtE2jdo4CyQLRrZCpSzKiaGsZCCtqGRc success

やり方

ターミナルを最終的に3つ開く必要がある。

1つ目のターミナル。Solanaノードサーバーを起動しておく。

 % solana-test-validator
--faucet-sol argument ignored, ledger already exists
Ledger location: test-ledger
Log: test-ledger/validator.log
Identity: Hw8qyXEYMT8da32uKRqi79DNzV7Ad84bF1fC1UACbRH2
Genesis Hash: 74LGYnZRNyHXc2mHnnYHYHASHkdqDKTHwuV3f4ZhoXuN
Version: 1.8.5
Shred Version: 21921
Gossip Address: 127.0.0.1:1024
TPU Address: 127.0.0.1:1027
JSON RPC URL: http://127.0.0.1:8899
⠓ 00:00:18 | Processed Slot: 2777 | Confirmed Slot: 2777 | Finalized Slot: 2745

2つ目のターミナル。ログをリッスン状態にする。

% solana logs
Streaming transaction logs. Confirmed commitment

3つ目のターミナル。トランザクションを走らせる。

% npm run start


> helloworld@0.0.1 start
> ts-node src/client/main.ts

Let's say hello to a Solana account...
Connection to cluster established: http://localhost:8899 { 'feature-set': 52865992, 'solana-core': '1.8.5' }
Using account HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg containing 500000000.04468334 SOL to pay for fees
Using program Bi8Xvx9VENCUwtE2jdo4CyQLRrZCpSzKiaGsZCCtqGRc
Saying hello to 7QaiMunqrxkHsJ6GPEKYj38GcpYLhiXh6KAQcgHVxmEQ
7QaiMunqrxkHsJ6GPEKYj38GcpYLhiXh6KAQcgHVxmEQ has been greeted 12 time(s)
Success

3つ目のターミナルコマンドを実行すると、2つ目のターミナルに以下のようなログが表示される。

Transaction executed in slot 2765:
  Signature: 3rKeNuLYZARbDTtqiy5owQe6gTQhZ1SACWrnauALmD2KjX6LhuS2rdCUj1e246qYbDo5zCxV4JvLKxx7Dd1EwHxK
  Status: Ok
  Log Messages:
    Program Bi8Xvx9VENCUwtE2jdo4CyQLRrZCpSzKiaGsZCCtqGRc invoke [1]
    Program log: Hello World Rust program entrypoint
    Program log: Greeted 12 time(s)!
    Program Bi8Xvx9VENCUwtE2jdo4CyQLRrZCpSzKiaGsZCCtqGRc consumed 1186 of 200000 compute units
    Program Bi8Xvx9VENCUwtE2jdo4CyQLRrZCpSzKiaGsZCCtqGRc success