From f067624adda95e18467c735c29c72197d0e2120a Mon Sep 17 00:00:00 2001 From: Armani Ferrante Date: Sun, 27 Jun 2021 13:17:05 -0700 Subject: [PATCH] Token PDAs and CLI scripts (#400) --- .gitmodules | 9 + .travis.yml | 1 + CHANGELOG.md | 8 + Cargo.lock | 20 + Cargo.toml | 3 +- cli/src/config.rs | 71 +- cli/src/main.rs | 44 +- examples/cfo/Anchor.toml | 41 + examples/cfo/Cargo.toml | 9 + examples/cfo/deps/serum-dex | 1 + examples/cfo/deps/stake | 1 + examples/cfo/deps/swap | 1 + examples/cfo/migrations/deploy.js | 13 + examples/cfo/programs/cfo/Cargo.toml | 24 + examples/cfo/programs/cfo/Xargo.toml | 2 + examples/cfo/programs/cfo/src/lib.rs | 818 +++++++++++++++++++ examples/cfo/scripts/common.sh | 19 + examples/cfo/scripts/fees.js | 34 + examples/cfo/scripts/list-market.js | 20 + examples/cfo/scripts/localnet.sh | 58 ++ examples/cfo/scripts/market-maker.json | 1 + examples/cfo/scripts/trade-bot.js | 16 + examples/cfo/tests/cfo.js | 202 +++++ examples/cfo/tests/utils/index.js | 647 +++++++++++++++ examples/cfo/tests/utils/stake.js | 184 +++++ examples/misc/programs/misc/Cargo.toml | 1 + examples/misc/programs/misc/src/lib.rs | 28 +- examples/misc/tests/misc.js | 85 +- lang/src/cpi_account.rs | 4 + lang/src/error.rs | 2 + lang/src/lib.rs | 40 + lang/src/program_account.rs | 4 + lang/syn/src/codegen/accounts/constraints.rs | 333 +++++--- lang/syn/src/lib.rs | 46 +- lang/syn/src/parser/accounts/constraints.rs | 123 ++- spl/src/dex.rs | 28 + spl/src/lib.rs | 1 + spl/src/mint.rs | 13 + spl/src/token.rs | 4 + ts/src/error.ts | 2 + ts/src/program/index.ts | 10 +- ts/src/program/namespace/account.ts | 21 +- ts/src/utils/index.ts | 1 + ts/src/utils/pubkey.ts | 19 + ts/src/utils/token.ts | 23 + ts/src/workspace.ts | 14 +- 46 files changed, 2868 insertions(+), 181 deletions(-) create mode 100644 examples/cfo/Anchor.toml create mode 100644 examples/cfo/Cargo.toml create mode 160000 examples/cfo/deps/serum-dex create mode 160000 examples/cfo/deps/stake create mode 160000 examples/cfo/deps/swap create mode 100644 examples/cfo/migrations/deploy.js create mode 100644 examples/cfo/programs/cfo/Cargo.toml create mode 100644 examples/cfo/programs/cfo/Xargo.toml create mode 100644 examples/cfo/programs/cfo/src/lib.rs create mode 100644 examples/cfo/scripts/common.sh create mode 100755 examples/cfo/scripts/fees.js create mode 100755 examples/cfo/scripts/list-market.js create mode 100755 examples/cfo/scripts/localnet.sh create mode 100644 examples/cfo/scripts/market-maker.json create mode 100755 examples/cfo/scripts/trade-bot.js create mode 100644 examples/cfo/tests/cfo.js create mode 100644 examples/cfo/tests/utils/index.js create mode 100644 examples/cfo/tests/utils/stake.js create mode 100644 spl/src/mint.rs create mode 100644 ts/src/utils/token.ts diff --git a/.gitmodules b/.gitmodules index 75d25886..6b3c3a72 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,12 @@ [submodule "examples/swap/deps/serum-dex"] path = examples/swap/deps/serum-dex url = https://github.com/project-serum/serum-dex +[submodule "examples/cfo/deps/serum-dex"] + path = examples/cfo/deps/serum-dex + url = https://github.com/project-serum/serum-dex +[submodule "examples/cfo/deps/swap"] + path = examples/cfo/deps/swap + url = https://github.com/project-serum/swap.git +[submodule "examples/cfo/deps/stake"] + path = examples/cfo/deps/stake + url = https://github.com/project-serum/stake.git diff --git a/.travis.yml b/.travis.yml index 3bbf8e5d..f072af9a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -64,6 +64,7 @@ jobs: - pushd examples/chat && yarn && anchor test && popd - pushd examples/ido-pool && yarn && anchor test && popd - pushd examples/swap/deps/serum-dex/dex && cargo build-bpf && cd ../../../ && anchor test && popd + - pushd examples/cfo && anchor run test && popd - <<: *examples name: Runs the examples 3 script: diff --git a/CHANGELOG.md b/CHANGELOG.md index 388fc390..8e01042c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,14 @@ incremented for features. ## [Unreleased] +### Features + +* lang: Add `#[account(address = )]` constraint for asserting the address of an account ([#400](https://github.com/project-serum/anchor/pull/400)). +* lang: Add `#[account(init, token = , authority = ...)]` constraint for initializing SPL token accounts as program derived addresses for the program. Can be used when initialized via `seeds` or `associated` ([#400](https://github.com/project-serum/anchor/pull/400)). +* lang: Add `associated_seeds!` macro for generating signer seeds for CPIs signed by an `#[account(associated = )]` account ([#400](https://github.com/project-serum/anchor/pull/400)). +* cli: Add `[scripts]` section to the Anchor.toml for specifying workspace scripts that can be run via `anchor run