Solanaさわり

## はじめに

ちょっと仕事で疲れたので、Rustでlessコマンド実装は一旦お休みして、軽めのネタで[Solana](https://solana.com/)を触ってみます。

Solanaの特徴とかはあんまりわかってません。
なんとなくEthereumコントラクト的なことがさっくりできる、みたいなイメージだけあります。

ちなみに主な実装はRustみたいです。

https://github.com/solana-labs

## 環境

Rust 1.57 stable
MacOSX 11.6 (Intel Mac)
Solana(CLI) solana-cli 1.8.6 (src:e5aa5efb; feat:591501692)

## インストール

CLIインストールから

```
$ sh -c "$(curl -sSfL https://release.solana.com/v1.8.6/install)"
```

Zsh補完関数設定しておく。

```
$ solana completion -s zsh > ~/.zsh/completions/_solana
```

## 鍵をつくる

CLI使うのに必要そうなので、とりあえず鍵作ってみる。
テストようなので後でまるっと削除する予定。

```shell-session
$ mkdir $HOME/.solana
$ solana-keygen new --outfile ~/.solana/test-keypair.json
Generating a new keypair

For added security, enter a BIP39 passphrase

NOTE! This passphrase improves security of the recovery seed phrase NOT the
keypair file itself, which is stored as insecure plain text

BIP39 Passphrase (empty for none):

Wrote new keypair to ~/.solana/test-keypair.json
======================================================================================
pubkey: DmAUUA2Rw1yXhstczJgRQYXBB3GrsesUhTvSVkzGfWWe
======================================================================================
Save this seed phrase and your BIP39 passphrase to recover your new keypair:
tourist squeeze hungry strategy engage visa cake erupt display disorder stand describe
======================================================================================
$ solana-keygen verify DmAUUA2Rw1yXhstczJgRQYXBB3GrsesUhTvSVkzGfWWe ~/.solana/test-keypair.json
Verification for public key: DmAUUA2Rw1yXhstczJgRQYXBB3GrsesUhTvSVkzGfWWe: Success
```

## Devnetにつないでみる

https://docs.solana.com/clusters

上記見るとDevnetは開発用のネットワークの模様。

* Mainnet Beta
* Testnet
* Devnet

の3つが主に使われている。まぁ名前で大体の役割はわかる。

ネットワーク接続用に設定ファイルを作る。

```shell-session
$ solana config get
Config File: ~/.config/solana/cli/config.yml
RPC URL: https://api.mainnet-beta.solana.com
WebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)
Keypair Path: ~/.config/solana/id.json
Commitment: confirmed
```

Devnet使うように設定更新。

```shell-session
$ solana config set --url https://api.devnet.solana.com
Config File: ~/.config/solana/cli/config.yml
RPC URL: https://api.devnet.solana.com
WebSocket URL: wss://api.devnet.solana.com/ (computed)
Keypair Path: ~/.config/solana/id.json
Commitment: confirmed
```

## SOL Tokenの送受信

以下見ればできる。

https://docs.solana.com/cli/transfer-tokens

```shell-session
$ solana airdrop 1 DmAUUA2Rw1yXhstczJgRQYXBB3GrsesUhTvSVkzGfWWe
Requesting airdrop of 1 SOL

Signature: 4izfAa1nzsN7nXhf3uGapZnDYFijW1rPFDbLW19AgyRFqQT3zb9A9JvFvv3n2vAz2E6NsEkXoRyELtTtH6GPp8HS

1 SOL
$ solana balance DmAUUA2Rw1yXhstczJgRQYXBB3GrsesUhTvSVkzGfWWe
1 SOL
$ solana-keygen new --no-passphrase --no-outfile
Generating a new keypair
===================================================================================
pubkey: DMfsu7nKhyrSYPN2MWyUCYDxLAFcXJBdeNjkLoj73Rwn
===================================================================================
Save this seed phrase to recover your new keypair:
extra execute black skull rather hedgehog digital arch unfold endless catalog learn
===================================================================================
$ solana transfer --from ~/.solana/test-keypair.json DMfsu7nKhyrSYPN2MWyUCYDxLAFcXJBdeNjkLoj73Rwn 0.5 --allow-unfunded-recipient --fee-payer ~/.solana/test-keypair.json

Signature: 4g4XiggUqk93WnVai7BdecjoVfe7QTCe27NJqPmrXzUtkSm8J6Y9kK1FrmPM8hCeJn6nWq2nd8V9zUsEqegPFG8m
$ solana balance DmAUUA2Rw1yXhstczJgRQYXBB3GrsesUhTvSVkzGfWWe
0.499995 SOL
$ solana balance DMfsu7nKhyrSYPN2MWyUCYDxLAFcXJBdeNjkLoj73Rwn
0.5 SOL
```

ここでトランザクション見れる。

https://explorer.solana.com/tx/4g4XiggUqk93WnVai7BdecjoVfe7QTCe27NJqPmrXzUtkSm8J6Y9kK1FrmPM8hCeJn6nWq2nd8V9zUsEqegPFG8m?cluster=devnet


特に引っ掛かりポイントもなくサクサク進む。ドキュメントも整ってるしいい感じ。
ということで今日はここまで。

## 参考

* https://docs.solana.com/