Solana Anchor Swapを動かすまでのメモ

GitHub - Project Serum / Swap を動かしたときのエラー対応メモ。

deps配下が見つからないエラー

現象

READMEの手順通りに進めて(あとでわかったが一部手順をスキップしてしまっていた)、anchor testするとdeps配下が見つからないと言われる。

% anchor test
BPF SDK: /Users/user/.local/share/solana/install/releases/1.9.1/solana-release/bin/sdk/bpf
cargo-build-bpf child: rustup toolchain list -v
cargo-build-bpf child: cargo +bpf build --target bpfel-unknown-unknown --release
warning: profiles for the non root package will be ignored, specify profiles at the workspace root:
package:   /Users/user/Desktop/blockchain/swap-master/programs/swap/Cargo.toml
workspace: /Users/user/Desktop/blockchain/swap-master/Cargo.toml
    Finished release [optimized] target(s) in 0.70s
cargo-build-bpf child: /Users/user/.local/share/solana/install/releases/1.9.1/solana-release/bin/sdk/bpf/dependencies/bpf-tools/llvm/bin/llvm-readelf --dyn-symbols /Users/user/Desktop/blockchain/swap-master/target/deploy/serum_swap.so

To deploy this program:
  $ solana program deploy /Users/user/Desktop/blockchain/swap-master/target/deploy/serum_swap.so
The program address will default to this keypair (override with --program-id):
  /Users/user/Desktop/blockchain/swap-master/target/deploy/serum_swap-keypair.json
Error: Program in genesis configuration does not exist at path: ./deps/serum-dex/dex/target/deploy/serum_dex.so

原因

以下の手順をスキップしてしまっていた。

git submodule init
git submodule update

詳しく調べてはいないが、おそらくAnchor Swapを動かすためには、Anchor DEXのプログラムも必要で、これはそのDEXを動かすための対応(?)という推測。

対応

git cloneして手順通りに進める。

% git clone https://github.com/project-serum/swap.git
% git submodule init
% git submodule update
・・・

備考

なお、Anchor Swapは、GitHubから直接ファイルDLしてしまうと、.gitが見つからないと言われるので、必ずgit cloneすること。

fatal: not a git repository (or any of the parent directories): .git

Error: Cannot find module XXXエラー

現象

anchor testするとmoduleが見つからないと言われる。

% anchor test
Error: Cannot find module '@project-serum/anchor'
・・・

% anchor test
Error: Cannot find module '@project-serum/serum'
・・・

% anchor test
Error: Cannot find module '@project-serum/common'
・・・

原因

Anchor Swapはpackage.jsonを用意していないので、個別にインストールする必要がある。git cloneした状態だとモジュールがなにも含まれていない(=package.jsonで定義されていない)。

対応

モジュールを追加してインストールする。

% yarn add @project-serum/anchor
% yarn add @project-serum/serum
% yarn add @project-serum/common