Solana対応のSerum AnchorがIDO Poolのサンプルプログラムを公開している。ソースを読んで開発するときに、いくつかリソースを参照する必要があるため、そのリンク集を整理した。
Agenda
サンプルプログラム
オリジナル
GitHub - project-serum/anchor/ido-pool
参考用
自分用にデバッグなどを付け加えたバージョンもあるため参考までに。
GitHub - 256hax/solana-anchor-react-minimal-example/ido-pool
テスト実行(ido-poolディレクトリにて)
必要なモジュールをインストールする。
% yarn add mocha
% yarn add @project-serum/anchor
% yarn add @solana/spl-token
% yarn add @project-serum/common
% yarn add @project-serum/serum
% yarn install
テスト実行。
% anchor test
〜〜〜省略(warningがいくつか出るが一旦省略)〜〜〜
ido-pool
✔ Initializes the state-of-the-world (2478ms)
✔ Initializes the IDO pool (462ms)
Sleeping for 5.854 seconds
✔ Exchanges user USDC for redeemable tokens (7046ms)
✔ Exchanges a second users USDC for redeemable tokens (1399ms)
✔ Exchanges user Redeemable tokens for USDC (478ms)
Sleeping for 7.931 seconds
✔ Exchanges user Redeemable tokens for watermelon (8628ms)
✔ Exchanges second user's Redeemable tokens for watermelon (914ms)
✔ Withdraws total USDC from pool account (466ms)
✔ Withdraws USDC from the escrow account after waiting period is over (450ms)
9 passing (22s)
✨ Done in 28.20s.
プログラムを読む時のレファレンス先
programs(RUST)のlib.rsを読む場合
tests(JS)のido-pool.jsを読む場合
ドキュメントが存在しないものもあり、その場合はソースを直接読む必要あり。
(ソースの場所がたまに変わったりするため、以下はバージョン固定でリンク)
解説記事
2022年1月3日時点で解説記事が見つからなかったため、anchor testの実行結果とソースを読んでいくのが主な進め方になる。
やや古いソースになるが、Mango MarketsがAnchorのIDO Poolの解説を少しだけしている。
blockworks-foundation / ido-pool
その他
Q&A
その他の不明点はDiscordで検索。
Anchor Discord
エラー
anchor testすると、たまに以下のようなエラーが表示された。何度か実行すると直ったりして原因不明。
% anchor test
〜〜〜省略〜〜〜
ido-pool
✔ Initializes the state-of-the-world (3422ms)
✔ Initializes the IDO pool (715ms)
Sleeping for 6.08 seconds
✔ Exchanges user USDC for redeemable tokens (8030ms)
✔ Exchanges a second users USDC for redeemable tokens (2309ms)
✔ Exchanges user Redeemable tokens for USDC (737ms)
Sleeping for 6.003 seconds
Transaction simulation failed: Error processing Instruction 0: custom program error: 0x1775
Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]
Program log: Instruction: ExchangeRedeemableForWatermelon
Program log: Custom program error: 0x1775
Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS consumed 28821 of 200000 compute units
Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS failed: custom program error: 0x1775
1) Exchanges user Redeemable tokens for watermelon
2) Exchanges second user's Redeemable tokens for watermelon
✔ Withdraws total USDC from pool account (608ms)
✔ Withdraws USDC from the escrow account after waiting period is over (642ms)
7 passing (24s)
2 failing
1) ido-pool
Exchanges user Redeemable tokens for watermelon:
Error: 6005: IDO has not finished yet
at Function.parse (node_modules/@project-serum/anchor/dist/cjs/error.js:35:20)
at Object.rpc [as exchangeRedeemableForWatermelon] (node_modules/@project-serum/anchor/dist/cjs/program/namespace/rpc.js:38:61)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async Context.<anonymous> (tests/ido-pool.js:453:5)
2) ido-pool
Exchanges second user's Redeemable tokens for watermelon:
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
assert.ok(poolWatermelonAccount.amount.eq(new anchor.BN(0)))
+ expected - actual
-false
+true
at Context.<anonymous> (tests/ido-pool.js:524:12)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.