Ver código fonte

fix: ci errors (#423)

fix anchor errors

fix group 3 errors

fix anchor errors group 2

Update pnpm-lock.yaml

update checking account pnpm lock

remove biome

update pnpm lock anchor group 0

move pnpm install in anchor workflow

update anchor version in group 0

Revert "update anchor version to 0.31.1"

This reverts commit ca12179fd9d1aebc0d0c87ccc5d2a738f8f307d0.

update anchor version to 0.31.1

add type:module to anchor bankrun tests

add with json to bankrun tests

remove curly braces from bankrun tests

use import in bankrun tests

fix ts strip only error

add type: "module" to basic native example package.json

add type module to package.json

fix ts strip only error

fix token-2022 errors

fix biome

remove seahorse and steel github workflows

silence warnings in basics example

- use workspace deps
- use solana-system-interface
- use borsh::to_vec()
- use allow unexpected cfgs and depreciated

add allow unexpected cfgs and update deps in basic examples

fix fundraiser and transfer token bankrun tests

fix checking-account and favorites error

update anchor version in anchor workflow

add cfgs lint to compression and oracles anchor examples

add cfg lint to token examples

add lints.rust unexpected_cfgs to basic examples

update anchor version in pnpm.yaml

update anchor version and remove allow attributes

update pnpm version
Perelyn 4 semanas atrás
pai
commit
fefa11e4e5
100 arquivos alterados com 1772 adições e 2305 exclusões
  1. 9 9
      .github/workflows/anchor.yml
  2. 0 21
      .github/workflows/biome.yml
  3. 0 37
      .github/workflows/seahorse.yml
  4. 0 334
      .github/workflows/steel.yml
  5. 169 430
      Cargo.lock
  6. 26 0
      Cargo.toml
  7. 1 1
      basics/account-data/anchor/Anchor.toml
  8. 16 15
      basics/account-data/anchor/package.json
  9. 39 60
      basics/account-data/anchor/pnpm-lock.yaml
  10. 9 3
      basics/account-data/anchor/programs/anchor-program-example/Cargo.toml
  11. 1 2
      basics/account-data/anchor/programs/anchor-program-example/src/lib.rs
  12. 60 48
      basics/account-data/anchor/tests/bankrun.test.ts
  13. 44 36
      basics/account-data/anchor/tests/test.ts
  14. 1 0
      basics/account-data/native/package.json
  15. 13 4
      basics/account-data/native/program/Cargo.toml
  16. 2 3
      basics/account-data/native/program/src/instructions/create.rs
  17. 85 74
      basics/account-data/native/tests/test.ts
  18. 1 1
      basics/checking-accounts/anchor/Anchor.toml
  19. 16 15
      basics/checking-accounts/anchor/package.json
  20. 39 60
      basics/checking-accounts/anchor/pnpm-lock.yaml
  21. 8 2
      basics/checking-accounts/anchor/programs/anchor-program-example/Cargo.toml
  22. 1 3
      basics/checking-accounts/anchor/programs/anchor-program-example/src/lib.rs
  23. 60 50
      basics/checking-accounts/anchor/tests/bankrun.test.ts
  24. 43 34
      basics/checking-accounts/anchor/tests/test.ts
  25. 1 0
      basics/checking-accounts/native/package.json
  26. 12 2
      basics/checking-accounts/native/program/Cargo.toml
  27. 2 3
      basics/checking-accounts/native/program/src/lib.rs
  28. 20 19
      basics/close-account/anchor/package.json
  29. 39 60
      basics/close-account/anchor/pnpm-lock.yaml
  30. 7 1
      basics/close-account/anchor/programs/close-account/Cargo.toml
  31. 0 2
      basics/close-account/anchor/programs/close-account/src/lib.rs
  32. 26 17
      basics/close-account/anchor/tests/bankrun.test.ts
  33. 1 1
      basics/close-account/anchor/tests/close-account.ts
  34. 1 0
      basics/close-account/native/package.json
  35. 12 3
      basics/close-account/native/program/Cargo.toml
  36. 1 1
      basics/close-account/native/program/src/instructions/close_user.rs
  37. 2 3
      basics/close-account/native/program/src/instructions/create_user.rs
  38. 6 6
      basics/close-account/native/ts/instructions/index.ts
  39. 21 20
      basics/counter/anchor/package.json
  40. 39 60
      basics/counter/anchor/pnpm-lock.yaml
  41. 7 1
      basics/counter/anchor/programs/counter_anchor/Cargo.toml
  42. 0 2
      basics/counter/anchor/programs/counter_anchor/src/lib.rs
  43. 32 20
      basics/counter/anchor/tests/bankrun.test.ts
  44. 1 1
      basics/counter/anchor/tests/counter_anchor.ts
  45. 6 0
      basics/counter/mpl-stack/Cargo.toml
  46. 2 2
      basics/counter/mpl-stack/tests/counter.test.ts
  47. 1 0
      basics/counter/mpl-stack/ts/generated/index.ts
  48. 1 0
      basics/counter/native/package.json
  49. 9 2
      basics/counter/native/program/Cargo.toml
  50. 2 2
      basics/counter/native/tests/counter.test.ts
  51. 2 1
      basics/counter/native/ts/index.ts
  52. 16 15
      basics/create-account/anchor/package.json
  53. 39 60
      basics/create-account/anchor/pnpm-lock.yaml
  54. 7 1
      basics/create-account/anchor/programs/create-system-account/Cargo.toml
  55. 0 2
      basics/create-account/anchor/programs/create-system-account/src/lib.rs
  56. 15 12
      basics/create-account/anchor/tests/bankrun.test.ts
  57. 1 1
      basics/create-account/anchor/tests/test.ts
  58. 1 0
      basics/create-account/native/package.json
  59. 10 1
      basics/create-account/native/program/Cargo.toml
  60. 2 3
      basics/create-account/native/program/src/lib.rs
  61. 21 20
      basics/cross-program-invocation/anchor/package.json
  62. 39 60
      basics/cross-program-invocation/anchor/pnpm-lock.yaml
  63. 7 1
      basics/cross-program-invocation/anchor/programs/hand/Cargo.toml
  64. 7 1
      basics/cross-program-invocation/anchor/programs/lever/Cargo.toml
  65. 2 2
      basics/cross-program-invocation/anchor/tests/bankrun.test.ts
  66. 1 1
      basics/cross-program-invocation/anchor/tests/cpi.ts
  67. 1 0
      basics/cross-program-invocation/native/package.json
  68. 4 3
      basics/cross-program-invocation/native/programs/hand/Cargo.toml
  69. 4 3
      basics/cross-program-invocation/native/programs/lever/Cargo.toml
  70. 2 3
      basics/cross-program-invocation/native/programs/lever/src/lib.rs
  71. 1 1
      basics/cross-program-invocation/native/tests/test.ts
  72. 23 22
      basics/favorites/anchor/package.json
  73. 39 60
      basics/favorites/anchor/pnpm-lock.yaml
  74. 7 2
      basics/favorites/anchor/programs/favorites/Cargo.toml
  75. 12 7
      basics/favorites/anchor/programs/favorites/src/lib.rs
  76. 35 22
      basics/favorites/anchor/tests/favorites-bankrun.test.ts
  77. 2 1
      basics/favorites/anchor/tests/favorites.test.ts
  78. 1 0
      basics/favorites/native/package.json
  79. 12 3
      basics/favorites/native/program/Cargo.toml
  80. 3 4
      basics/favorites/native/program/src/instructions/create_pda.rs
  81. 0 3
      basics/favorites/native/program/src/instructions/mod.rs
  82. 65 32
      basics/favorites/native/tests/test.ts
  83. 16 15
      basics/hello-solana/anchor/package.json
  84. 39 60
      basics/hello-solana/anchor/pnpm-lock.yaml
  85. 7 1
      basics/hello-solana/anchor/programs/hello-solana/Cargo.toml
  86. 0 2
      basics/hello-solana/anchor/programs/hello-solana/src/lib.rs
  87. 14 10
      basics/hello-solana/anchor/tests/bankrun.test.ts
  88. 1 0
      basics/hello-solana/native/package.json
  89. 9 1
      basics/hello-solana/native/program/Cargo.toml
  90. 1 0
      basics/hello-solana/pinocchio/package.json
  91. 10 3
      basics/hello-solana/pinocchio/program/Cargo.toml
  92. 8 17
      basics/hello-solana/pinocchio/tests/index.test.ts
  93. 16 15
      basics/pda-rent-payer/anchor/package.json
  94. 237 254
      basics/pda-rent-payer/anchor/pnpm-lock.yaml
  95. 7 1
      basics/pda-rent-payer/anchor/programs/anchor-program-example/Cargo.toml
  96. 0 1
      basics/pda-rent-payer/anchor/programs/anchor-program-example/src/lib.rs
  97. 64 55
      basics/pda-rent-payer/anchor/tests/bankrun.test.ts
  98. 55 50
      basics/pda-rent-payer/anchor/tests/test.ts
  99. 1 0
      basics/pda-rent-payer/native/package.json
  100. 12 3
      basics/pda-rent-payer/native/program/Cargo.toml

+ 9 - 9
.github/workflows/anchor.yml

@@ -106,7 +106,7 @@ jobs:
       - uses: actions/checkout@v4
       - uses: heyAyushh/setup-anchor@v0.31
         with:
-          anchor-version: 0.31.1
+          anchor-version: 0.32.1
           solana-cli-version: stable
       - name: Display Versions and Install pnpm
         run: |
@@ -126,6 +126,14 @@ jobs:
             echo "Building and Testing $project"
             cd "$project" || return 1
 
+            # Install dependencies first
+            if ! pnpm install --frozen-lockfile; then
+              echo "::error::pnpm install failed for $project"
+              echo "$project: pnpm install failed" >> $GITHUB_WORKSPACE/failed_projects.txt
+              cd - > /dev/null
+              return 1
+            fi
+
             # Run anchor build
             if ! anchor build; then
               echo "::error::anchor build failed for $project"
@@ -135,14 +143,6 @@ jobs:
               return 1
             fi
 
-            # Install dependencies
-            if ! pnpm install --frozen-lockfile; then
-              echo "::error::pnpm install failed for $project"
-              echo "$project: pnpm install failed" >> $GITHUB_WORKSPACE/failed_projects.txt
-              cd - > /dev/null
-              return 1
-            fi
-
             # Run anchor test
             if ! anchor test; then
               echo "::error::anchor test failed for $project"

+ 0 - 21
.github/workflows/biome.yml

@@ -1,21 +0,0 @@
-name: Typescript Code quality
-
-on:
-  push:
-    branches:
-      - main
-  pull_request:
-    types: [ opened, synchronize, reopened ]
-    branches:
-      - main
-jobs:
-  quality:
-    runs-on: ubuntu-latest
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v4
-      - name: Setup Biome
-        uses: biomejs/setup-biome@v2
-      - name: Run Biome
-        run: |
-          biome ci ./ --config-path biome.json

+ 0 - 37
.github/workflows/seahorse.yml

@@ -1,37 +0,0 @@
-name: Seahorse Build
-
-on:
-  schedule:
-    - cron: '0 0 1 * *'
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-
-    steps:
-      - uses: actions/checkout@v2
-      
-      - name: Install dependencies
-        run: |
-          sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
-          export PATH="/home/runner/.local/share/solana/install/active_release/bin:$PATH"
-          solana -V
-          rustc -V
-          sudo apt-get update && sudo apt-get upgrade && sudo apt-get install -y pkg-config build-essential libudev-dev libssl-dev
-          cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
-          avm install 0.27.0
-          avm use 0.27.0
-          cargo install seahorse-lang
-          declare -a StringArray=(
-              "basics/counter/seahorse"
-              "basics/hello-solana/seahorse"
-              "basics/transfer-sol/seahorse"
-              "oracles/pyth/seahorse"
-          )
-          for val in "${StringArray[@]}"; do
-             echo "Building $val..."
-             cd $val
-             seahorse build
-             cd - > /dev/null
-          done
-        shell: bash

+ 0 - 334
.github/workflows/steel.yml

@@ -1,334 +0,0 @@
-name: Steel
-
-on:
-  schedule:
-    - cron: "0 0 * * *"
-  push:
-    branches:
-      - main
-  pull_request:
-    types: [opened, synchronize, reopened]
-    branches:
-      - main
-
-env:
-  MAX_JOBS: 64
-  MIN_PROJECTS_PER_JOB: 4
-  MIN_PROJECTS_FOR_MATRIX: 4
-
-jobs:
-  changes:
-    runs-on: ubuntu-latest
-    permissions:
-      pull-requests: read
-    outputs:
-      changed_projects: ${{ steps.analyze.outputs.changed_projects }}
-      total_projects: ${{ steps.analyze.outputs.total_projects }}
-      matrix: ${{ steps.matrix.outputs.matrix }}
-    steps:
-      - uses: actions/checkout@v4
-      - uses: dtolnay/rust-toolchain@stable
-        with:
-          components: rustfmt, clippy
-      - uses: dorny/paths-filter@v3
-        id: changes
-        if: github.event_name == 'pull_request'
-        with:
-          list-files: shell
-          filters: |
-            steel:
-              - added|modified: '**/steel/**'
-            workflow:
-              - added|modified: '.github/workflows/steel.yml'
-
-      - name: Run fmt and clippy
-        run: |
-          readarray -t all_projects < <(echo '${{ needs.changes.outputs.changed_projects }}' | jq -r '.[]?')
-          for project in "${all_projects[@]}"; do
-            echo "::group::Checking ${project}"
-            if [ ! -f "${project}/Cargo.toml" ]; then
-              echo "::error::No Cargo.toml found in ${project}"
-              exit 1
-            fi
-            cd "${project}"
-            cargo fmt --check
-            cargo clippy --all-features -- -D warnings
-            cd - > /dev/null
-            echo "::endgroup::"
-          done
-
-      - name: Analyze Changes
-        id: analyze
-        run: |
-          # Generate ignore pattern, excluding comments
-          ignore_pattern=$(grep -v '^#' .github/.ghaignore | grep -v '^$' | tr '\n' '|' | sed 's/|$//')
-          echo "Ignore pattern: $ignore_pattern"
-
-          function get_projects() {
-            find . -type d -name "steel" | grep -vE "$ignore_pattern" | sort
-          }
-
-          # Determine which projects to build and test
-          if [[ "${{ github.event_name }}" == "push" || "${{ github.event_name }}" == "schedule" || "${{ steps.changes.outputs.workflow }}" == "true" ]]; then
-            projects=$(get_projects)
-          elif [[ "${{ steps.changes.outputs.steel }}" == "true" ]]; then
-            changed_files=(${{ steps.changes.outputs.steel_files }})
-            projects=$(for file in "${changed_files[@]}"; do dirname "${file}" | grep steel | sed 's#/steel/.*#/steel#g'; done | grep -vE "$ignore_pattern" | sort -u)
-          else
-            projects=""
-          fi
-
-          # Output project information
-          if [[ -n "$projects" ]]; then
-            echo "Projects to build and test"
-            echo "$projects"
-            total_projects=$(echo "$projects" | wc -l)
-            echo "Total projects: $total_projects"
-            echo "total_projects=$total_projects" >> $GITHUB_OUTPUT
-            echo "changed_projects=$(echo "$projects" | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT
-          else
-            echo "No projects to build and test."
-            echo "total_projects=0" >> $GITHUB_OUTPUT
-            echo "changed_projects=[]" >> $GITHUB_OUTPUT
-          fi
-      - name: Generate matrix
-        id: matrix
-        run: |
-          total_projects=${{ steps.analyze.outputs.total_projects }}
-          max_jobs=${{ env.MAX_JOBS }}
-          min_projects_per_job=${{ env.MIN_PROJECTS_PER_JOB }}
-          min_projects_for_matrix=${{ env.MIN_PROJECTS_FOR_MATRIX }}
-
-          if [ "$total_projects" -lt "$min_projects_for_matrix" ]; then
-            echo "matrix=[0]" >> $GITHUB_OUTPUT
-          else
-            projects_per_job=$(( (total_projects + max_jobs - 1) / max_jobs ))
-            projects_per_job=$(( projects_per_job > min_projects_per_job ? projects_per_job : min_projects_per_job ))
-            num_jobs=$(( (total_projects + projects_per_job - 1) / projects_per_job ))
-
-            indices=$(seq 0 $(( num_jobs - 1 )))
-            echo "matrix=[$(echo $indices | tr ' ' ',')]" >> $GITHUB_OUTPUT
-          fi
-
-  rust-checks:
-    needs: changes
-    if: ${{ github.event_name == 'pull_request' && needs.changes.outputs.total_projects != '0' }}
-    name: Rust Checks
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v4
-      - name: Run fmt and clippy
-        run: |
-          readarray -t all_projects < <(echo '${{ needs.changes.outputs.changed_projects }}' | jq -r '.[]?')
-          for project in "${all_projects[@]}"; do
-            echo "::group::Checking ${project}"
-            if [ ! -f "${project}/Cargo.toml" ]; then
-              echo "::error::No Cargo.toml found in ${project}"
-              exit 1
-            fi
-            cd "${project}"
-            cargo fmt --check
-            cargo clippy --all-features -- -D warnings
-            cd - > /dev/null
-            echo "::endgroup::"
-          done
-
-  build-and-test:
-    needs: changes
-    if: needs.changes.outputs.total_projects != '0'
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-      matrix:
-        index: ${{ fromJson(needs.changes.outputs.matrix) }}
-    name: build-and-test-group-${{ matrix.index }}
-    outputs:
-      failed_projects: ${{ steps.set-failed.outputs.failed_projects }}
-    steps:
-      - uses: actions/checkout@v4
-      - uses: dorny/paths-filter@v3
-        id: changes
-        if: github.event_name == 'pull_request'
-        with:
-          list-files: shell
-          filters: |
-            native:
-              - added|modified: '**/native/**'
-            workflow:
-              - added|modified: '.github/workflows/solana-native.yml'
-      - name: Use Node.js
-        uses: actions/setup-node@v4
-        with:
-          node-version: 'lts/*'
-          check-latest: true
-      - name: Setup build environment
-        id: setup
-        run: |
-          npm install --global pnpm
-
-          # Create the build and test function
-          cat << 'EOF' > build_and_test.sh
-          function build_and_test() {
-            local project=$1
-            local solana_version=$2
-            echo "Building and Testing $project with Solana $solana_version"
-            cd "$project" || return 1
-
-            # Check if this is a pnpm project or Steel CLI project
-            if [ -f "package.json" ]; then
-              # Use pnpm for projects with package.json
-              if ! pnpm install --frozen-lockfile; then
-                echo "::error::pnpm install failed for $project"
-                echo "$project: pnpm install failed with $solana_version" >> $GITHUB_WORKSPACE/failed_projects.txt
-                cd - > /dev/null
-                return 1
-              fi
-
-              # Build
-              if ! pnpm build; then
-                echo "::error::build failed for $project"
-                echo "$project: build failed with $solana_version" >> $GITHUB_WORKSPACE/failed_projects.txt
-                cd - > /dev/null
-                return 1
-              fi
-
-              # Test
-              if ! pnpm test; then
-                echo "::error::tests failed for $project"
-                echo "$project: tests failed with $solana_version" >> $GITHUB_WORKSPACE/failed_projects.txt
-                cd - > /dev/null
-                return 1
-              fi
-            else
-              # Use Steel CLI for pure Steel projects
-
-              # Build
-              if ! steel build; then
-                echo "::error::steel build failed for $project"
-                echo "$project: steel build failed with $solana_version" >> $GITHUB_WORKSPACE/failed_projects.txt
-                cd - > /dev/null
-                return 1
-              fi
-
-              # Test
-              if ! steel test; then
-                echo "::error::steel test failed for $project"
-                echo "$project: steel test failed with $solana_version" >> $GITHUB_WORKSPACE/failed_projects.txt
-                cd - > /dev/null
-                return 1
-              fi
-            fi
-
-            echo "Build and tests succeeded for $project with $solana_version version."
-            cd - > /dev/null
-            return 0
-          }
-
-          function process_projects() {
-            local solana_version=$1
-
-            readarray -t all_projects < <(echo '${{ needs.changes.outputs.changed_projects }}' | jq -r '.[]?')
-            start_index=$(( ${{ matrix.index }} * ${{ env.MIN_PROJECTS_PER_JOB }} ))
-            end_index=$(( start_index + ${{ env.MIN_PROJECTS_PER_JOB }} ))
-            end_index=$(( end_index > ${{ needs.changes.outputs.total_projects }} ? ${{ needs.changes.outputs.total_projects }} : end_index ))
-
-            echo "Projects to build and test in this job"
-            for i in $(seq $start_index $(( end_index - 1 ))); do
-              echo "${all_projects[$i]}"
-            done
-
-            failed=false
-            for i in $(seq $start_index $(( end_index - 1 ))); do
-              echo "::group::Building and testing ${all_projects[$i]}"
-              if ! build_and_test "${all_projects[$i]}" "$solana_version"; then
-                failed=true
-              fi
-              echo "::endgroup::"
-            done
-
-            return $([ "$failed" = true ] && echo 1 || echo 0)
-          }
-          EOF
-
-          # Make the script executable
-          chmod +x build_and_test.sh
-
-      - name: Setup Solana Stable
-        uses: heyAyushh/setup-solana@v2.02
-        with:
-          solana-cli-version: stable
-      - name: Build and Test with Stable
-        run: |
-          source build_and_test.sh
-          solana -V
-          rustc -V
-          solana-keygen new --no-bip39-passphrase --force
-          cargo install --quiet steel-cli
-          process_projects "stable"
-      - name: Setup Solana Beta
-        uses: heyAyushh/setup-solana@v2.02
-        with:
-          solana-cli-version: beta
-      - name: Build and Test with Beta
-        run: |
-          source build_and_test.sh
-          solana -V
-          rustc -V
-          solana-keygen new --no-bip39-passphrase --force
-          cargo install --quiet steel-cli
-          process_projects "beta"
-
-      - name: Set failed projects output
-        id: set-failed
-        if: failure()
-        run: |
-          if [ -f "$GITHUB_WORKSPACE/failed_projects.txt" ]; then
-            failed_projects=$(cat $GITHUB_WORKSPACE/failed_projects.txt | jq -R -s -c 'split("\n")[:-1]')
-            echo "failed_projects=$failed_projects" >> $GITHUB_OUTPUT
-          else
-            echo "failed_projects=[]" >> $GITHUB_OUTPUT
-          fi
-
-  summary:
-    needs: [changes, build-and-test]
-    if: always()
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v4
-      - name: Create job summary
-        run: |
-          echo "## Steel Workflow Summary" >> $GITHUB_STEP_SUMMARY
-          echo "- Total projects: ${{ needs.changes.outputs.total_projects }}" >> $GITHUB_STEP_SUMMARY
-
-          # List all processed projects
-          echo "<details>" >> $GITHUB_STEP_SUMMARY
-          echo "<summary>Projects processed (click to expand)</summary>" >> $GITHUB_STEP_SUMMARY
-          echo "" >> $GITHUB_STEP_SUMMARY
-          echo '${{ needs.changes.outputs.changed_projects }}' | jq -r '.[]' | while read project; do
-            echo "- $project" >> $GITHUB_STEP_SUMMARY
-          done
-          echo "" >> $GITHUB_STEP_SUMMARY
-          echo "</details>" >> $GITHUB_STEP_SUMMARY
-
-          # Report build and test results
-          if [[ "${{ needs.build-and-test.result }}" == "failure" ]]; then
-            echo "## :x: Build or tests failed" >> $GITHUB_STEP_SUMMARY
-            echo "<details>" >> $GITHUB_STEP_SUMMARY
-            echo "<summary>Failed projects (click to expand)</summary>" >> $GITHUB_STEP_SUMMARY
-            echo "" >> $GITHUB_STEP_SUMMARY
-            failed_projects='${{ needs.build-and-test.outputs.failed_projects }}'
-            if [[ -n "$failed_projects" ]]; then
-              echo "$failed_projects" | jq -r '.[]' | while IFS=: read -r project failure_reason; do
-                echo "- **$project**" >> $GITHUB_STEP_SUMMARY
-                echo "  - Failure reason: $failure_reason" >> $GITHUB_STEP_SUMMARY
-              done
-            else
-              echo "No failed projects reported. This might indicate an unexpected error in the workflow." >> $GITHUB_STEP_SUMMARY
-            fi
-            echo "" >> $GITHUB_STEP_SUMMARY
-            echo "</details>" >> $GITHUB_STEP_SUMMARY
-          elif [[ "${{ needs.build-and-test.result }}" == "success" ]]; then
-            echo "## :white_check_mark: All builds and tests passed" >> $GITHUB_STEP_SUMMARY
-          else
-            echo "## :warning: Build and test job was skipped or canceled" >> $GITHUB_STEP_SUMMARY
-          fi

Diferenças do arquivo suprimidas por serem muito extensas
+ 169 - 430
Cargo.lock


+ 26 - 0
Cargo.toml

@@ -31,6 +31,8 @@ members = [
     "basics/repository-layout/anchor/programs/*",
     "basics/transfer-sol/native/program",
     "basics/transfer-sol/anchor/programs/*",
+
+    # tokens
     "tokens/token-2022/mint-close-authority/native/program",
     "tokens/token-2022/non-transferable/native/program",
     "tokens/token-2022/default-account-state/native/program",
@@ -41,3 +43,27 @@ resolver = "2"
 
 [profile.release]
 overflow-checks = true
+
+[workspace.dependencies]
+
+# misc
+borsh = "1.5.7"
+borsh-derive = "1.5.7"
+mpl-token-metadata = { version = "5.1.1", features = [ "no-entrypoint" ] }
+
+
+# spl
+solana-program = "3.0"
+spl-token = { version = "8.0.0", features = [ "no-entrypoint" ] }
+spl-token-2022 = {version = "9.0.0" , features = [ "no-entrypoint" ] }
+spl-associated-token-account = { version = "7.0.0", features = [ "no-entrypoint" ] }
+
+# interface
+solana-system-interface = {version = "2.0.0", features = ["bincode"]}
+spl-token-interface = "2.0.0"
+spl-associated-token-account-interface = "2.0.0"
+spl-token-2022-interface = "2.0.0"
+
+# pinocchio
+pinocchio = "=0.8.1"
+pinocchio-log = "0.4.0"

+ 1 - 1
basics/account-data/anchor/Anchor.toml

@@ -3,7 +3,7 @@ seeds = false
 skip-lint = false
 
 [programs.localnet]
-anchor_program_example = "GpVcgWdgVErgLqsn8VYUch6EqDerMgNqoLSmGyKrd6MR"
+account_data_anchor_program = "GpVcgWdgVErgLqsn8VYUch6EqDerMgNqoLSmGyKrd6MR"
 
 [registry]
 url = "https://api.apr.dev"

+ 16 - 15
basics/account-data/anchor/package.json

@@ -1,17 +1,18 @@
 {
-  "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@solana/web3.js": "^1.95.2"
-  },
-  "devDependencies": {
-    "anchor-bankrun": "^0.4.0",
-    "solana-bankrun": "^0.3.0",
-    "@types/bn.js": "^5.1.0",
-    "@types/chai": "^4.3.0",
-    "@types/mocha": "^9.0.0",
-    "chai": "^4.3.4",
-    "mocha": "^9.0.3",
-    "ts-mocha": "^10.0.0",
-    "typescript": "^4.3.5"
-  }
+	"dependencies": {
+		"@coral-xyz/anchor": "0.32.1",
+		"@solana/web3.js": "^1.95.2"
+	},
+	"devDependencies": {
+		"@types/bn.js": "^5.1.0",
+		"@types/chai": "^4.3.0",
+		"@types/mocha": "^9.0.0",
+		"anchor-bankrun": "^0.4.0",
+		"chai": "^4.3.4",
+		"mocha": "^9.0.3",
+		"solana-bankrun": "^0.3.0",
+		"ts-mocha": "^10.0.0",
+		"typescript": "^4.3.5"
+	},
+	"type": "module"
 }

+ 39 - 60
basics/account-data/anchor/pnpm-lock.yaml

@@ -9,8 +9,8 @@ importers:
   .:
     dependencies:
       '@coral-xyz/anchor':
-        specifier: ^0.30.0
-        version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+        specifier: 0.32.1
+        version: 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js':
         specifier: ^1.95.2
         version: 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -26,7 +26,7 @@ importers:
         version: 9.1.1
       anchor-bankrun:
         specifier: ^0.4.0
-        version: 0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+        version: 0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
       chai:
         specifier: ^4.3.4
         version: 4.4.1
@@ -49,15 +49,19 @@ packages:
     resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
     engines: {node: '>=6.9.0'}
 
-  '@coral-xyz/anchor@0.30.0':
-    resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
-    engines: {node: '>=11'}
+  '@coral-xyz/anchor-errors@0.31.1':
+    resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==}
+    engines: {node: '>=10'}
+
+  '@coral-xyz/anchor@0.32.1':
+    resolution: {integrity: sha512-zAyxFtfeje2FbMA1wzgcdVs7Hng/MijPKpRijoySPCicnvcTQs/+dnPZ/cR+LcXM9v9UYSyW81uRNYZtN5G4yg==}
+    engines: {node: '>=17'}
 
-  '@coral-xyz/borsh@0.30.0':
-    resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+  '@coral-xyz/borsh@0.31.1':
+    resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==}
     engines: {node: '>=10'}
     peerDependencies:
-      '@solana/web3.js': ^1.68.0
+      '@solana/web3.js': ^1.69.0
 
   '@noble/curves@1.4.2':
     resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
@@ -66,6 +70,10 @@ packages:
     resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
     engines: {node: '>= 16'}
 
+  '@noble/hashes@1.8.0':
+    resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+    engines: {node: ^14.21.3 || >=16}
+
   '@solana/buffer-layout@4.0.1':
     resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
     engines: {node: '>=5.10'}
@@ -174,6 +182,9 @@ packages:
   bn.js@5.2.1:
     resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
+  bn.js@5.2.2:
+    resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
   borsh@0.7.0:
     resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
 
@@ -239,12 +250,8 @@ packages:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  cross-fetch@3.1.8:
-    resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==}
-
-  crypto-hash@1.3.0:
-    resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==}
-    engines: {node: '>=8'}
+  cross-fetch@3.2.0:
+    resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
 
   debug@4.3.3:
     resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
@@ -275,9 +282,6 @@ packages:
     resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
     engines: {node: '>=0.3.1'}
 
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
@@ -436,9 +440,6 @@ packages:
   loupe@2.3.7:
     resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
 
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
   make-error@1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
 
@@ -472,9 +473,6 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
   node-fetch@2.7.0:
     resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
     engines: {node: 4.x || >=6.0.0}
@@ -544,9 +542,6 @@ packages:
   serialize-javascript@6.0.0:
     resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
 
-  snake-case@3.0.4:
-    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
   solana-bankrun-darwin-arm64@0.3.0:
     resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
     engines: {node: '>= 10'}
@@ -747,20 +742,21 @@ snapshots:
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+  '@coral-xyz/anchor-errors@0.31.1': {}
+
+  '@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
     dependencies:
-      '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
-      '@noble/hashes': 1.4.0
+      '@coral-xyz/anchor-errors': 0.31.1
+      '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+      '@noble/hashes': 1.8.0
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       bs58: 4.0.1
       buffer-layout: 1.2.2
       camelcase: 6.3.0
-      cross-fetch: 3.1.8
-      crypto-hash: 1.3.0
+      cross-fetch: 3.2.0
       eventemitter3: 4.0.7
       pako: 2.1.0
-      snake-case: 3.0.4
       superstruct: 0.15.5
       toml: 3.0.0
     transitivePeerDependencies:
@@ -768,10 +764,10 @@ snapshots:
       - encoding
       - utf-8-validate
 
-  '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+  '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
     dependencies:
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       buffer-layout: 1.2.2
 
   '@noble/curves@1.4.2':
@@ -780,6 +776,8 @@ snapshots:
 
   '@noble/hashes@1.4.0': {}
 
+  '@noble/hashes@1.8.0': {}
+
   '@solana/buffer-layout@4.0.1':
     dependencies:
       buffer: 6.0.3
@@ -852,9 +850,9 @@ snapshots:
     dependencies:
       humanize-ms: 1.2.1
 
-  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
     dependencies:
-      '@coral-xyz/anchor': 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+      '@coral-xyz/anchor': 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       solana-bankrun: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
 
@@ -897,6 +895,8 @@ snapshots:
 
   bn.js@5.2.1: {}
 
+  bn.js@5.2.2: {}
+
   borsh@0.7.0:
     dependencies:
       bn.js: 5.2.1
@@ -981,14 +981,12 @@ snapshots:
 
   concat-map@0.0.1: {}
 
-  cross-fetch@3.1.8:
+  cross-fetch@3.2.0:
     dependencies:
       node-fetch: 2.7.0
     transitivePeerDependencies:
       - encoding
 
-  crypto-hash@1.3.0: {}
-
   debug@4.3.3(supports-color@8.1.1):
     dependencies:
       ms: 2.1.2
@@ -1007,11 +1005,6 @@ snapshots:
 
   diff@5.0.0: {}
 
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.2
-
   emoji-regex@8.0.0: {}
 
   es6-promise@4.2.8: {}
@@ -1154,10 +1147,6 @@ snapshots:
     dependencies:
       get-func-name: 2.0.2
 
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.6.2
-
   make-error@1.3.6: {}
 
   minimatch@3.1.2:
@@ -1207,11 +1196,6 @@ snapshots:
 
   nanoid@3.3.1: {}
 
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.6.2
-
   node-fetch@2.7.0:
     dependencies:
       whatwg-url: 5.0.0
@@ -1274,11 +1258,6 @@ snapshots:
     dependencies:
       randombytes: 2.1.0
 
-  snake-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.6.2
-
   solana-bankrun-darwin-arm64@0.3.0:
     optional: true
 

+ 9 - 3
basics/account-data/anchor/programs/anchor-program-example/Cargo.toml

@@ -1,12 +1,12 @@
 [package]
-name = "account-data-anchor-program-example"
+name = "account-data-anchor-program"
 version = "0.1.0"
 description = "Created with Anchor"
 edition = "2021"
 
 [lib]
 crate-type = ["cdylib", "lib"]
-name = "anchor_program_example"
+name = "account_data_anchor_program"
 
 [features]
 default = []
@@ -15,6 +15,12 @@ no-entrypoint = []
 no-idl = []
 no-log-ix-name = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang = "0.31.1"
+anchor-lang = "0.32.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 1 - 2
basics/account-data/anchor/programs/anchor-program-example/src/lib.rs

@@ -1,4 +1,3 @@
-#![allow(clippy::result_large_err)]
 use anchor_lang::prelude::*;
 use instructions::*;
 
@@ -9,7 +8,7 @@ pub mod state;
 declare_id!("GpVcgWdgVErgLqsn8VYUch6EqDerMgNqoLSmGyKrd6MR");
 
 #[program]
-pub mod anchor_program_example {
+pub mod account_data_anchor_program {
     use super::*;
 
     pub fn create_address_info(

+ 60 - 48
basics/account-data/anchor/tests/bankrun.test.ts

@@ -1,51 +1,63 @@
-import { describe, it } from 'node:test';
-import * as anchor from '@coral-xyz/anchor';
-import { Keypair } from '@solana/web3.js';
-import { PublicKey } from '@solana/web3.js';
-import { BankrunProvider } from 'anchor-bankrun';
-import { startAnchor } from 'solana-bankrun';
-import type { AnchorProgramExample } from '../target/types/anchor_program_example';
-
-const IDL = require('../target/idl/anchor_program_example.json');
+import { describe, it } from "node:test";
+import * as anchor from "@coral-xyz/anchor";
+import { Keypair, PublicKey } from "@solana/web3.js";
+import { BankrunProvider } from "anchor-bankrun";
+import { startAnchor } from "solana-bankrun";
+import type { AccountDataAnchorProgram } from "../target/types/account_data_anchor_program";
+
+import IDL from "../target/idl/account_data_anchor_program.json" with {
+	type: "json",
+};
 const PROGRAM_ID = new PublicKey(IDL.address);
 
-describe('Account Data!', async () => {
-  const context = await startAnchor('', [{ name: 'anchor_program_example', programId: PROGRAM_ID }], []);
-  const provider = new BankrunProvider(context);
-
-  const payer = provider.wallet as anchor.Wallet;
-  const program = new anchor.Program<AnchorProgramExample>(IDL, provider);
-
-  // Generate a new keypair for the addressInfo account
-  const addressInfoAccount = new Keypair();
-
-  it('Create the address info account', async () => {
-    console.log(`Payer Address      : ${payer.publicKey}`);
-    console.log(`Address Info Acct  : ${addressInfoAccount.publicKey}`);
-
-    // Instruction Ix data
-    const addressInfo = {
-      name: 'Joe C',
-      houseNumber: 136,
-      street: 'Mile High Dr.',
-      city: 'Solana Beach',
-    };
-
-    await program.methods
-      .createAddressInfo(addressInfo.name, addressInfo.houseNumber, addressInfo.street, addressInfo.city)
-      .accounts({
-        addressInfo: addressInfoAccount.publicKey,
-        payer: payer.publicKey,
-      })
-      .signers([addressInfoAccount])
-      .rpc();
-  });
-
-  it("Read the new account's data", async () => {
-    const addressInfo = await program.account.addressInfo.fetch(addressInfoAccount.publicKey);
-    console.log(`Name     : ${addressInfo.name}`);
-    console.log(`House Num: ${addressInfo.houseNumber}`);
-    console.log(`Street   : ${addressInfo.street}`);
-    console.log(`City     : ${addressInfo.city}`);
-  });
+describe("Account Data!", async () => {
+	const context = await startAnchor(
+		"",
+		[{ name: "account_data_anchor_program", programId: PROGRAM_ID }],
+		[],
+	);
+	const provider = new BankrunProvider(context);
+
+	const payer = provider.wallet as anchor.Wallet;
+	const program = new anchor.Program<AccountDataAnchorProgram>(IDL, provider);
+
+	// Generate a new keypair for the addressInfo account
+	const addressInfoAccount = new Keypair();
+
+	it("Create the address info account", async () => {
+		console.log(`Payer Address      : ${payer.publicKey}`);
+		console.log(`Address Info Acct  : ${addressInfoAccount.publicKey}`);
+
+		// Instruction Ix data
+		const addressInfo = {
+			name: "Joe C",
+			houseNumber: 136,
+			street: "Mile High Dr.",
+			city: "Solana Beach",
+		};
+
+		await program.methods
+			.createAddressInfo(
+				addressInfo.name,
+				addressInfo.houseNumber,
+				addressInfo.street,
+				addressInfo.city,
+			)
+			.accounts({
+				addressInfo: addressInfoAccount.publicKey,
+				payer: payer.publicKey,
+			})
+			.signers([addressInfoAccount])
+			.rpc();
+	});
+
+	it("Read the new account's data", async () => {
+		const addressInfo = await program.account.addressInfo.fetch(
+			addressInfoAccount.publicKey,
+		);
+		console.log(`Name     : ${addressInfo.name}`);
+		console.log(`House Num: ${addressInfo.houseNumber}`);
+		console.log(`Street   : ${addressInfo.street}`);
+		console.log(`City     : ${addressInfo.city}`);
+	});
 });

+ 44 - 36
basics/account-data/anchor/tests/test.ts

@@ -1,43 +1,51 @@
-import * as anchor from '@coral-xyz/anchor';
-import { Keypair } from '@solana/web3.js';
-import type { AnchorProgramExample } from '../target/types/anchor_program_example';
+import * as anchor from "@coral-xyz/anchor";
+import { Keypair } from "@solana/web3.js";
+import type { AccountDataAnchorProgram } from "../target/types/account_data_anchor_program";
 
-describe('Account Data!', () => {
-  const provider = anchor.AnchorProvider.env();
-  anchor.setProvider(provider);
-  const payer = provider.wallet as anchor.Wallet;
-  const program = anchor.workspace.AnchorProgramExample as anchor.Program<AnchorProgramExample>;
+describe("Account Data!", () => {
+	const provider = anchor.AnchorProvider.env();
+	anchor.setProvider(provider);
+	const payer = provider.wallet as anchor.Wallet;
+	const program = anchor.workspace
+		.AccountDataAnchorProgram as anchor.Program<AccountDataAnchorProgram>;
 
-  // Generate a new keypair for the addressInfo account
-  const addressInfoAccount = new Keypair();
+	// Generate a new keypair for the addressInfo account
+	const addressInfoAccount = new Keypair();
 
-  it('Create the address info account', async () => {
-    console.log(`Payer Address      : ${payer.publicKey}`);
-    console.log(`Address Info Acct  : ${addressInfoAccount.publicKey}`);
+	it("Create the address info account", async () => {
+		console.log(`Payer Address      : ${payer.publicKey}`);
+		console.log(`Address Info Acct  : ${addressInfoAccount.publicKey}`);
 
-    // Instruction Ix data
-    const addressInfo = {
-      name: 'Joe C',
-      houseNumber: 136,
-      street: 'Mile High Dr.',
-      city: 'Solana Beach',
-    };
+		// Instruction Ix data
+		const addressInfo = {
+			name: "Joe C",
+			houseNumber: 136,
+			street: "Mile High Dr.",
+			city: "Solana Beach",
+		};
 
-    await program.methods
-      .createAddressInfo(addressInfo.name, addressInfo.houseNumber, addressInfo.street, addressInfo.city)
-      .accounts({
-        addressInfo: addressInfoAccount.publicKey,
-        payer: payer.publicKey,
-      })
-      .signers([addressInfoAccount])
-      .rpc();
-  });
+		await program.methods
+			.createAddressInfo(
+				addressInfo.name,
+				addressInfo.houseNumber,
+				addressInfo.street,
+				addressInfo.city,
+			)
+			.accounts({
+				addressInfo: addressInfoAccount.publicKey,
+				payer: payer.publicKey,
+			})
+			.signers([addressInfoAccount])
+			.rpc();
+	});
 
-  it("Read the new account's data", async () => {
-    const addressInfo = await program.account.addressInfo.fetch(addressInfoAccount.publicKey);
-    console.log(`Name     : ${addressInfo.name}`);
-    console.log(`House Num: ${addressInfo.houseNumber}`);
-    console.log(`Street   : ${addressInfo.street}`);
-    console.log(`City     : ${addressInfo.city}`);
-  });
+	it("Read the new account's data", async () => {
+		const addressInfo = await program.account.addressInfo.fetch(
+			addressInfoAccount.publicKey,
+		);
+		console.log(`Name     : ${addressInfo.name}`);
+		console.log(`House Num: ${addressInfo.houseNumber}`);
+		console.log(`Street   : ${addressInfo.street}`);
+		console.log(`City     : ${addressInfo.city}`);
+	});
 });

+ 1 - 0
basics/account-data/native/package.json

@@ -1,4 +1,5 @@
 {
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts",
     "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",

+ 13 - 4
basics/account-data/native/program/Cargo.toml

@@ -1,12 +1,21 @@
 [package]
-name = "account-data-program"
+name = "account-data-native-program"
 version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-solana-program = "2.0"
-borsh = "0.9.3"
-borsh-derive = "0.9.1"
+borsh.workspace = true
+borsh-derive.workspace = true
+solana-program.workspace = true
+solana-system-interface.workspace = true
 
 [lib]
 crate-type = ["cdylib", "lib"]
+
+[features]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 2 - 3
basics/account-data/native/program/src/instructions/create.rs

@@ -5,7 +5,6 @@ use solana_program::{
     program::invoke,
     pubkey::Pubkey,
     rent::Rent,
-    system_instruction,
     sysvar::Sysvar,
 };
 
@@ -21,11 +20,11 @@ pub fn create_address_info(
     let payer = next_account_info(accounts_iter)?;
     let system_program = next_account_info(accounts_iter)?;
 
-    let account_span = (address_info.try_to_vec()?).len();
+    let account_span = borsh::to_vec(&address_info)?.len();
     let lamports_required = (Rent::get()?).minimum_balance(account_span);
 
     invoke(
-        &system_instruction::create_account(
+        &solana_system_interface::instruction::create_account(
             payer.key,
             address_info_account.key,
             lamports_required,

+ 85 - 74
basics/account-data/native/tests/test.ts

@@ -1,92 +1,103 @@
-import { Buffer } from 'node:buffer';
-import { describe, test } from 'node:test';
-import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
-import * as borsh from 'borsh';
-import { start } from 'solana-bankrun';
+import { Buffer } from "node:buffer";
+import { describe, test } from "node:test";
+import {
+	Keypair,
+	PublicKey,
+	SystemProgram,
+	Transaction,
+	TransactionInstruction,
+} from "@solana/web3.js";
+import * as borsh from "borsh";
+import { start } from "solana-bankrun";
 
 class Assignable {
-  constructor(properties) {
-    for (const [key, value] of Object.entries(properties)) {
-      this[key] = value;
-    }
-  }
+	constructor(properties) {
+		for (const [key, value] of Object.entries(properties)) {
+			this[key] = value;
+		}
+	}
 }
 
 class AddressInfo extends Assignable {
-  street: any;
-  city: any;
-  name: any;
-  house_number: any;
-  toBuffer() {
-    return Buffer.from(borsh.serialize(AddressInfoSchema, this));
-  }
+	street: string;
+	city: string;
+	name: string;
+	house_number: number;
+	toBuffer() {
+		return Buffer.from(borsh.serialize(AddressInfoSchema, this));
+	}
 
-  static fromBuffer(buffer: Buffer) {
-    return borsh.deserialize(AddressInfoSchema, AddressInfo, buffer);
-  }
+	static fromBuffer(buffer: Buffer) {
+		return borsh.deserialize(AddressInfoSchema, AddressInfo, buffer);
+	}
 }
 const AddressInfoSchema = new Map([
-  [
-    AddressInfo,
-    {
-      kind: 'struct',
-      fields: [
-        ['name', 'string'],
-        ['house_number', 'u8'],
-        ['street', 'string'],
-        ['city', 'string'],
-      ],
-    },
-  ],
+	[
+		AddressInfo,
+		{
+			kind: "struct",
+			fields: [
+				["name", "string"],
+				["house_number", "u8"],
+				["street", "string"],
+				["city", "string"],
+			],
+		},
+	],
 ]);
 
-describe('Account Data!', async () => {
-  const addressInfoAccount = Keypair.generate();
-  const PROGRAM_ID = PublicKey.unique();
-  const context = await start([{ name: 'account_data_program', programId: PROGRAM_ID }], []);
-  const client = context.banksClient;
+describe("Account Data!", async () => {
+	const addressInfoAccount = Keypair.generate();
+	const PROGRAM_ID = PublicKey.unique();
+	const context = await start(
+		[{ name: "account_data_native_program", programId: PROGRAM_ID }],
+		[],
+	);
+	const client = context.banksClient;
 
-  test('Create the address info account', async () => {
-    const payer = context.payer;
+	test("Create the address info account", async () => {
+		const payer = context.payer;
 
-    console.log(`Program Address      : ${PROGRAM_ID}`);
-    console.log(`Payer Address      : ${payer.publicKey}`);
-    console.log(`Address Info Acct  : ${addressInfoAccount.publicKey}`);
+		console.log(`Program Address      : ${PROGRAM_ID}`);
+		console.log(`Payer Address      : ${payer.publicKey}`);
+		console.log(`Address Info Acct  : ${addressInfoAccount.publicKey}`);
 
-    const ix = new TransactionInstruction({
-      keys: [
-        {
-          pubkey: addressInfoAccount.publicKey,
-          isSigner: true,
-          isWritable: true,
-        },
-        { pubkey: payer.publicKey, isSigner: true, isWritable: true },
-        { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
-      ],
-      programId: PROGRAM_ID,
-      data: new AddressInfo({
-        name: 'Joe C',
-        house_number: 136,
-        street: 'Mile High Dr.',
-        city: 'Solana Beach',
-      }).toBuffer(),
-    });
+		const ix = new TransactionInstruction({
+			keys: [
+				{
+					pubkey: addressInfoAccount.publicKey,
+					isSigner: true,
+					isWritable: true,
+				},
+				{ pubkey: payer.publicKey, isSigner: true, isWritable: true },
+				{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+			],
+			programId: PROGRAM_ID,
+			data: new AddressInfo({
+				name: "Joe C",
+				house_number: 136,
+				street: "Mile High Dr.",
+				city: "Solana Beach",
+			}).toBuffer(),
+		});
 
-    const blockhash = context.lastBlockhash;
+		const blockhash = context.lastBlockhash;
 
-    const tx = new Transaction();
-    tx.recentBlockhash = blockhash;
-    tx.add(ix).sign(payer, addressInfoAccount);
-    await client.processTransaction(tx);
-  });
+		const tx = new Transaction();
+		tx.recentBlockhash = blockhash;
+		tx.add(ix).sign(payer, addressInfoAccount);
+		await client.processTransaction(tx);
+	});
 
-  test("Read the new account's data", async () => {
-    const accountInfo = await client.getAccount(addressInfoAccount.publicKey);
+	test("Read the new account's data", async () => {
+		const accountInfo = await client.getAccount(addressInfoAccount.publicKey);
 
-    const readAddressInfo = AddressInfo.fromBuffer(Buffer.from(accountInfo.data));
-    console.log(`Name     : ${readAddressInfo.name}`);
-    console.log(`House Num: ${readAddressInfo.house_number}`);
-    console.log(`Street   : ${readAddressInfo.street}`);
-    console.log(`City     : ${readAddressInfo.city}`);
-  });
+		const readAddressInfo = AddressInfo.fromBuffer(
+			Buffer.from(accountInfo.data),
+		);
+		console.log(`Name     : ${readAddressInfo.name}`);
+		console.log(`House Num: ${readAddressInfo.house_number}`);
+		console.log(`Street   : ${readAddressInfo.street}`);
+		console.log(`City     : ${readAddressInfo.city}`);
+	});
 });

+ 1 - 1
basics/checking-accounts/anchor/Anchor.toml

@@ -1,7 +1,7 @@
 [features]
 seeds = false
 [programs.localnet]
-anchor_program_example = "ECWPhR3rJbaPfyNFgphnjxSEexbTArc7vxD8fnW6tgKw"
+checking_account_program = "ECWPhR3rJbaPfyNFgphnjxSEexbTArc7vxD8fnW6tgKw"
 
 [registry]
 url = "https://anchor.projectserum.com"

+ 16 - 15
basics/checking-accounts/anchor/package.json

@@ -1,17 +1,18 @@
 {
-  "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@solana/web3.js": "^1.95.2"
-  },
-  "devDependencies": {
-    "anchor-bankrun": "^0.4.0",
-    "solana-bankrun": "^0.3.0",
-    "@types/bn.js": "^5.1.0",
-    "@types/chai": "^4.3.0",
-    "@types/mocha": "^9.0.0",
-    "chai": "^4.3.4",
-    "mocha": "^9.0.3",
-    "ts-mocha": "^10.0.0",
-    "typescript": "^4.3.5"
-  }
+	"type": "module",
+	"dependencies": {
+		"@coral-xyz/anchor": "0.32.1",
+		"@solana/web3.js": "^1.95.2"
+	},
+	"devDependencies": {
+		"@types/bn.js": "^5.1.0",
+		"@types/chai": "^4.3.0",
+		"@types/mocha": "^9.0.0",
+		"anchor-bankrun": "^0.4.0",
+		"chai": "^4.3.4",
+		"mocha": "^9.0.3",
+		"solana-bankrun": "^0.3.0",
+		"ts-mocha": "^10.0.0",
+		"typescript": "^4.3.5"
+	}
 }

+ 39 - 60
basics/checking-accounts/anchor/pnpm-lock.yaml

@@ -9,8 +9,8 @@ importers:
   .:
     dependencies:
       '@coral-xyz/anchor':
-        specifier: ^0.30.0
-        version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+        specifier: 0.32.1
+        version: 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js':
         specifier: ^1.95.2
         version: 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -26,7 +26,7 @@ importers:
         version: 9.1.1
       anchor-bankrun:
         specifier: ^0.4.0
-        version: 0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+        version: 0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
       chai:
         specifier: ^4.3.4
         version: 4.4.1
@@ -49,15 +49,19 @@ packages:
     resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
     engines: {node: '>=6.9.0'}
 
-  '@coral-xyz/anchor@0.30.0':
-    resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
-    engines: {node: '>=11'}
+  '@coral-xyz/anchor-errors@0.31.1':
+    resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==}
+    engines: {node: '>=10'}
+
+  '@coral-xyz/anchor@0.32.1':
+    resolution: {integrity: sha512-zAyxFtfeje2FbMA1wzgcdVs7Hng/MijPKpRijoySPCicnvcTQs/+dnPZ/cR+LcXM9v9UYSyW81uRNYZtN5G4yg==}
+    engines: {node: '>=17'}
 
-  '@coral-xyz/borsh@0.30.0':
-    resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+  '@coral-xyz/borsh@0.31.1':
+    resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==}
     engines: {node: '>=10'}
     peerDependencies:
-      '@solana/web3.js': ^1.68.0
+      '@solana/web3.js': ^1.69.0
 
   '@noble/curves@1.4.2':
     resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
@@ -66,6 +70,10 @@ packages:
     resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
     engines: {node: '>= 16'}
 
+  '@noble/hashes@1.8.0':
+    resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+    engines: {node: ^14.21.3 || >=16}
+
   '@solana/buffer-layout@4.0.1':
     resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
     engines: {node: '>=5.10'}
@@ -174,6 +182,9 @@ packages:
   bn.js@5.2.1:
     resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
+  bn.js@5.2.2:
+    resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
   borsh@0.7.0:
     resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
 
@@ -239,12 +250,8 @@ packages:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  cross-fetch@3.1.8:
-    resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==}
-
-  crypto-hash@1.3.0:
-    resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==}
-    engines: {node: '>=8'}
+  cross-fetch@3.2.0:
+    resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
 
   debug@4.3.3:
     resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
@@ -275,9 +282,6 @@ packages:
     resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
     engines: {node: '>=0.3.1'}
 
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
@@ -436,9 +440,6 @@ packages:
   loupe@2.3.7:
     resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
 
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
   make-error@1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
 
@@ -472,9 +473,6 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
   node-fetch@2.7.0:
     resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
     engines: {node: 4.x || >=6.0.0}
@@ -544,9 +542,6 @@ packages:
   serialize-javascript@6.0.0:
     resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
 
-  snake-case@3.0.4:
-    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
   solana-bankrun-darwin-arm64@0.3.0:
     resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
     engines: {node: '>= 10'}
@@ -747,20 +742,21 @@ snapshots:
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+  '@coral-xyz/anchor-errors@0.31.1': {}
+
+  '@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
     dependencies:
-      '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
-      '@noble/hashes': 1.4.0
+      '@coral-xyz/anchor-errors': 0.31.1
+      '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+      '@noble/hashes': 1.8.0
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       bs58: 4.0.1
       buffer-layout: 1.2.2
       camelcase: 6.3.0
-      cross-fetch: 3.1.8
-      crypto-hash: 1.3.0
+      cross-fetch: 3.2.0
       eventemitter3: 4.0.7
       pako: 2.1.0
-      snake-case: 3.0.4
       superstruct: 0.15.5
       toml: 3.0.0
     transitivePeerDependencies:
@@ -768,10 +764,10 @@ snapshots:
       - encoding
       - utf-8-validate
 
-  '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+  '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
     dependencies:
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       buffer-layout: 1.2.2
 
   '@noble/curves@1.4.2':
@@ -780,6 +776,8 @@ snapshots:
 
   '@noble/hashes@1.4.0': {}
 
+  '@noble/hashes@1.8.0': {}
+
   '@solana/buffer-layout@4.0.1':
     dependencies:
       buffer: 6.0.3
@@ -852,9 +850,9 @@ snapshots:
     dependencies:
       humanize-ms: 1.2.1
 
-  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
     dependencies:
-      '@coral-xyz/anchor': 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+      '@coral-xyz/anchor': 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       solana-bankrun: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
 
@@ -897,6 +895,8 @@ snapshots:
 
   bn.js@5.2.1: {}
 
+  bn.js@5.2.2: {}
+
   borsh@0.7.0:
     dependencies:
       bn.js: 5.2.1
@@ -981,14 +981,12 @@ snapshots:
 
   concat-map@0.0.1: {}
 
-  cross-fetch@3.1.8:
+  cross-fetch@3.2.0:
     dependencies:
       node-fetch: 2.7.0
     transitivePeerDependencies:
       - encoding
 
-  crypto-hash@1.3.0: {}
-
   debug@4.3.3(supports-color@8.1.1):
     dependencies:
       ms: 2.1.2
@@ -1007,11 +1005,6 @@ snapshots:
 
   diff@5.0.0: {}
 
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.2
-
   emoji-regex@8.0.0: {}
 
   es6-promise@4.2.8: {}
@@ -1154,10 +1147,6 @@ snapshots:
     dependencies:
       get-func-name: 2.0.2
 
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.6.2
-
   make-error@1.3.6: {}
 
   minimatch@3.1.2:
@@ -1207,11 +1196,6 @@ snapshots:
 
   nanoid@3.3.1: {}
 
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.6.2
-
   node-fetch@2.7.0:
     dependencies:
       whatwg-url: 5.0.0
@@ -1274,11 +1258,6 @@ snapshots:
     dependencies:
       randombytes: 2.1.0
 
-  snake-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.6.2
-
   solana-bankrun-darwin-arm64@0.3.0:
     optional: true
 

+ 8 - 2
basics/checking-accounts/anchor/programs/anchor-program-example/Cargo.toml

@@ -6,7 +6,7 @@ edition = "2021"
 
 [lib]
 crate-type = ["cdylib", "lib"]
-name = "anchor_program_example"
+name = "checking_account_program"
 
 [features]
 default = []
@@ -15,6 +15,12 @@ no-entrypoint = []
 no-idl = []
 no-log-ix-name = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang = "0.31.1"
+anchor-lang = "0.32.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 1 - 3
basics/checking-accounts/anchor/programs/anchor-program-example/src/lib.rs

@@ -1,11 +1,9 @@
-#![allow(clippy::result_large_err)]
-
 use anchor_lang::prelude::*;
 
 declare_id!("ECWPhR3rJbaPfyNFgphnjxSEexbTArc7vxD8fnW6tgKw");
 
 #[program]
-pub mod anchor_program_example {
+pub mod checking_account_program {
     use super::*;
 
     pub fn check_accounts(_ctx: Context<CheckingAccounts>) -> Result<()> {

+ 60 - 50
basics/checking-accounts/anchor/tests/bankrun.test.ts

@@ -1,53 +1,63 @@
-import { describe, it } from 'node:test';
-import * as anchor from '@coral-xyz/anchor';
-import { Keypair, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js';
-import { PublicKey } from '@solana/web3.js';
-import { BankrunProvider } from 'anchor-bankrun';
-import { startAnchor } from 'solana-bankrun';
-import type { AnchorProgramExample } from '../target/types/anchor_program_example';
-
-const IDL = require('../target/idl/anchor_program_example.json');
+import { describe, it } from "node:test";
+import * as anchor from "@coral-xyz/anchor";
+import {
+	Keypair,
+	PublicKey,
+	SystemProgram,
+	Transaction,
+} from "@solana/web3.js";
+import { BankrunProvider } from "anchor-bankrun";
+import { startAnchor } from "solana-bankrun";
+import type { CheckingAccountProgram } from "../target/types/checking_account_program";
+
+import IDL from "../target/idl/checking_account_program.json" with {
+	type: "json",
+};
 const PROGRAM_ID = new PublicKey(IDL.address);
 
-describe('Bankrun example', async () => {
-  const context = await startAnchor('', [{ name: 'anchor_program_example', programId: PROGRAM_ID }], []);
-  const provider = new BankrunProvider(context);
-
-  const wallet = provider.wallet as anchor.Wallet;
-  const program = new anchor.Program<AnchorProgramExample>(IDL, provider);
-  const client = context.banksClient;
-
-  // We'll create this ahead of time.
-  // Our program will try to modify it.
-  const accountToChange = new Keypair();
-  // Our program will create this.
-  const accountToCreate = new Keypair();
-
-  it('Create an account owned by our program', async () => {
-    const instruction = SystemProgram.createAccount({
-      fromPubkey: provider.wallet.publicKey,
-      newAccountPubkey: accountToChange.publicKey,
-      lamports: await provider.connection.getMinimumBalanceForRentExemption(0),
-      space: 0,
-      programId: program.programId, // Our program
-    });
-
-    const transaction = new Transaction();
-    const blockhash = context.lastBlockhash;
-
-    transaction.recentBlockhash = blockhash;
-    transaction.add(instruction).sign(wallet.payer, accountToChange);
-    await client.processTransaction(transaction);
-  });
-
-  it('Check accounts', async () => {
-    await program.methods
-      .checkAccounts()
-      .accounts({
-        payer: wallet.publicKey,
-        accountToCreate: accountToCreate.publicKey,
-        accountToChange: accountToChange.publicKey,
-      })
-      .rpc();
-  });
+describe("Bankrun example", async () => {
+	const context = await startAnchor(
+		"",
+		[{ name: "checking_account_program", programId: PROGRAM_ID }],
+		[],
+	);
+	const provider = new BankrunProvider(context);
+
+	const wallet = provider.wallet as anchor.Wallet;
+	const program = new anchor.Program<CheckingAccountProgram>(IDL, provider);
+	const client = context.banksClient;
+
+	// We'll create this ahead of time.
+	// Our program will try to modify it.
+	const accountToChange = new Keypair();
+	// Our program will create this.
+	const accountToCreate = new Keypair();
+
+	it("Create an account owned by our program", async () => {
+		const instruction = SystemProgram.createAccount({
+			fromPubkey: provider.wallet.publicKey,
+			newAccountPubkey: accountToChange.publicKey,
+			lamports: await provider.connection.getMinimumBalanceForRentExemption(0),
+			space: 0,
+			programId: program.programId, // Our program
+		});
+
+		const transaction = new Transaction();
+		const blockhash = context.lastBlockhash;
+
+		transaction.recentBlockhash = blockhash;
+		transaction.add(instruction).sign(wallet.payer, accountToChange);
+		await client.processTransaction(transaction);
+	});
+
+	it("Check accounts", async () => {
+		await program.methods
+			.checkAccounts()
+			.accounts({
+				payer: wallet.publicKey,
+				accountToCreate: accountToCreate.publicKey,
+				accountToChange: accountToChange.publicKey,
+			})
+			.rpc();
+	});
 });

+ 43 - 34
basics/checking-accounts/anchor/tests/test.ts

@@ -1,41 +1,50 @@
-import * as anchor from '@coral-xyz/anchor';
-import { Keypair, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js';
-import type { AnchorProgramExample } from '../target/types/anchor_program_example';
+import * as anchor from "@coral-xyz/anchor";
+import {
+	Keypair,
+	SystemProgram,
+	Transaction,
+	sendAndConfirmTransaction,
+} from "@solana/web3.js";
+import type { CheckingAccountProgram } from "../target/types/checking_account_program";
 
-describe('Anchor example', () => {
-  const provider = anchor.AnchorProvider.env();
-  anchor.setProvider(provider);
-  const program = anchor.workspace.AnchorProgramExample as anchor.Program<AnchorProgramExample>;
-  const wallet = provider.wallet as anchor.Wallet;
+describe("Anchor example", () => {
+	const provider = anchor.AnchorProvider.env();
+	anchor.setProvider(provider);
+	const program = anchor.workspace
+		.CheckingAccountProgram as anchor.Program<CheckingAccountProgram>;
+	const wallet = provider.wallet as anchor.Wallet;
 
-  // We'll create this ahead of time.
-  // Our program will try to modify it.
-  const accountToChange = new Keypair();
-  // Our program will create this.
-  const accountToCreate = new Keypair();
+	// We'll create this ahead of time.
+	// Our program will try to modify it.
+	const accountToChange = new Keypair();
+	// Our program will create this.
+	const accountToCreate = new Keypair();
 
-  it('Create an account owned by our program', async () => {
-    const instruction = SystemProgram.createAccount({
-      fromPubkey: provider.wallet.publicKey,
-      newAccountPubkey: accountToChange.publicKey,
-      lamports: await provider.connection.getMinimumBalanceForRentExemption(0),
-      space: 0,
-      programId: program.programId, // Our program
-    });
+	it("Create an account owned by our program", async () => {
+		const instruction = SystemProgram.createAccount({
+			fromPubkey: provider.wallet.publicKey,
+			newAccountPubkey: accountToChange.publicKey,
+			lamports: await provider.connection.getMinimumBalanceForRentExemption(0),
+			space: 0,
+			programId: program.programId, // Our program
+		});
 
-    const transaction = new Transaction().add(instruction);
+		const transaction = new Transaction().add(instruction);
 
-    await sendAndConfirmTransaction(provider.connection, transaction, [wallet.payer, accountToChange]);
-  });
+		await sendAndConfirmTransaction(provider.connection, transaction, [
+			wallet.payer,
+			accountToChange,
+		]);
+	});
 
-  it('Check accounts', async () => {
-    await program.methods
-      .checkAccounts()
-      .accounts({
-        payer: wallet.publicKey,
-        accountToCreate: accountToCreate.publicKey,
-        accountToChange: accountToChange.publicKey,
-      })
-      .rpc();
-  });
+	it("Check accounts", async () => {
+		await program.methods
+			.checkAccounts()
+			.accounts({
+				payer: wallet.publicKey,
+				accountToCreate: accountToCreate.publicKey,
+				accountToChange: accountToChange.publicKey,
+			})
+			.rpc();
+	});
 });

+ 1 - 0
basics/checking-accounts/native/package.json

@@ -1,4 +1,5 @@
 {
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts",
     "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",

+ 12 - 2
basics/checking-accounts/native/program/Cargo.toml

@@ -1,10 +1,20 @@
 [package]
-name = "checking-accounts-program"
+name = "checking-accounts-native-program"
 version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-solana-program = "2.0"
+solana-program.workspace = true
+solana-system-interface.workspace = true
 
 [lib]
 crate-type = ["cdylib", "lib"]
+
+[features]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
+
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 2 - 3
basics/checking-accounts/native/program/src/lib.rs

@@ -5,7 +5,6 @@ use solana_program::{
     msg,
     program_error::ProgramError,
     pubkey::Pubkey,
-    system_program,
 };
 
 entrypoint!(process_instruction);
@@ -17,7 +16,7 @@ fn process_instruction(
 ) -> ProgramResult {
     // You can verify the program ID from the instruction is in fact
     //      the program ID of your program.
-    if system_program::check_id(program_id) {
+    if solana_system_interface::program::check_id(program_id) {
         return Err(ProgramError::IncorrectProgramId);
     };
 
@@ -60,7 +59,7 @@ fn process_instruction(
     };
 
     // You can also check pubkeys against constants.
-    if system_program.key != &system_program::ID {
+    if system_program.key != &solana_system_interface::program::ID {
         return Err(ProgramError::IncorrectProgramId);
     };
 

+ 20 - 19
basics/close-account/anchor/package.json

@@ -1,21 +1,22 @@
 {
-  "scripts": {
-    "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
-    "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
-  },
-  "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@solana/web3.js": "^1.95.2"
-  },
-  "devDependencies": {
-    "anchor-bankrun": "^0.4.0",
-    "solana-bankrun": "^0.3.0",
-    "@types/bn.js": "^5.1.0",
-    "@types/chai": "^4.3.0",
-    "@types/mocha": "^9.0.0",
-    "chai": "^4.3.4",
-    "mocha": "^9.0.3",
-    "ts-mocha": "^10.0.0",
-    "typescript": "^4.3.5"
-  }
+	"scripts": {
+		"lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+		"lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+	},
+	"dependencies": {
+		"@coral-xyz/anchor": "0.32.1",
+		"@solana/web3.js": "^1.95.2"
+	},
+	"devDependencies": {
+		"@types/bn.js": "^5.1.0",
+		"@types/chai": "^4.3.0",
+		"@types/mocha": "^9.0.0",
+		"anchor-bankrun": "^0.4.0",
+		"chai": "^4.3.4",
+		"mocha": "^9.0.3",
+		"solana-bankrun": "^0.3.0",
+		"ts-mocha": "^10.0.0",
+		"typescript": "^4.3.5"
+	},
+	"type": "module"
 }

+ 39 - 60
basics/close-account/anchor/pnpm-lock.yaml

@@ -9,8 +9,8 @@ importers:
   .:
     dependencies:
       '@coral-xyz/anchor':
-        specifier: ^0.30.0
-        version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+        specifier: 0.32.1
+        version: 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js':
         specifier: ^1.95.2
         version: 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -26,7 +26,7 @@ importers:
         version: 9.1.1
       anchor-bankrun:
         specifier: ^0.4.0
-        version: 0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+        version: 0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
       chai:
         specifier: ^4.3.4
         version: 4.4.1
@@ -49,15 +49,19 @@ packages:
     resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
     engines: {node: '>=6.9.0'}
 
-  '@coral-xyz/anchor@0.30.0':
-    resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
-    engines: {node: '>=11'}
+  '@coral-xyz/anchor-errors@0.31.1':
+    resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==}
+    engines: {node: '>=10'}
+
+  '@coral-xyz/anchor@0.32.1':
+    resolution: {integrity: sha512-zAyxFtfeje2FbMA1wzgcdVs7Hng/MijPKpRijoySPCicnvcTQs/+dnPZ/cR+LcXM9v9UYSyW81uRNYZtN5G4yg==}
+    engines: {node: '>=17'}
 
-  '@coral-xyz/borsh@0.30.0':
-    resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+  '@coral-xyz/borsh@0.31.1':
+    resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==}
     engines: {node: '>=10'}
     peerDependencies:
-      '@solana/web3.js': ^1.68.0
+      '@solana/web3.js': ^1.69.0
 
   '@noble/curves@1.4.2':
     resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
@@ -66,6 +70,10 @@ packages:
     resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
     engines: {node: '>= 16'}
 
+  '@noble/hashes@1.8.0':
+    resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+    engines: {node: ^14.21.3 || >=16}
+
   '@solana/buffer-layout@4.0.1':
     resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
     engines: {node: '>=5.10'}
@@ -174,6 +182,9 @@ packages:
   bn.js@5.2.1:
     resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
+  bn.js@5.2.2:
+    resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
   borsh@0.7.0:
     resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
 
@@ -239,12 +250,8 @@ packages:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  cross-fetch@3.1.8:
-    resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==}
-
-  crypto-hash@1.3.0:
-    resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==}
-    engines: {node: '>=8'}
+  cross-fetch@3.2.0:
+    resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
 
   debug@4.3.3:
     resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
@@ -275,9 +282,6 @@ packages:
     resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
     engines: {node: '>=0.3.1'}
 
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
@@ -436,9 +440,6 @@ packages:
   loupe@2.3.7:
     resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
 
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
   make-error@1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
 
@@ -472,9 +473,6 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
   node-fetch@2.7.0:
     resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
     engines: {node: 4.x || >=6.0.0}
@@ -544,9 +542,6 @@ packages:
   serialize-javascript@6.0.0:
     resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
 
-  snake-case@3.0.4:
-    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
   solana-bankrun-darwin-arm64@0.3.0:
     resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
     engines: {node: '>= 10'}
@@ -747,20 +742,21 @@ snapshots:
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+  '@coral-xyz/anchor-errors@0.31.1': {}
+
+  '@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
     dependencies:
-      '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
-      '@noble/hashes': 1.4.0
+      '@coral-xyz/anchor-errors': 0.31.1
+      '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+      '@noble/hashes': 1.8.0
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       bs58: 4.0.1
       buffer-layout: 1.2.2
       camelcase: 6.3.0
-      cross-fetch: 3.1.8
-      crypto-hash: 1.3.0
+      cross-fetch: 3.2.0
       eventemitter3: 4.0.7
       pako: 2.1.0
-      snake-case: 3.0.4
       superstruct: 0.15.5
       toml: 3.0.0
     transitivePeerDependencies:
@@ -768,10 +764,10 @@ snapshots:
       - encoding
       - utf-8-validate
 
-  '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+  '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
     dependencies:
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       buffer-layout: 1.2.2
 
   '@noble/curves@1.4.2':
@@ -780,6 +776,8 @@ snapshots:
 
   '@noble/hashes@1.4.0': {}
 
+  '@noble/hashes@1.8.0': {}
+
   '@solana/buffer-layout@4.0.1':
     dependencies:
       buffer: 6.0.3
@@ -852,9 +850,9 @@ snapshots:
     dependencies:
       humanize-ms: 1.2.1
 
-  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
     dependencies:
-      '@coral-xyz/anchor': 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+      '@coral-xyz/anchor': 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       solana-bankrun: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
 
@@ -897,6 +895,8 @@ snapshots:
 
   bn.js@5.2.1: {}
 
+  bn.js@5.2.2: {}
+
   borsh@0.7.0:
     dependencies:
       bn.js: 5.2.1
@@ -981,14 +981,12 @@ snapshots:
 
   concat-map@0.0.1: {}
 
-  cross-fetch@3.1.8:
+  cross-fetch@3.2.0:
     dependencies:
       node-fetch: 2.7.0
     transitivePeerDependencies:
       - encoding
 
-  crypto-hash@1.3.0: {}
-
   debug@4.3.3(supports-color@8.1.1):
     dependencies:
       ms: 2.1.2
@@ -1007,11 +1005,6 @@ snapshots:
 
   diff@5.0.0: {}
 
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.2
-
   emoji-regex@8.0.0: {}
 
   es6-promise@4.2.8: {}
@@ -1154,10 +1147,6 @@ snapshots:
     dependencies:
       get-func-name: 2.0.2
 
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.6.2
-
   make-error@1.3.6: {}
 
   minimatch@3.1.2:
@@ -1207,11 +1196,6 @@ snapshots:
 
   nanoid@3.3.1: {}
 
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.6.2
-
   node-fetch@2.7.0:
     dependencies:
       whatwg-url: 5.0.0
@@ -1274,11 +1258,6 @@ snapshots:
     dependencies:
       randombytes: 2.1.0
 
-  snake-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.6.2
-
   solana-bankrun-darwin-arm64@0.3.0:
     optional: true
 

+ 7 - 1
basics/close-account/anchor/programs/close-account/Cargo.toml

@@ -15,6 +15,12 @@ no-entrypoint = []
 no-idl = []
 no-log-ix-name = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang = "0.31.1"
+anchor-lang = "0.32.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 0 - 2
basics/close-account/anchor/programs/close-account/src/lib.rs

@@ -1,5 +1,3 @@
-#![allow(clippy::result_large_err)]
-
 use anchor_lang::prelude::*;
 mod instructions;
 mod state;

+ 26 - 17
basics/close-account/anchor/tests/bankrun.test.ts

@@ -1,39 +1,47 @@
-import assert from 'node:assert';
-import { describe, it } from 'node:test';
-import * as anchor from '@coral-xyz/anchor';
-import { PublicKey } from '@solana/web3.js';
-import { BankrunProvider } from 'anchor-bankrun';
-import { startAnchor } from 'solana-bankrun';
-import type { CloseAccountProgram } from '../target/types/close_account_program';
+import assert from "node:assert";
+import { describe, it } from "node:test";
+import * as anchor from "@coral-xyz/anchor";
+import { PublicKey } from "@solana/web3.js";
+import { BankrunProvider } from "anchor-bankrun";
+import { startAnchor } from "solana-bankrun";
+import type { CloseAccountProgram } from "../target/types/close_account_program";
 
-const IDL = require('../target/idl/close_account_program.json');
+import IDL from "../target/idl/close_account_program.json" with { type: "json" };
 const PROGRAM_ID = new PublicKey(IDL.address);
 
-describe('close-an-account', async () => {
+describe("close-an-account", async () => {
   // Configure the client to use the local cluster.
-  const context = await startAnchor('', [{ name: 'close_account_program', programId: PROGRAM_ID }], []);
+  const context = await startAnchor(
+    "",
+    [{ name: "close_account_program", programId: PROGRAM_ID }],
+    [],
+  );
   const provider = new BankrunProvider(context);
 
   const payer = provider.wallet as anchor.Wallet;
   const program = new anchor.Program<CloseAccountProgram>(IDL, provider);
   // Derive the PDA for the user's account.
-  const [userAccountAddress] = PublicKey.findProgramAddressSync([Buffer.from('USER'), payer.publicKey.toBuffer()], program.programId);
+  const [userAccountAddress] = PublicKey.findProgramAddressSync(
+    [Buffer.from("USER"), payer.publicKey.toBuffer()],
+    program.programId,
+  );
 
-  it('Create Account', async () => {
+  it("Create Account", async () => {
     await program.methods
-      .createUser('John Doe')
+      .createUser("John Doe")
       .accounts({
         user: payer.publicKey,
       })
       .rpc();
 
     // Fetch the account data
-    const userAccount = await program.account.userState.fetch(userAccountAddress);
-    assert.equal(userAccount.name, 'John Doe');
+    const userAccount =
+      await program.account.userState.fetch(userAccountAddress);
+    assert.equal(userAccount.name, "John Doe");
     assert.equal(userAccount.user.toBase58(), payer.publicKey.toBase58());
   });
 
-  it('Close Account', async () => {
+  it("Close Account", async () => {
     await program.methods
       .closeUser()
       .accounts({
@@ -43,7 +51,8 @@ describe('close-an-account', async () => {
 
     // The account should no longer exist, returning null.
     try {
-      const userAccount = await program.account.userState.fetchNullable(userAccountAddress);
+      const userAccount =
+        await program.account.userState.fetchNullable(userAccountAddress);
       assert.equal(userAccount, null);
     } catch (err) {
       // Won't return null and will throw an error in anchor-bankrun'

+ 1 - 1
basics/close-account/anchor/tests/close-account.ts

@@ -1,6 +1,6 @@
 import assert from 'node:assert';
-import * as anchor from '@coral-xyz/anchor';
 import type { Program } from '@coral-xyz/anchor';
+import * as anchor from '@coral-xyz/anchor';
 import { PublicKey } from '@solana/web3.js';
 import type { CloseAccountProgram } from '../target/types/close_account_program';
 

+ 1 - 0
basics/close-account/native/package.json

@@ -1,4 +1,5 @@
 {
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tests/tsconfig.test.json -t 1000000 ./tests/close-account.test.ts",
     "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",

+ 12 - 3
basics/close-account/native/program/Cargo.toml

@@ -4,9 +4,18 @@ version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-borsh = "0.9.3"
-borsh-derive = "0.9.1"
-solana-program = "2.0"
+borsh.workspace = true
+borsh-derive.workspace = true
+solana-program.workspace = true
+solana-system-interface.workspace = true
 
 [lib]
 crate-type = ["cdylib", "lib"]
+
+[features]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 1 - 1
basics/close-account/native/program/src/instructions/close_user.rs

@@ -21,7 +21,7 @@ pub fn close_user(accounts: &[AccountInfo]) -> ProgramResult {
     **payer.lamports.borrow_mut() += diff;
 
     // Realloc the account to zero
-    target_account.realloc(account_span, true)?;
+    target_account.resize(account_span)?;
 
     // Assign the account to the System Program
     target_account.assign(system_program.key);

+ 2 - 3
basics/close-account/native/program/src/instructions/create_user.rs

@@ -5,7 +5,6 @@ use solana_program::{
     program::invoke_signed,
     pubkey::Pubkey,
     rent::Rent,
-    system_instruction,
     sysvar::Sysvar,
 };
 
@@ -17,7 +16,7 @@ pub fn create_user(program_id: &Pubkey, accounts: &[AccountInfo], data: User) ->
     let payer = next_account_info(accounts_iter)?;
     let system_program = next_account_info(accounts_iter)?;
 
-    let account_span = (data.try_to_vec()?).len();
+    let account_span = borsh::to_vec(&data)?.len();
     let lamports_required = (Rent::get()?).minimum_balance(account_span);
 
     let (_, bump) = Pubkey::find_program_address(
@@ -26,7 +25,7 @@ pub fn create_user(program_id: &Pubkey, accounts: &[AccountInfo], data: User) ->
     );
 
     invoke_signed(
-        &system_instruction::create_account(
+        &solana_system_interface::instruction::create_account(
             payer.key,
             target_account.key,
             lamports_required,

+ 6 - 6
basics/close-account/native/ts/instructions/index.ts

@@ -1,7 +1,7 @@
-export * from './create';
-export * from './close';
+export * from "./close";
+export * from "./create";
 
-export enum MyInstruction {
-  CreateUser = 0,
-  CloseUser = 1,
-}
+export const MyInstruction = {
+  CreateUser: 0,
+  CloseUser: 1,
+} as const;

+ 21 - 20
basics/counter/anchor/package.json

@@ -1,22 +1,23 @@
 {
-  "scripts": {
-    "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
-    "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
-  },
-  "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@solana/web3.js": "^1.95.2"
-  },
-  "devDependencies": {
-    "anchor-bankrun": "^0.4.0",
-    "solana-bankrun": "^0.3.0",
-    "@types/bn.js": "^5.1.0",
-    "@types/chai": "^4.3.0",
-    "@types/mocha": "^9.0.0",
-    "chai": "^4.3.4",
-    "mocha": "^9.0.3",
-    "prettier": "^2.6.2",
-    "ts-mocha": "^10.0.0",
-    "typescript": "^4.3.5"
-  }
+	"scripts": {
+		"lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+		"lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+	},
+	"dependencies": {
+		"@coral-xyz/anchor": "0.32.1",
+		"@solana/web3.js": "^1.95.2"
+	},
+	"devDependencies": {
+		"@types/bn.js": "^5.1.0",
+		"@types/chai": "^4.3.0",
+		"@types/mocha": "^9.0.0",
+		"anchor-bankrun": "^0.4.0",
+		"chai": "^4.3.4",
+		"mocha": "^9.0.3",
+		"prettier": "^2.6.2",
+		"solana-bankrun": "^0.3.0",
+		"ts-mocha": "^10.0.0",
+		"typescript": "^4.3.5"
+	},
+	"type": "module"
 }

+ 39 - 60
basics/counter/anchor/pnpm-lock.yaml

@@ -9,8 +9,8 @@ importers:
   .:
     dependencies:
       '@coral-xyz/anchor':
-        specifier: ^0.30.0
-        version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+        specifier: 0.32.1
+        version: 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js':
         specifier: ^1.95.2
         version: 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -26,7 +26,7 @@ importers:
         version: 9.1.1
       anchor-bankrun:
         specifier: ^0.4.0
-        version: 0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+        version: 0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
       chai:
         specifier: ^4.3.4
         version: 4.4.1
@@ -52,15 +52,19 @@ packages:
     resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
     engines: {node: '>=6.9.0'}
 
-  '@coral-xyz/anchor@0.30.0':
-    resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
-    engines: {node: '>=11'}
+  '@coral-xyz/anchor-errors@0.31.1':
+    resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==}
+    engines: {node: '>=10'}
+
+  '@coral-xyz/anchor@0.32.1':
+    resolution: {integrity: sha512-zAyxFtfeje2FbMA1wzgcdVs7Hng/MijPKpRijoySPCicnvcTQs/+dnPZ/cR+LcXM9v9UYSyW81uRNYZtN5G4yg==}
+    engines: {node: '>=17'}
 
-  '@coral-xyz/borsh@0.30.0':
-    resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+  '@coral-xyz/borsh@0.31.1':
+    resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==}
     engines: {node: '>=10'}
     peerDependencies:
-      '@solana/web3.js': ^1.68.0
+      '@solana/web3.js': ^1.69.0
 
   '@noble/curves@1.4.2':
     resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
@@ -69,6 +73,10 @@ packages:
     resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
     engines: {node: '>= 16'}
 
+  '@noble/hashes@1.8.0':
+    resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+    engines: {node: ^14.21.3 || >=16}
+
   '@solana/buffer-layout@4.0.1':
     resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
     engines: {node: '>=5.10'}
@@ -177,6 +185,9 @@ packages:
   bn.js@5.2.1:
     resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
+  bn.js@5.2.2:
+    resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
   borsh@0.7.0:
     resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
 
@@ -242,12 +253,8 @@ packages:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  cross-fetch@3.1.8:
-    resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==}
-
-  crypto-hash@1.3.0:
-    resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==}
-    engines: {node: '>=8'}
+  cross-fetch@3.2.0:
+    resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
 
   debug@4.3.3:
     resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
@@ -278,9 +285,6 @@ packages:
     resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
     engines: {node: '>=0.3.1'}
 
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
@@ -439,9 +443,6 @@ packages:
   loupe@2.3.7:
     resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
 
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
   make-error@1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
 
@@ -475,9 +476,6 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
   node-fetch@2.7.0:
     resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
     engines: {node: 4.x || >=6.0.0}
@@ -552,9 +550,6 @@ packages:
   serialize-javascript@6.0.0:
     resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
 
-  snake-case@3.0.4:
-    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
   solana-bankrun-darwin-arm64@0.3.0:
     resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
     engines: {node: '>= 10'}
@@ -755,20 +750,21 @@ snapshots:
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+  '@coral-xyz/anchor-errors@0.31.1': {}
+
+  '@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
     dependencies:
-      '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
-      '@noble/hashes': 1.4.0
+      '@coral-xyz/anchor-errors': 0.31.1
+      '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+      '@noble/hashes': 1.8.0
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       bs58: 4.0.1
       buffer-layout: 1.2.2
       camelcase: 6.3.0
-      cross-fetch: 3.1.8
-      crypto-hash: 1.3.0
+      cross-fetch: 3.2.0
       eventemitter3: 4.0.7
       pako: 2.1.0
-      snake-case: 3.0.4
       superstruct: 0.15.5
       toml: 3.0.0
     transitivePeerDependencies:
@@ -776,10 +772,10 @@ snapshots:
       - encoding
       - utf-8-validate
 
-  '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+  '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
     dependencies:
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       buffer-layout: 1.2.2
 
   '@noble/curves@1.4.2':
@@ -788,6 +784,8 @@ snapshots:
 
   '@noble/hashes@1.4.0': {}
 
+  '@noble/hashes@1.8.0': {}
+
   '@solana/buffer-layout@4.0.1':
     dependencies:
       buffer: 6.0.3
@@ -860,9 +858,9 @@ snapshots:
     dependencies:
       humanize-ms: 1.2.1
 
-  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
     dependencies:
-      '@coral-xyz/anchor': 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+      '@coral-xyz/anchor': 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       solana-bankrun: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
 
@@ -905,6 +903,8 @@ snapshots:
 
   bn.js@5.2.1: {}
 
+  bn.js@5.2.2: {}
+
   borsh@0.7.0:
     dependencies:
       bn.js: 5.2.1
@@ -989,14 +989,12 @@ snapshots:
 
   concat-map@0.0.1: {}
 
-  cross-fetch@3.1.8:
+  cross-fetch@3.2.0:
     dependencies:
       node-fetch: 2.7.0
     transitivePeerDependencies:
       - encoding
 
-  crypto-hash@1.3.0: {}
-
   debug@4.3.3(supports-color@8.1.1):
     dependencies:
       ms: 2.1.2
@@ -1015,11 +1013,6 @@ snapshots:
 
   diff@5.0.0: {}
 
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.2
-
   emoji-regex@8.0.0: {}
 
   es6-promise@4.2.8: {}
@@ -1162,10 +1155,6 @@ snapshots:
     dependencies:
       get-func-name: 2.0.2
 
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.6.2
-
   make-error@1.3.6: {}
 
   minimatch@3.1.2:
@@ -1215,11 +1204,6 @@ snapshots:
 
   nanoid@3.3.1: {}
 
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.6.2
-
   node-fetch@2.7.0:
     dependencies:
       whatwg-url: 5.0.0
@@ -1284,11 +1268,6 @@ snapshots:
     dependencies:
       randombytes: 2.1.0
 
-  snake-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.6.2
-
   solana-bankrun-darwin-arm64@0.3.0:
     optional: true
 

+ 7 - 1
basics/counter/anchor/programs/counter_anchor/Cargo.toml

@@ -15,6 +15,12 @@ no-entrypoint = []
 no-idl = []
 no-log-ix-name = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang =  "0.31.1"
+anchor-lang = "0.32.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 0 - 2
basics/counter/anchor/programs/counter_anchor/src/lib.rs

@@ -1,5 +1,3 @@
-#![allow(clippy::result_large_err)]
-
 use anchor_lang::prelude::*;
 
 declare_id!("BmDHboaj1kBUoinJKKSRqKfMeRKJqQqEbUj1VgzeQe4A");

+ 32 - 20
basics/counter/anchor/tests/bankrun.test.ts

@@ -1,19 +1,21 @@
-import { describe, it } from 'node:test';
-import * as anchor from '@coral-xyz/anchor';
-import type { Program } from '@coral-xyz/anchor';
-import { Keypair } from '@solana/web3.js';
-import { PublicKey } from '@solana/web3.js';
-import { BankrunProvider } from 'anchor-bankrun';
-import { assert } from 'chai';
-import { startAnchor } from 'solana-bankrun';
-import type { CounterAnchor } from '../target/types/counter_anchor';
-
-const IDL = require('../target/idl/counter_anchor.json');
+import { describe, it } from "node:test";
+import * as anchor from "@coral-xyz/anchor";
+import { Keypair, PublicKey } from "@solana/web3.js";
+import { BankrunProvider } from "anchor-bankrun";
+import { assert } from "chai";
+import { startAnchor } from "solana-bankrun";
+import type { CounterAnchor } from "../target/types/counter_anchor";
+
+import IDL from "../target/idl/counter_anchor.json" with { type: "json" };
 const PROGRAM_ID = new PublicKey(IDL.address);
 
-describe('counter_anchor', async () => {
+describe("counter_anchor", async () => {
   // Configure the client to use the anchor-bankrun
-  const context = await startAnchor('', [{ name: 'counter_anchor', programId: PROGRAM_ID }], []);
+  const context = await startAnchor(
+    "",
+    [{ name: "counter_anchor", programId: PROGRAM_ID }],
+    []
+  );
   const provider = new BankrunProvider(context);
 
   const payer = provider.wallet as anchor.Wallet;
@@ -22,7 +24,7 @@ describe('counter_anchor', async () => {
   // Generate a new keypair for the counter account
   const counterKeypair = new Keypair();
 
-  it('Initialize Counter', async () => {
+  it("Initialize Counter", async () => {
     await program.methods
       .initializeCounter()
       .accounts({
@@ -32,16 +34,26 @@ describe('counter_anchor', async () => {
       .signers([counterKeypair])
       .rpc();
 
-    const currentCount = await program.account.counter.fetch(counterKeypair.publicKey);
+    const currentCount = await program.account.counter.fetch(
+      counterKeypair.publicKey
+    );
 
-    assert(currentCount.count.toNumber() === 0, 'Expected initialized count to be 0');
+    assert(
+      currentCount.count.toNumber() === 0,
+      "Expected initialized count to be 0"
+    );
   });
 
-  it('Increment Counter', async () => {
-    await program.methods.increment().accounts({ counter: counterKeypair.publicKey }).rpc();
+  it("Increment Counter", async () => {
+    await program.methods
+      .increment()
+      .accounts({ counter: counterKeypair.publicKey })
+      .rpc();
 
-    const currentCount = await program.account.counter.fetch(counterKeypair.publicKey);
+    const currentCount = await program.account.counter.fetch(
+      counterKeypair.publicKey
+    );
 
-    assert(currentCount.count.toNumber() === 1, 'Expected  count to be 1');
+    assert(currentCount.count.toNumber() === 1, "Expected  count to be 1");
   });
 });

+ 1 - 1
basics/counter/anchor/tests/counter_anchor.ts

@@ -1,5 +1,5 @@
-import * as anchor from '@coral-xyz/anchor';
 import type { Program } from '@coral-xyz/anchor';
+import * as anchor from '@coral-xyz/anchor';
 import { Keypair } from '@solana/web3.js';
 import { assert } from 'chai';
 import type { CounterAnchor } from '../target/types/counter_anchor';

+ 6 - 0
basics/counter/mpl-stack/Cargo.toml

@@ -10,8 +10,14 @@ crate-type = ["cdylib", "lib"]
 no-entrypoint = []
 cpi = ["no-entrypoint"]
 default = []
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
 borsh = "0.9"
 shank = "0.0.8"
 solana-program = "2.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 2 - 2
basics/counter/mpl-stack/tests/counter.test.ts

@@ -4,14 +4,14 @@ import {
   Keypair,
   LAMPORTS_PER_SOL,
   SystemProgram,
+  sendAndConfirmTransaction,
   Transaction,
   type TransactionInstruction,
-  sendAndConfirmTransaction,
 } from '@solana/web3.js';
 import { BN } from 'bn.js';
 import { assert } from 'chai';
 
-import { Counter, PROGRAM_ID, createIncrementInstruction } from '../ts';
+import { Counter, createIncrementInstruction, PROGRAM_ID } from '../ts';
 
 function convertBignumToNumber(bignum: bignum): number {
   return new BN(bignum).toNumber();

+ 1 - 0
basics/counter/mpl-stack/ts/generated/index.ts

@@ -1,4 +1,5 @@
 import { PublicKey } from '@solana/web3.js';
+
 export * from './accounts';
 export * from './instructions';
 

+ 1 - 0
basics/counter/native/package.json

@@ -6,6 +6,7 @@
   "author": "ngundotra",
   "license": "Apache-2.0",
   "private": false,
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tests/tsconfig.test.json -t 1000000 ./tests/counter.test.ts",
     "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",

+ 9 - 2
basics/counter/native/program/Cargo.toml

@@ -10,7 +10,14 @@ crate-type = ["cdylib", "lib"]
 no-entrypoint = []
 cpi = ["no-entrypoint"]
 default = []
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-borsh = "0.9.3"
-solana-program = "2.0"
+borsh.workspace = true
+borsh-derive.workspace = true
+solana-program.workspace = true
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 2 - 2
basics/counter/native/tests/counter.test.ts

@@ -1,8 +1,8 @@
 import { describe, test } from 'node:test';
-import { Keypair, PublicKey, SystemProgram, Transaction, type TransactionInstruction } from '@solana/web3.js';
+import { Keypair, SystemProgram, Transaction, type TransactionInstruction } from '@solana/web3.js';
 import { assert } from 'chai';
 import { start } from 'solana-bankrun';
-import { COUNTER_ACCOUNT_SIZE, PROGRAM_ID, createIncrementInstruction, deserializeCounterAccount } from '../ts';
+import { COUNTER_ACCOUNT_SIZE, createIncrementInstruction, deserializeCounterAccount, PROGRAM_ID } from '../ts';
 
 describe('Counter Solana Native', async () => {
   // Randomly generate the program keypair and load the program to solana-bankrun

+ 2 - 1
basics/counter/native/ts/index.ts

@@ -1,5 +1,6 @@
 import { PublicKey } from '@solana/web3.js';
-export * from './instructions';
+
 export * from './accounts';
+export * from './instructions';
 
 export const PROGRAM_ID = new PublicKey('Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS');

+ 16 - 15
basics/create-account/anchor/package.json

@@ -1,17 +1,18 @@
 {
-  "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@solana/web3.js": "^1.95.2"
-  },
-  "devDependencies": {
-    "anchor-bankrun": "^0.4.0",
-    "solana-bankrun": "^0.3.0",
-    "@types/bn.js": "^5.1.0",
-    "@types/chai": "^4.3.0",
-    "@types/mocha": "^9.0.0",
-    "chai": "^4.4.1",
-    "mocha": "^9.0.3",
-    "ts-mocha": "^10.0.0",
-    "typescript": "^4.3.5"
-  }
+	"type": "module",
+	"dependencies": {
+		"@coral-xyz/anchor": "0.32.1",
+		"@solana/web3.js": "^1.95.2"
+	},
+	"devDependencies": {
+		"@types/bn.js": "^5.1.0",
+		"@types/chai": "^4.3.0",
+		"@types/mocha": "^9.0.0",
+		"anchor-bankrun": "^0.4.0",
+		"chai": "^4.4.1",
+		"mocha": "^9.0.3",
+		"solana-bankrun": "^0.3.0",
+		"ts-mocha": "^10.0.0",
+		"typescript": "^4.3.5"
+	}
 }

+ 39 - 60
basics/create-account/anchor/pnpm-lock.yaml

@@ -9,8 +9,8 @@ importers:
   .:
     dependencies:
       '@coral-xyz/anchor':
-        specifier: ^0.30.0
-        version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+        specifier: 0.32.1
+        version: 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js':
         specifier: ^1.95.2
         version: 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -26,7 +26,7 @@ importers:
         version: 9.1.1
       anchor-bankrun:
         specifier: ^0.4.0
-        version: 0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+        version: 0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
       chai:
         specifier: ^4.4.1
         version: 4.4.1
@@ -49,15 +49,19 @@ packages:
     resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
     engines: {node: '>=6.9.0'}
 
-  '@coral-xyz/anchor@0.30.0':
-    resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
-    engines: {node: '>=11'}
+  '@coral-xyz/anchor-errors@0.31.1':
+    resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==}
+    engines: {node: '>=10'}
+
+  '@coral-xyz/anchor@0.32.1':
+    resolution: {integrity: sha512-zAyxFtfeje2FbMA1wzgcdVs7Hng/MijPKpRijoySPCicnvcTQs/+dnPZ/cR+LcXM9v9UYSyW81uRNYZtN5G4yg==}
+    engines: {node: '>=17'}
 
-  '@coral-xyz/borsh@0.30.0':
-    resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+  '@coral-xyz/borsh@0.31.1':
+    resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==}
     engines: {node: '>=10'}
     peerDependencies:
-      '@solana/web3.js': ^1.68.0
+      '@solana/web3.js': ^1.69.0
 
   '@noble/curves@1.5.0':
     resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
@@ -66,6 +70,10 @@ packages:
     resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
     engines: {node: '>= 16'}
 
+  '@noble/hashes@1.8.0':
+    resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+    engines: {node: ^14.21.3 || >=16}
+
   '@solana/buffer-layout@4.0.1':
     resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
     engines: {node: '>=5.10'}
@@ -174,6 +182,9 @@ packages:
   bn.js@5.2.1:
     resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
+  bn.js@5.2.2:
+    resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
   borsh@0.7.0:
     resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
 
@@ -239,12 +250,8 @@ packages:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  cross-fetch@3.1.8:
-    resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==}
-
-  crypto-hash@1.3.0:
-    resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==}
-    engines: {node: '>=8'}
+  cross-fetch@3.2.0:
+    resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
 
   debug@4.3.3:
     resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
@@ -275,9 +282,6 @@ packages:
     resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
     engines: {node: '>=0.3.1'}
 
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
@@ -436,9 +440,6 @@ packages:
   loupe@2.3.7:
     resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
 
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
   make-error@1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
 
@@ -472,9 +473,6 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
   node-fetch@2.7.0:
     resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
     engines: {node: 4.x || >=6.0.0}
@@ -544,9 +542,6 @@ packages:
   serialize-javascript@6.0.0:
     resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
 
-  snake-case@3.0.4:
-    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
   solana-bankrun-darwin-arm64@0.3.0:
     resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
     engines: {node: '>= 10'}
@@ -747,20 +742,21 @@ snapshots:
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+  '@coral-xyz/anchor-errors@0.31.1': {}
+
+  '@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
     dependencies:
-      '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
-      '@noble/hashes': 1.4.0
+      '@coral-xyz/anchor-errors': 0.31.1
+      '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+      '@noble/hashes': 1.8.0
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       bs58: 4.0.1
       buffer-layout: 1.2.2
       camelcase: 6.3.0
-      cross-fetch: 3.1.8
-      crypto-hash: 1.3.0
+      cross-fetch: 3.2.0
       eventemitter3: 4.0.7
       pako: 2.1.0
-      snake-case: 3.0.4
       superstruct: 0.15.5
       toml: 3.0.0
     transitivePeerDependencies:
@@ -768,10 +764,10 @@ snapshots:
       - encoding
       - utf-8-validate
 
-  '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+  '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
     dependencies:
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       buffer-layout: 1.2.2
 
   '@noble/curves@1.5.0':
@@ -780,6 +776,8 @@ snapshots:
 
   '@noble/hashes@1.4.0': {}
 
+  '@noble/hashes@1.8.0': {}
+
   '@solana/buffer-layout@4.0.1':
     dependencies:
       buffer: 6.0.3
@@ -852,9 +850,9 @@ snapshots:
     dependencies:
       humanize-ms: 1.2.1
 
-  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
     dependencies:
-      '@coral-xyz/anchor': 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+      '@coral-xyz/anchor': 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       solana-bankrun: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
 
@@ -897,6 +895,8 @@ snapshots:
 
   bn.js@5.2.1: {}
 
+  bn.js@5.2.2: {}
+
   borsh@0.7.0:
     dependencies:
       bn.js: 5.2.1
@@ -981,14 +981,12 @@ snapshots:
 
   concat-map@0.0.1: {}
 
-  cross-fetch@3.1.8:
+  cross-fetch@3.2.0:
     dependencies:
       node-fetch: 2.7.0
     transitivePeerDependencies:
       - encoding
 
-  crypto-hash@1.3.0: {}
-
   debug@4.3.3(supports-color@8.1.1):
     dependencies:
       ms: 2.1.2
@@ -1007,11 +1005,6 @@ snapshots:
 
   diff@5.0.0: {}
 
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.2
-
   emoji-regex@8.0.0: {}
 
   es6-promise@4.2.8: {}
@@ -1154,10 +1147,6 @@ snapshots:
     dependencies:
       get-func-name: 2.0.2
 
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.6.2
-
   make-error@1.3.6: {}
 
   minimatch@3.1.2:
@@ -1207,11 +1196,6 @@ snapshots:
 
   nanoid@3.3.1: {}
 
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.6.2
-
   node-fetch@2.7.0:
     dependencies:
       whatwg-url: 5.0.0
@@ -1274,11 +1258,6 @@ snapshots:
     dependencies:
       randombytes: 2.1.0
 
-  snake-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.6.2
-
   solana-bankrun-darwin-arm64@0.3.0:
     optional: true
 

+ 7 - 1
basics/create-account/anchor/programs/create-system-account/Cargo.toml

@@ -15,6 +15,12 @@ no-entrypoint = []
 no-idl = []
 no-log-ix-name = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang = "0.31.1"
+anchor-lang = "0.32.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 0 - 2
basics/create-account/anchor/programs/create-system-account/src/lib.rs

@@ -1,5 +1,3 @@
-#![allow(clippy::result_large_err)]
-
 use anchor_lang::prelude::*;
 use anchor_lang::system_program::{create_account, CreateAccount};
 

+ 15 - 12
basics/create-account/anchor/tests/bankrun.test.ts

@@ -1,24 +1,27 @@
-import { describe, it } from 'node:test';
-import * as anchor from '@coral-xyz/anchor';
-import { PublicKey } from '@solana/web3.js';
-import { Keypair, SystemProgram } from '@solana/web3.js';
-import { BankrunProvider } from 'anchor-bankrun';
-import { assert } from 'chai';
-import { startAnchor } from 'solana-bankrun';
-import type { CreateSystemAccount } from '../target/types/create_system_account';
+import { describe, it } from "node:test";
+import * as anchor from "@coral-xyz/anchor";
+import { Keypair, PublicKey } from "@solana/web3.js";
+import { BankrunProvider } from "anchor-bankrun";
+import { assert } from "chai";
+import { startAnchor } from "solana-bankrun";
+import type { CreateSystemAccount } from "../target/types/create_system_account";
 
-const IDL = require('../target/idl/create_system_account.json');
+import IDL from "../target/idl/create_system_account.json" with { type: "json" };
 const PROGRAM_ID = new PublicKey(IDL.address);
 
-describe('Create a system account', async () => {
-  const context = await startAnchor('', [{ name: 'create_system_account', programId: PROGRAM_ID }], []);
+describe("Create a system account", async () => {
+  const context = await startAnchor(
+    "",
+    [{ name: "create_system_account", programId: PROGRAM_ID }],
+    [],
+  );
   const provider = new BankrunProvider(context);
 
   const wallet = provider.wallet as anchor.Wallet;
   const program = new anchor.Program<CreateSystemAccount>(IDL, provider);
   const connection = provider.connection;
 
-  it('Create the account', async () => {
+  it("Create the account", async () => {
     // Generate a new keypair for the new account
     const newKeypair = new Keypair();
 

+ 1 - 1
basics/create-account/anchor/tests/test.ts

@@ -1,5 +1,5 @@
 import * as anchor from '@coral-xyz/anchor';
-import { Keypair, SystemProgram } from '@solana/web3.js';
+import { Keypair } from '@solana/web3.js';
 import { assert } from 'chai';
 import type { CreateSystemAccount } from '../target/types/create_system_account';
 

+ 1 - 0
basics/create-account/native/package.json

@@ -1,4 +1,5 @@
 {
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts",
     "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",

+ 10 - 1
basics/create-account/native/program/Cargo.toml

@@ -4,7 +4,16 @@ version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-solana-program = "2.0"
+solana-program.workspace = true
+solana-system-interface.workspace = true
 
 [lib]
 crate-type = ["cdylib", "lib"]
+
+[features]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 2 - 3
basics/create-account/native/program/src/lib.rs

@@ -6,7 +6,6 @@ use solana_program::{
     native_token::LAMPORTS_PER_SOL,
     program::invoke,
     pubkey::Pubkey,
-    system_instruction, system_program,
 };
 
 entrypoint!(process_instruction);
@@ -25,12 +24,12 @@ fn process_instruction(
     msg!("  New public key will be: {}", &new_account.key.to_string());
 
     invoke(
-        &system_instruction::create_account(
+        &solana_system_interface::instruction::create_account(
             payer.key,
             new_account.key,
             LAMPORTS_PER_SOL,
             0,
-            &system_program::ID,
+            &solana_system_interface::program::ID,
         ),
         &[payer.clone(), new_account.clone(), system_program.clone()],
     )?;

+ 21 - 20
basics/cross-program-invocation/anchor/package.json

@@ -1,22 +1,23 @@
 {
-  "scripts": {
-    "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
-    "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
-  },
-  "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@solana/web3.js": "^1.95.2"
-  },
-  "devDependencies": {
-    "anchor-bankrun": "^0.4.0",
-    "solana-bankrun": "^0.3.0",
-    "chai": "^4.3.4",
-    "mocha": "^9.0.3",
-    "ts-mocha": "^10.0.0",
-    "@types/bn.js": "^5.1.0",
-    "@types/chai": "^4.3.0",
-    "@types/mocha": "^9.0.0",
-    "typescript": "^4.3.5",
-    "prettier": "^2.6.2"
-  }
+	"type": "module",
+	"scripts": {
+		"lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+		"lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+	},
+	"dependencies": {
+		"@coral-xyz/anchor": "0.32.1",
+		"@solana/web3.js": "^1.95.2"
+	},
+	"devDependencies": {
+		"@types/bn.js": "^5.1.0",
+		"@types/chai": "^4.3.0",
+		"@types/mocha": "^9.0.0",
+		"anchor-bankrun": "^0.4.0",
+		"chai": "^4.3.4",
+		"mocha": "^9.0.3",
+		"prettier": "^2.6.2",
+		"solana-bankrun": "^0.3.0",
+		"ts-mocha": "^10.0.0",
+		"typescript": "^4.3.5"
+	}
 }

+ 39 - 60
basics/cross-program-invocation/anchor/pnpm-lock.yaml

@@ -9,8 +9,8 @@ importers:
   .:
     dependencies:
       '@coral-xyz/anchor':
-        specifier: ^0.30.0
-        version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+        specifier: 0.32.1
+        version: 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js':
         specifier: ^1.95.2
         version: 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -26,7 +26,7 @@ importers:
         version: 9.1.1
       anchor-bankrun:
         specifier: ^0.4.0
-        version: 0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+        version: 0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
       chai:
         specifier: ^4.3.4
         version: 4.4.1
@@ -52,15 +52,19 @@ packages:
     resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
     engines: {node: '>=6.9.0'}
 
-  '@coral-xyz/anchor@0.30.0':
-    resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
-    engines: {node: '>=11'}
+  '@coral-xyz/anchor-errors@0.31.1':
+    resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==}
+    engines: {node: '>=10'}
+
+  '@coral-xyz/anchor@0.32.1':
+    resolution: {integrity: sha512-zAyxFtfeje2FbMA1wzgcdVs7Hng/MijPKpRijoySPCicnvcTQs/+dnPZ/cR+LcXM9v9UYSyW81uRNYZtN5G4yg==}
+    engines: {node: '>=17'}
 
-  '@coral-xyz/borsh@0.30.0':
-    resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+  '@coral-xyz/borsh@0.31.1':
+    resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==}
     engines: {node: '>=10'}
     peerDependencies:
-      '@solana/web3.js': ^1.68.0
+      '@solana/web3.js': ^1.69.0
 
   '@noble/curves@1.5.0':
     resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
@@ -69,6 +73,10 @@ packages:
     resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
     engines: {node: '>= 16'}
 
+  '@noble/hashes@1.8.0':
+    resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+    engines: {node: ^14.21.3 || >=16}
+
   '@solana/buffer-layout@4.0.1':
     resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
     engines: {node: '>=5.10'}
@@ -177,6 +185,9 @@ packages:
   bn.js@5.2.1:
     resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
+  bn.js@5.2.2:
+    resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
   borsh@0.7.0:
     resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
 
@@ -242,12 +253,8 @@ packages:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  cross-fetch@3.1.8:
-    resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==}
-
-  crypto-hash@1.3.0:
-    resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==}
-    engines: {node: '>=8'}
+  cross-fetch@3.2.0:
+    resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
 
   debug@4.3.3:
     resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
@@ -278,9 +285,6 @@ packages:
     resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
     engines: {node: '>=0.3.1'}
 
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
@@ -439,9 +443,6 @@ packages:
   loupe@2.3.7:
     resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
 
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
   make-error@1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
 
@@ -475,9 +476,6 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
   node-fetch@2.7.0:
     resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
     engines: {node: 4.x || >=6.0.0}
@@ -552,9 +550,6 @@ packages:
   serialize-javascript@6.0.0:
     resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
 
-  snake-case@3.0.4:
-    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
   solana-bankrun-darwin-arm64@0.3.0:
     resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
     engines: {node: '>= 10'}
@@ -755,20 +750,21 @@ snapshots:
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+  '@coral-xyz/anchor-errors@0.31.1': {}
+
+  '@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
     dependencies:
-      '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
-      '@noble/hashes': 1.4.0
+      '@coral-xyz/anchor-errors': 0.31.1
+      '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+      '@noble/hashes': 1.8.0
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       bs58: 4.0.1
       buffer-layout: 1.2.2
       camelcase: 6.3.0
-      cross-fetch: 3.1.8
-      crypto-hash: 1.3.0
+      cross-fetch: 3.2.0
       eventemitter3: 4.0.7
       pako: 2.1.0
-      snake-case: 3.0.4
       superstruct: 0.15.5
       toml: 3.0.0
     transitivePeerDependencies:
@@ -776,10 +772,10 @@ snapshots:
       - encoding
       - utf-8-validate
 
-  '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+  '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
     dependencies:
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       buffer-layout: 1.2.2
 
   '@noble/curves@1.5.0':
@@ -788,6 +784,8 @@ snapshots:
 
   '@noble/hashes@1.4.0': {}
 
+  '@noble/hashes@1.8.0': {}
+
   '@solana/buffer-layout@4.0.1':
     dependencies:
       buffer: 6.0.3
@@ -860,9 +858,9 @@ snapshots:
     dependencies:
       humanize-ms: 1.2.1
 
-  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
     dependencies:
-      '@coral-xyz/anchor': 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+      '@coral-xyz/anchor': 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       solana-bankrun: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
 
@@ -905,6 +903,8 @@ snapshots:
 
   bn.js@5.2.1: {}
 
+  bn.js@5.2.2: {}
+
   borsh@0.7.0:
     dependencies:
       bn.js: 5.2.1
@@ -989,14 +989,12 @@ snapshots:
 
   concat-map@0.0.1: {}
 
-  cross-fetch@3.1.8:
+  cross-fetch@3.2.0:
     dependencies:
       node-fetch: 2.7.0
     transitivePeerDependencies:
       - encoding
 
-  crypto-hash@1.3.0: {}
-
   debug@4.3.3(supports-color@8.1.1):
     dependencies:
       ms: 2.1.2
@@ -1015,11 +1013,6 @@ snapshots:
 
   diff@5.0.0: {}
 
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.2
-
   emoji-regex@8.0.0: {}
 
   es6-promise@4.2.8: {}
@@ -1162,10 +1155,6 @@ snapshots:
     dependencies:
       get-func-name: 2.0.2
 
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.6.2
-
   make-error@1.3.6: {}
 
   minimatch@3.1.2:
@@ -1215,11 +1204,6 @@ snapshots:
 
   nanoid@3.3.1: {}
 
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.6.2
-
   node-fetch@2.7.0:
     dependencies:
       whatwg-url: 5.0.0
@@ -1284,11 +1268,6 @@ snapshots:
     dependencies:
       randombytes: 2.1.0
 
-  snake-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.6.2
-
   solana-bankrun-darwin-arm64@0.3.0:
     optional: true
 

+ 7 - 1
basics/cross-program-invocation/anchor/programs/hand/Cargo.toml

@@ -15,6 +15,12 @@ no-entrypoint = []
 no-idl = []
 no-log-ix-name = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang = "0.31.1"
+anchor-lang = "0.32.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 7 - 1
basics/cross-program-invocation/anchor/programs/lever/Cargo.toml

@@ -15,6 +15,12 @@ no-entrypoint = []
 no-idl = []
 no-log-ix-name = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang = "0.31.1"
+anchor-lang = "0.32.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 2 - 2
basics/cross-program-invocation/anchor/tests/bankrun.test.ts

@@ -6,8 +6,8 @@ import { startAnchor } from 'solana-bankrun';
 import type { Hand } from '../target/types/hand';
 import type { Lever } from '../target/types/lever';
 
-const HAND_IDL = require('../target/idl/hand.json');
-const LEVER_IDL = require('../target/idl/lever.json');
+import HAND_IDL from "../target/idl/hand.json" with { type: "json" };
+import LEVER_IDL from "../target/idl/lever.json" with { type: "json" };
 const HAND_PROGRAM_ID = new PublicKey(HAND_IDL.address);
 const LEVER_PROGRAM_ID = new PublicKey(LEVER_IDL.address);
 

+ 1 - 1
basics/cross-program-invocation/anchor/tests/cpi.ts

@@ -1,5 +1,5 @@
-import * as anchor from '@coral-xyz/anchor';
 import type { Program } from '@coral-xyz/anchor';
+import * as anchor from '@coral-xyz/anchor';
 import type { Hand } from '../target/types/hand';
 import type { Lever } from '../target/types/lever';
 

+ 1 - 0
basics/cross-program-invocation/native/package.json

@@ -1,4 +1,5 @@
 {
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts",
     "build-and-test": "cargo build-sbf --sbf-out-dir=./tests/fixtures && pnpm test",

+ 4 - 3
basics/cross-program-invocation/native/programs/hand/Cargo.toml

@@ -8,10 +8,11 @@ no-entrypoint = []
 cpi = ["no-entrypoint"]
 
 [dependencies]
-borsh = "0.10"
-borsh-derive = "0.10"
-solana-program = "2.0"
+borsh = "1.5.7"
+borsh-derive = "1.5.7"
+solana-program = "3.0"
 cross-program-invocatio-native-lever = { path = "../lever", features = ["cpi"] }
 
+
 [lib]
 crate-type = ["cdylib", "lib"]

+ 4 - 3
basics/cross-program-invocation/native/programs/lever/Cargo.toml

@@ -8,9 +8,10 @@ no-entrypoint = []
 cpi = ["no-entrypoint"]
 
 [dependencies]
-borsh = "0.10"
-borsh-derive = "0.10"
-solana-program = "2.0"
+borsh = "1.5.7"
+borsh-derive = "1.5.7"
+solana-program = "3.0"
+solana-system-interface = {version = "2.0.0", features = ["bincode"]}
 
 [lib]
 crate-type = ["cdylib", "lib"]

+ 2 - 3
basics/cross-program-invocation/native/programs/lever/src/lib.rs

@@ -9,7 +9,6 @@ use solana_program::{
     program_error::ProgramError,
     pubkey::Pubkey,
     rent::Rent,
-    system_instruction,
     sysvar::Sysvar,
 };
 
@@ -42,11 +41,11 @@ pub fn initialize(
     let user = next_account_info(accounts_iter)?;
     let system_program = next_account_info(accounts_iter)?;
 
-    let account_span = (power_status.try_to_vec()?).len();
+    let account_span = borsh::to_vec(&power_status)?.len();
     let lamports_required = (Rent::get()?).minimum_balance(account_span);
 
     invoke(
-        &system_instruction::create_account(
+        &solana_system_interface::instruction::create_account(
             user.key,
             power.key,
             lamports_required,

+ 1 - 1
basics/cross-program-invocation/native/tests/test.ts

@@ -1,5 +1,5 @@
 import { Buffer } from 'node:buffer';
-import { Connection, Keypair, SystemProgram, Transaction, TransactionInstruction, sendAndConfirmTransaction } from '@solana/web3.js';
+import { Connection, Keypair, SystemProgram, sendAndConfirmTransaction, Transaction, TransactionInstruction } from '@solana/web3.js';
 import * as borsh from 'borsh';
 
 function createKeypairFromFile(path: string): Keypair {

+ 23 - 22
basics/favorites/anchor/package.json

@@ -1,24 +1,25 @@
 {
-  "scripts": {
-    "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
-    "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
-  },
-  "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@solana-developers/helpers": "^2.0.0",
-    "@solana/web3.js": "^1.95.2"
-  },
-  "license": "MIT",
-  "devDependencies": {
-    "anchor-bankrun": "^0.4.0",
-    "solana-bankrun": "^0.3.0",
-    "@types/bn.js": "^5.1.0",
-    "@types/chai": "^4.3.0",
-    "@types/mocha": "^9.0.0",
-    "chai": "^4.3.4",
-    "mocha": "^9.0.3",
-    "prettier": "^2.6.2",
-    "ts-mocha": "^10.0.0",
-    "typescript": "^4.3.5"
-  }
+	"type": "module",
+	"scripts": {
+		"lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+		"lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+	},
+	"dependencies": {
+		"@coral-xyz/anchor": "0.32.1",
+		"@solana-developers/helpers": "^2.0.0",
+		"@solana/web3.js": "^1.95.2"
+	},
+	"license": "MIT",
+	"devDependencies": {
+		"@types/bn.js": "^5.1.0",
+		"@types/chai": "^4.3.0",
+		"@types/mocha": "^9.0.0",
+		"anchor-bankrun": "^0.4.0",
+		"chai": "^4.3.4",
+		"mocha": "^9.0.3",
+		"prettier": "^2.6.2",
+		"solana-bankrun": "^0.3.0",
+		"ts-mocha": "^10.0.0",
+		"typescript": "^4.3.5"
+	}
 }

+ 39 - 60
basics/favorites/anchor/pnpm-lock.yaml

@@ -9,8 +9,8 @@ importers:
   .:
     dependencies:
       '@coral-xyz/anchor':
-        specifier: ^0.30.0
-        version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+        specifier: 0.32.1
+        version: 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana-developers/helpers':
         specifier: ^2.0.0
         version: 2.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -29,7 +29,7 @@ importers:
         version: 9.1.1
       anchor-bankrun:
         specifier: ^0.4.0
-        version: 0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+        version: 0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
       chai:
         specifier: ^4.3.4
         version: 4.4.1
@@ -55,15 +55,19 @@ packages:
     resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
     engines: {node: '>=6.9.0'}
 
-  '@coral-xyz/anchor@0.30.0':
-    resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
-    engines: {node: '>=11'}
+  '@coral-xyz/anchor-errors@0.31.1':
+    resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==}
+    engines: {node: '>=10'}
+
+  '@coral-xyz/anchor@0.32.1':
+    resolution: {integrity: sha512-zAyxFtfeje2FbMA1wzgcdVs7Hng/MijPKpRijoySPCicnvcTQs/+dnPZ/cR+LcXM9v9UYSyW81uRNYZtN5G4yg==}
+    engines: {node: '>=17'}
 
-  '@coral-xyz/borsh@0.30.0':
-    resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+  '@coral-xyz/borsh@0.31.1':
+    resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==}
     engines: {node: '>=10'}
     peerDependencies:
-      '@solana/web3.js': ^1.68.0
+      '@solana/web3.js': ^1.69.0
 
   '@noble/curves@1.4.2':
     resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
@@ -72,6 +76,10 @@ packages:
     resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
     engines: {node: '>= 16'}
 
+  '@noble/hashes@1.8.0':
+    resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+    engines: {node: ^14.21.3 || >=16}
+
   '@solana-developers/helpers@2.3.0':
     resolution: {integrity: sha512-OVdm/RJ9OMI23AnBYX/8UWuNtHRUxaXRUzhXo4WRtXYPHdQ+jTFS2TsjKSJ/F3a0kUZ6nN0b5TekFZvqYF0Qdg==}
 
@@ -186,6 +194,9 @@ packages:
   bn.js@5.2.1:
     resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
+  bn.js@5.2.2:
+    resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
   borsh@0.7.0:
     resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
 
@@ -254,12 +265,8 @@ packages:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  cross-fetch@3.1.8:
-    resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==}
-
-  crypto-hash@1.3.0:
-    resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==}
-    engines: {node: '>=8'}
+  cross-fetch@3.2.0:
+    resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
 
   debug@4.3.3:
     resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
@@ -290,9 +297,6 @@ packages:
     resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
     engines: {node: '>=0.3.1'}
 
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
   dotenv@16.4.5:
     resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
     engines: {node: '>=12'}
@@ -457,9 +461,6 @@ packages:
   loupe@2.3.7:
     resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
 
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
   make-error@1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
 
@@ -493,9 +494,6 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
   node-fetch@2.7.0:
     resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
     engines: {node: 4.x || >=6.0.0}
@@ -570,9 +568,6 @@ packages:
   serialize-javascript@6.0.0:
     resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
 
-  snake-case@3.0.4:
-    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
   solana-bankrun-darwin-arm64@0.3.0:
     resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
     engines: {node: '>= 10'}
@@ -773,20 +768,21 @@ snapshots:
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+  '@coral-xyz/anchor-errors@0.31.1': {}
+
+  '@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
     dependencies:
-      '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
-      '@noble/hashes': 1.4.0
+      '@coral-xyz/anchor-errors': 0.31.1
+      '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+      '@noble/hashes': 1.8.0
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       bs58: 4.0.1
       buffer-layout: 1.2.2
       camelcase: 6.3.0
-      cross-fetch: 3.1.8
-      crypto-hash: 1.3.0
+      cross-fetch: 3.2.0
       eventemitter3: 4.0.7
       pako: 2.1.0
-      snake-case: 3.0.4
       superstruct: 0.15.5
       toml: 3.0.0
     transitivePeerDependencies:
@@ -794,10 +790,10 @@ snapshots:
       - encoding
       - utf-8-validate
 
-  '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+  '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
     dependencies:
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       buffer-layout: 1.2.2
 
   '@noble/curves@1.4.2':
@@ -806,6 +802,8 @@ snapshots:
 
   '@noble/hashes@1.4.0': {}
 
+  '@noble/hashes@1.8.0': {}
+
   '@solana-developers/helpers@2.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
     dependencies:
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -888,9 +886,9 @@ snapshots:
     dependencies:
       humanize-ms: 1.2.1
 
-  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
     dependencies:
-      '@coral-xyz/anchor': 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+      '@coral-xyz/anchor': 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       solana-bankrun: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
 
@@ -935,6 +933,8 @@ snapshots:
 
   bn.js@5.2.1: {}
 
+  bn.js@5.2.2: {}
+
   borsh@0.7.0:
     dependencies:
       bn.js: 5.2.1
@@ -1023,14 +1023,12 @@ snapshots:
 
   concat-map@0.0.1: {}
 
-  cross-fetch@3.1.8:
+  cross-fetch@3.2.0:
     dependencies:
       node-fetch: 2.7.0
     transitivePeerDependencies:
       - encoding
 
-  crypto-hash@1.3.0: {}
-
   debug@4.3.3(supports-color@8.1.1):
     dependencies:
       ms: 2.1.2
@@ -1049,11 +1047,6 @@ snapshots:
 
   diff@5.0.0: {}
 
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.3
-
   dotenv@16.4.5: {}
 
   emoji-regex@8.0.0: {}
@@ -1198,10 +1191,6 @@ snapshots:
     dependencies:
       get-func-name: 2.0.2
 
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.6.3
-
   make-error@1.3.6: {}
 
   minimatch@3.1.2:
@@ -1251,11 +1240,6 @@ snapshots:
 
   nanoid@3.3.1: {}
 
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.6.3
-
   node-fetch@2.7.0:
     dependencies:
       whatwg-url: 5.0.0
@@ -1320,11 +1304,6 @@ snapshots:
     dependencies:
       randombytes: 2.1.0
 
-  snake-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.6.3
-
   solana-bankrun-darwin-arm64@0.3.0:
     optional: true
 

+ 7 - 2
basics/favorites/anchor/programs/favorites/Cargo.toml

@@ -15,7 +15,12 @@ no-log-ix-name = []
 cpi = ["no-entrypoint"]
 default = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang = {version = "0.31.1", features = ["init-if-needed"]}
-solana-program = "=2.0.3"
+anchor-lang = {version = "0.32.1", features = ["init-if-needed"]}
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 12 - 7
basics/favorites/anchor/programs/favorites/src/lib.rs

@@ -6,13 +6,18 @@ declare_id!("ww9C83noARSQVBnqmCUmaVdbJjmiwcV9j2LkXYMoUCV");
 // Anchor programs always use 8 bits for the discriminator
 pub const ANCHOR_DISCRIMINATOR_SIZE: usize = 8;
 
-// Our Solana program! 
+// Our Solana program!
 #[program]
 pub mod favorites {
     use super::*;
 
     // Our instruction handler! It sets the user's favorite number and color
-    pub fn set_favorites(context: Context<SetFavorites>, number: u64, color: String, hobbies: Vec<String>) -> Result<()> {
+    pub fn set_favorites(
+        context: Context<SetFavorites>,
+        number: u64,
+        color: String,
+        hobbies: Vec<String>,
+    ) -> Result<()> {
         msg!("Greetings from {}", context.program_id);
         let user_public_key = context.accounts.user.key();
         msg!(
@@ -22,7 +27,7 @@ pub mod favorites {
         context.accounts.favorites.set_inner(Favorites {
             number,
             color,
-            hobbies
+            hobbies,
         });
         Ok(())
     }
@@ -40,7 +45,7 @@ pub struct Favorites {
     pub color: String,
 
     #[max_len(5, 50)]
-    pub hobbies: Vec<String>
+    pub hobbies: Vec<String>,
 }
 // When people call the set_favorites instruction, they will need to provide the accounts that will be modifed. This keeps Solana fast!
 #[derive(Accounts)]
@@ -49,9 +54,9 @@ pub struct SetFavorites<'info> {
     pub user: Signer<'info>,
 
     #[account(
-        init_if_needed, 
-        payer = user, 
-        space = ANCHOR_DISCRIMINATOR_SIZE + Favorites::INIT_SPACE, 
+        init_if_needed,
+        payer = user,
+        space = ANCHOR_DISCRIMINATOR_SIZE + Favorites::INIT_SPACE,
         seeds=[b"favorites", user.key().as_ref()],
         bump
     )]

+ 35 - 22
basics/favorites/anchor/tests/favorites-bankrun.test.ts

@@ -1,21 +1,25 @@
-import { describe, it } from 'node:test';
-import * as anchor from '@coral-xyz/anchor';
-import { getCustomErrorMessage } from '@solana-developers/helpers';
-import { PublicKey } from '@solana/web3.js';
-import { BankrunProvider } from 'anchor-bankrun';
-import { assert } from 'chai';
-import { startAnchor } from 'solana-bankrun';
-import type { Favorites } from '../target/types/favorites';
-import { systemProgramErrors } from './system-errors';
+import { describe, it } from "node:test";
+import * as anchor from "@coral-xyz/anchor";
+import { PublicKey } from "@solana/web3.js";
+import { getCustomErrorMessage } from "@solana-developers/helpers";
+import { BankrunProvider } from "anchor-bankrun";
+import { assert } from "chai";
+import { startAnchor } from "solana-bankrun";
+import type { Favorites } from "../target/types/favorites";
+import { systemProgramErrors } from "./system-errors";
 
 const web3 = anchor.web3;
-const IDL = require('../target/idl/favorites.json');
+import IDL from "../target/idl/favorites.json";
 const PROGRAM_ID = new PublicKey(IDL.address);
 
-describe('Favorites Bankrun', async () => {
+describe("Favorites Bankrun", async () => {
   // Use the cluster and the keypair from Anchor.toml
   // Load programs into anchor-bankrun
-  const context = await startAnchor('', [{ name: 'favorites', programId: PROGRAM_ID }], []);
+  const context = await startAnchor(
+    "",
+    [{ name: "favorites", programId: PROGRAM_ID }],
+    [],
+  );
   const provider = new BankrunProvider(context);
   anchor.setProvider(provider);
   const user = (provider.wallet as anchor.Wallet).payer;
@@ -25,8 +29,8 @@ describe('Favorites Bankrun', async () => {
 
   // Here's what we want to write to the blockchain
   const favoriteNumber = new anchor.BN(23);
-  const favoriteColor = 'purple';
-  const favoriteHobbies = ['skiing', 'skydiving', 'biking'];
+  const favoriteColor = "purple";
+  const favoriteHobbies = ["skiing", "skydiving", "biking"];
 
   // We don't need to airdrop if we're using the local cluster
   // because the local cluster gives us 1,000,000 SOL
@@ -35,7 +39,7 @@ describe('Favorites Bankrun', async () => {
   const formattedBalance = new Intl.NumberFormat().format(balanceInSOL);
   console.log(`Balance: ${formattedBalance} SOL`);
 
-  it('Writes our favorites to the blockchain', async () => {
+  it("Writes our favorites to the blockchain", async () => {
     await program.methods
       // set_favourites in Rust becomes setFavorites in TypeScript
       .setFavorites(favoriteNumber, favoriteColor, favoriteHobbies)
@@ -45,7 +49,10 @@ describe('Favorites Bankrun', async () => {
       .rpc();
 
     // Find the PDA for the user's favorites
-    const favoritesPdaAndBump = web3.PublicKey.findProgramAddressSync([Buffer.from('favorites'), user.publicKey.toBuffer()], program.programId);
+    const favoritesPdaAndBump = web3.PublicKey.findProgramAddressSync(
+      [Buffer.from("favorites"), user.publicKey.toBuffer()],
+      program.programId,
+    );
     const favoritesPda = favoritesPdaAndBump[0];
     const dataFromPda = await program.account.favorites.fetch(favoritesPda);
     // And make sure it matches!
@@ -56,18 +63,24 @@ describe('Favorites Bankrun', async () => {
     assert.deepEqual(dataFromPda.hobbies, favoriteHobbies);
   });
 
-  it('Updates the favorites', async () => {
-    const newFavoriteHobbies = ['skiing', 'skydiving', 'biking', 'swimming'];
+  it("Updates the favorites", async () => {
+    const newFavoriteHobbies = ["skiing", "skydiving", "biking", "swimming"];
     try {
-      await program.methods.setFavorites(favoriteNumber, favoriteColor, newFavoriteHobbies).signers([user]).rpc();
+      await program.methods
+        .setFavorites(favoriteNumber, favoriteColor, newFavoriteHobbies)
+        .signers([user])
+        .rpc();
     } catch (error) {
       console.error((error as Error).message);
-      const customErrorMessage = getCustomErrorMessage(systemProgramErrors, error);
+      const customErrorMessage = getCustomErrorMessage(
+        systemProgramErrors,
+        error,
+      );
       throw new Error(customErrorMessage);
     }
   });
 
-  it('Rejects transactions from unauthorized signers', async () => {
+  it("Rejects transactions from unauthorized signers", async () => {
     try {
       await program.methods
         // set_favourites in Rust becomes setFavorites in TypeScript
@@ -78,7 +91,7 @@ describe('Favorites Bankrun', async () => {
         .rpc();
     } catch (error) {
       const errorMessage = (error as Error).message;
-      assert.isTrue(errorMessage.includes('unknown signer'));
+      assert.isTrue(errorMessage.includes("unknown signer"));
     }
   });
 });

+ 2 - 1
basics/favorites/anchor/tests/favorites.test.ts

@@ -1,9 +1,10 @@
-import * as anchor from '@coral-xyz/anchor';
 import type { Program } from '@coral-xyz/anchor';
+import * as anchor from '@coral-xyz/anchor';
 import { getCustomErrorMessage } from '@solana-developers/helpers';
 import { assert } from 'chai';
 import type { Favorites } from '../target/types/favorites';
 import { systemProgramErrors } from './system-errors';
+
 const web3 = anchor.web3;
 
 describe('Favorites', () => {

+ 1 - 0
basics/favorites/native/package.json

@@ -1,4 +1,5 @@
 {
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts",
     "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",

+ 12 - 3
basics/favorites/native/program/Cargo.toml

@@ -4,9 +4,18 @@ version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-borsh = "0.9.3"
-solana-program = "2.0"
-borsh-derive = "0.9.1"
+borsh.workspace = true
+borsh-derive.workspace = true
+solana-program.workspace = true
+solana-system-interface.workspace = true
 
 [lib]
 crate-type = ["cdylib", "lib"]
+
+[features]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 3 - 4
basics/favorites/native/program/src/instructions/create_pda.rs

@@ -8,7 +8,6 @@ use solana_program::{
     program_error::ProgramError,
     pubkey::Pubkey,
     rent::Rent,
-    system_instruction,
     sysvar::Sysvar,
 };
 
@@ -30,10 +29,10 @@ pub fn create_pda(program_id: &Pubkey, accounts: &[AccountInfo], data: Favorites
     // Checking if the pda is already initialized
     if favorite_account.data.borrow().len() == 0 {
         // Initialize the favorite account if it's not initialized
-        let space = data.try_to_vec()?.len();
+        let space = borsh::to_vec(&data)?.len();
         let lamports = (Rent::get()?).minimum_balance(space);
 
-        let ix = system_instruction::create_account(
+        let ix = solana_system_interface::instruction::create_account(
             user.key,
             favorite_account.key,
             lamports,
@@ -55,7 +54,7 @@ pub fn create_pda(program_id: &Pubkey, accounts: &[AccountInfo], data: Favorites
         data.serialize(&mut &mut favorite_account.data.borrow_mut()[..])?;
         msg!("{:#?}", data);
     } else {
-        return Err(ProgramError::AccountAlreadyInitialized.into());
+        return Err(ProgramError::AccountAlreadyInitialized);
     }
 
     Ok(())

+ 0 - 3
basics/favorites/native/program/src/instructions/mod.rs

@@ -1,5 +1,2 @@
 pub mod create_pda;
 pub mod get_pda;
-
-use create_pda::*;
-use get_pda::*;

+ 65 - 32
basics/favorites/native/tests/test.ts

@@ -1,9 +1,16 @@
-import { Blockhash, Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
-import { BN } from 'bn.js';
-import * as borsh from 'borsh';
-import { assert, expect } from 'chai';
-import { describe, test } from 'mocha';
-import { BanksClient, ProgramTestContext, Rent, start } from 'solana-bankrun';
+import {
+  Blockhash,
+  Keypair,
+  PublicKey,
+  SystemProgram,
+  Transaction,
+  TransactionInstruction,
+} from "@solana/web3.js";
+import { BN } from "bn.js";
+import * as borsh from "borsh";
+import { assert, expect } from "chai";
+import { describe, test } from "mocha";
+import { BanksClient, ProgramTestContext, start } from "solana-bankrun";
 
 // This is a helper class to assign properties to the class
 class Assignable {
@@ -14,10 +21,10 @@ class Assignable {
   }
 }
 
-enum MyInstruction {
-  CreateFav = 0,
-  GetFav = 1,
-}
+const MyInstruction = {
+  CreateFav: 0,
+  GetFav: 1,
+} as const;
 
 class CreateFav extends Assignable {
   number: number;
@@ -33,11 +40,11 @@ class CreateFav extends Assignable {
     return borsh.deserialize(
       {
         struct: {
-          number: 'u64',
-          color: 'string',
+          number: "u64",
+          color: "string",
           hobbies: {
             array: {
-              type: 'string',
+              type: "string",
             },
           },
         },
@@ -48,12 +55,12 @@ class CreateFav extends Assignable {
 }
 const CreateNewAccountSchema = {
   struct: {
-    instruction: 'u8',
-    number: 'u64',
-    color: 'string',
+    instruction: "u8",
+    number: "u64",
+    color: "string",
     hobbies: {
       array: {
-        type: 'string',
+        type: "string",
       },
     },
   },
@@ -66,11 +73,11 @@ class GetFav extends Assignable {
 }
 const GetFavSchema = {
   struct: {
-    instruction: 'u8',
+    instruction: "u8",
   },
 };
 
-describe('Favorites Solana Native', () => {
+describe("Favorites Solana Native", () => {
   // Randomly generate the program keypair and load the program to solana-bankrun
   const programId = PublicKey.unique();
 
@@ -80,16 +87,24 @@ describe('Favorites Solana Native', () => {
   let blockhash: Blockhash;
 
   beforeEach(async () => {
-    context = await start([{ name: 'favorites_native', programId }], []);
+    context = await start([{ name: "favorites_native", programId }], []);
     client = context.banksClient;
     // Get the payer keypair from the context, this will be used to sign transactions with enough lamports
     payer = context.payer;
     blockhash = context.lastBlockhash;
   });
 
-  test('Set the favorite pda and cross-check the updated data', async () => {
-    const favoritesPda = PublicKey.findProgramAddressSync([Buffer.from('favorite'), payer.publicKey.toBuffer()], programId)[0];
-    const favData = { instruction: MyInstruction.CreateFav, number: 42, color: 'blue', hobbies: ['coding', 'reading', 'traveling'] };
+  test("Set the favorite pda and cross-check the updated data", async () => {
+    const favoritesPda = PublicKey.findProgramAddressSync(
+      [Buffer.from("favorite"), payer.publicKey.toBuffer()],
+      programId,
+    )[0];
+    const favData = {
+      instruction: MyInstruction.CreateFav,
+      number: 42,
+      color: "blue",
+      hobbies: ["coding", "reading", "traveling"],
+    };
     const favorites = new CreateFav(favData);
 
     const ix = new TransactionInstruction({
@@ -115,17 +130,27 @@ describe('Favorites Solana Native', () => {
 
     const favoritesData = CreateFav.fromBuffer(data);
 
-    console.log('Deserialized data:', favoritesData);
+    console.log("Deserialized data:", favoritesData);
 
-    expect(new BN(favoritesData.number as any, 'le').toNumber()).to.equal(favData.number);
+    expect(new BN(favoritesData.number as any, "le").toNumber()).to.equal(
+      favData.number,
+    );
     expect(favoritesData.color).to.equal(favData.color);
     expect(favoritesData.hobbies).to.deep.equal(favData.hobbies);
   });
 
   test("Check if the test fails if the pda seeds aren't same", async () => {
     // We put the wrong seeds knowingly to see if the test fails because of checks
-    const favoritesPda = PublicKey.findProgramAddressSync([Buffer.from('favorite'), payer.publicKey.toBuffer()], programId)[0];
-    const favData = { instruction: MyInstruction.CreateFav, number: 42, color: 'blue', hobbies: ['coding', 'reading', 'traveling'] };
+    const favoritesPda = PublicKey.findProgramAddressSync(
+      [Buffer.from("favorite"), payer.publicKey.toBuffer()],
+      programId,
+    )[0];
+    const favData = {
+      instruction: MyInstruction.CreateFav,
+      number: 42,
+      color: "blue",
+      hobbies: ["coding", "reading", "traveling"],
+    };
     const favorites = new CreateFav(favData);
 
     const ix = new TransactionInstruction({
@@ -146,16 +171,24 @@ describe('Favorites Solana Native', () => {
     tx.recentBlockhash = blockhash;
     try {
       await client.processTransaction(tx);
-      console.error('Expected the test to fail');
-    } catch (err) {
+      console.error("Expected the test to fail");
+    } catch (_err) {
       assert(true);
     }
   });
 
-  test('Get the favorite pda and cross-check the data', async () => {
+  test("Get the favorite pda and cross-check the data", async () => {
     // Creating a new account with payer's pubkey
-    const favoritesPda = PublicKey.findProgramAddressSync([Buffer.from('favorite'), payer.publicKey.toBuffer()], programId)[0];
-    const favData = { instruction: MyInstruction.CreateFav, number: 42, color: 'hazel', hobbies: ['singing', 'dancing', 'skydiving'] };
+    const favoritesPda = PublicKey.findProgramAddressSync(
+      [Buffer.from("favorite"), payer.publicKey.toBuffer()],
+      programId,
+    )[0];
+    const favData = {
+      instruction: MyInstruction.CreateFav,
+      number: 42,
+      color: "hazel",
+      hobbies: ["singing", "dancing", "skydiving"],
+    };
     const favorites = new CreateFav(favData);
 
     const ix = new TransactionInstruction({

+ 16 - 15
basics/hello-solana/anchor/package.json

@@ -1,17 +1,18 @@
 {
-  "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@solana/web3.js": "^1.95.2"
-  },
-  "devDependencies": {
-    "anchor-bankrun": "^0.4.0",
-    "solana-bankrun": "^0.3.0",
-    "@types/bn.js": "^5.1.0",
-    "@types/chai": "^4.3.0",
-    "@types/mocha": "^9.0.0",
-    "chai": "^4.3.4",
-    "mocha": "^9.0.3",
-    "ts-mocha": "^10.0.0",
-    "typescript": "^4.3.5"
-  }
+	"type": "module",
+	"dependencies": {
+		"@coral-xyz/anchor": "0.32.1",
+		"@solana/web3.js": "^1.95.2"
+	},
+	"devDependencies": {
+		"@types/bn.js": "^5.1.0",
+		"@types/chai": "^4.3.0",
+		"@types/mocha": "^9.0.0",
+		"anchor-bankrun": "^0.4.0",
+		"chai": "^4.3.4",
+		"mocha": "^9.0.3",
+		"solana-bankrun": "^0.3.0",
+		"ts-mocha": "^10.0.0",
+		"typescript": "^4.3.5"
+	}
 }

+ 39 - 60
basics/hello-solana/anchor/pnpm-lock.yaml

@@ -9,8 +9,8 @@ importers:
   .:
     dependencies:
       '@coral-xyz/anchor':
-        specifier: ^0.30.0
-        version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+        specifier: 0.32.1
+        version: 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js':
         specifier: ^1.95.2
         version: 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -26,7 +26,7 @@ importers:
         version: 9.1.1
       anchor-bankrun:
         specifier: ^0.4.0
-        version: 0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+        version: 0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
       chai:
         specifier: ^4.3.4
         version: 4.4.1
@@ -49,15 +49,19 @@ packages:
     resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
     engines: {node: '>=6.9.0'}
 
-  '@coral-xyz/anchor@0.30.0':
-    resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
-    engines: {node: '>=11'}
+  '@coral-xyz/anchor-errors@0.31.1':
+    resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==}
+    engines: {node: '>=10'}
+
+  '@coral-xyz/anchor@0.32.1':
+    resolution: {integrity: sha512-zAyxFtfeje2FbMA1wzgcdVs7Hng/MijPKpRijoySPCicnvcTQs/+dnPZ/cR+LcXM9v9UYSyW81uRNYZtN5G4yg==}
+    engines: {node: '>=17'}
 
-  '@coral-xyz/borsh@0.30.0':
-    resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+  '@coral-xyz/borsh@0.31.1':
+    resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==}
     engines: {node: '>=10'}
     peerDependencies:
-      '@solana/web3.js': ^1.68.0
+      '@solana/web3.js': ^1.69.0
 
   '@noble/curves@1.4.2':
     resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
@@ -66,6 +70,10 @@ packages:
     resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
     engines: {node: '>= 16'}
 
+  '@noble/hashes@1.8.0':
+    resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+    engines: {node: ^14.21.3 || >=16}
+
   '@solana/buffer-layout@4.0.1':
     resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
     engines: {node: '>=5.10'}
@@ -174,6 +182,9 @@ packages:
   bn.js@5.2.1:
     resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
+  bn.js@5.2.2:
+    resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
   borsh@0.7.0:
     resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
 
@@ -239,12 +250,8 @@ packages:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  cross-fetch@3.1.8:
-    resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==}
-
-  crypto-hash@1.3.0:
-    resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==}
-    engines: {node: '>=8'}
+  cross-fetch@3.2.0:
+    resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
 
   debug@4.3.3:
     resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
@@ -275,9 +282,6 @@ packages:
     resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
     engines: {node: '>=0.3.1'}
 
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
@@ -436,9 +440,6 @@ packages:
   loupe@2.3.7:
     resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
 
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
   make-error@1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
 
@@ -472,9 +473,6 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
   node-fetch@2.7.0:
     resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
     engines: {node: 4.x || >=6.0.0}
@@ -544,9 +542,6 @@ packages:
   serialize-javascript@6.0.0:
     resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
 
-  snake-case@3.0.4:
-    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
-
   solana-bankrun-darwin-arm64@0.3.0:
     resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
     engines: {node: '>= 10'}
@@ -747,20 +742,21 @@ snapshots:
     dependencies:
       regenerator-runtime: 0.14.1
 
-  '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+  '@coral-xyz/anchor-errors@0.31.1': {}
+
+  '@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
     dependencies:
-      '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
-      '@noble/hashes': 1.4.0
+      '@coral-xyz/anchor-errors': 0.31.1
+      '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+      '@noble/hashes': 1.8.0
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       bs58: 4.0.1
       buffer-layout: 1.2.2
       camelcase: 6.3.0
-      cross-fetch: 3.1.8
-      crypto-hash: 1.3.0
+      cross-fetch: 3.2.0
       eventemitter3: 4.0.7
       pako: 2.1.0
-      snake-case: 3.0.4
       superstruct: 0.15.5
       toml: 3.0.0
     transitivePeerDependencies:
@@ -768,10 +764,10 @@ snapshots:
       - encoding
       - utf-8-validate
 
-  '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+  '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
     dependencies:
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
-      bn.js: 5.2.1
+      bn.js: 5.2.2
       buffer-layout: 1.2.2
 
   '@noble/curves@1.4.2':
@@ -780,6 +776,8 @@ snapshots:
 
   '@noble/hashes@1.4.0': {}
 
+  '@noble/hashes@1.8.0': {}
+
   '@solana/buffer-layout@4.0.1':
     dependencies:
       buffer: 6.0.3
@@ -852,9 +850,9 @@ snapshots:
     dependencies:
       humanize-ms: 1.2.1
 
-  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+  anchor-bankrun@0.4.0(@coral-xyz/anchor@0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
     dependencies:
-      '@coral-xyz/anchor': 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+      '@coral-xyz/anchor': 0.32.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
       solana-bankrun: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
 
@@ -897,6 +895,8 @@ snapshots:
 
   bn.js@5.2.1: {}
 
+  bn.js@5.2.2: {}
+
   borsh@0.7.0:
     dependencies:
       bn.js: 5.2.1
@@ -981,14 +981,12 @@ snapshots:
 
   concat-map@0.0.1: {}
 
-  cross-fetch@3.1.8:
+  cross-fetch@3.2.0:
     dependencies:
       node-fetch: 2.7.0
     transitivePeerDependencies:
       - encoding
 
-  crypto-hash@1.3.0: {}
-
   debug@4.3.3(supports-color@8.1.1):
     dependencies:
       ms: 2.1.2
@@ -1007,11 +1005,6 @@ snapshots:
 
   diff@5.0.0: {}
 
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.2
-
   emoji-regex@8.0.0: {}
 
   es6-promise@4.2.8: {}
@@ -1154,10 +1147,6 @@ snapshots:
     dependencies:
       get-func-name: 2.0.2
 
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.6.2
-
   make-error@1.3.6: {}
 
   minimatch@3.1.2:
@@ -1207,11 +1196,6 @@ snapshots:
 
   nanoid@3.3.1: {}
 
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.6.2
-
   node-fetch@2.7.0:
     dependencies:
       whatwg-url: 5.0.0
@@ -1274,11 +1258,6 @@ snapshots:
     dependencies:
       randombytes: 2.1.0
 
-  snake-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.6.2
-
   solana-bankrun-darwin-arm64@0.3.0:
     optional: true
 

+ 7 - 1
basics/hello-solana/anchor/programs/hello-solana/Cargo.toml

@@ -15,6 +15,12 @@ no-entrypoint = []
 no-idl = []
 no-log-ix-name = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang = "0.31.1"
+anchor-lang = "0.32.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 0 - 2
basics/hello-solana/anchor/programs/hello-solana/src/lib.rs

@@ -1,5 +1,3 @@
-#![allow(clippy::result_large_err)]
-
 use anchor_lang::prelude::*;
 
 declare_id!("2phbC62wekpw95XuBk4i1KX4uA8zBUWmYbiTMhicSuBV");

+ 14 - 10
basics/hello-solana/anchor/tests/bankrun.test.ts

@@ -1,22 +1,26 @@
-import { describe, it } from 'node:test';
-import * as anchor from '@coral-xyz/anchor';
-import { PublicKey } from '@solana/web3.js';
-import { BankrunProvider } from 'anchor-bankrun';
-import { startAnchor } from 'solana-bankrun';
-import { HelloSolana } from '../target/types/hello_solana';
+import { describe, it } from "node:test";
+import * as anchor from "@coral-xyz/anchor";
+import { PublicKey } from "@solana/web3.js";
+import { BankrunProvider } from "anchor-bankrun";
+import { startAnchor } from "solana-bankrun";
+import type { HelloSolana } from "../target/types/hello_solana";
 
-const IDL = require('../target/idl/hello_solana.json');
+import IDL from "../target/idl/hello_solana.json" with { type: "json" };
 const PROGRAM_ID = new PublicKey(IDL.address);
 
-describe('hello-solana', async () => {
+describe("hello-solana", async () => {
   // Configure the Anchor provider & load the program IDL for anchor-bankrun
   // The IDL gives you a typescript module
-  const context = await startAnchor('', [{ name: 'hello_solana', programId: PROGRAM_ID }], []);
+  const context = await startAnchor(
+    "",
+    [{ name: "hello_solana", programId: PROGRAM_ID }],
+    [],
+  );
   const provider = new BankrunProvider(context);
 
   const program = new anchor.Program<HelloSolana>(IDL, provider);
 
-  it('Say hello!', async () => {
+  it("Say hello!", async () => {
     // Just run Anchor's IDL method to build a transaction!
     //
     await program.methods.hello().accounts({}).rpc();

+ 1 - 0
basics/hello-solana/native/package.json

@@ -1,4 +1,5 @@
 {
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/index.test.ts",
     "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",

+ 9 - 1
basics/hello-solana/native/program/Cargo.toml

@@ -4,7 +4,15 @@ version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-solana-program = "2.0"
+solana-program.workspace = true
 
 [lib]
 crate-type = ["cdylib", "lib"]
+
+[features]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 1 - 0
basics/hello-solana/pinocchio/package.json

@@ -1,4 +1,5 @@
 {
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/index.test.ts",
     "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",

+ 10 - 3
basics/hello-solana/pinocchio/program/Cargo.toml

@@ -4,9 +4,16 @@ version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-pinocchio = "=0.8.1"
-pinocchio-log = "0.4.0"
-
+pinocchio.workspace = true
+pinocchio-log.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
+
+[features]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 8 - 17
basics/hello-solana/pinocchio/tests/index.test.ts

@@ -1,24 +1,17 @@
-import {
-  PublicKey,
-  Transaction,
-  TransactionInstruction,
-} from "@solana/web3.js";
-import { assert } from "chai";
-import { ProgramTestContext, start } from "solana-bankrun";
+import { PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { assert } from 'chai';
+import { ProgramTestContext, start } from 'solana-bankrun';
 
-describe("hello-solana", () => {
+describe('hello-solana', () => {
   const PROGRAM_ID = PublicKey.unique();
 
   // load program in solana-bankrun
   let context: ProgramTestContext;
   before(async () => {
-    context = await start(
-      [{ name: "hello_solana_program_pinocchio", programId: PROGRAM_ID }],
-      []
-    );
+    context = await start([{ name: 'hello_solana_program_pinocchio', programId: PROGRAM_ID }], []);
   });
 
-  it("Say hello!", async () => {
+  it('Say hello!', async () => {
     const client = context.banksClient;
     const payer = context.payer;
     const blockhash = context.lastBlockhash;
@@ -37,11 +30,9 @@ describe("hello-solana", () => {
     const transaction = await client.processTransaction(tx);
 
     assert(transaction.logMessages[0].startsWith(`Program ${PROGRAM_ID}`));
-    assert(transaction.logMessages[1] === "Program log: Hello, Solana!");
+    assert(transaction.logMessages[1] === 'Program log: Hello, Solana!');
     assert(transaction.logMessages[2] === `Program log: ${PROGRAM_ID}`);
-    assert(
-      transaction.logMessages[3].startsWith(`Program ${PROGRAM_ID} consumed`)
-    );
+    assert(transaction.logMessages[3].startsWith(`Program ${PROGRAM_ID} consumed`));
     assert(transaction.logMessages[4] === `Program ${PROGRAM_ID} success`);
     assert(transaction.logMessages.length === 5);
   });

+ 16 - 15
basics/pda-rent-payer/anchor/package.json

@@ -1,17 +1,18 @@
 {
-  "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@solana/web3.js": "^1.95.2"
-  },
-  "devDependencies": {
-    "anchor-bankrun": "^0.4.0",
-    "solana-bankrun": "^0.3.0",
-    "@types/bn.js": "^5.1.0",
-    "@types/chai": "^4.3.0",
-    "@types/mocha": "^9.0.0",
-    "chai": "^4.3.4",
-    "mocha": "^9.0.3",
-    "ts-mocha": "^10.0.0",
-    "typescript": "^4.3.5"
-  }
+	"type": "module",
+	"dependencies": {
+		"@coral-xyz/anchor": "0.32.1",
+		"@solana/web3.js": "^1.95.2"
+	},
+	"devDependencies": {
+		"@types/bn.js": "^5.1.0",
+		"@types/chai": "^4.3.0",
+		"@types/mocha": "^9.0.0",
+		"anchor-bankrun": "^0.4.0",
+		"chai": "^4.3.4",
+		"mocha": "^9.0.3",
+		"solana-bankrun": "^0.3.0",
+		"ts-mocha": "^10.0.0",
+		"typescript": "^4.3.5"
+	}
 }

Diferenças do arquivo suprimidas por serem muito extensas
+ 237 - 254
basics/pda-rent-payer/anchor/pnpm-lock.yaml


+ 7 - 1
basics/pda-rent-payer/anchor/programs/anchor-program-example/Cargo.toml

@@ -15,6 +15,12 @@ no-entrypoint = []
 no-idl = []
 no-log-ix-name = []
 idl-build = ["anchor-lang/idl-build"]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
 
 [dependencies]
-anchor-lang = "0.31.1"
+anchor-lang = "0.32.1"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

+ 0 - 1
basics/pda-rent-payer/anchor/programs/anchor-program-example/src/lib.rs

@@ -1,4 +1,3 @@
-#![allow(clippy::result_large_err)]
 use anchor_lang::prelude::*;
 use instructions::*;
 pub mod instructions;

+ 64 - 55
basics/pda-rent-payer/anchor/tests/bankrun.test.ts

@@ -1,58 +1,67 @@
-import { describe, it } from 'node:test';
-import * as anchor from '@coral-xyz/anchor';
-import { Keypair, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
-import { BankrunProvider } from 'anchor-bankrun';
-import { assert } from 'chai';
-import { startAnchor } from 'solana-bankrun';
-import type { PdaRentPayer } from '../target/types/pda_rent_payer';
-
-const IDL = require('../target/idl/pda_rent_payer.json');
+import { describe, it } from "node:test";
+import * as anchor from "@coral-xyz/anchor";
+import { Keypair, LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
+import { BankrunProvider } from "anchor-bankrun";
+import BN from "bn.js";
+import { assert } from "chai";
+import { startAnchor } from "solana-bankrun";
+import type { PdaRentPayer } from "../target/types/pda_rent_payer";
+
+import IDL from "../target/idl/pda_rent_payer.json";
 const PROGRAM_ID = new PublicKey(IDL.address);
 
-describe('PDA Rent-Payer', async () => {
-  const context = await startAnchor('', [{ name: 'pda_rent_payer', programId: PROGRAM_ID }], []);
-  const provider = new BankrunProvider(context);
-  const program = new anchor.Program<PdaRentPayer>(IDL, provider);
-
-  const wallet = provider.wallet as anchor.Wallet;
-  const connection = provider.connection;
-
-  // PDA for the Rent Vault
-  const [rentVaultPDA] = PublicKey.findProgramAddressSync([Buffer.from('rent_vault')], program.programId);
-
-  it('Initialize the Rent Vault', async () => {
-    // 1 SOL
-    const fundAmount = new anchor.BN(LAMPORTS_PER_SOL);
-
-    await program.methods
-      .initRentVault(fundAmount)
-      .accounts({
-        payer: wallet.publicKey,
-      })
-      .rpc();
-
-    // Check rent vault balance
-    const accountInfo = await program.provider.connection.getAccountInfo(rentVaultPDA);
-    assert(accountInfo.lamports === fundAmount.toNumber());
-  });
-
-  it('Create a new account using the Rent Vault', async () => {
-    // Generate a new keypair for the new account
-    const newAccount = new Keypair();
-
-    await program.methods
-      .createNewAccount()
-      .accounts({
-        newAccount: newAccount.publicKey,
-      })
-      .signers([newAccount])
-      .rpc();
-
-    // Minimum balance for rent exemption for new account
-    const lamports = await connection.getMinimumBalanceForRentExemption(0);
-
-    // Check that the account was created
-    const accountInfo = await connection.getAccountInfo(newAccount.publicKey);
-    assert(accountInfo.lamports === lamports);
-  });
+describe("PDA Rent-Payer", async () => {
+	const context = await startAnchor(
+		"",
+		[{ name: "pda_rent_payer", programId: PROGRAM_ID }],
+		[],
+	);
+	const provider = new BankrunProvider(context);
+	const program = new anchor.Program<PdaRentPayer>(IDL, provider);
+
+	const wallet = provider.wallet as anchor.Wallet;
+	const connection = provider.connection;
+
+	// PDA for the Rent Vault
+	const [rentVaultPDA] = PublicKey.findProgramAddressSync(
+		[Buffer.from("rent_vault")],
+		program.programId,
+	);
+
+	it("Initialize the Rent Vault", async () => {
+		// 1 SOL
+		const fundAmount = new BN(LAMPORTS_PER_SOL);
+
+		await program.methods
+			.initRentVault(fundAmount)
+			.accounts({
+				payer: wallet.publicKey,
+			})
+			.rpc();
+
+		// Check rent vault balance
+		const accountInfo =
+			await program.provider.connection.getAccountInfo(rentVaultPDA);
+		assert(accountInfo.lamports === fundAmount.toNumber());
+	});
+
+	it("Create a new account using the Rent Vault", async () => {
+		// Generate a new keypair for the new account
+		const newAccount = new Keypair();
+
+		await program.methods
+			.createNewAccount()
+			.accounts({
+				newAccount: newAccount.publicKey,
+			})
+			.signers([newAccount])
+			.rpc();
+
+		// Minimum balance for rent exemption for new account
+		const lamports = await connection.getMinimumBalanceForRentExemption(0);
+
+		// Check that the account was created
+		const accountInfo = await connection.getAccountInfo(newAccount.publicKey);
+		assert(accountInfo.lamports === lamports);
+	});
 });

+ 55 - 50
basics/pda-rent-payer/anchor/tests/test.ts

@@ -1,51 +1,56 @@
-import * as anchor from '@coral-xyz/anchor';
-import { Keypair, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
-import { assert } from 'chai';
-import type { PdaRentPayer } from '../target/types/pda_rent_payer';
-
-describe('PDA Rent-Payer', () => {
-  const provider = anchor.AnchorProvider.env();
-  anchor.setProvider(provider);
-  const wallet = provider.wallet as anchor.Wallet;
-  const connection = provider.connection;
-  const program = anchor.workspace.PdaRentPayer as anchor.Program<PdaRentPayer>;
-
-  // PDA for the Rent Vault
-  const [rentVaultPDA] = PublicKey.findProgramAddressSync([Buffer.from('rent_vault')], program.programId);
-
-  it('Initialize the Rent Vault', async () => {
-    // 1 SOL
-    const fundAmount = new anchor.BN(LAMPORTS_PER_SOL);
-
-    await program.methods
-      .initRentVault(fundAmount)
-      .accounts({
-        payer: wallet.publicKey,
-      })
-      .rpc();
-
-    // Check rent vault balance
-    const accountInfo = await program.provider.connection.getAccountInfo(rentVaultPDA);
-    assert(accountInfo.lamports === fundAmount.toNumber());
-  });
-
-  it('Create a new account using the Rent Vault', async () => {
-    // Generate a new keypair for the new account
-    const newAccount = new Keypair();
-
-    await program.methods
-      .createNewAccount()
-      .accounts({
-        newAccount: newAccount.publicKey,
-      })
-      .signers([newAccount])
-      .rpc();
-
-    // Minimum balance for rent exemption for new account
-    const lamports = await connection.getMinimumBalanceForRentExemption(0);
-
-    // Check that the account was created
-    const accountInfo = await connection.getAccountInfo(newAccount.publicKey);
-    assert(accountInfo.lamports === lamports);
-  });
+import * as anchor from "@coral-xyz/anchor";
+import { Keypair, LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
+import BN from "bn.js";
+import { assert } from "chai";
+import type { PdaRentPayer } from "../target/types/pda_rent_payer";
+
+describe("PDA Rent-Payer", () => {
+	const provider = anchor.AnchorProvider.env();
+	anchor.setProvider(provider);
+	const wallet = provider.wallet as anchor.Wallet;
+	const connection = provider.connection;
+	const program = anchor.workspace.PdaRentPayer as anchor.Program<PdaRentPayer>;
+
+	// PDA for the Rent Vault
+	const [rentVaultPDA] = PublicKey.findProgramAddressSync(
+		[Buffer.from("rent_vault")],
+		program.programId,
+	);
+
+	it("Initialize the Rent Vault", async () => {
+		// 1 SOL
+		const fundAmount = new BN(LAMPORTS_PER_SOL);
+
+		await program.methods
+			.initRentVault(fundAmount)
+			.accounts({
+				payer: wallet.publicKey,
+			})
+			.rpc();
+
+		// Check rent vault balance
+		const accountInfo =
+			await program.provider.connection.getAccountInfo(rentVaultPDA);
+		assert(accountInfo.lamports === fundAmount.toNumber());
+	});
+
+	it("Create a new account using the Rent Vault", async () => {
+		// Generate a new keypair for the new account
+		const newAccount = new Keypair();
+
+		await program.methods
+			.createNewAccount()
+			.accounts({
+				newAccount: newAccount.publicKey,
+			})
+			.signers([newAccount])
+			.rpc();
+
+		// Minimum balance for rent exemption for new account
+		const lamports = await connection.getMinimumBalanceForRentExemption(0);
+
+		// Check that the account was created
+		const accountInfo = await connection.getAccountInfo(newAccount.publicKey);
+		assert(accountInfo.lamports === lamports);
+	});
 });

+ 1 - 0
basics/pda-rent-payer/native/package.json

@@ -1,4 +1,5 @@
 {
+  "type": "module",
   "scripts": {
     "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts",
     "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",

+ 12 - 3
basics/pda-rent-payer/native/program/Cargo.toml

@@ -4,9 +4,18 @@ version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-solana-program = "2.0"
-borsh = "0.9.3"
-borsh-derive = "0.9.1"
+borsh.workspace = true
+borsh-derive.workspace = true
+solana-program.workspace = true
+solana-system-interface.workspace = true
 
 [lib]
 crate-type = ["cdylib", "lib"]
+
+[features]
+anchor-debug = []
+custom-heap = []
+custom-panic = []
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff