diff --git a/.github/.ghaignore b/.github/.ghaignore
new file mode 100644
index 000000000..bcff41972
--- /dev/null
+++ b/.github/.ghaignore
@@ -0,0 +1,67 @@
+# build and test error
+basics/realloc/native
+basics/cross-program-invocation/native
+
+# uses generated client from shank, can't rewrite to solana-bankrun
+tools/shank-and-solita/native
+
+# can't test on localnet
+tokens/pda-mint-authority/native
+tokens/nft-minter/native
+tokens/transfer-tokens/native
+tokens/spl-token-minter/native
+tokens/create-token/native
+
+tokens/token-swap/anchor
+
+# not building
+oracles/pyth/anchor
+
+# not building
+compression/cutils/anchor
+compression/cnft-vault/anchor
+# builds but need to test on localhost
+compression/cnft-burn/anchor
+
+# test failing
+# https://github.com/solana-developers/helpers/issues/40
+tokens/escrow/anchor
+
+# not live
+tokens/token-2022/group/anchor
+
+# error in tests
+tokens/external-delegate-token-master/anchor
+
+# build failed - program outdated
+tokens/token-2022/metadata/anchor
+
+# dependency issues
+tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor
+
+tokens/token-2022/mint-close-authority/native
+tokens/token-2022/transfer-fee/native
+tokens/token-2022/non-transferable/native
+
+# all steel projects
+
+basics/account-data/steel
+basics/checking-accounts/steel
+basics/close-account/steel
+basics/counter/steel
+basics/create-account/steel
+basics/cross-program-invocation/steel
+basics/favorites/steel
+basics/pda-rent-payer/steel
+basics/processing-instructions/steel
+basics/program-derived-addresses/steel
+basics/realloc/steel
+basics/rent/steel
+basics/transfer-sol/steel
+
+tokens/escrow/steel
+
+tokens/pda-mint-authority/steel
+tokens/spl-token-minter/steel
+tokens/token-swap/steel
+tokens/transfer-tokens/steel
\ No newline at end of file
diff --git a/.github/workflows/anchor.yml b/.github/workflows/anchor.yml
index 3f6cedab3..8208ad795 100644
--- a/.github/workflows/anchor.yml
+++ b/.github/workflows/anchor.yml
@@ -1,53 +1,244 @@
-name: Anchor Build
+name: Anchor
on:
schedule:
- - cron: '0 0 1 * *'
+ - 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:
- build:
+ 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: dorny/paths-filter@v3
+ id: changes
+ if: github.event_name == 'pull_request'
+ with:
+ list-files: shell
+ filters: |
+ anchor:
+ - added|modified: '**/anchor/**'
+ workflow:
+ - added|modified: '.github/workflows/anchor.yml'
+ - 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 "anchor" | 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.anchor }}" == "true" ]]; then
+ changed_files=(${{ steps.changes.outputs.anchor_files }})
+ projects=$(for file in "${changed_files[@]}"; do dirname "${file}" | grep anchor | sed 's#/anchor/.*#/anchor#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 }}
+
+ # Generate matrix based on number of projects
+ 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
+
+ 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@v2
-
- - name: Install dependencies
+ - uses: actions/checkout@v4
+ - uses: heyAyushh/setup-anchor@v0.31
+ with:
+ anchor-version: 0.31.1
+ solana-cli-version: stable
+ - name: Display Versions and Install pnpm
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
+ # it's okay to use --force in github action since all programs are tested in isolation
+ solana-keygen new --no-bip39-passphrase --force
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 latest
- avm use latest
- declare -a StringArray=(
- "basics/checking-accounts/anchor"
- "basics/close-account/anchor"
- "basics/counter/anchor"
- "basics/create-account/anchor"
- "basics/hello-solana/anchor"
- "basics/pda-rent-payer/anchor"
- "basics/processing-instructions/anchor"
- "basics/program-derived-addresses/anchor"
- "basics/realloc/anchor"
- "basics/rent/anchor"
- "basics/repository-layout/anchor"
- "basics/transfer-sol/anchor"
- "compression/cnft-vault/anchor"
- "oracles/pyth/anchor"
- "tokens/create-token/anchor"
- "tokens/nft-minter/anchor"
- "tokens/pda-mint-authority/anchor"
- "tokens/spl-token-minter/anchor"
- "tokens/token-2022/basics/anchor"
- "tokens/transfer-tokens/anchor"
- "basics/account-data/anchor"
- )
- for val in "${StringArray[@]}"; do
- echo "Building $val..."
- cd $val
- anchor build
- cd - > /dev/null
+ anchor -V
+ npm i -g pnpm
+ - name: Build and Test
+ env:
+ TOTAL_PROJECTS: ${{ needs.changes.outputs.total_projects }}
+ PROJECTS_PER_JOB: ${{ env.MIN_PROJECTS_PER_JOB }}
+ run: |
+ function build_and_test() {
+ local project=$1
+ echo "Building and Testing $project"
+ cd "$project" || return 1
+
+ # Run anchor build
+ if ! anchor build; then
+ echo "::error::anchor build failed for $project"
+ echo "$project: anchor build failed" >> $GITHUB_WORKSPACE/failed_projects.txt
+ rm -rf target
+ cd - > /dev/null
+ 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"
+ echo "$project: anchor test failed" >> $GITHUB_WORKSPACE/failed_projects.txt
+ rm -rf target node_modules
+ cd - > /dev/null
+ return 1
+ fi
+
+ echo "Build and tests succeeded for $project."
+ rm -rf target node_modules
+ cd - > /dev/null
+ return 0
+ }
+
+ # Determine which projects to build in this job
+ readarray -t all_projects < <(echo '${{ needs.changes.outputs.changed_projects }}' | jq -r '.[]?')
+ start_index=$(( ${{ matrix.index }} * PROJECTS_PER_JOB ))
+ end_index=$(( start_index + PROJECTS_PER_JOB ))
+ end_index=$(( end_index > TOTAL_PROJECTS ? 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
+
+ # Build and test projects
+ failed=false
+ failed_projects=()
+ 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]}"; then
+ failed=true
+ failed_projects+=("${all_projects[$i]}")
+ fi
+ echo "::endgroup::"
+ done
+
+ if [[ "$failed" == "true" ]]; then
+ echo "::group::Failed projects"
+ cat $GITHUB_WORKSPACE/failed_projects.txt
+ echo "::endgroup::"
+ echo "failed_projects=${failed_projects[@]}" >> $GITHUB_OUTPUT
+ exit 1
+ else
+ echo "failed_projects=" >> $GITHUB_OUTPUT
+ fi
+
+ - name: Set failed projects output
+ id: set-failed
+ if: failure()
+ run: |
+ # Prepare failed projects list for output
+ failed_projects=$(cat $GITHUB_WORKSPACE/failed_projects.txt | jq -R -s -c 'split("\n")[:-1]')
+ echo "failed_projects=$failed_projects" >> $GITHUB_OUTPUT
+
+ summary:
+ needs: [changes, build-and-test]
+ if: always()
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Create job summary
+ run: |
+ echo "## Anchor Workflow Summary" >> $GITHUB_STEP_SUMMARY
+ echo "- Total projects: ${{ needs.changes.outputs.total_projects }}" >> $GITHUB_STEP_SUMMARY
+
+ # List all processed projects
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo "Projects processed (click to expand)
" >> $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
- shell: bash
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo " " >> $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 "" >> $GITHUB_STEP_SUMMARY
+ echo "Failed projects (click to expand)
" >> $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 " " >> $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
diff --git a/.github/workflows/biome.yml b/.github/workflows/biome.yml
new file mode 100644
index 000000000..410f2e224
--- /dev/null
+++ b/.github/workflows/biome.yml
@@ -0,0 +1,21 @@
+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
diff --git a/.github/workflows/native.yml b/.github/workflows/native.yml
deleted file mode 100644
index dc02169de..000000000
--- a/.github/workflows/native.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: Native 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/beta/install)"
- export PATH="/home/runner/.local/share/solana/install/active_release/bin:$PATH"
- solana -V
- rustc -V
- declare -a StringArray=(
- "basics/account-data/native/program"
- "basics/checking-accounts/native/program"
- "basics/close-account/native/program"
- "basics/counter/native"
- "basics/create-account/native/program"
- "basics/hello-solana/native/program"
- "basics/pda-rent-payer/native/program"
- "basics/processing-instructions/native/program"
- "basics/program-derived-addresses/native/program"
- "basics/realloc/native/program"
- "basics/rent/native/program"
- "basics/repository-layout/native/program"
- "basics/transfer-sol/native/program"
- "tokens/nft-minter/native/program"
- "tokens/pda-mint-authority/native/program"
- "tokens/spl-token-minter/native/program"
- "tokens/token-2022/default-account-state/native/program"
- "tokens/token-2022/mint-close-authority/native/program"
- "tokens/token-2022/multiple-extensions/native/program"
- "tokens/token-2022/non-transferable/native/program"
- "tokens/token-2022/transfer-fees/native/program"
- "tokens/transfer-tokens/native/program"
- "tools/shank-and-solita/native/program"
- "tokens/create-token/native/program"
- )
- for val in "${StringArray[@]}"; do
- echo "Building $val..."
- cd $val
- cargo-build-sbf --verbose
- cd - > /dev/null
- done
- shell: bash
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 38ac18a5f..62a219d39 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -29,7 +29,7 @@ jobs:
# The uses keyword specifies that this step will run v3 of the actions/checkout action.
# This is an action that checks out your repository onto the runner, allowing you to run scripts or other actions against your code (such as build and test tools).
# You should use the checkout action any time your workflow will run against the repository's code.
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
# This GitHub Action installs a Rust toolchain using rustup. It is designed for one-line concise usage and good defaults.
- name: Install the Rust toolchain
@@ -43,7 +43,7 @@ jobs:
name: Rustfmt
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
# Specific to dtolnay/rust-toolchain: Comma-separated string of additional components to install
@@ -56,7 +56,7 @@ jobs:
name: Clippy
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
diff --git a/.github/workflows/solana-native.yml b/.github/workflows/solana-native.yml
new file mode 100644
index 000000000..df3c66e49
--- /dev/null
+++ b/.github/workflows/solana-native.yml
@@ -0,0 +1,257 @@
+name: Native
+
+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: 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: 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 "native" | 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.native }}" == "true" ]]; then
+ changed_files=(${{ steps.changes.outputs.native_files }})
+ projects=$(for file in "${changed_files[@]}"; do dirname "${file}" | grep native | sed 's#/native/.*#/native#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
+
+ 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
+ - name: Use Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 'lts/*'
+ check-latest: true
+ - name: Setup build environment
+ id: setup
+ run: |
+ # 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
+
+ # Install dependencies
+ 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 build-and-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
+
+ 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
+
+ # Install pnpm
+ npm install --global pnpm
+ - 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
+ process_projects "stable"
+ - name: Setup Solana Beta
+ uses: heyAyushh/setup-solana@v2.02
+ with:
+ solana-cli-version: beta
+ - name: Build and Test with Beta
+ continue-on-error: true
+ run: |
+ source build_and_test.sh
+ solana -V
+ rustc -V
+ 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 "## Native Workflow Summary" >> $GITHUB_STEP_SUMMARY
+ echo "- Total projects: ${{ needs.changes.outputs.total_projects }}" >> $GITHUB_STEP_SUMMARY
+
+ # List all processed projects
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo "Projects processed (click to expand)
" >> $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 " " >> $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 "" >> $GITHUB_STEP_SUMMARY
+ echo "Failed projects (click to expand)
" >> $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 " " >> $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
diff --git a/.github/workflows/steel.yml b/.github/workflows/steel.yml
new file mode 100644
index 000000000..1ed61bcfa
--- /dev/null
+++ b/.github/workflows/steel.yml
@@ -0,0 +1,334 @@
+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 "" >> $GITHUB_STEP_SUMMARY
+ echo "Projects processed (click to expand)
" >> $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 " " >> $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 "" >> $GITHUB_STEP_SUMMARY
+ echo "Failed projects (click to expand)
" >> $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 " " >> $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
diff --git a/.gitignore b/.gitignore
index 6fef52587..4a859951f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
.DS_Store
test-ledger/
+node_modules/
**/*/node_modules
**/*/package-lock.json
@@ -11,6 +12,7 @@ test-ledger/
**/*/.anchor
**/*/.DS_Store
**/*/target
+**/*/tests/fixtures
**/*.rs.bk
**/*/test-ledger
**/*/yarn.lock
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 000000000..2312dc587
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1 @@
+npx lint-staged
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..1edae2936
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,108 @@
+# Contribution Guidelines
+
+Thank you for considering contributing to the Solana Program Examples repository. We greatly appreciate your interest and efforts in helping us improve and expand this valuable resource for the Solana developer community.
+
+We believe that a welcoming and inclusive environment fosters collaboration and encourages participation from developers of all backgrounds and skill levels.
+
+To ensure a smooth and effective contribution process, please take a moment to review and follow the guidelines outlined below.
+
+## How to Contribute
+
+We welcome contributions in the form of code, documentation, bug reports, feature requests, and other forms of feedback. Here are some ways you can contribute:
+
+- **Code Contributions:** You can contribute code examples in Rust, Python, or Solidity that demonstrate various Solana program functionalities. You can also contribute improvements to existing examples, such as bug fixes, optimizations, or additional features.
+
+- **Bug Reports, Ideas or Feedback:** If you encounter any issues or have ideas for new examples, please submit a bug report or feature request. Your feedback is valuable and helps us improve the quality and relevance of the examples.
+
+## General coding and writing guidelines
+
+Please follow the [Contributing and Style Guide from the Developer Content Repo](https://github.com/solana-foundation/developer-content/blob/main/CONTRIBUTING.md).
+
+Specifically for code in this repo:
+
+1. Use pnpm as the default package manager for the project. You can [install pnpm by following the instructions](https://pnpm.io/installation). Commit `pnpm-lock.yaml` to the repository.
+
+2. Solana Programs written for Anchor framework should be in directory (`anchor`)[https://www.anchor-lang.com], Solana Native in (`native`)[https://solana.com/developers/guides/getstarted/intro-to-native-rust], Steel Framework in (`steel`)[https://github.com/regolith-labs/steel], TypeScript in (`poseidon`)[https://github.com/Turbin3/poseidon], respectively.
+ - Project path structure: `/program-examples/category/example-name/`
+ - Project path structure example for anchor: `/program-examples/category/example-name/anchor`
+
+3. Tests for Solana native programs, steel framework programs, and Anchor should be written with [solana-bankrun](https://kevinheavey.github.io/solana-bankrun)
+
+4. Steel framework programs must be organized as a Cargo workspace with separate projects for API and program:
+ - Project path structure: `/program-examples/category/example-name/steel`
+ - Initialise project using `steel new `
+ - Must be a Cargo workspace with two separate projects:
+ - `api`: Contains API-related code
+ - `program`: Contains the program implementation
+ - Steel projects should NOT be added in the root [`Cargo.toml` file](https://github.com/solana-developers/program-examples/blob/main/Cargo.toml)
+
+ This structure ensures proper organization and separation of concerns.
+
+5. For Steel framework programs:
+ - Steel CLI is the recommended way to build and test programs:
+ ```bash
+ # Install Steel CLI (one-time setup)
+ cargo install steel-cli
+
+ # Create a new Steel project
+ steel new
+
+ # Build the program
+ steel build
+
+ # Run tests
+ steel test
+ ```
+ - Alternatively, you can use package.json scripts if you need custom build/test configurations as Solana native one described below.
+
+6. For Solana native programs ensure adding these mandatory pnpm run scripts to your `package.json` file for successful CI/CD builds:
+
+```json
+"scripts": {
+ "test": "pnpm ts-mocha -p ./tests/tsconfig.test.json -t 1000000 ./tests/realloc.test.ts",
+ "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
+},
+```
+
+Alternatively, You can add `steel test` and `steel build` as commands according to your project.
+
+"scripts": {
+ "test": "steel test",
+ "build-and-test": "steel build && steel test",
+ "build": "steel build",
+ "deploy": "solana program deploy ./program/target/so/program.so"
+},
+
+7. Test command for Anchor should execute `pnpm test` instead of `yarn run test` for anchor programs. Replace `yarn` with `pnpm` in `[script]` table inside [Anchor.toml file.](https://www.anchor-lang.com/docs/manifest#scripts-required-for-testing)
+
+```
+[scripts]
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+```
+
+8. TypeScript, JavaScript and JSON files are formatted and linted using
+ [Biome](https://biomejs.dev/). Execute the following command to format and lint your code at the root of this project before submitting a pull request:
+
+8. Some projects can be ignored from the building and testing process by adding the project name to the `.ghaignore` file.
+When removing or updating an example, please ensure that the example is removed from the `.ghaignore` file
+and there's a change in that example's directory.
+
+```bash
+pnpm fix
+```
+
+9. Some projects can be ignored from the building and testing process by adding the project name to the `.gitignore` file.
+When removing or updating an example, please ensure that the example is removed from the `.gitignore` file
+and there's a change in that example's directory.
+
+## Code of Conduct
+
+We are committed to providing a friendly, safe, and welcoming environment for all contributors, regardless of their background, experience level, or personal characteristics. As a contributor, you are expected to:
+
+Be respectful and inclusive in your interactions with others.
+Refrain from engaging in any form of harassment, discrimination, or offensive behavior. Be open to constructive feedback and be willing to learn from others.
+Help create a positive and supportive community where everyone feels valued and respected.
+
+If you encounter any behavior that violates our code of conduct, please report it to the project maintainers immediately.
diff --git a/Cargo.lock b/Cargo.lock
index 535412a23..2c43c8fd7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,12 +1,12 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
-version = 3
+version = 4
[[package]]
name = "account-data-anchor-program-example"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
+ "anchor-lang",
]
[[package]]
@@ -15,7 +15,7 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
@@ -56,202 +56,90 @@ dependencies = [
[[package]]
name = "ahash"
-version = "0.7.6"
+version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
dependencies = [
- "getrandom 0.2.10",
+ "getrandom 0.2.16",
"once_cell",
"version_check",
]
[[package]]
name = "ahash"
-version = "0.8.3"
+version = "0.8.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
dependencies = [
"cfg-if",
- "getrandom 0.2.10",
"once_cell",
"version_check",
+ "zerocopy",
]
[[package]]
name = "aho-corasick"
-version = "1.0.5"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
-[[package]]
-name = "amm-tutorial"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.28.0",
- "anchor-spl",
- "fixed",
- "fixed-sqrt",
- "half",
- "solana-program",
- "toml_datetime",
- "winnow",
-]
-
-[[package]]
-name = "anchor-attribute-access-control"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf7d535e1381be3de2c0716c0a1c1e32ad9df1042cddcf7bc18d743569e53319"
-dependencies = [
- "anchor-syn 0.26.0",
- "anyhow",
- "proc-macro2",
- "quote",
- "regex",
- "syn 1.0.109",
-]
-
[[package]]
name = "anchor-attribute-access-control"
-version = "0.28.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "faa5be5b72abea167f87c868379ba3c2be356bfca9e6f474fd055fa0f7eeb4f2"
-dependencies = [
- "anchor-syn 0.28.0",
- "anyhow",
- "proc-macro2",
- "quote",
- "regex",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "anchor-attribute-account"
-version = "0.26.0"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3bcd731f21048a032be27c7791701120e44f3f6371358fc4261a7f716283d29"
+checksum = "3f70fd141a4d18adf11253026b32504f885447048c7494faf5fa83b01af9c0cf"
dependencies = [
- "anchor-syn 0.26.0",
- "anyhow",
- "bs58 0.4.0",
+ "anchor-syn",
"proc-macro2",
"quote",
- "rustversion",
"syn 1.0.109",
]
[[package]]
name = "anchor-attribute-account"
-version = "0.28.0"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f468970344c7c9f9d03b4da854fd7c54f21305059f53789d0045c1dd803f0018"
+checksum = "715a261c57c7679581e06f07a74fa2af874ac30f86bd8ea07cca4a7e5388a064"
dependencies = [
- "anchor-syn 0.28.0",
- "anyhow",
- "bs58 0.5.0",
+ "anchor-syn",
+ "bs58 0.5.1",
"proc-macro2",
"quote",
- "rustversion",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "anchor-attribute-constant"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1be64a48e395fe00b8217287f226078be2cf32dae42fdf8a885b997945c3d28"
-dependencies = [
- "anchor-syn 0.26.0",
- "proc-macro2",
"syn 1.0.109",
]
[[package]]
name = "anchor-attribute-constant"
-version = "0.28.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59948e7f9ef8144c2aefb3f32a40c5fce2798baeec765ba038389e82301017ef"
-dependencies = [
- "anchor-syn 0.28.0",
- "proc-macro2",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "anchor-attribute-error"
-version = "0.26.0"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38ea6713d1938c0da03656ff8a693b17dc0396da66d1ba320557f07e86eca0d4"
+checksum = "730d6df8ae120321c5c25e0779e61789e4b70dc8297102248902022f286102e4"
dependencies = [
- "anchor-syn 0.26.0",
- "proc-macro2",
+ "anchor-syn",
"quote",
"syn 1.0.109",
]
[[package]]
name = "anchor-attribute-error"
-version = "0.28.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc753c9d1c7981cb8948cf7e162fb0f64558999c0413058e2d43df1df5448086"
-dependencies = [
- "anchor-syn 0.28.0",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "anchor-attribute-event"
-version = "0.26.0"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d401f11efb3644285685f8339829a9786d43ed7490bb1699f33c478d04d5a582"
+checksum = "27e6e449cc3a37b2880b74dcafb8e5a17b954c0e58e376432d7adc646fb333ef"
dependencies = [
- "anchor-syn 0.26.0",
- "anyhow",
- "proc-macro2",
+ "anchor-syn",
"quote",
"syn 1.0.109",
]
[[package]]
name = "anchor-attribute-event"
-version = "0.28.0"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f38b4e172ba1b52078f53fdc9f11e3dc0668ad27997838a0aad2d148afac8c97"
+checksum = "d7710e4c54adf485affcd9be9adec5ef8846d9c71d7f31e16ba86ff9fc1dd49f"
dependencies = [
- "anchor-syn 0.28.0",
- "anyhow",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "anchor-attribute-interface"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6700a6f5c888a9c33fe8afc0c64fd8575fa28d05446037306d0f96102ae4480"
-dependencies = [
- "anchor-syn 0.26.0",
- "anyhow",
- "heck",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "anchor-attribute-program"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ad769993b5266714e8939e47fbdede90e5c030333c7522d99a4d4748cf26712"
-dependencies = [
- "anchor-syn 0.26.0",
- "anyhow",
+ "anchor-syn",
"proc-macro2",
"quote",
"syn 1.0.109",
@@ -259,51 +147,40 @@ dependencies = [
[[package]]
name = "anchor-attribute-program"
-version = "0.28.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eebd21543606ab61e2d83d9da37d24d3886a49f390f9c43a1964735e8c0f0d5"
-dependencies = [
- "anchor-syn 0.28.0",
- "anyhow",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "anchor-attribute-state"
-version = "0.26.0"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e677fae4a016a554acdd0e3b7f178d3acafaa7e7ffac6b8690cf4e171f1c116"
+checksum = "05ecfd49b2aeadeb32f35262230db402abed76ce87e27562b34f61318b2ec83c"
dependencies = [
- "anchor-syn 0.26.0",
+ "anchor-lang-idl",
+ "anchor-syn",
"anyhow",
+ "bs58 0.5.1",
+ "heck",
"proc-macro2",
"quote",
+ "serde_json",
"syn 1.0.109",
]
[[package]]
name = "anchor-derive-accounts"
-version = "0.26.0"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "340beef6809d1c3fcc7ae219153d981e95a8a277ff31985bd7050e32645dc9a8"
+checksum = "be89d160793a88495af462a7010b3978e48e30a630c91de47ce2c1d3cb7a6149"
dependencies = [
- "anchor-syn 0.26.0",
- "anyhow",
- "proc-macro2",
+ "anchor-syn",
"quote",
"syn 1.0.109",
]
[[package]]
-name = "anchor-derive-accounts"
-version = "0.28.0"
+name = "anchor-derive-serde"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec4720d899b3686396cced9508f23dab420f1308344456ec78ef76f98fda42af"
+checksum = "abc6ee78acb7bfe0c2dd2abc677aaa4789c0281a0c0ef01dbf6fe85e0fd9e6e4"
dependencies = [
- "anchor-syn 0.28.0",
- "anyhow",
+ "anchor-syn",
+ "borsh-derive-internal 0.10.4",
"proc-macro2",
"quote",
"syn 1.0.109",
@@ -311,9 +188,9 @@ dependencies = [
[[package]]
name = "anchor-derive-space"
-version = "0.28.0"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f495e85480bd96ddeb77b71d499247c7d4e8b501e75ecb234e9ef7ae7bd6552a"
+checksum = "134a01c0703f6fd355a0e472c033f6f3e41fac1ef6e370b20c50f4c8d022cea7"
dependencies = [
"proc-macro2",
"quote",
@@ -322,115 +199,91 @@ dependencies = [
[[package]]
name = "anchor-lang"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "662ceafe667448ee4199a4be2ee83b6bb76da28566eee5cea05f96ab38255af8"
-dependencies = [
- "anchor-attribute-access-control 0.26.0",
- "anchor-attribute-account 0.26.0",
- "anchor-attribute-constant 0.26.0",
- "anchor-attribute-error 0.26.0",
- "anchor-attribute-event 0.26.0",
- "anchor-attribute-interface",
- "anchor-attribute-program 0.26.0",
- "anchor-attribute-state",
- "anchor-derive-accounts 0.26.0",
- "arrayref",
- "base64 0.13.1",
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6bab117055905e930f762c196e08f861f8dfe7241b92cee46677a3b15561a0a"
+dependencies = [
+ "anchor-attribute-access-control",
+ "anchor-attribute-account",
+ "anchor-attribute-constant",
+ "anchor-attribute-error",
+ "anchor-attribute-event",
+ "anchor-attribute-program",
+ "anchor-derive-accounts",
+ "anchor-derive-serde",
+ "anchor-derive-space",
+ "anchor-lang-idl",
+ "base64 0.21.7",
"bincode",
- "borsh 0.9.3",
+ "borsh 0.10.4",
"bytemuck",
- "solana-program",
- "thiserror",
+ "solana-program 2.2.1",
+ "thiserror 1.0.69",
]
[[package]]
-name = "anchor-lang"
-version = "0.28.0"
+name = "anchor-lang-idl"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d2d4b20100f1310a774aba3471ef268e5c4ba4d5c28c0bbe663c2658acbc414"
+checksum = "32e8599d21995f68e296265aa5ab0c3cef582fd58afec014d01bd0bce18a4418"
dependencies = [
- "anchor-attribute-access-control 0.28.0",
- "anchor-attribute-account 0.28.0",
- "anchor-attribute-constant 0.28.0",
- "anchor-attribute-error 0.28.0",
- "anchor-attribute-event 0.28.0",
- "anchor-attribute-program 0.28.0",
- "anchor-derive-accounts 0.28.0",
- "anchor-derive-space",
- "arrayref",
- "base64 0.13.1",
- "bincode",
- "borsh 0.10.3",
- "bytemuck",
- "getrandom 0.2.10",
- "solana-program",
- "thiserror",
+ "anchor-lang-idl-spec",
+ "anyhow",
+ "heck",
+ "regex",
+ "serde",
+ "serde_json",
+ "sha2 0.10.9",
]
[[package]]
-name = "anchor-program-example"
+name = "anchor-lang-idl-spec"
version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bdf143115440fe621bdac3a29a1f7472e09f6cd82b2aa569429a0c13f103838"
dependencies = [
- "anchor-lang 0.28.0",
+ "anyhow",
+ "serde",
]
[[package]]
-name = "anchor-spl"
-version = "0.28.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78f860599da1c2354e7234c768783049eb42e2f54509ecfc942d2e0076a2da7b"
+name = "anchor-program-example"
+version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
- "mpl-token-metadata",
- "solana-program",
- "spl-associated-token-account 1.1.3",
- "spl-token 3.5.0",
- "spl-token-2022 0.6.1",
+ "anchor-lang",
]
[[package]]
-name = "anchor-syn"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0418bcb5daac3b8cb1b60d8fdb1d468ca36f5509f31fb51179326fae1028fdcc"
+name = "anchor-realloc"
+version = "0.1.0"
dependencies = [
- "anyhow",
- "bs58 0.3.1",
- "heck",
- "proc-macro2",
- "proc-macro2-diagnostics",
- "quote",
- "serde",
- "serde_json",
- "sha2 0.9.9",
- "syn 1.0.109",
- "thiserror",
+ "anchor-lang",
]
[[package]]
name = "anchor-syn"
-version = "0.28.0"
+version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a125e4b0cc046cfec58f5aa25038e34cf440151d58f0db3afc55308251fe936d"
+checksum = "5dc7a6d90cc643df0ed2744862cdf180587d1e5d28936538c18fc8908489ed67"
dependencies = [
"anyhow",
- "bs58 0.5.0",
+ "bs58 0.5.1",
+ "cargo_toml",
"heck",
"proc-macro2",
"quote",
"serde",
"serde_json",
- "sha2 0.10.7",
+ "sha2 0.10.9",
"syn 1.0.109",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
name = "anyhow"
-version = "1.0.75"
+version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
[[package]]
name = "ark-bn254"
@@ -549,23 +402,17 @@ dependencies = [
"rand 0.8.5",
]
-[[package]]
-name = "array-bytes"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ad284aeb45c13f2fb4f084de4a420ebf447423bdf9386c0540ce33cb3ef4b8c"
-
[[package]]
name = "arrayref"
-version = "0.3.7"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"
[[package]]
name = "arrayvec"
-version = "0.7.4"
+version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
name = "assert_matches"
@@ -579,22 +426,16 @@ version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
- "hermit-abi 0.1.19",
+ "hermit-abi",
"libc",
"winapi",
]
[[package]]
name = "autocfg"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-
-[[package]]
-name = "az"
-version = "1.2.1"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]]
name = "base64"
@@ -604,15 +445,15 @@ checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
[[package]]
name = "base64"
-version = "0.13.1"
+version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]]
name = "base64"
-version = "0.21.3"
+version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bincode"
@@ -625,9 +466,12 @@ dependencies = [
[[package]]
name = "bitflags"
-version = "1.3.2"
+version = "2.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
+dependencies = [
+ "serde",
+]
[[package]]
name = "bitmaps"
@@ -640,9 +484,9 @@ dependencies = [
[[package]]
name = "blake3"
-version = "1.4.1"
+version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5"
+checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0"
dependencies = [
"arrayref",
"arrayvec",
@@ -689,14 +533,24 @@ dependencies = [
[[package]]
name = "borsh"
-version = "0.10.3"
+version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b"
+checksum = "115e54d64eb62cdebad391c19efc9dce4981c690c85a33a12199d99bb9546fee"
dependencies = [
- "borsh-derive 0.10.3",
+ "borsh-derive 0.10.4",
"hashbrown 0.13.2",
]
+[[package]]
+name = "borsh"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce"
+dependencies = [
+ "borsh-derive 1.5.7",
+ "cfg_aliases",
+]
+
[[package]]
name = "borsh-derive"
version = "0.9.3"
@@ -712,17 +566,30 @@ dependencies = [
[[package]]
name = "borsh-derive"
-version = "0.10.3"
+version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7"
+checksum = "831213f80d9423998dd696e2c5345aba6be7a0bd8cd19e31c5243e13df1cef89"
dependencies = [
- "borsh-derive-internal 0.10.3",
- "borsh-schema-derive-internal 0.10.3",
+ "borsh-derive-internal 0.10.4",
+ "borsh-schema-derive-internal 0.10.4",
"proc-macro-crate 0.1.5",
"proc-macro2",
"syn 1.0.109",
]
+[[package]]
+name = "borsh-derive"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3"
+dependencies = [
+ "once_cell",
+ "proc-macro-crate 3.3.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
+
[[package]]
name = "borsh-derive-internal"
version = "0.9.3"
@@ -736,9 +603,9 @@ dependencies = [
[[package]]
name = "borsh-derive-internal"
-version = "0.10.3"
+version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb"
+checksum = "65d6ba50644c98714aa2a70d13d7df3cd75cd2b523a2b452bf010443800976b3"
dependencies = [
"proc-macro2",
"quote",
@@ -758,21 +625,15 @@ dependencies = [
[[package]]
name = "borsh-schema-derive-internal"
-version = "0.10.3"
+version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd"
+checksum = "276691d96f063427be83e6692b86148e488ebba9f48f77788724ca027ba3b6d4"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
-[[package]]
-name = "bs58"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb"
-
[[package]]
name = "bs58"
version = "0.4.0"
@@ -781,18 +642,18 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3"
[[package]]
name = "bs58"
-version = "0.5.0"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896"
+checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4"
dependencies = [
"tinyvec",
]
[[package]]
name = "bumpalo"
-version = "3.13.0"
+version = "3.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
[[package]]
name = "bv"
@@ -806,45 +667,56 @@ dependencies = [
[[package]]
name = "bytemuck"
-version = "1.14.0"
+version = "1.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c"
dependencies = [
"bytemuck_derive",
]
[[package]]
name = "bytemuck_derive"
-version = "1.5.0"
+version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1"
+checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
name = "byteorder"
-version = "1.4.3"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "cargo_toml"
+version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+checksum = "a98356df42a2eb1bd8f1793ae4ee4de48e384dd974ce5eac8eee802edb7492be"
+dependencies = [
+ "serde",
+ "toml 0.8.22",
+]
[[package]]
name = "carnival"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
+ "anchor-lang",
]
[[package]]
name = "cc"
-version = "1.0.83"
+version = "1.2.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+checksum = "5f4ac86a9e5bc1e2b3449ab9d7d3a6a405e3d1bb28d7b9be8614f55846ae3766"
dependencies = [
"jobserver",
"libc",
+ "shlex",
]
[[package]]
@@ -853,25 +725,31 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+[[package]]
+name = "cfg_aliases"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
[[package]]
name = "checking-accounts-anchor-program-example"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
+ "anchor-lang",
]
[[package]]
name = "checking-accounts-program"
version = "0.1.0"
dependencies = [
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
name = "chrono"
-version = "0.4.30"
+version = "0.4.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877"
+checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
dependencies = [
"num-traits",
]
@@ -891,24 +769,14 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
name = "close-account-program"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
-]
-
-[[package]]
-name = "cnft-vault"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.26.0",
- "mpl-bubblegum",
- "solana-program",
- "spl-account-compression",
+ "anchor-lang",
]
[[package]]
@@ -933,17 +801,17 @@ dependencies = [
[[package]]
name = "constant_time_eq"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
+checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
[[package]]
name = "counter-mpl-stack"
version = "0.1.0"
dependencies = [
"borsh 0.9.3",
- "shank 0.0.8",
- "solana-program",
+ "shank",
+ "solana-program 2.2.1",
]
[[package]]
@@ -951,21 +819,21 @@ name = "counter-solana-native"
version = "0.1.0"
dependencies = [
"borsh 0.9.3",
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
name = "counter_anchor"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
+ "anchor-lang",
]
[[package]]
name = "cpufeatures"
-version = "0.2.9"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
dependencies = [
"libc",
]
@@ -974,119 +842,46 @@ dependencies = [
name = "create-account-program"
version = "0.1.0"
dependencies = [
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
name = "create-system-account"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
-]
-
-[[package]]
-name = "create-token"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.28.0",
- "anchor-spl",
- "mpl-token-metadata",
-]
-
-[[package]]
-name = "create-token-program"
-version = "0.1.0"
-dependencies = [
- "borsh 0.9.3",
- "borsh-derive 0.9.3",
- "mpl-token-metadata",
- "solana-program",
- "spl-associated-token-account 2.1.0",
- "spl-token 4.0.0",
-]
-
-[[package]]
-name = "cross-program-invocatio-anchor-hand"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.28.0",
- "cross-program-invocatio-anchor-lever",
-]
-
-[[package]]
-name = "cross-program-invocatio-anchor-lever"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.28.0",
-]
-
-[[package]]
-name = "cross-program-invocatio-native-hand"
-version = "0.1.0"
-dependencies = [
- "borsh 0.10.3",
- "borsh-derive 0.10.3",
- "cross-program-invocatio-native-lever",
- "solana-program",
-]
-
-[[package]]
-name = "cross-program-invocatio-native-lever"
-version = "0.1.0"
-dependencies = [
- "borsh 0.10.3",
- "borsh-derive 0.10.3",
- "solana-program",
-]
-
-[[package]]
-name = "crossbeam-channel"
-version = "0.5.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
-dependencies = [
- "cfg-if",
- "crossbeam-utils",
+ "anchor-lang",
]
[[package]]
name = "crossbeam-deque"
-version = "0.8.3"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
dependencies = [
- "cfg-if",
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
-version = "0.9.15"
+version = "0.9.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
dependencies = [
- "autocfg",
- "cfg-if",
"crossbeam-utils",
- "memoffset",
- "scopeguard",
]
[[package]]
name = "crossbeam-utils"
-version = "0.8.16"
+version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
-dependencies = [
- "cfg-if",
-]
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crunchy"
-version = "0.2.2"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
[[package]]
name = "crypto-common"
@@ -1132,51 +927,66 @@ dependencies = [
]
[[package]]
-name = "cutils"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.26.0",
- "getrandom 0.2.10",
- "mpl-bubblegum",
- "solana-program",
- "spl-account-compression",
- "toml_datetime",
- "winnow",
-]
-
-[[package]]
-name = "darling"
-version = "0.20.3"
+name = "curve25519-dalek"
+version = "4.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e"
+checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be"
dependencies = [
- "darling_core",
- "darling_macro",
+ "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
+ "digest 0.10.7",
+ "fiat-crypto",
+ "rand_core 0.6.4",
+ "rustc_version",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "curve25519-dalek-derive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
+dependencies = [
+ "darling_core",
+ "darling_macro",
]
[[package]]
name = "darling_core"
-version = "0.20.3"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621"
+checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
name = "darling_macro"
-version = "0.20.3"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
+checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
@@ -1216,12 +1026,6 @@ dependencies = [
"subtle",
]
-[[package]]
-name = "dyn-clone"
-version = "1.0.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555"
-
[[package]]
name = "ed25519"
version = "1.5.3"
@@ -1237,7 +1041,7 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"
dependencies = [
- "curve25519-dalek",
+ "curve25519-dalek 3.2.1",
"ed25519",
"rand 0.7.3",
"serde",
@@ -1254,14 +1058,14 @@ dependencies = [
"derivation-path",
"ed25519-dalek",
"hmac 0.12.1",
- "sha2 0.10.7",
+ "sha2 0.10.9",
]
[[package]]
name = "either"
-version = "1.9.0"
+version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
name = "env_logger"
@@ -1276,6 +1080,21 @@ dependencies = [
"termcolor",
]
+[[package]]
+name = "equivalent"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+[[package]]
+name = "favorites-native"
+version = "0.1.0"
+dependencies = [
+ "borsh 0.9.3",
+ "borsh-derive 0.9.3",
+ "solana-program 2.2.1",
+]
+
[[package]]
name = "feature-probe"
version = "0.1.1"
@@ -1283,28 +1102,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da"
[[package]]
-name = "fixed"
-version = "1.23.1"
+name = "fiat-crypto"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
+
+[[package]]
+name = "five8"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79386fdcec5e0fde91b1a6a5bcd89677d1f9304f7f986b154a1b9109038854d9"
+checksum = "a75b8549488b4715defcb0d8a8a1c1c76a80661b5fa106b4ca0e7fce59d7d875"
dependencies = [
- "az",
- "bytemuck",
- "half",
- "typenum",
+ "five8_core",
]
[[package]]
-name = "fixed-sqrt"
-version = "0.2.5"
+name = "five8_const"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af725dbdc8dd186b6914026b51e43d99b332e8e816d3b495b84bf8304ac17b73"
+checksum = "26dec3da8bc3ef08f2c04f61eab298c3ab334523e55f076354d6d6f613799a7b"
dependencies = [
- "fixed",
- "integer-sqrt",
- "typenum",
+ "five8_core",
]
+[[package]]
+name = "five8_core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2551bf44bc5f776c15044b9b94153a00198be06743e262afaaa61f11ac7523a5"
+
[[package]]
name = "fnv"
version = "1.0.7"
@@ -1337,9 +1163,9 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.10"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
dependencies = [
"cfg-if",
"js-sys",
@@ -1349,28 +1175,32 @@ dependencies = [
]
[[package]]
-name = "half"
-version = "2.2.1"
+name = "getrandom"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
+checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
dependencies = [
- "crunchy",
+ "cfg-if",
+ "libc",
+ "r-efi",
+ "wasi 0.14.2+wasi-0.2.4",
]
[[package]]
-name = "hashbrown"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+name = "hand"
+version = "0.1.0"
dependencies = [
- "ahash 0.7.6",
+ "anchor-lang",
]
[[package]]
name = "hashbrown"
-version = "0.12.3"
+version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash 0.7.8",
+]
[[package]]
name = "hashbrown"
@@ -1378,9 +1208,15 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
dependencies = [
- "ahash 0.8.3",
+ "ahash 0.8.12",
]
+[[package]]
+name = "hashbrown"
+version = "0.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3"
+
[[package]]
name = "heck"
version = "0.3.3"
@@ -1394,14 +1230,14 @@ dependencies = [
name = "hello-solana-anchor"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
+ "anchor-lang",
]
[[package]]
name = "hello-solana-program"
version = "0.1.0"
dependencies = [
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
@@ -1413,21 +1249,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "hermit-abi"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
-
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-dependencies = [
- "serde",
-]
-
[[package]]
name = "hmac"
version = "0.8.1"
@@ -1460,9 +1281,9 @@ dependencies = [
[[package]]
name = "humantime"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f"
[[package]]
name = "ident_case"
@@ -1488,21 +1309,12 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "1.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
-dependencies = [
- "autocfg",
- "hashbrown 0.12.3",
-]
-
-[[package]]
-name = "integer-sqrt"
-version = "0.1.5"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770"
+checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
dependencies = [
- "num-traits",
+ "equivalent",
+ "hashbrown 0.15.3",
]
[[package]]
@@ -1516,48 +1328,57 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.9"
+version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "jobserver"
-version = "0.1.26"
+version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
dependencies = [
+ "getrandom 0.3.3",
"libc",
]
[[package]]
name = "js-sys"
-version = "0.3.64"
+version = "0.3.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
dependencies = [
+ "once_cell",
"wasm-bindgen",
]
[[package]]
name = "keccak"
-version = "0.1.4"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
+checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
dependencies = [
"cpufeatures",
]
[[package]]
name = "lazy_static"
-version = "1.4.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "lever"
+version = "0.1.0"
+dependencies = [
+ "anchor-lang",
+]
[[package]]
name = "libc"
-version = "0.2.147"
+version = "0.2.172"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
[[package]]
name = "libsecp256k1"
@@ -1607,11 +1428,23 @@ dependencies = [
"libsecp256k1-core",
]
+[[package]]
+name = "light-poseidon"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee"
+dependencies = [
+ "ark-bn254",
+ "ark-ff",
+ "num-bigint",
+ "thiserror 1.0.69",
+]
+
[[package]]
name = "lock_api"
-version = "0.4.10"
+version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
dependencies = [
"autocfg",
"scopeguard",
@@ -1619,15 +1452,15 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.20"
+version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
[[package]]
name = "memchr"
-version = "2.6.3"
+version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "memmap2"
@@ -1640,9 +1473,9 @@ dependencies = [
[[package]]
name = "memoffset"
-version = "0.9.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
dependencies = [
"autocfg",
]
@@ -1659,119 +1492,12 @@ dependencies = [
"zeroize",
]
-[[package]]
-name = "mpl-bubblegum"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b751e0658d7414a801b2fee9802d884f508724fdc1d8645405f69e604d348bc1"
-dependencies = [
- "anchor-lang 0.26.0",
- "bytemuck",
- "mpl-token-metadata",
- "solana-program",
- "spl-account-compression",
- "spl-associated-token-account 1.1.3",
- "spl-token 3.5.0",
-]
-
-[[package]]
-name = "mpl-token-auth-rules"
-version = "1.4.3-beta.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81a34d740606a10a9dac7507d0c9025d72e0ce311c68ae85b6634982cf69a9c6"
-dependencies = [
- "borsh 0.9.3",
- "bytemuck",
- "mpl-token-metadata-context-derive 0.2.1",
- "num-derive 0.3.3",
- "num-traits",
- "rmp-serde",
- "serde",
- "shank 0.0.11",
- "solana-program",
- "solana-zk-token-sdk",
- "thiserror",
-]
-
-[[package]]
-name = "mpl-token-metadata"
-version = "1.13.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "654976568c99887549e1291e7b7e55ae31a70732e56ebb25cb1cdfc08c018333"
-dependencies = [
- "arrayref",
- "borsh 0.9.3",
- "mpl-token-auth-rules",
- "mpl-token-metadata-context-derive 0.3.0",
- "mpl-utils",
- "num-derive 0.3.3",
- "num-traits",
- "shank 0.0.11",
- "solana-program",
- "spl-associated-token-account 2.1.0",
- "spl-token 4.0.0",
- "thiserror",
-]
-
-[[package]]
-name = "mpl-token-metadata-context-derive"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12989bc45715b0ee91944855130131479f9c772e198a910c3eb0ea327d5bffc3"
-dependencies = [
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "mpl-token-metadata-context-derive"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5a739019e11d93661a64ef5fe108ab17c79b35961e944442ff6efdd460ad01a"
-dependencies = [
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "mpl-utils"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f2e4f92aec317d5853c0cc4c03c55f5178511c45bb3dbb441aea63117bf3dc9"
-dependencies = [
- "arrayref",
- "solana-program",
- "spl-token-2022 0.6.1",
-]
-
-[[package]]
-name = "nft-minter"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.28.0",
- "anchor-spl",
- "mpl-token-metadata",
-]
-
-[[package]]
-name = "nft-minter-program"
-version = "0.1.0"
-dependencies = [
- "borsh 0.9.3",
- "borsh-derive 0.9.3",
- "mpl-token-metadata",
- "solana-program",
- "spl-associated-token-account 2.1.0",
- "spl-token 4.0.0",
-]
-
[[package]]
name = "num-bigint"
-version = "0.4.4"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
dependencies = [
- "autocfg",
"num-integer",
"num-traits",
]
@@ -1789,53 +1515,33 @@ dependencies = [
[[package]]
name = "num-derive"
-version = "0.4.0"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e6a0fd4f737c707bd9086cc16c925f294943eb62eb71499e9fd4cf71f8b9f4e"
+checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
name = "num-integer"
-version = "0.1.45"
+version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
dependencies = [
- "autocfg",
"num-traits",
]
[[package]]
name = "num-traits"
-version = "0.2.16"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
]
-[[package]]
-name = "num_cpus"
-version = "1.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
-dependencies = [
- "hermit-abi 0.3.2",
- "libc",
-]
-
-[[package]]
-name = "num_enum"
-version = "0.5.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
-dependencies = [
- "num_enum_derive 0.5.11",
-]
-
[[package]]
name = "num_enum"
version = "0.6.1"
@@ -1847,23 +1553,11 @@ dependencies = [
[[package]]
name = "num_enum"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb"
-dependencies = [
- "num_enum_derive 0.7.0",
-]
-
-[[package]]
-name = "num_enum_derive"
-version = "0.5.11"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179"
dependencies = [
- "proc-macro-crate 1.3.1",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
+ "num_enum_derive 0.7.3",
]
[[package]]
@@ -1875,38 +1569,38 @@ dependencies = [
"proc-macro-crate 1.3.1",
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
name = "num_enum_derive"
-version = "0.7.0"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597"
+checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
dependencies = [
- "proc-macro-crate 1.3.1",
+ "proc-macro-crate 3.3.0",
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
name = "once_cell"
-version = "1.18.0"
+version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "opaque-debug"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
[[package]]
name = "parking_lot"
-version = "0.12.1"
+version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
dependencies = [
"lock_api",
"parking_lot_core",
@@ -1914,9 +1608,9 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.8"
+version = "0.9.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
"cfg-if",
"libc",
@@ -1927,9 +1621,9 @@ dependencies = [
[[package]]
name = "paste"
-version = "1.0.14"
+version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "pbkdf2"
@@ -1949,32 +1643,11 @@ dependencies = [
"digest 0.10.7",
]
-[[package]]
-name = "pda-mint-authority-anchor"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.28.0",
- "anchor-spl",
- "mpl-token-metadata",
-]
-
-[[package]]
-name = "pda-mint-authority-native-program"
-version = "0.1.0"
-dependencies = [
- "borsh 0.9.3",
- "borsh-derive 0.9.3",
- "mpl-token-metadata",
- "solana-program",
- "spl-associated-token-account 2.1.0",
- "spl-token 4.0.0",
-]
-
[[package]]
name = "pda-rent-payer"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
+ "anchor-lang",
]
[[package]]
@@ -1983,14 +1656,14 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
name = "percent-encoding"
-version = "2.3.0"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "polyval"
@@ -2006,9 +1679,12 @@ dependencies = [
[[package]]
name = "ppv-lite86"
-version = "0.2.17"
+version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy",
+]
[[package]]
name = "proc-macro-crate"
@@ -2016,7 +1692,7 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
dependencies = [
- "toml",
+ "toml 0.5.11",
]
[[package]]
@@ -2026,36 +1702,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
dependencies = [
"once_cell",
- "toml_edit",
+ "toml_edit 0.19.15",
]
[[package]]
-name = "proc-macro2"
-version = "1.0.66"
+name = "proc-macro-crate"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
dependencies = [
- "unicode-ident",
+ "toml_edit 0.22.26",
]
[[package]]
-name = "proc-macro2-diagnostics"
-version = "0.9.1"
+name = "proc-macro2"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada"
+checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "version_check",
- "yansi",
+ "unicode-ident",
]
[[package]]
name = "processing-instructions"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
+ "anchor-lang",
]
[[package]]
@@ -2064,7 +1736,7 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
@@ -2073,7 +1745,7 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
@@ -2082,66 +1754,43 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
-name = "pyth-sdk"
-version = "0.8.0"
+name = "qstring"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e7aeef4d5f0a9c98ff5af2ddd84a8b89919c512188305b497a9eb9afa97a949"
+checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e"
dependencies = [
- "borsh 0.10.3",
- "borsh-derive 0.10.3",
- "getrandom 0.2.10",
- "hex",
- "schemars",
- "serde",
+ "percent-encoding",
]
[[package]]
-name = "pyth-sdk-solana"
-version = "0.8.0"
+name = "qualifier_attr"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afa571ea6ea51102b8fc03303d0e6fea4f788f77bb4e0d65ae2d3c5e384e3187"
+checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2"
dependencies = [
- "borsh 0.10.3",
- "borsh-derive 0.10.3",
- "bytemuck",
- "num-derive 0.3.3",
- "num-traits",
- "pyth-sdk",
- "serde",
- "solana-program",
- "thiserror",
-]
-
-[[package]]
-name = "pythexample"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.28.0",
- "pyth-sdk",
- "pyth-sdk-solana",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
]
[[package]]
-name = "qstring"
-version = "0.7.2"
+name = "quote"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
- "percent-encoding",
+ "proc-macro2",
]
[[package]]
-name = "quote"
-version = "1.0.33"
+name = "r-efi"
+version = "5.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
-dependencies = [
- "proc-macro2",
-]
+checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
[[package]]
name = "rand"
@@ -2162,6 +1811,7 @@ version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
+ "libc",
"rand_chacha 0.3.1",
"rand_core 0.6.4",
]
@@ -2201,7 +1851,7 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
- "getrandom 0.2.10",
+ "getrandom 0.2.16",
]
[[package]]
@@ -2224,9 +1874,9 @@ dependencies = [
[[package]]
name = "rayon"
-version = "1.7.0"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
dependencies = [
"either",
"rayon-core",
@@ -2234,14 +1884,12 @@ dependencies = [
[[package]]
name = "rayon-core"
-version = "1.11.0"
+version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
dependencies = [
- "crossbeam-channel",
"crossbeam-deque",
"crossbeam-utils",
- "num_cpus",
]
[[package]]
@@ -2250,23 +1898,23 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
+ "solana-program 2.2.1",
]
[[package]]
name = "redox_syscall"
-version = "0.3.5"
+version = "0.5.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af"
dependencies = [
"bitflags",
]
[[package]]
name = "regex"
-version = "1.9.5"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
@@ -2276,9 +1924,9 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.3.8"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
@@ -2287,15 +1935,15 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.7.5"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "rent-example"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
+ "anchor-lang",
]
[[package]]
@@ -2304,29 +1952,7 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
-]
-
-[[package]]
-name = "rmp"
-version = "0.8.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20"
-dependencies = [
- "byteorder",
- "num-traits",
- "paste",
-]
-
-[[package]]
-name = "rmp-serde"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a"
-dependencies = [
- "byteorder",
- "rmp",
- "serde",
+ "solana-program 2.2.1",
]
[[package]]
@@ -2337,48 +1963,24 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustc_version"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
dependencies = [
"semver",
]
[[package]]
name = "rustversion"
-version = "1.0.14"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
[[package]]
name = "ryu"
-version = "1.0.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
-
-[[package]]
-name = "schemars"
-version = "0.8.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "763f8cd0d4c71ed8389c90cb8100cba87e763bd01a8e614d4f0af97bcd50a161"
-dependencies = [
- "dyn-clone",
- "schemars_derive",
- "serde",
- "serde_json",
-]
-
-[[package]]
-name = "schemars_derive"
-version = "0.8.13"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0f696e21e10fa546b7ffb1c9672c6de8fbc7a81acf59524386d8639bf12737"
-dependencies = [
- "proc-macro2",
- "quote",
- "serde_derive_internals",
- "syn 1.0.109",
-]
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "scopeguard"
@@ -2388,58 +1990,57 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "semver"
-version = "1.0.18"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
[[package]]
name = "serde"
-version = "1.0.188"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_bytes"
-version = "0.11.12"
+version = "0.11.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96"
dependencies = [
"serde",
]
[[package]]
name = "serde_derive"
-version = "1.0.188"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
-name = "serde_derive_internals"
-version = "0.26.0"
+name = "serde_json"
+version = "1.0.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
+checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
]
[[package]]
-name = "serde_json"
-version = "1.0.105"
+name = "serde_spanned"
+version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
+checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
dependencies = [
- "itoa",
- "ryu",
"serde",
]
@@ -2462,7 +2063,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
@@ -2480,9 +2081,9 @@ dependencies = [
[[package]]
name = "sha2"
-version = "0.10.7"
+version = "0.10.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -2517,16 +2118,7 @@ version = "0.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2935c06d5a141ad2854622a014e30c5eeaa40096667df6bdd682dba9f8f81819"
dependencies = [
- "shank_macro 0.0.8",
-]
-
-[[package]]
-name = "shank"
-version = "0.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b63e565b5e95ad88ab38f312e89444c749360641c509ef2de0093b49f55974a5"
-dependencies = [
- "shank_macro 0.0.11",
+ "shank_macro",
]
[[package]]
@@ -2537,19 +2129,7 @@ checksum = "6ab8a1eb550845e36c88007f4c00175eeeb436d2fc6c70d05207a338cba7519f"
dependencies = [
"proc-macro2",
"quote",
- "shank_macro_impl 0.0.8",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "shank_macro"
-version = "0.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63927d22a1e8b74bda98cc6e151fcdf178b7abb0dc6c4f81e0bbf5ffe2fc4ec8"
-dependencies = [
- "proc-macro2",
- "quote",
- "shank_macro_impl 0.0.11",
+ "shank_macro_impl",
"syn 1.0.109",
]
@@ -2567,17 +2147,10 @@ dependencies = [
]
[[package]]
-name = "shank_macro_impl"
-version = "0.0.11"
+name = "shlex"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40ce03403df682f80f4dc1efafa87a4d0cb89b03726d0565e6364bdca5b9a441"
-dependencies = [
- "anyhow",
- "proc-macro2",
- "quote",
- "serde",
- "syn 1.0.109",
-]
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "signature"
@@ -2585,6 +2158,12 @@ version = "1.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
[[package]]
name = "sized-chunks"
version = "0.6.5"
@@ -2597,269 +2176,1024 @@ dependencies = [
[[package]]
name = "smallvec"
-version = "1.11.0"
+version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
[[package]]
-name = "solana-frozen-abi"
-version = "1.16.12"
+name = "solana-account"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f949fe4edaeaea78c844023bfc1c898e0b1f5a100f8a8d2d0f85d0a7b090258"
+dependencies = [
+ "solana-account-info",
+ "solana-clock",
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-sdk-ids",
+]
+
+[[package]]
+name = "solana-account-info"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0c17d606a298a205fae325489fbed88ee6dc4463c111672172327e741c8905d"
+dependencies = [
+ "bincode",
+ "serde",
+ "solana-program-error",
+ "solana-program-memory",
+ "solana-pubkey",
+]
+
+[[package]]
+name = "solana-address-lookup-table-interface"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1673f67efe870b64a65cb39e6194be5b26527691ce5922909939961a6e6b395"
+dependencies = [
+ "bincode",
+ "bytemuck",
+ "serde",
+ "serde_derive",
+ "solana-clock",
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-sdk-ids",
+ "solana-slot-hashes",
+]
+
+[[package]]
+name = "solana-atomic-u64"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52e52720efe60465b052b9e7445a01c17550666beec855cce66f44766697bc2"
+dependencies = [
+ "parking_lot",
+]
+
+[[package]]
+name = "solana-big-mod-exp"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75db7f2bbac3e62cfd139065d15bcda9e2428883ba61fc8d27ccb251081e7567"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "solana-define-syscall",
+]
+
+[[package]]
+name = "solana-bincode"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19a3787b8cf9c9fe3dd360800e8b70982b9e5a8af9e11c354b6665dd4a003adc"
+dependencies = [
+ "bincode",
+ "serde",
+ "solana-instruction",
+]
+
+[[package]]
+name = "solana-blake3-hasher"
+version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0447b0bb6ab6c6fc0e83bd106618c23d241c4fb8090de715a9811fb993fbfd07"
+checksum = "a1a0801e25a1b31a14494fc80882a036be0ffd290efc4c2d640bfcca120a4672"
dependencies = [
- "ahash 0.8.3",
"blake3",
+ "solana-define-syscall",
+ "solana-hash",
+ "solana-sanitize",
+]
+
+[[package]]
+name = "solana-borsh"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "718333bcd0a1a7aed6655aa66bef8d7fb047944922b2d3a18f49cbc13e73d004"
+dependencies = [
+ "borsh 0.10.4",
+ "borsh 1.5.7",
+]
+
+[[package]]
+name = "solana-clock"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bb482ab70fced82ad3d7d3d87be33d466a3498eb8aa856434ff3c0dfc2e2e31"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "solana-sdk-ids",
+ "solana-sdk-macro 2.2.1",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-cpi"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dc71126edddc2ba014622fc32d0f5e2e78ec6c5a1e0eb511b85618c09e9ea11"
+dependencies = [
+ "solana-account-info",
+ "solana-define-syscall",
+ "solana-instruction",
+ "solana-program-error",
+ "solana-pubkey",
+ "solana-stable-layout",
+]
+
+[[package]]
+name = "solana-decode-error"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c781686a18db2f942e70913f7ca15dc120ec38dcab42ff7557db2c70c625a35"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "solana-define-syscall"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae3e2abcf541c8122eafe9a625d4d194b4023c20adde1e251f94e056bb1aee2"
+
+[[package]]
+name = "solana-epoch-rewards"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b575d3dd323b9ea10bb6fe89bf6bf93e249b215ba8ed7f68f1a3633f384db7"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "solana-hash",
+ "solana-sdk-ids",
+ "solana-sdk-macro 2.2.1",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-epoch-schedule"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fce071fbddecc55d727b1d7ed16a629afe4f6e4c217bc8d00af3b785f6f67ed"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "solana-sdk-ids",
+ "solana-sdk-macro 2.2.1",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-example-mocks"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84461d56cbb8bb8d539347151e0525b53910102e4bced875d49d5139708e39d3"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "solana-address-lookup-table-interface",
+ "solana-clock",
+ "solana-hash",
+ "solana-instruction",
+ "solana-keccak-hasher",
+ "solana-message",
+ "solana-nonce",
+ "solana-pubkey",
+ "solana-sdk-ids",
+ "solana-system-interface",
+ "thiserror 2.0.12",
+]
+
+[[package]]
+name = "solana-feature-gate-interface"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f5c5382b449e8e4e3016fb05e418c53d57782d8b5c30aa372fc265654b956d"
+dependencies = [
+ "bincode",
+ "serde",
+ "serde_derive",
+ "solana-account",
+ "solana-account-info",
+ "solana-instruction",
+ "solana-program-error",
+ "solana-pubkey",
+ "solana-rent",
+ "solana-sdk-ids",
+ "solana-system-interface",
+]
+
+[[package]]
+name = "solana-fee-calculator"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89bc408da0fb3812bc3008189d148b4d3e08252c79ad810b245482a3f70cd8d"
+dependencies = [
+ "log",
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "solana-frozen-abi"
+version = "1.18.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03ab2c30c15311b511c0d1151e4ab6bc9a3e080a37e7c6e7c2d96f5784cf9434"
+dependencies = [
"block-buffer 0.10.4",
"bs58 0.4.0",
"bv",
- "byteorder",
- "cc",
"either",
"generic-array",
- "getrandom 0.1.16",
"im",
"lazy_static",
"log",
"memmap2",
- "once_cell",
- "rand_core 0.6.4",
"rustc_version",
"serde",
"serde_bytes",
"serde_derive",
- "serde_json",
- "sha2 0.10.7",
+ "sha2 0.10.9",
"solana-frozen-abi-macro",
"subtle",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
name = "solana-frozen-abi-macro"
-version = "1.16.12"
+version = "1.18.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cc86a118888cef8a3878f6dc9c291787cb21ef50cd98e7271f1e0ff548153b8"
+checksum = "c142f779c3633ac83c84d04ff06c70e1f558c876f13358bed77ba629c7417932"
dependencies = [
"proc-macro2",
"quote",
"rustc_version",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
-name = "solana-logger"
-version = "1.16.12"
+name = "solana-hash"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ac77d7fc0144181d4f6c8eb4203bb5fe54d486fa19ccaab7615ccb4b874b0de"
+checksum = "b5b96e9f0300fa287b545613f007dfe20043d7812bee255f418c1eb649c93b63"
dependencies = [
- "env_logger",
- "lazy_static",
- "log",
+ "borsh 1.5.7",
+ "bytemuck",
+ "bytemuck_derive",
+ "five8",
+ "js-sys",
+ "serde",
+ "serde_derive",
+ "solana-atomic-u64",
+ "solana-sanitize",
+ "wasm-bindgen",
]
[[package]]
-name = "solana-program"
-version = "1.16.12"
+name = "solana-instruction"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3841458623bd80b8291e8991f7353d674bb39656b1db83ec1aa5916a1b6ed7c"
+checksum = "47298e2ce82876b64f71e9d13a46bc4b9056194e7f9937ad3084385befa50885"
dependencies = [
- "ark-bn254",
- "ark-ec",
- "ark-ff",
- "ark-serialize",
- "array-bytes",
- "base64 0.21.3",
"bincode",
- "bitflags",
- "blake3",
- "borsh 0.10.3",
- "borsh 0.9.3",
- "bs58 0.4.0",
- "bv",
- "bytemuck",
- "cc",
- "console_error_panic_hook",
- "console_log",
- "curve25519-dalek",
- "getrandom 0.2.10",
- "itertools",
+ "borsh 1.5.7",
+ "getrandom 0.2.16",
"js-sys",
- "lazy_static",
- "libc",
- "libsecp256k1",
- "log",
- "memoffset",
+ "num-traits",
+ "serde",
+ "serde_derive",
+ "solana-define-syscall",
+ "solana-pubkey",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "solana-instructions-sysvar"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0e85a6fad5c2d0c4f5b91d34b8ca47118fc593af706e523cdbedf846a954f57"
+dependencies = [
+ "bitflags",
+ "solana-account-info",
+ "solana-instruction",
+ "solana-program-error",
+ "solana-pubkey",
+ "solana-sanitize",
+ "solana-sdk-ids",
+ "solana-serialize-utils",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-keccak-hasher"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7aeb957fbd42a451b99235df4942d96db7ef678e8d5061ef34c9b34cae12f79"
+dependencies = [
+ "sha3 0.10.8",
+ "solana-define-syscall",
+ "solana-hash",
+ "solana-sanitize",
+]
+
+[[package]]
+name = "solana-last-restart-slot"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a6360ac2fdc72e7463565cd256eedcf10d7ef0c28a1249d261ec168c1b55cdd"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "solana-sdk-ids",
+ "solana-sdk-macro 2.2.1",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-loader-v2-interface"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8ab08006dad78ae7cd30df8eea0539e207d08d91eaefb3e1d49a446e1c49654"
+dependencies = [
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-sdk-ids",
+]
+
+[[package]]
+name = "solana-loader-v3-interface"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4be76cfa9afd84ca2f35ebc09f0da0f0092935ccdac0595d98447f259538c2"
+dependencies = [
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-sdk-ids",
+ "solana-system-interface",
+]
+
+[[package]]
+name = "solana-loader-v4-interface"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "706a777242f1f39a83e2a96a2a6cb034cb41169c6ecbee2cf09cb873d9659e7e"
+dependencies = [
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-sdk-ids",
+ "solana-system-interface",
+]
+
+[[package]]
+name = "solana-logger"
+version = "1.18.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121d36ffb3c6b958763312cbc697fbccba46ee837d3a0aa4fc0e90fcb3b884f3"
+dependencies = [
+ "env_logger",
+ "lazy_static",
+ "log",
+]
+
+[[package]]
+name = "solana-message"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1796aabce376ff74bf89b78d268fa5e683d7d7a96a0a4e4813ec34de49d5314b"
+dependencies = [
+ "bincode",
+ "blake3",
+ "lazy_static",
+ "serde",
+ "serde_derive",
+ "solana-bincode",
+ "solana-hash",
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-sanitize",
+ "solana-sdk-ids",
+ "solana-short-vec",
+ "solana-system-interface",
+ "solana-transaction-error",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "solana-msg"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36a1a14399afaabc2781a1db09cb14ee4cc4ee5c7a5a3cfcc601811379a8092"
+dependencies = [
+ "solana-define-syscall",
+]
+
+[[package]]
+name = "solana-native-token"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "307fb2f78060995979e9b4f68f833623565ed4e55d3725f100454ce78a99a1a3"
+
+[[package]]
+name = "solana-nonce"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "703e22eb185537e06204a5bd9d509b948f0066f2d1d814a6f475dafb3ddf1325"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "solana-fee-calculator",
+ "solana-hash",
+ "solana-pubkey",
+ "solana-sha256-hasher",
+]
+
+[[package]]
+name = "solana-program"
+version = "1.18.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c10f4588cefd716b24a1a40dd32c278e43a560ab8ce4de6b5805c9d113afdfa1"
+dependencies = [
+ "ark-bn254",
+ "ark-ec",
+ "ark-ff",
+ "ark-serialize",
+ "base64 0.21.7",
+ "bincode",
+ "bitflags",
+ "blake3",
+ "borsh 0.10.4",
+ "borsh 0.9.3",
+ "borsh 1.5.7",
+ "bs58 0.4.0",
+ "bv",
+ "bytemuck",
+ "cc",
+ "console_error_panic_hook",
+ "console_log",
+ "curve25519-dalek 3.2.1",
+ "getrandom 0.2.16",
+ "itertools",
+ "js-sys",
+ "lazy_static",
+ "libc",
+ "libsecp256k1",
+ "light-poseidon",
+ "log",
+ "memoffset",
"num-bigint",
- "num-derive 0.3.3",
+ "num-derive 0.4.2",
"num-traits",
"parking_lot",
+ "rand 0.8.5",
+ "rustc_version",
+ "rustversion",
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "serde_json",
+ "sha2 0.10.9",
+ "sha3 0.10.8",
+ "solana-frozen-abi",
+ "solana-frozen-abi-macro",
+ "solana-sdk-macro 1.18.26",
+ "thiserror 1.0.69",
+ "tiny-bip39",
+ "wasm-bindgen",
+ "zeroize",
+]
+
+[[package]]
+name = "solana-program"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "586469467e93ceb79048f8d8e3a619bf61d05396ee7de95cb40280301a589d05"
+dependencies = [
+ "bincode",
+ "blake3",
+ "borsh 0.10.4",
+ "borsh 1.5.7",
+ "bs58 0.5.1",
+ "bytemuck",
+ "console_error_panic_hook",
+ "console_log",
+ "getrandom 0.2.16",
+ "lazy_static",
+ "log",
+ "memoffset",
+ "num-bigint",
+ "num-derive 0.4.2",
+ "num-traits",
+ "rand 0.8.5",
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "solana-account-info",
+ "solana-address-lookup-table-interface",
+ "solana-atomic-u64",
+ "solana-big-mod-exp",
+ "solana-bincode",
+ "solana-blake3-hasher",
+ "solana-borsh",
+ "solana-clock",
+ "solana-cpi",
+ "solana-decode-error",
+ "solana-define-syscall",
+ "solana-epoch-rewards",
+ "solana-epoch-schedule",
+ "solana-example-mocks",
+ "solana-feature-gate-interface",
+ "solana-fee-calculator",
+ "solana-hash",
+ "solana-instruction",
+ "solana-instructions-sysvar",
+ "solana-keccak-hasher",
+ "solana-last-restart-slot",
+ "solana-loader-v2-interface",
+ "solana-loader-v3-interface",
+ "solana-loader-v4-interface",
+ "solana-message",
+ "solana-msg",
+ "solana-native-token",
+ "solana-nonce",
+ "solana-program-entrypoint",
+ "solana-program-error",
+ "solana-program-memory",
+ "solana-program-option",
+ "solana-program-pack",
+ "solana-pubkey",
+ "solana-rent",
+ "solana-sanitize",
+ "solana-sdk-ids",
+ "solana-sdk-macro 2.2.1",
+ "solana-secp256k1-recover",
+ "solana-serde-varint",
+ "solana-serialize-utils",
+ "solana-sha256-hasher",
+ "solana-short-vec",
+ "solana-slot-hashes",
+ "solana-slot-history",
+ "solana-stable-layout",
+ "solana-stake-interface",
+ "solana-system-interface",
+ "solana-sysvar",
+ "solana-sysvar-id",
+ "solana-vote-interface",
+ "thiserror 2.0.12",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "solana-program-entrypoint"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "473ffe73c68d93e9f2aa726ad2985fe52760052709aaab188100a42c618060ec"
+dependencies = [
+ "solana-account-info",
+ "solana-msg",
+ "solana-program-error",
+ "solana-pubkey",
+]
+
+[[package]]
+name = "solana-program-error"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ee2e0217d642e2ea4bee237f37bd61bb02aec60da3647c48ff88f6556ade775"
+dependencies = [
+ "borsh 1.5.7",
+ "num-traits",
+ "serde",
+ "serde_derive",
+ "solana-decode-error",
+ "solana-instruction",
+ "solana-msg",
+ "solana-pubkey",
+]
+
+[[package]]
+name = "solana-program-memory"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b0268f6c89825fb634a34bd0c3b8fdaeaecfc3728be1d622a8ee6dd577b60d4"
+dependencies = [
+ "num-traits",
+ "solana-define-syscall",
+]
+
+[[package]]
+name = "solana-program-option"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc677a2e9bc616eda6dbdab834d463372b92848b2bfe4a1ed4e4b4adba3397d0"
+
+[[package]]
+name = "solana-program-pack"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "319f0ef15e6e12dc37c597faccb7d62525a509fec5f6975ecb9419efddeb277b"
+dependencies = [
+ "solana-program-error",
+]
+
+[[package]]
+name = "solana-pubkey"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b62adb9c3261a052ca1f999398c388f1daf558a1b492f60a6d9e64857db4ff1"
+dependencies = [
+ "borsh 0.10.4",
+ "borsh 1.5.7",
+ "bytemuck",
+ "bytemuck_derive",
+ "curve25519-dalek 4.1.3",
+ "five8",
+ "five8_const",
+ "getrandom 0.2.16",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "serde_derive",
+ "solana-atomic-u64",
+ "solana-decode-error",
+ "solana-define-syscall",
+ "solana-sanitize",
+ "solana-sha256-hasher",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "solana-rent"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1aea8fdea9de98ca6e8c2da5827707fb3842833521b528a713810ca685d2480"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "solana-sdk-ids",
+ "solana-sdk-macro 2.2.1",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-sanitize"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61f1bc1357b8188d9c4a3af3fc55276e56987265eb7ad073ae6f8180ee54cecf"
+
+[[package]]
+name = "solana-sdk"
+version = "1.18.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "580ad66c2f7a4c3cb3244fe21440546bd500f5ecb955ad9826e92a78dded8009"
+dependencies = [
+ "assert_matches",
+ "base64 0.21.7",
+ "bincode",
+ "bitflags",
+ "borsh 1.5.7",
+ "bs58 0.4.0",
+ "bytemuck",
+ "byteorder",
+ "chrono",
+ "derivation-path",
+ "digest 0.10.7",
+ "ed25519-dalek",
+ "ed25519-dalek-bip32",
+ "generic-array",
+ "hmac 0.12.1",
+ "itertools",
+ "js-sys",
+ "lazy_static",
+ "libsecp256k1",
+ "log",
+ "memmap2",
+ "num-derive 0.4.2",
+ "num-traits",
+ "num_enum 0.7.3",
+ "pbkdf2 0.11.0",
+ "qstring",
+ "qualifier_attr",
"rand 0.7.3",
- "rand_chacha 0.2.2",
+ "rand 0.8.5",
"rustc_version",
"rustversion",
"serde",
- "serde_bytes",
+ "serde_bytes",
+ "serde_derive",
+ "serde_json",
+ "serde_with",
+ "sha2 0.10.9",
+ "sha3 0.10.8",
+ "siphasher",
+ "solana-frozen-abi",
+ "solana-frozen-abi-macro",
+ "solana-logger",
+ "solana-program 1.18.26",
+ "solana-sdk-macro 1.18.26",
+ "thiserror 1.0.69",
+ "uriparse",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "solana-sdk-ids"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5d8b9cc68d5c88b062a33e23a6466722467dde0035152d8fb1afbcdf350a5f"
+dependencies = [
+ "solana-pubkey",
+]
+
+[[package]]
+name = "solana-sdk-macro"
+version = "1.18.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b75d0f193a27719257af19144fdaebec0415d1c9e9226ae4bd29b791be5e9bd"
+dependencies = [
+ "bs58 0.4.0",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.101",
+]
+
+[[package]]
+name = "solana-sdk-macro"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86280da8b99d03560f6ab5aca9de2e38805681df34e0bb8f238e69b29433b9df"
+dependencies = [
+ "bs58 0.5.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
+
+[[package]]
+name = "solana-secp256k1-recover"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baa3120b6cdaa270f39444f5093a90a7b03d296d362878f7a6991d6de3bbe496"
+dependencies = [
+ "libsecp256k1",
+ "solana-define-syscall",
+ "thiserror 2.0.12",
+]
+
+[[package]]
+name = "solana-security-txt"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183"
+
+[[package]]
+name = "solana-serde-varint"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a7e155eba458ecfb0107b98236088c3764a09ddf0201ec29e52a0be40857113"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "solana-serialize-utils"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "817a284b63197d2b27afdba829c5ab34231da4a9b4e763466a003c40ca4f535e"
+dependencies = [
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-sanitize",
+]
+
+[[package]]
+name = "solana-sha256-hasher"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0037386961c0d633421f53560ad7c80675c0447cba4d1bb66d60974dd486c7ea"
+dependencies = [
+ "sha2 0.10.9",
+ "solana-define-syscall",
+ "solana-hash",
+]
+
+[[package]]
+name = "solana-short-vec"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c54c66f19b9766a56fa0057d060de8378676cb64987533fa088861858fc5a69"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "solana-slot-hashes"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c8691982114513763e88d04094c9caa0376b867a29577939011331134c301ce"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "solana-hash",
+ "solana-sdk-ids",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-slot-history"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ccc1b2067ca22754d5283afb2b0126d61eae734fc616d23871b0943b0d935e"
+dependencies = [
+ "bv",
+ "serde",
+ "serde_derive",
+ "solana-sdk-ids",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-stable-layout"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f14f7d02af8f2bc1b5efeeae71bc1c2b7f0f65cd75bcc7d8180f2c762a57f54"
+dependencies = [
+ "solana-instruction",
+ "solana-pubkey",
+]
+
+[[package]]
+name = "solana-stake-interface"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5269e89fde216b4d7e1d1739cf5303f8398a1ff372a81232abbee80e554a838c"
+dependencies = [
+ "borsh 0.10.4",
+ "borsh 1.5.7",
+ "num-traits",
+ "serde",
+ "serde_derive",
+ "solana-clock",
+ "solana-cpi",
+ "solana-decode-error",
+ "solana-instruction",
+ "solana-program-error",
+ "solana-pubkey",
+ "solana-system-interface",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-system-interface"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94d7c18cb1a91c6be5f5a8ac9276a1d7c737e39a21beba9ea710ab4b9c63bc90"
+dependencies = [
+ "js-sys",
+ "num-traits",
+ "serde",
"serde_derive",
- "serde_json",
- "sha2 0.10.7",
- "sha3 0.10.8",
- "solana-frozen-abi",
- "solana-frozen-abi-macro",
- "solana-sdk-macro",
- "thiserror",
- "tiny-bip39",
+ "solana-decode-error",
+ "solana-instruction",
+ "solana-pubkey",
"wasm-bindgen",
- "zeroize",
]
[[package]]
-name = "solana-sdk"
-version = "1.16.12"
+name = "solana-sysvar"
+version = "2.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87608d9cbf39d4f72cfb61179c320b3cea7f972671ec74dea99d255fd3a99ca9"
+checksum = "d50c92bc019c590f5e42c61939676e18d14809ed00b2a59695dd5c67ae72c097"
dependencies = [
- "assert_matches",
- "base64 0.21.3",
+ "base64 0.22.1",
"bincode",
- "bitflags",
- "borsh 0.10.3",
- "bs58 0.4.0",
"bytemuck",
- "byteorder",
- "chrono",
- "derivation-path",
- "digest 0.10.7",
- "ed25519-dalek",
- "ed25519-dalek-bip32",
- "generic-array",
- "hmac 0.12.1",
- "itertools",
- "js-sys",
+ "bytemuck_derive",
"lazy_static",
- "libsecp256k1",
- "log",
- "memmap2",
- "num-derive 0.3.3",
- "num-traits",
- "num_enum 0.6.1",
- "pbkdf2 0.11.0",
- "qstring",
- "rand 0.7.3",
- "rand_chacha 0.2.2",
- "rustc_version",
- "rustversion",
"serde",
- "serde_bytes",
"serde_derive",
- "serde_json",
- "serde_with",
- "sha2 0.10.7",
- "sha3 0.10.8",
- "solana-frozen-abi",
- "solana-frozen-abi-macro",
- "solana-logger",
- "solana-program",
- "solana-sdk-macro",
- "thiserror",
- "uriparse",
- "wasm-bindgen",
+ "solana-account-info",
+ "solana-clock",
+ "solana-define-syscall",
+ "solana-epoch-rewards",
+ "solana-epoch-schedule",
+ "solana-fee-calculator",
+ "solana-hash",
+ "solana-instruction",
+ "solana-instructions-sysvar",
+ "solana-last-restart-slot",
+ "solana-program-entrypoint",
+ "solana-program-error",
+ "solana-program-memory",
+ "solana-pubkey",
+ "solana-rent",
+ "solana-sanitize",
+ "solana-sdk-ids",
+ "solana-sdk-macro 2.2.1",
+ "solana-slot-hashes",
+ "solana-slot-history",
+ "solana-stake-interface",
+ "solana-sysvar-id",
+]
+
+[[package]]
+name = "solana-sysvar-id"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5762b273d3325b047cfda250787f8d796d781746860d5d0a746ee29f3e8812c1"
+dependencies = [
+ "solana-pubkey",
+ "solana-sdk-ids",
]
[[package]]
-name = "solana-sdk-macro"
-version = "1.16.12"
+name = "solana-transaction-error"
+version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9077bd44586a902c9949d4e0cf4647ae2723ae2f0feca1e94d8fe9dcd4e2160d"
+checksum = "222a9dc8fdb61c6088baab34fc3a8b8473a03a7a5fd404ed8dd502fa79b67cb1"
dependencies = [
- "bs58 0.4.0",
- "proc-macro2",
- "quote",
- "rustversion",
- "syn 2.0.31",
+ "solana-instruction",
+ "solana-sanitize",
+]
+
+[[package]]
+name = "solana-vote-interface"
+version = "2.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef4f08746f154458f28b98330c0d55cb431e2de64ee4b8efc98dcbe292e0672b"
+dependencies = [
+ "bincode",
+ "num-derive 0.4.2",
+ "num-traits",
+ "serde",
+ "serde_derive",
+ "solana-clock",
+ "solana-decode-error",
+ "solana-hash",
+ "solana-instruction",
+ "solana-pubkey",
+ "solana-rent",
+ "solana-sdk-ids",
+ "solana-serde-varint",
+ "solana-serialize-utils",
+ "solana-short-vec",
+ "solana-system-interface",
]
[[package]]
name = "solana-zk-token-sdk"
-version = "1.16.12"
+version = "1.18.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0d498188b9ff5dcef1f356888d128a9b583aee8bfe87bc6746db02b2d492f97"
+checksum = "7cbdf4249b6dfcbba7d84e2b53313698043f60f8e22ce48286e6fbe8a17c8d16"
dependencies = [
"aes-gcm-siv",
- "base64 0.21.3",
+ "base64 0.21.7",
"bincode",
"bytemuck",
"byteorder",
- "curve25519-dalek",
+ "curve25519-dalek 3.2.1",
"getrandom 0.1.16",
"itertools",
"lazy_static",
"merlin",
- "num-derive 0.3.3",
+ "num-derive 0.4.2",
"num-traits",
"rand 0.7.3",
"serde",
"serde_json",
"sha3 0.9.1",
- "solana-program",
+ "solana-program 1.18.26",
"solana-sdk",
"subtle",
- "thiserror",
+ "thiserror 1.0.69",
"zeroize",
]
-[[package]]
-name = "spl-account-compression"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7a5417eae3c924553b872de5f1bca5945334a235f8d94841bd44c6dd7c6358c"
-dependencies = [
- "anchor-lang 0.26.0",
- "bytemuck",
- "spl-concurrent-merkle-tree",
- "spl-noop",
-]
-
-[[package]]
-name = "spl-associated-token-account"
-version = "1.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978dba3bcbe88d0c2c58366c254d9ea41c5f73357e72fc0bdee4d6b5fc99c8f4"
-dependencies = [
- "assert_matches",
- "borsh 0.9.3",
- "num-derive 0.3.3",
- "num-traits",
- "solana-program",
- "spl-token 3.5.0",
- "spl-token-2022 0.6.1",
- "thiserror",
-]
-
[[package]]
name = "spl-associated-token-account"
-version = "2.1.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "477696277857a7b2c17a6f7f3095e835850ad1c0f11637b5bd2693ca777d8546"
+checksum = "992d9c64c2564cc8f63a4b508bf3ebcdf2254b0429b13cd1d31adb6162432a5f"
dependencies = [
"assert_matches",
- "borsh 0.10.3",
- "num-derive 0.4.0",
+ "borsh 0.10.4",
+ "num-derive 0.4.2",
"num-traits",
- "solana-program",
- "spl-token 4.0.0",
- "spl-token-2022 0.8.0",
- "thiserror",
-]
-
-[[package]]
-name = "spl-concurrent-merkle-tree"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26dd605d33bdc8d2522a9f55207c3eac06737b2e8310f602e252b510e3db1210"
-dependencies = [
- "bytemuck",
- "solana-program",
- "thiserror",
+ "solana-program 1.18.26",
+ "spl-token",
+ "spl-token-2022 1.0.0",
+ "thiserror 1.0.69",
]
[[package]]
@@ -2869,32 +3203,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f"
dependencies = [
"bytemuck",
- "solana-program",
+ "solana-program 1.18.26",
"spl-discriminator-derive",
]
[[package]]
name = "spl-discriminator-derive"
-version = "0.1.0"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4fa8f409b5c5e0ac571df17c981ae1424b204743daa4428430627d38717caf5"
+checksum = "07fd7858fc4ff8fb0e34090e41d7eb06a823e1057945c26d480bfc21d2338a93"
dependencies = [
"quote",
"spl-discriminator-syn",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
name = "spl-discriminator-syn"
-version = "0.1.0"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21968d7da2f0a624c509f24580c3fee70b364a6886d90709e679e64f572eca2f"
+checksum = "18fea7be851bd98d10721782ea958097c03a0c2a07d8d4997041d0ece6319a63"
dependencies = [
"proc-macro2",
"quote",
- "solana-program",
- "syn 2.0.31",
- "thiserror",
+ "sha2 0.10.9",
+ "syn 2.0.101",
+ "thiserror 1.0.69",
]
[[package]]
@@ -2903,25 +3237,16 @@ version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325"
dependencies = [
- "solana-program",
+ "solana-program 1.18.26",
]
[[package]]
name = "spl-memo"
-version = "4.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a"
-dependencies = [
- "solana-program",
-]
-
-[[package]]
-name = "spl-noop"
-version = "0.1.3"
+version = "4.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "558536c75b5aed018113bfca39cddb414cd7ca77da7658d668e751d977830cda"
+checksum = "a49f49f95f2d02111ded31696ab38a081fab623d4c76bd4cb074286db4560836"
dependencies = [
- "solana-program",
+ "solana-program 1.18.26",
]
[[package]]
@@ -2930,9 +3255,9 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079"
dependencies = [
- "borsh 0.10.3",
+ "borsh 0.10.4",
"bytemuck",
- "solana-program",
+ "solana-program 1.18.26",
"solana-zk-token-sdk",
"spl-program-error 0.3.0",
]
@@ -2945,9 +3270,9 @@ checksum = "af92f74cd3b0fdfda59fef4b571a92123e4df0f67cc43f73163975d31118ef82"
dependencies = [
"num-derive 0.3.3",
"num-traits",
- "solana-program",
+ "solana-program 1.18.26",
"spl-program-error-derive 0.2.0",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
@@ -2956,11 +3281,11 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c"
dependencies = [
- "num-derive 0.4.0",
+ "num-derive 0.4.2",
"num-traits",
- "solana-program",
- "spl-program-error-derive 0.3.0",
- "thiserror",
+ "solana-program 1.18.26",
+ "spl-program-error-derive 0.3.2",
+ "thiserror 1.0.69",
]
[[package]]
@@ -2971,19 +3296,19 @@ checksum = "173f3cc506847882189b3a5b67299f617fed2f9730f122dd197b82e1e213dee5"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
name = "spl-program-error-derive"
-version = "0.3.0"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6709c5f41fefb730f2bd8464da741079cf0efd1d0f522e041224b98d431b9b3"
+checksum = "1845dfe71fd68f70382232742e758557afe973ae19e6c06807b2c30f5d5cb474"
dependencies = [
"proc-macro2",
"quote",
- "solana-program",
- "syn 2.0.31",
+ "sha2 0.10.9",
+ "syn 2.0.101",
]
[[package]]
@@ -2993,7 +3318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82149a5a06b5f158d03904066375eaf0c8a2422557cc3d5a25d277260d9a3b16"
dependencies = [
"bytemuck",
- "solana-program",
+ "solana-program 1.18.26",
"spl-discriminator",
"spl-program-error 0.2.0",
"spl-type-length-value 0.2.0",
@@ -3001,12 +3326,12 @@ dependencies = [
[[package]]
name = "spl-tlv-account-resolution"
-version = "0.3.0"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7960b1e1a41e4238807fca0865e72a341b668137a3f2ddcd770d04fd1b374c96"
+checksum = "615d381f48ddd2bb3c57c7f7fb207591a2a05054639b18a62e785117dd7a8683"
dependencies = [
"bytemuck",
- "solana-program",
+ "solana-program 1.18.26",
"spl-discriminator",
"spl-pod",
"spl-program-error 0.3.0",
@@ -3015,50 +3340,17 @@ dependencies = [
[[package]]
name = "spl-token"
-version = "3.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d"
-dependencies = [
- "arrayref",
- "bytemuck",
- "num-derive 0.3.3",
- "num-traits",
- "num_enum 0.5.11",
- "solana-program",
- "thiserror",
-]
-
-[[package]]
-name = "spl-token"
-version = "4.0.0"
+version = "4.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060"
+checksum = "b9eb465e4bf5ce1d498f05204c8089378c1ba34ef2777ea95852fc53a1fd4fb2"
dependencies = [
"arrayref",
"bytemuck",
- "num-derive 0.3.3",
- "num-traits",
- "num_enum 0.6.1",
- "solana-program",
- "thiserror",
-]
-
-[[package]]
-name = "spl-token-2022"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0043b590232c400bad5ee9eb983ced003d15163c4c5d56b090ac6d9a57457b47"
-dependencies = [
- "arrayref",
- "bytemuck",
- "num-derive 0.3.3",
+ "num-derive 0.4.2",
"num-traits",
- "num_enum 0.5.11",
- "solana-program",
- "solana-zk-token-sdk",
- "spl-memo 3.0.1",
- "spl-token 3.5.0",
- "thiserror",
+ "num_enum 0.7.3",
+ "solana-program 1.18.26",
+ "thiserror 1.0.69",
]
[[package]]
@@ -3072,69 +3364,63 @@ dependencies = [
"num-derive 0.3.3",
"num-traits",
"num_enum 0.6.1",
- "solana-program",
+ "solana-program 1.18.26",
"solana-zk-token-sdk",
"spl-memo 3.0.1",
- "spl-token 4.0.0",
+ "spl-token",
"spl-transfer-hook-interface 0.1.0",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
name = "spl-token-2022"
-version = "0.8.0"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84fc0c7a763c3f53fa12581d07ed324548a771bb648a1217e4f330b1d0a59331"
+checksum = "d697fac19fd74ff472dfcc13f0b442dd71403178ce1de7b5d16f83a33561c059"
dependencies = [
"arrayref",
"bytemuck",
- "num-derive 0.4.0",
+ "num-derive 0.4.2",
"num-traits",
- "num_enum 0.7.0",
- "solana-program",
+ "num_enum 0.7.3",
+ "solana-program 1.18.26",
+ "solana-security-txt",
"solana-zk-token-sdk",
- "spl-memo 4.0.0",
+ "spl-memo 4.0.4",
"spl-pod",
- "spl-token 4.0.0",
+ "spl-token",
+ "spl-token-group-interface",
"spl-token-metadata-interface",
- "spl-transfer-hook-interface 0.2.0",
+ "spl-transfer-hook-interface 0.4.1",
"spl-type-length-value 0.3.0",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
-name = "spl-token-metadata-interface"
-version = "0.2.0"
+name = "spl-token-group-interface"
+version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f"
+checksum = "b889509d49fa74a4a033ca5dae6c2307e9e918122d97e58562f5c4ffa795c75d"
dependencies = [
- "borsh 0.10.3",
- "solana-program",
+ "bytemuck",
+ "solana-program 1.18.26",
"spl-discriminator",
"spl-pod",
"spl-program-error 0.3.0",
- "spl-type-length-value 0.3.0",
-]
-
-[[package]]
-name = "spl-token-minter"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.28.0",
- "anchor-spl",
- "mpl-token-metadata",
]
[[package]]
-name = "spl-token-minter-native-program"
-version = "0.1.0"
+name = "spl-token-metadata-interface"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f"
dependencies = [
- "borsh 0.9.3",
- "borsh-derive 0.9.3",
- "mpl-token-metadata",
- "solana-program",
- "spl-associated-token-account 2.1.0",
- "spl-token 4.0.0",
+ "borsh 0.10.4",
+ "solana-program 1.18.26",
+ "spl-discriminator",
+ "spl-pod",
+ "spl-program-error 0.3.0",
+ "spl-type-length-value 0.3.0",
]
[[package]]
@@ -3148,26 +3434,26 @@ dependencies = [
"num-derive 0.3.3",
"num-traits",
"num_enum 0.6.1",
- "solana-program",
+ "solana-program 1.18.26",
"spl-discriminator",
"spl-tlv-account-resolution 0.2.0",
"spl-type-length-value 0.2.0",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
name = "spl-transfer-hook-interface"
-version = "0.2.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7489940049417ae5ce909314bead0670e2a5ea5c82d43ab96dc15c8fcbbccba"
+checksum = "7aabdb7c471566f6ddcee724beb8618449ea24b399e58d464d6b5bc7db550259"
dependencies = [
"arrayref",
"bytemuck",
- "solana-program",
+ "solana-program 1.18.26",
"spl-discriminator",
"spl-pod",
"spl-program-error 0.3.0",
- "spl-tlv-account-resolution 0.3.0",
+ "spl-tlv-account-resolution 0.5.1",
"spl-type-length-value 0.3.0",
]
@@ -3178,7 +3464,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1d085f426b33b8365fb98383d1b8b3925e21bdfe579c851ceaa7f511dbec191"
dependencies = [
"bytemuck",
- "solana-program",
+ "solana-program 1.18.26",
"spl-discriminator",
"spl-program-error 0.2.0",
]
@@ -3190,7 +3476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac"
dependencies = [
"bytemuck",
- "solana-program",
+ "solana-program 1.18.26",
"spl-discriminator",
"spl-pod",
"spl-program-error 0.3.0",
@@ -3198,9 +3484,9 @@ dependencies = [
[[package]]
name = "strsim"
-version = "0.10.0"
+version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "subtle"
@@ -3221,9 +3507,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.31"
+version = "2.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398"
+checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
dependencies = [
"proc-macro2",
"quote",
@@ -3232,31 +3518,51 @@ dependencies = [
[[package]]
name = "termcolor"
-version = "1.2.0"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
dependencies = [
"winapi-util",
]
[[package]]
name = "thiserror"
-version = "1.0.48"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+dependencies = [
+ "thiserror-impl 1.0.69",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+dependencies = [
+ "thiserror-impl 2.0.12",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
- "thiserror-impl",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.48"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
[[package]]
@@ -3272,7 +3578,7 @@ dependencies = [
"rand 0.7.3",
"rustc-hash",
"sha2 0.9.9",
- "thiserror",
+ "thiserror 1.0.69",
"unicode-normalization",
"wasm-bindgen",
"zeroize",
@@ -3280,9 +3586,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.6.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
dependencies = [
"tinyvec_macros",
]
@@ -3293,24 +3599,14 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-[[package]]
-name = "token-2022-basic-anchor"
-version = "0.1.0"
-dependencies = [
- "anchor-lang 0.28.0",
- "anchor-spl",
- "spl-token 3.5.0",
- "spl-token-2022 0.7.0",
-]
-
[[package]]
name = "token-2022-default-account-state-program"
version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
- "spl-associated-token-account 2.1.0",
+ "solana-program 1.18.26",
+ "spl-associated-token-account",
"spl-token-2022 0.7.0",
]
@@ -3320,8 +3616,8 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
- "spl-associated-token-account 2.1.0",
+ "solana-program 2.2.1",
+ "spl-associated-token-account",
"spl-token-2022 0.7.0",
]
@@ -3331,8 +3627,8 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
- "spl-associated-token-account 2.1.0",
+ "solana-program 1.18.26",
+ "spl-associated-token-account",
"spl-token-2022 0.7.0",
]
@@ -3342,8 +3638,8 @@ version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "solana-program",
- "spl-associated-token-account 2.1.0",
+ "solana-program 2.2.1",
+ "spl-associated-token-account",
"spl-token-2022 0.7.0",
]
@@ -3351,10 +3647,10 @@ dependencies = [
name = "token-2022-transfer-fees-program"
version = "0.1.0"
dependencies = [
- "borsh 0.9.3",
+ "borsh 0.10.4",
"borsh-derive 0.9.3",
- "solana-program",
- "spl-associated-token-account 2.1.0",
+ "solana-program 2.2.1",
+ "spl-associated-token-account",
"spl-token-2022 0.7.0",
]
@@ -3367,86 +3663,100 @@ dependencies = [
"serde",
]
+[[package]]
+name = "toml"
+version = "0.8.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.22.26",
+]
+
[[package]]
name = "toml_datetime"
-version = "0.6.1"
+version = "0.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3"
+dependencies = [
+ "serde",
+]
[[package]]
name = "toml_edit"
-version = "0.19.8"
+version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
"indexmap",
"toml_datetime",
- "winnow",
+ "winnow 0.5.40",
]
[[package]]
-name = "transfer-sol"
-version = "0.1.0"
+name = "toml_edit"
+version = "0.22.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e"
dependencies = [
- "anchor-lang 0.28.0",
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_write",
+ "winnow 0.7.10",
]
[[package]]
-name = "transfer-sol-program"
-version = "0.1.0"
-dependencies = [
- "borsh 0.9.3",
- "borsh-derive 0.9.3",
- "solana-program",
-]
+name = "toml_write"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076"
[[package]]
-name = "transfer-tokens"
+name = "transfer-sol"
version = "0.1.0"
dependencies = [
- "anchor-lang 0.28.0",
- "anchor-spl",
- "mpl-token-metadata",
+ "anchor-lang",
]
[[package]]
-name = "transfer-tokens-program"
+name = "transfer-sol-program"
version = "0.1.0"
dependencies = [
"borsh 0.9.3",
"borsh-derive 0.9.3",
- "mpl-token-metadata",
- "solana-program",
- "spl-associated-token-account 2.1.0",
- "spl-token 4.0.0",
+ "solana-program 2.2.1",
]
[[package]]
name = "typenum"
-version = "1.16.0"
+version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
[[package]]
name = "unicode-ident"
-version = "1.0.11"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "unicode-normalization"
-version = "0.1.22"
+version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-segmentation"
-version = "1.10.1"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
[[package]]
name = "universal-hash"
@@ -3470,9 +3780,9 @@ dependencies = [
[[package]]
name = "version_check"
-version = "0.9.4"
+version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "wasi"
@@ -3486,36 +3796,46 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+[[package]]
+name = "wasi"
+version = "0.14.2+wasi-0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
+dependencies = [
+ "wit-bindgen-rt",
+]
+
[[package]]
name = "wasm-bindgen"
-version = "0.2.87"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
dependencies = [
"cfg-if",
+ "once_cell",
+ "rustversion",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.87"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
dependencies = [
"bumpalo",
"log",
- "once_cell",
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.87"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -3523,28 +3843,31 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.87"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.87"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
[[package]]
name = "web-sys"
-version = "0.3.64"
+version = "0.3.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -3568,11 +3891,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
-version = "0.1.5"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
- "winapi",
+ "windows-sys",
]
[[package]]
@@ -3581,15 +3904,25 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets",
+]
+
[[package]]
name = "windows-targets"
-version = "0.48.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
+ "windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
@@ -3598,60 +3931,98 @@ dependencies = [
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.48.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.48.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_i686_gnu"
-version = "0.48.5"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_msvc"
-version = "0.48.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.48.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.48.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.48.5"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winnow"
-version = "0.4.1"
+version = "0.5.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28"
+checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
dependencies = [
"memchr",
]
[[package]]
-name = "yansi"
-version = "0.5.1"
+name = "winnow"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "wit-bindgen-rt"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
[[package]]
name = "zeroize"
@@ -3670,5 +4041,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.31",
+ "syn 2.0.101",
]
diff --git a/Cargo.toml b/Cargo.toml
index b4ab542f2..63da63947 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,18 +1,17 @@
[workspace]
members = [
- #basic
+ #basics
"basics/account-data/native/program",
"basics/account-data/anchor/programs/anchor-program-example",
"basics/checking-accounts/native/program",
"basics/checking-accounts/anchor/programs/anchor-program-example",
"basics/close-account/native/program",
"basics/close-account/anchor/programs/close-account",
- "basics/counter/native",
+ "basics/counter/native/program",
"basics/counter/anchor/programs/counter_anchor",
"basics/counter/mpl-stack",
"basics/create-account/native/program",
"basics/create-account/anchor/programs/create-system-account",
- "basics/cross-program-invocation/native/programs/*",
"basics/cross-program-invocation/anchor/programs/*",
"basics/hello-solana/native/program",
"basics/hello-solana/anchor/programs/*",
@@ -23,37 +22,21 @@ members = [
"basics/program-derived-addresses/native/program",
"basics/program-derived-addresses/anchor/programs/*",
"basics/realloc/native/program",
+ "basics/realloc/anchor/programs/*",
"basics/rent/native/program",
"basics/rent/anchor/programs/*",
+ "basics/favorites/native/program",
"basics/repository-layout/native/program",
"basics/repository-layout/anchor/programs/*",
"basics/transfer-sol/native/program",
"basics/transfer-sol/anchor/programs/*",
- # compression
- "compression/cnft-vault/anchor/programs/*",
- "compression/cutils/programs/*",
- # oracles
- "oracles/pyth/anchor/programs/*",
- # tokens
- "tokens/create-token/native/program",
- "tokens/create-token/anchor/programs/*",
- "tokens/nft-minter/native/program",
- "tokens/nft-minter/anchor/programs/*",
- "tokens/pda-mint-authority/native/program",
- "tokens/pda-mint-authority/anchor/programs/*",
- "tokens/spl-token-minter/native/program",
- "tokens/spl-token-minter/anchor/programs/*",
- "tokens/token-2022/basics/anchor/programs/*",
- "tokens/token-2022/default-account-state/native/program",
"tokens/token-2022/mint-close-authority/native/program",
- "tokens/token-2022/multiple-extensions/native/program",
"tokens/token-2022/non-transferable/native/program",
- "tokens/token-2022/transfer-fees/native/program",
- "tokens/token-swap/anchor/programs/*",
- "tokens/transfer-tokens/native/program",
- "tokens/transfer-tokens/anchor/programs/*",
- # tools
- # "tools/shank-and-solita/native/program",
-
+ "tokens/token-2022/default-account-state/native/program",
+ "tokens/token-2022/transfer-fee/native/program",
+ "tokens/token-2022/multiple-extensions/native/program",
]
resolver = "2"
+
+[profile.release]
+overflow-checks = true
diff --git a/README.md b/README.md
index 68974f63c..bd46ae910 100644
--- a/README.md
+++ b/README.md
@@ -1,54 +1,283 @@
# Program Examples
-### :crab: Rust. :snake: Python. :link: All on-chain.
-
-> **New:** Python examples using Seahorse and Anchor Py!
-
-## Navigating this Repo
-
-:file_folder: Each example contains two folders:
-- `native` - Written using Solana's native Rust crates and vanilla Rust.
-- `anchor` - Written using Anchor's `anchor_lang` Rust crate and the associated Anchor framework to build & deploy.
-- `seahorse` - Written using the Python framework Seahorse, which converts your Python code to Anchor Rust.
-
-:wrench: How to build & run:
-- Before running anything in any folder make sure you pull in the dependencies with `yarn install`.
-- `native` - Use `cicd.sh` to build & deploy the program. Run `yarn run test` to test it.
-- `anchor` - Use `anchor build && anchor deploy` to build & deploy the program. Run `anchor run test` to test it.
-- `seahorse` - Use `seahorse build && anchor deploy` to build & deploy the program. Run `anchor run test` to test it.
-
-## Examples We'd Love to See!
-
-* Examples needed for Native:
- * Token2022
-* Examples needed for Anchor:
- * Additional Accounts & Resolving Accounts
-* Examples needed for Seahorse
- * Any existing example missing a `seahorse` folder
-* New examples needed for Anchor, Native & Seahorse:
- * Token lending
- * Token swapping
- * Escrow
- * Staking
- * Wrapped tokens
- * Pyth
- * Clockwork
- * VRF
- * Any oracle
- * Merkle trees (compression)
+## Onchain program examples for :anchor: Anchor :crab: Native Rust, [TS] TypeScript and :snake: Python
----
+[](https://github.com/solana-developers/program-examples/actions/workflows/solana-native.yml) [](https://github.com/solana-developers/program-examples/actions/workflows/anchor.yml)
+
+This repo contains Solana onchain programs (referred to as 'Smart Contracts' in other blockchains).
+
+> [!NOTE]
+> If you're new to Solana, you don't need to create your own programs to perform basic things like making accounts, creating tokens, sending tokens, or minting NFTs. These common tasks are handled with existing programs, for example the System Program (for making account or transferring SOL) or the token program (for creating tokens and NFTs). See the [Solana Developer site](https://solana.com/developers) to learn more.
+
+Each folder includes examples for one or more of the following:
+
+- `anchor` - Written using [Anchor](https://www.anchor-lang.com/), the most popular framework for Solana Development, which uses Rust. Use `anchor build && anchor deploy` to build & deploy the program. Run `anchor run test` to test it.
+- `native` - Written using Solana's native Rust crates and vanilla Rust. Use `cicd.sh` to build & deploy the program. Run `yarn run test` to test it.
+- `poseidon` - Written using [Poseidon](https://turbin3.github.io/poseidon), which converts your TypeScript code to Anchor Rust.
+- `seahorse` - Written using the [Seahorse framework](https://seahorse-lang.org/), which converts your Python code to Anchor Rust. Use `seahorse build && anchor deploy` to build & deploy the program. Run `anchor run test` to test it.
+
+**If a given example is missing, please send us a PR to add it!** Our aim is to have every example available in every option. We'd also love to see more programs involving staking, wrapped tokens, oracles, compression and VRF. Follow the [contributing guidelines](./CONTRIBUTING.md) to keep things consistent.
+
+## The example programs
+
+
+ Basics
+
+### Hello world
+
+[Hello World on Solana! A minimal program that logs a greeting.](./basics/hello-solana/README.md)
+
+[anchor](./basics/hello-solana/anchor) [native](./basics/hello-solana/native) [seahorse](./basics/hello-solana/seahorse)
+
+### Account-data
+
+Store and retrieve data using Solana accounts.
+
+[anchor](./basics/account-data/anchor) [native](./basics/account-data/native)
+
+### Storing global state - Counter
+
+[Use a PDA to store global state, making a counter that increments when called.](./basics/counter/README.md)
+
+[anchor](./basics/counter/anchor) [native](./basics/counter/native) [seahorse](./basics/counter/seahorse)
+
+### Saving per-user state - Favorites
+
+Save and update per-user state on the blockchain, ensuring users can only update their own information.
+
+[anchor](./basics/favorites/anchor)
+
+### Checking Instruction Accounts
+
+[Check that the accounts provided in incoming instructions meet particular criteria.](./basics/checking-accounts/README.md)
+
+[anchor](./basics/checking-accounts/anchor) [native](./basics/checking-accounts/native)
+
+### Closing Accounts
+
+Close an account and get the Lamports back.
+
+[anchor](./basics/close-account/anchor) [native](./basics/close-account/native)
+
+### Creating Accounts
+
+[Make new accounts on the blockchain.](./basics/create-account/README.md)
+
+[anchor](./basics/create-account/anchor) [native](./basics/create-account/native)
+
+### Cross program invocations
+
+[Invoke an instruction handler from one onchain program in another onchain program.](./basics/cross-program-invocation/README.md)
+
+[anchor](./basics/cross-program-invocation/anchor) [native](./basics/cross-program-invocation/native)
+
+### PDA rent-payer
+
+[Use a PDA to pay the rent for the creation of a new account.](./basics/pda-rent-payer/README.md)
+
+[anchor](./basics/pda-rent-payer/anchor) [native](./basics/pda-rent-payer/native)
+
+### Processing instructions
+
+[Add parameters to an instruction handler and use them.](./basics/processing-instructions/README.md)
+
+[anchor](./basics/processing-instructions/anchor) [native](./basics/processing-instructions/native)
+
+### Storing date in program derived addresses
+
+Store and retrieve state in Solana.
+
+[anchor](./basics/program-derived-addresses/anchor) [native](./basics/program-derived-addresses/native)
+
+### Handling accounts that expand in size
+
+How to store state that changes size in Solana.
+
+[anchor](./basics/realloc/anchor) [native](./basics/realloc/native)
+
+### Calculating account size to determine rent
+
+[Determine the necessary minimum rent by calculating an account's size.](./basics/rent/README.md)
+
+[anchor](./basics/rent/anchor) [native](./basics/rent/native)
+
+### Laying out larger programs
+
+[Layout larger Solana onchain programs.](./basics/repository-layout/README.md)
+
+[anchor](./basics/repository-layout/anchor) [native](./basics/repository-layout/native)
+
+### Transferring SOL
+
+[Send SOL between two accounts.](./basics/transfer-sol/README.md)
+
+[anchor](./basics/transfer-sol/anchor) [native](./basics/transfer-sol/native) [seahorse](./basics/transfer-sol/seahorse)
+
+
+
+ Tokens
+
+### Creating tokens
+
+[Create a token on Solana with a token symbol and icon.](./tokens/create-token/README.md)
+
+[anchor](./tokens/create-token/anchor) [native](./tokens/create-token/native)
+
+### Minting NFTS
+
+[Mint an NFT from inside your own onchain program using the Token and Metaplex Token Metadata programs.](./tokens/nft-minter/README.md) Reminder: you don't need your own program just to mint an NFT, see the note at the top of this README.
+
+[anchor](./tokens/nft-minter/anchor) [native](./tokens/nft-minter/native)
+
+### Minting a token from inside a program
+
+[Mint a Token from inside your own onchain program using the Token program.](./tokens/spl-token-minter/README.md) Reminder: you don't need your own program just to mint an NFT, see the note at the top of this README.
+
+[anchor](./tokens/spl-token-minter/anchor) [native](./tokens/spl-token-minter/native)
+
+### Transferring Tokens
+
+[Transfer tokens between accounts](./tokens/transfer-tokens/README.md)
+
+[anchor](./tokens/transfer-tokens/anchor) [native](./tokens/transfer-tokens/native) [seahorse](./tokens/transfer-tokens/seahorse)
+
+### Allowing users to swap digital assets - Escrow
+
+Allow two users to swap digital assets with each other, each getting 100% of what the other has offered due to the power of decentralization!
-## If You're New To Solana Please Read
-Most system-level operations on Solana involve already-existing Solana programs.
-
-For example, to create a **system account** you use the **system program** and to create a **token mint** you use the **token program**.
-
-So, you'll notice that these operations are in fact conducting what's called a **cross-program invocation** - which is a fancy way of saying it calls other Solana programs to do business. You can see this in action whenever you see `invoke` or `invoke_signed` in the `native` examples, or `CpiContext` in the `anchor` examples.
-
-Deciding when to use cross-program invocation instead of invoking the programs directly from the client is completely up to you as the builder. It depends on how your application is designed.
-- Maybe you want to add some checks - such as minimum balance required, allowed ownership, etc.
-- Maybe you want to assert that an account has a certain data type.
-- Perhaps you want to send only one instruction from your client for a handful of sequential operations.
-- The list goes on.
-Regardless of what you may want to add on top of existing Solana programs, the number one use case for writing your own program is for using accounts with a **Program Derived Address (PDA)**. Crack open the `pdas` folder to see why.
\ No newline at end of file
+[anchor](./tokens/escrow/anchor)
+
+### Minting a token from inside a program with a PDA as the mint authority
+
+[Mint a Token from inside your own onchain program using the Token program.](./tokens/pda-mint-authority/README.md) Reminder: you don't need your own program just to mint an NFT, see the note at the top of this README.
+
+[anchor](./tokens/pda-mint-authority/anchor) [native](./tokens/pda-mint-authority/native)
+
+### Creating an Automated Market Maker
+
+[Create liquidity pools to allow trading of new digital assets and allows users that provide liquidity to be rewarded by creating an Automated Market Maker.](./tokens/token-swap/README.md)
+
+[anchor](./tokens/token-swap/anchor)
+
+
+
+
+
+ Token Extensions
+
+### Basics - create token mints, mint tokens, and transfer tokens with Token Extensions
+
+Create token mints, mint tokens, and transferr tokens using Token Extensions.
+
+[anchor](./tokens/token-2022/basics/anchor)
+
+### Preventing CPIs with CPI guard
+
+Enable CPI guard to prevents certain token action from occurring within CPI (Cross-Program Invocation).
+
+[anchor](./tokens/token-2022/cpi-guard/anchor)
+
+### Using default account state
+
+Create new token accounts that are frozen by default.
+
+[anchor](./tokens/token-2022/default-account-state/anchor) [native](./tokens/token-2022/default-account-state/native)
+
+### Grouping tokens
+
+Create tokens that belong to larger groups of tokens using the Group Pointer extension.
+
+[anchor](./tokens/token-2022/group/anchor)
+
+### Creating token accounts whose owner cannot be changed
+
+Create tokens whose owning program cannot be changed.
+
+[anchor](./tokens/token-2022/immutable-owner/anchor)
+
+### Interest bearing tokens
+
+Create tokens that show an 'interest' calculation.
+
+[anchor](./tokens/token-2022/interest-bearing/anchor)
+
+### Requiring transactions to include descriptive memos
+
+Create tokens where transfers must have a memo describing the transaction attached.
+
+[anchor](./tokens/token-2022/memo-transfer/anchor)
+
+### Adding on-chain metadata to the token mint
+
+Create tokens that store their onchain metadata inside the token mint, without needing to use or pay for additional programs.
+
+[anchor](./tokens/token-2022/metadata/anchor)
+
+### Allow a designedated account to close a mint
+
+Allow a designated account to close a Mint.
+
+[anchor](./tokens/token-2022/mint-close-authority/anchor) [native](./tokens/token-2022/mint-close-authority/native)
+
+### Usng multiple token extensions
+
+Use multiple Token Extensions at once.
+
+[native](./tokens/token-2022/multiple-extensions/native)
+
+### Non-transferrable - create tokens that can't be transferred.
+
+Create tokens that cannot be transferred.
+
+[anchor](./tokens/token-2022/non-transferable/anchor) [native](./tokens/token-2022/non-transferable/native)
+
+### Permanent Delegate - Create tokens permanently under the control of a particular account
+
+Create tokens that remain under the control of an account, even when transferred elsewhere.
+
+[anchor](./tokens/token-2022/permanent-delegate/anchor)
+
+### Create tokens with a transfer-fee.
+
+Create tokens with an inbuilt transfer fee.
+
+[anchor](./tokens/token-2022/transfer-fee/anchor) [native](./tokens/token-2022/transfer-fee/native)
+
+
+
+
+Compression
+
+### Cnft-burn
+
+Burn compressed NFTs.
+
+[anchor](./compression/cnft-burn/anchor)
+
+### Cnft-vault
+
+Store Metaplex compressed NFTs inside a PDA.
+
+[anchor](./compression/cnft-vault/anchor)
+
+### Cutils
+
+Work with Metaplex compressed NFTs.
+
+[anchor](./compression/cutils/anchor)
+
+
+
+
+
+Oracles
+
+### pyth
+
+Use a data source for offchain data (called an Oracle) to perform activities onchain.
+
+[anchor](./oracles/pyth/anchor) [seahorse](./oracles/pyth/seahorse)
+
+
+
+---
diff --git a/basics/account-data/anchor/Anchor.toml b/basics/account-data/anchor/Anchor.toml
index a470a5707..70a352e27 100644
--- a/basics/account-data/anchor/Anchor.toml
+++ b/basics/account-data/anchor/Anchor.toml
@@ -13,4 +13,4 @@ cluster = "Localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/account-data/anchor/Cargo.toml b/basics/account-data/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/account-data/anchor/Cargo.toml
+++ b/basics/account-data/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/account-data/anchor/package.json b/basics/account-data/anchor/package.json
index ab411155f..439798a07 100644
--- a/basics/account-data/anchor/package.json
+++ b/basics/account-data/anchor/package.json
@@ -1,8 +1,11 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
diff --git a/basics/account-data/anchor/pnpm-lock.yaml b/basics/account-data/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..cf21eb739
--- /dev/null
+++ b/basics/account-data/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/account-data/anchor/programs/anchor-program-example/Cargo.toml b/basics/account-data/anchor/programs/anchor-program-example/Cargo.toml
index 485fc84f9..ccdca72ec 100644
--- a/basics/account-data/anchor/programs/anchor-program-example/Cargo.toml
+++ b/basics/account-data/anchor/programs/anchor-program-example/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "anchor_program_example"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/account-data/anchor/programs/anchor-program-example/src/constants.rs b/basics/account-data/anchor/programs/anchor-program-example/src/constants.rs
new file mode 100644
index 000000000..85d9d8a50
--- /dev/null
+++ b/basics/account-data/anchor/programs/anchor-program-example/src/constants.rs
@@ -0,0 +1 @@
+pub const ANCHOR_DISCRIMINATOR_SIZE: usize = 8;
diff --git a/basics/account-data/anchor/programs/anchor-program-example/src/instructions/create.rs b/basics/account-data/anchor/programs/anchor-program-example/src/instructions/create.rs
index 86ebe9145..c11e847ff 100644
--- a/basics/account-data/anchor/programs/anchor-program-example/src/instructions/create.rs
+++ b/basics/account-data/anchor/programs/anchor-program-example/src/instructions/create.rs
@@ -1,4 +1,4 @@
-use crate::state::AddressInfo;
+use crate::{constants::ANCHOR_DISCRIMINATOR_SIZE, state::AddressInfo};
use anchor_lang::prelude::*;
#[derive(Accounts)]
@@ -9,7 +9,7 @@ pub struct CreateAddressInfo<'info> {
#[account(
init,
payer = payer,
- space = 8 + AddressInfo::INIT_SPACE,
+ space = ANCHOR_DISCRIMINATOR_SIZE + AddressInfo::INIT_SPACE,
)]
address_info: Account<'info, AddressInfo>,
system_program: Program<'info, System>,
diff --git a/basics/account-data/anchor/programs/anchor-program-example/src/lib.rs b/basics/account-data/anchor/programs/anchor-program-example/src/lib.rs
index 96bd3bfe8..0dd6c341b 100644
--- a/basics/account-data/anchor/programs/anchor-program-example/src/lib.rs
+++ b/basics/account-data/anchor/programs/anchor-program-example/src/lib.rs
@@ -2,6 +2,7 @@
use anchor_lang::prelude::*;
use instructions::*;
+pub mod constants;
pub mod instructions;
pub mod state;
diff --git a/basics/account-data/anchor/tests/bankrun.test.ts b/basics/account-data/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..07037eec3
--- /dev/null
+++ b/basics/account-data/anchor/tests/bankrun.test.ts
@@ -0,0 +1,51 @@
+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');
+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(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}`);
+ });
+});
diff --git a/basics/account-data/anchor/tests/test.ts b/basics/account-data/anchor/tests/test.ts
index 57e3ff6d8..885a0580e 100644
--- a/basics/account-data/anchor/tests/test.ts
+++ b/basics/account-data/anchor/tests/test.ts
@@ -1,51 +1,43 @@
-import * as anchor from "@coral-xyz/anchor"
-import { AnchorProgramExample } from "../target/types/anchor_program_example"
-import { Keypair } from "@solana/web3.js"
+import * as anchor from '@coral-xyz/anchor';
+import { Keypair } from '@solana/web3.js';
+import type { AnchorProgramExample } from '../target/types/anchor_program_example';
-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
+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;
// Generate a new keypair for the addressInfo account
- const addressInfoAccount = new Keypair()
+ 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 data
+ // Instruction Ix data
const addressInfo = {
- name: "Joe C",
+ name: 'Joe C',
houseNumber: 136,
- street: "Mile High Dr.",
- city: "Solana Beach",
- }
+ street: 'Mile High Dr.',
+ city: 'Solana Beach',
+ };
await program.methods
- .createAddressInfo(
- addressInfo.name,
- addressInfo.houseNumber,
- addressInfo.street,
- addressInfo.city
- )
+ .createAddressInfo(addressInfo.name, addressInfo.houseNumber, addressInfo.street, addressInfo.city)
.accounts({
addressInfo: addressInfoAccount.publicKey,
payer: payer.publicKey,
})
.signers([addressInfoAccount])
- .rpc()
- })
+ .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}`)
- })
-})
+ 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}`);
+ });
+});
diff --git a/basics/account-data/native/cicd.sh b/basics/account-data/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/account-data/native/cicd.sh
+++ b/basics/account-data/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/account-data/native/package.json b/basics/account-data/native/package.json
index b71a6ab9b..30ecba9e9 100644
--- a/basics/account-data/native/package.json
+++ b/basics/account-data/native/package.json
@@ -1,6 +1,9 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
"@solana/web3.js": "^1.47.3",
@@ -12,6 +15,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/account-data/native/pnpm-lock.yaml b/basics/account-data/native/pnpm-lock.yaml
new file mode 100644
index 000000000..be457d58e
--- /dev/null
+++ b/basics/account-data/native/pnpm-lock.yaml
@@ -0,0 +1,1350 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.18':
+ resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.18
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.18':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.18
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/account-data/native/program/Cargo.toml b/basics/account-data/native/program/Cargo.toml
index 4a698a115..6720a04f2 100644
--- a/basics/account-data/native/program/Cargo.toml
+++ b/basics/account-data/native/program/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2021"
[dependencies]
-solana-program = "1.16.10"
+solana-program = "2.0"
borsh = "0.9.3"
borsh-derive = "0.9.1"
diff --git a/basics/account-data/native/tests/test.ts b/basics/account-data/native/tests/test.ts
index 614d8d206..fff31b602 100644
--- a/basics/account-data/native/tests/test.ts
+++ b/basics/account-data/native/tests/test.ts
@@ -1,92 +1,92 @@
-import {
- Connection,
- Keypair,
- PublicKey,
- sendAndConfirmTransaction,
- SystemProgram,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
+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;
+ }
+ }
+}
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
+class AddressInfo extends Assignable {
+ street: any;
+ city: any;
+ name: any;
+ house_number: any;
+ toBuffer() {
+ return Buffer.from(borsh.serialize(AddressInfoSchema, this));
+ }
+ 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'],
+ ],
+ },
+ ],
+]);
-describe("Account Data!", () => {
+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;
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const PROGRAM_ID: PublicKey = new PublicKey(
- "BCw7MQWBugruuYgno5crGUGFNufqGJbPpzZevhRRRQAu"
- );
+ test('Create the address info account', async () => {
+ const payer = context.payer;
- class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
- };
+ console.log(`Program Address : ${PROGRAM_ID}`);
+ console.log(`Payer Address : ${payer.publicKey}`);
+ console.log(`Address Info Acct : ${addressInfoAccount.publicKey}`);
- class AddressInfo extends Assignable {
- toBuffer() { return Buffer.from(borsh.serialize(AddressInfoSchema, this)) }
-
- 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'],
- ],
- }]
- ]);
+ 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 addressInfoAccount = Keypair.generate();
+ const blockhash = context.lastBlockhash;
- it("Create the address info account", async () => {
- console.log(`Payer Address : ${payer.publicKey}`);
- console.log(`Address Info Acct : ${addressInfoAccount.publicKey}`);
- let 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(),
- });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, addressInfoAccount]
- );
- });
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, addressInfoAccount);
+ await client.processTransaction(tx);
+ });
- it("Read the new account's data", async () => {
- const accountInfo = await connection.getAccountInfo(addressInfoAccount.publicKey);
- const readAddressInfo = AddressInfo.fromBuffer(accountInfo.data);
- console.log(`Name : ${readAddressInfo.name}`);
- console.log(`House Num: ${readAddressInfo.house_number}`);
- console.log(`Street : ${readAddressInfo.street}`);
- console.log(`City : ${readAddressInfo.city}`);
- });
+ 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}`);
+ });
});
diff --git a/basics/account-data/solang/Anchor.toml b/basics/account-data/solang/Anchor.toml
deleted file mode 100644
index b4c03a37c..000000000
--- a/basics/account-data/solang/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-account_data = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/account-data/solang/package.json b/basics/account-data/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/account-data/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/account-data/solang/solidity/account-data.sol b/basics/account-data/solang/solidity/account-data.sol
deleted file mode 100644
index 498ae5e81..000000000
--- a/basics/account-data/solang/solidity/account-data.sol
+++ /dev/null
@@ -1,42 +0,0 @@
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract account_data {
- // A private instance of the AddressInfo struct
- // This is the data that is stored in the account
- AddressInfo private addressInfo;
-
- // The AddressInfo struct definition
- struct AddressInfo {
- string name;
- uint8 houseNumber;
- string street;
- string city;
- }
-
- @payer(payer) // "payer" is the account that pays to create the dataAccount
- constructor(
- @space uint16 space, // "space" allocated to the account (maximum 10240 bytes, maximum space that can be reallocate when creating account in program via a CPI)
- string _name,
- uint8 _houseNumber,
- string _street,
- string _city
- ) {
- // The AddressInfo instance is initialized with the data passed to the constructor
- addressInfo = AddressInfo(_name, _houseNumber, _street, _city);
- }
-
- // A function to get the addressInfo data stored on the account
- function get() public view returns (AddressInfo) {
- return addressInfo;
- }
-
- // A function to get the size in bytes of the stored AddressInfo
- function getAddressInfoSize() public view returns(uint) {
- uint size = 0;
- size += bytes(addressInfo.name).length;
- size += 1; // For houseNumber, which is uint8 and takes 1 byte
- size += bytes(addressInfo.street).length;
- size += bytes(addressInfo.city).length;
- return size;
- }
-}
diff --git a/basics/account-data/solang/tests/account-data.ts b/basics/account-data/solang/tests/account-data.ts
deleted file mode 100644
index edf7c8af2..000000000
--- a/basics/account-data/solang/tests/account-data.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { AccountData } from "../target/types/account_data";
-
-describe("account-data", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- // Generate a new random keypair for the data account.
- const dataAccount = anchor.web3.Keypair.generate();
- const wallet = provider.wallet;
- const program = anchor.workspace.AccountData as Program;
-
- // Create the new account
- // Using 10240 bytes of space, because its unclear how to correctly calculate the minimum space needed for the account
- // Space calculation is different from regular Native/Anchor Solana programs
- it("Is initialized!", async () => {
- const tx = await program.methods
- .new(
- 10240, // space (10240 bytes is the maximum space allowed when allocating space through a program)
- "Joe C", // name
- 136, // house number
- "Mile High Dr.", // street
- "Solana Beach" // city
- )
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([dataAccount])
- .rpc();
- console.log("Your transaction signature", tx);
- });
-
- // Get the account data
- it("Get AddressInfo Data", async () => {
- const val = await program.methods
- .get()
- .accounts({ dataAccount: dataAccount.publicKey })
- .view();
- console.log("State:", val);
- });
-
- // Get the account data size
- // Testing how much space is used to store the account data
- // However, minimum space required is greater than this
- it("Get AddressInfo Size", async () => {
- const size = await program.methods
- .getAddressInfoSize()
- .accounts({ dataAccount: dataAccount.publicKey })
- .view();
- console.log("Size:", size.toNumber());
- });
-});
diff --git a/basics/account-data/solang/tsconfig.json b/basics/account-data/solang/tsconfig.json
deleted file mode 100644
index 9abe3197c..000000000
--- a/basics/account-data/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
-}
-
\ No newline at end of file
diff --git a/basics/account-data/steel/Cargo.toml b/basics/account-data/steel/Cargo.toml
new file mode 100644
index 000000000..9e134e21c
--- /dev/null
+++ b/basics/account-data/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+respository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+account-data-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/account-data/steel/README.md b/basics/account-data/steel/README.md
new file mode 100644
index 000000000..44991cafe
--- /dev/null
+++ b/basics/account-data/steel/README.md
@@ -0,0 +1,25 @@
+# Account Data Program Example in Steel Framewrok
+
+Creates an account with data.
+
+## Build
+
+```sh
+
+cargo build-sbf
+
+```
+
+## Tests
+
+Run the tests using following command:
+
+```sh
+
+# Node tests
+pnpm build-and-test # This will build and test the program
+
+#or
+pnpm test # If you have already built the program test the program
+
+```
diff --git a/basics/account-data/steel/api/Cargo.toml b/basics/account-data/steel/api/Cargo.toml
new file mode 100644
index 000000000..5df0a8081
--- /dev/null
+++ b/basics/account-data/steel/api/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "account-data-api"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/account-data/steel/api/src/consts.rs b/basics/account-data/steel/api/src/consts.rs
new file mode 100644
index 000000000..6861e5969
--- /dev/null
+++ b/basics/account-data/steel/api/src/consts.rs
@@ -0,0 +1,2 @@
+/// Seed of the address_info account PDA.
+pub const ADDRESS_INFO_SEED: &[u8] = b"address_info";
diff --git a/basics/account-data/steel/api/src/instruction.rs b/basics/account-data/steel/api/src/instruction.rs
new file mode 100644
index 000000000..804bec114
--- /dev/null
+++ b/basics/account-data/steel/api/src/instruction.rs
@@ -0,0 +1,19 @@
+use crate::state::AddressInfoData;
+use steel::*;
+
+/// Instruction types for the address info program
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum AddressInfoInstruction {
+ CreateAddressInfo = 0,
+}
+
+/// Instruction data for creating address info
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct CreateAddressInfo {
+ pub data: AddressInfoData,
+}
+
+// Link instruction type with its data structure
+instruction!(AddressInfoInstruction, CreateAddressInfo);
diff --git a/basics/account-data/steel/api/src/lib.rs b/basics/account-data/steel/api/src/lib.rs
new file mode 100644
index 000000000..080ff4ea7
--- /dev/null
+++ b/basics/account-data/steel/api/src/lib.rs
@@ -0,0 +1,16 @@
+pub mod consts;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+}
+
+use steel::*;
+
+// Set your Program ID
+declare_id!("Dw6Yq7TZSHdaqB2nKjsxuDrdp5xYCuZaVKFZb5vp5Y4Y");
diff --git a/basics/account-data/steel/api/src/sdk.rs b/basics/account-data/steel/api/src/sdk.rs
new file mode 100644
index 000000000..c459599a2
--- /dev/null
+++ b/basics/account-data/steel/api/src/sdk.rs
@@ -0,0 +1,14 @@
+use crate::prelude::*;
+use steel::*;
+
+pub fn create_address_info(signer: Pubkey, data: AddressInfoData) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(account_pda().0, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: CreateAddressInfo { data }.to_bytes(),
+ }
+}
diff --git a/basics/account-data/steel/api/src/state.rs b/basics/account-data/steel/api/src/state.rs
new file mode 100644
index 000000000..0d0f8a811
--- /dev/null
+++ b/basics/account-data/steel/api/src/state.rs
@@ -0,0 +1,55 @@
+use crate::consts::ADDRESS_INFO_SEED;
+use steel::*;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable, PartialEq)]
+pub struct AddressInfoData {
+ /// Name of the address owner (max 64 bytes)
+ pub name: [u8; 64],
+ /// House number as bytes
+ pub house_number: [u8; 8],
+ /// Street name (max 64 bytes)
+ pub street: [u8; 64],
+ /// City name (max 64 bytes)
+ pub city: [u8; 64],
+}
+
+impl AddressInfoData {
+ pub fn new(name: String, house_number: u64, street: String, city: String) -> Self {
+ Self {
+ name: string_to_bytes(&name),
+ house_number: house_number.to_le_bytes(),
+ street: string_to_bytes(&street),
+ city: string_to_bytes(&city),
+ }
+ }
+}
+
+fn string_to_bytes(s: &str) -> [u8; 64] {
+ let mut bytes = [0; 64];
+ let s_bytes = s.as_bytes();
+ let len = s_bytes.len().min(64);
+ bytes[..len].copy_from_slice(&s_bytes[..len]);
+ bytes
+}
+
+/// Account type discriminator
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum AddressInfoAccount {
+ AddressInfo = 0,
+}
+
+/// Account data structure
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct AddressInfo {
+ pub data: AddressInfoData,
+}
+
+// Link account discriminator with account data structure
+account!(AddressInfoAccount, AddressInfo);
+
+pub fn account_pda() -> (Pubkey, u8) {
+ Pubkey::find_program_address(&[ADDRESS_INFO_SEED], &crate::id())
+}
diff --git a/basics/account-data/steel/package.json b/basics/account-data/steel/package.json
new file mode 100644
index 000000000..e822c8da7
--- /dev/null
+++ b/basics/account-data/steel/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "account-data-program",
+ "version": "1.0.0",
+ "description": "",
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/account_data_program.so"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@solana/web3.js": "^1.95.4"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.3.7",
+ "@types/mocha": "10.0.9",
+ "@types/node": "^22.7.4",
+ "borsh": "^2.0.0",
+ "chai": "^4.3.7",
+ "mocha": "10.7.3",
+ "solana-bankrun": "0.4.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "5.6.3"
+ }
+}
diff --git a/basics/account-data/steel/pnpm-lock.yaml b/basics/account-data/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..4ee20cc25
--- /dev/null
+++ b/basics/account-data/steel/pnpm-lock.yaml
@@ -0,0 +1,1268 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.95.4
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/chai':
+ specifier: ^4.3.7
+ version: 4.3.20
+ '@types/mocha':
+ specifier: 10.0.9
+ version: 10.0.9
+ '@types/node':
+ specifier: ^22.7.4
+ version: 22.7.8
+ borsh:
+ specifier: ^2.0.0
+ version: 2.0.0
+ chai:
+ specifier: ^4.3.7
+ version: 4.5.0
+ mocha:
+ specifier: 10.7.3
+ version: 10.7.3
+ solana-bankrun:
+ specifier: 0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@10.7.3)
+ typescript:
+ specifier: 5.6.3
+ version: 5.6.3
+
+packages:
+
+ '@babel/runtime@7.25.7':
+ resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@10.0.9':
+ resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.7.8':
+ resolution: {integrity: sha512-a922jJy31vqR5sk+kAdIENJjHblqcZ4RmERviFsER4WJcEONqxKcjNOlk0q7OUfrF5sddT+vng070cdfMlrPLg==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ borsh@2.0.0:
+ resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@10.7.3:
+ resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.7':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.7
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.7.8
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@10.0.9': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.7.8':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.7.8
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.7.8
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ borsh@2.0.0: {}
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ debug@4.3.7(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@10.7.3:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.6.0
+ debug: 4.3.7(supports-color@8.1.1)
+ diff: 5.2.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 8.1.0
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 16.2.0
+ yargs-parser: 20.2.9
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@10.7.3):
+ dependencies:
+ mocha: 10.7.3
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/account-data/steel/program/Cargo.toml b/basics/account-data/steel/program/Cargo.toml
new file mode 100644
index 000000000..e4b64e4ac
--- /dev/null
+++ b/basics/account-data/steel/program/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "account-data-program"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+account-data-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+bs64 = "0.1.2"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/account-data/steel/program/src/create_address_info.rs b/basics/account-data/steel/program/src/create_address_info.rs
new file mode 100644
index 000000000..46d835e7d
--- /dev/null
+++ b/basics/account-data/steel/program/src/create_address_info.rs
@@ -0,0 +1,106 @@
+use account_data_api::prelude::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_create_address_info(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ msg!("Processing CreateAddressInfo instruction");
+
+ let [signer_account, create_address_account, system_program_account] = accounts else {
+ msg!("Error: Missing required accounts");
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ let (_expected_address, bump) = account_pda();
+
+ // Validate accounts
+ if !signer_account.is_signer {
+ msg!("Error: Signer account must sign the transaction");
+ return Err(ProgramError::MissingRequiredSignature);
+ }
+
+ create_address_account
+ .is_empty()
+ .map_err(|_| {
+ msg!("Error: Address account must be empty");
+ ProgramError::AccountAlreadyInitialized
+ })?
+ .is_writable()
+ .map_err(|_| {
+ msg!("Error: Address account must be writable");
+ ProgramError::InvalidAccountData
+ })?
+ .has_seeds(&[ADDRESS_INFO_SEED], bump, &account_data_api::ID)
+ .map_err(|_| {
+ msg!("Error: Invalid PDA seeds or bump");
+ ProgramError::InvalidSeeds
+ })?;
+
+ system_program_account.is_program(&system_program::ID)?;
+
+ let args = parse_instruction_data(data)?;
+ msg!(
+ "Instruction data parsed successfully: {{
+ name: '{}',
+ house_number: {},
+ street: '{}',
+ city: '{}'
+ }}",
+ bytes_to_string(&args.data.name),
+ u64::from_le_bytes(args.data.house_number),
+ bytes_to_string(&args.data.street),
+ bytes_to_string(&args.data.city),
+ );
+
+ create_account::(
+ create_address_account,
+ &account_data_api::ID,
+ &[ADDRESS_INFO_SEED, &[bump]],
+ system_program_account,
+ signer_account,
+ )?;
+
+ let address_info = create_address_account
+ .to_account_mut::(&account_data_api::ID)
+ .map_err(|_| {
+ msg!("Error: Failed to deserialize address info account");
+ ProgramError::InvalidAccountData
+ })?;
+
+ address_info.data = args.data;
+ msg!(
+ "Address info updated successfully: {{
+ name: '{}',
+ house_number: {},
+ street: '{}',
+ city: '{}'
+ }}",
+ bytes_to_string(&address_info.data.name),
+ u64::from_le_bytes(address_info.data.house_number),
+ bytes_to_string(&address_info.data.street),
+ bytes_to_string(&address_info.data.city),
+ );
+
+ msg!("CreateAddressInfo instruction completed successfully");
+ Ok(())
+}
+
+fn parse_instruction_data(data: &[u8]) -> Result {
+ CreateAddressInfo::try_from_bytes(data)
+ .map(|info| info.to_owned())
+ .map_err(|_| {
+ msg!("Error: Failed to parse instruction data");
+ ProgramError::InvalidInstructionData
+ })
+}
+
+// Helper function to convert byte array to string
+fn bytes_to_string(bytes: &[u8]) -> String {
+ String::from_utf8(
+ bytes
+ .iter()
+ .take_while(|&&b| b != 0)
+ .copied()
+ .collect::>(),
+ )
+ .unwrap_or_default()
+}
diff --git a/basics/account-data/steel/program/src/error.rs b/basics/account-data/steel/program/src/error.rs
new file mode 100644
index 000000000..ce615c9d5
--- /dev/null
+++ b/basics/account-data/steel/program/src/error.rs
@@ -0,0 +1,21 @@
+use steel::*;
+use thiserror::Error;
+
+/// Custom error types for the address info program
+#[repr(u32)]
+#[derive(Debug, Error, Clone, Copy, PartialEq, Eq, IntoPrimitive)]
+pub enum AddressInfoError {
+ #[error("Required account is missing")]
+ MissingRequiredAccount = 0,
+
+ #[error("Account owner is invalid")]
+ InvalidAccountOwner = 1,
+
+ #[error("Invalid instruction data")]
+ InvalidInstructionData = 2,
+
+ #[error("Address info account already exists")]
+ AddressInfoAccountAlreadyExists = 3,
+}
+
+error!(AddressInfoError);
\ No newline at end of file
diff --git a/basics/account-data/steel/program/src/lib.rs b/basics/account-data/steel/program/src/lib.rs
new file mode 100644
index 000000000..b8d4c3393
--- /dev/null
+++ b/basics/account-data/steel/program/src/lib.rs
@@ -0,0 +1,33 @@
+mod create_address_info;
+
+use account_data_api::prelude::*;
+use create_address_info::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ // Validate program ID
+ if program_id != &account_data_api::ID {
+ return Err(ProgramError::IncorrectProgramId);
+ }
+
+ // Parse and validate instruction data
+ let (instruction, instruction_data) =
+ parse_instruction::(&account_data_api::ID, program_id, data)?;
+
+ // Route instruction to appropriate processor
+ match instruction {
+ AddressInfoInstruction::CreateAddressInfo => {
+ msg!("Instruction: CreateAddressInfo");
+ process_create_address_info(accounts, instruction_data)?
+ }
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/account-data/steel/tests/addressInfo.test.ts b/basics/account-data/steel/tests/addressInfo.test.ts
new file mode 100644
index 000000000..d76182685
--- /dev/null
+++ b/basics/account-data/steel/tests/addressInfo.test.ts
@@ -0,0 +1,149 @@
+import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { expect } from 'chai';
+import { BanksClient, ProgramTestContext, start } from 'solana-bankrun';
+
+// Constants for program identification
+const PROGRAM_ID = new PublicKey('Dw6Yq7TZSHdaqB2nKjsxuDrdp5xYCuZaVKFZb5vp5Y4Y');
+const ADDRESS_INFO_SEED = 'address_info';
+
+// Instruction discriminators
+const INSTRUCTION_DISCRIMINATORS = {
+ createAddressInfo: Buffer.from([0]),
+};
+
+// Type definitions
+interface AddressInfoData {
+ name: string;
+ houseNumber: bigint;
+ street: string;
+ city: string;
+}
+
+interface AddressInfoDataRaw {
+ name: Uint8Array;
+ houseNumber: bigint;
+ street: Uint8Array;
+ city: Uint8Array;
+}
+
+interface AddressInfoAccount {
+ data: AddressInfoData;
+}
+
+interface AddressInfoAccountRaw {
+ data: AddressInfoDataRaw;
+}
+
+// Borsh schema definition
+const ADDRESS_INFO_SCHEMA: borsh.Schema = {
+ struct: {
+ discriminator: 'u64',
+ data: {
+ struct: {
+ name: { array: { type: 'u8', len: 64 } },
+ houseNumber: 'u64',
+ street: { array: { type: 'u8', len: 64 } },
+ city: { array: { type: 'u8', len: 64 } },
+ },
+ },
+ },
+};
+
+// Helper functions
+const stringToFixedBytes = (str: string, length: number): Uint8Array => {
+ const buffer = Buffer.alloc(length, 0);
+ buffer.write(str, 'utf-8');
+ return Uint8Array.from(buffer);
+};
+
+const fixedBytesToString = (data: Uint8Array): string => {
+ return Buffer.from(data).toString('utf-8').replace(/\0/g, '');
+};
+
+const bigIntToBytes = (value: bigint): Uint8Array => {
+ const buffer = Buffer.alloc(8);
+ buffer.writeBigUInt64LE(value, 0);
+ return Uint8Array.from(buffer);
+};
+
+const serializeAddressInfo = (data: AddressInfoData): Buffer => {
+ return Buffer.concat([
+ stringToFixedBytes(data.name, 64),
+ bigIntToBytes(data.houseNumber),
+ stringToFixedBytes(data.street, 64),
+ stringToFixedBytes(data.city, 64),
+ ]);
+};
+
+const deserializeAddressInfo = (raw: AddressInfoAccountRaw): AddressInfoAccount => {
+ return {
+ data: {
+ name: fixedBytesToString(raw.data.name),
+ houseNumber: raw.data.houseNumber,
+ street: fixedBytesToString(raw.data.street),
+ city: fixedBytesToString(raw.data.city),
+ },
+ };
+};
+
+describe('Address Info Program', () => {
+ let context: ProgramTestContext;
+ let client: BanksClient;
+ let payer: Keypair;
+ let addressInfoPda: PublicKey;
+
+ before(async () => {
+ // Initialize program test environment
+ context = await start([{ name: 'account_data_program', programId: PROGRAM_ID }], []);
+ client = context.banksClient;
+ payer = context.payer;
+
+ // Derive program PDA
+ [addressInfoPda] = PublicKey.findProgramAddressSync([Buffer.from(ADDRESS_INFO_SEED)], PROGRAM_ID);
+ });
+
+ describe('create_address_info', () => {
+ it('successfully creates and initializes an address info account', async () => {
+ // Test data
+ const addressInfo = {
+ name: 'Joe C',
+ houseNumber: BigInt(136),
+ street: 'Mile High Dr.',
+ city: 'Solana Beach',
+ };
+
+ // Create and send transaction
+ const tx = new Transaction().add(
+ new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: addressInfoPda, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ data: Buffer.concat([INSTRUCTION_DISCRIMINATORS.createAddressInfo, serializeAddressInfo(addressInfo)]),
+ }),
+ );
+
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.sign(payer);
+
+ await client.processTransaction(tx);
+
+ // Verify account data
+ const account = await client.getAccount(addressInfoPda);
+ expect(account).to.not.be.null;
+
+ const accountData = borsh.deserialize(ADDRESS_INFO_SCHEMA, account?.data) as AddressInfoAccountRaw;
+
+ const deserializedData = deserializeAddressInfo(accountData);
+
+ // Verify each field
+ expect(deserializedData.data.name).to.equal(addressInfo.name);
+ expect(deserializedData.data.houseNumber).to.equal(addressInfo.houseNumber);
+ expect(deserializedData.data.street).to.equal(addressInfo.street);
+ expect(deserializedData.data.city).to.equal(addressInfo.city);
+ });
+ });
+});
diff --git a/basics/account-data/steel/tsconfig.json b/basics/account-data/steel/tsconfig.json
new file mode 100644
index 000000000..8c20b2236
--- /dev/null
+++ b/basics/account-data/steel/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/basics/checking-accounts/anchor/Anchor.toml b/basics/checking-accounts/anchor/Anchor.toml
index b3e3f7f63..2bcccac8d 100644
--- a/basics/checking-accounts/anchor/Anchor.toml
+++ b/basics/checking-accounts/anchor/Anchor.toml
@@ -11,4 +11,4 @@ cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/checking-accounts/anchor/Cargo.toml b/basics/checking-accounts/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/checking-accounts/anchor/Cargo.toml
+++ b/basics/checking-accounts/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/checking-accounts/anchor/package.json b/basics/checking-accounts/anchor/package.json
index ab411155f..439798a07 100644
--- a/basics/checking-accounts/anchor/package.json
+++ b/basics/checking-accounts/anchor/package.json
@@ -1,8 +1,11 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
diff --git a/basics/checking-accounts/anchor/pnpm-lock.yaml b/basics/checking-accounts/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..cf21eb739
--- /dev/null
+++ b/basics/checking-accounts/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/checking-accounts/anchor/programs/anchor-program-example/Cargo.toml b/basics/checking-accounts/anchor/programs/anchor-program-example/Cargo.toml
index 4b24f9b28..4dd6d49f6 100644
--- a/basics/checking-accounts/anchor/programs/anchor-program-example/Cargo.toml
+++ b/basics/checking-accounts/anchor/programs/anchor-program-example/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "anchor_program_example"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/checking-accounts/anchor/tests/bankrun.test.ts b/basics/checking-accounts/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..77dc95805
--- /dev/null
+++ b/basics/checking-accounts/anchor/tests/bankrun.test.ts
@@ -0,0 +1,53 @@
+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');
+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(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();
+ });
+});
diff --git a/basics/checking-accounts/anchor/tests/test.ts b/basics/checking-accounts/anchor/tests/test.ts
index 8b26b56fd..a9c9dcafb 100644
--- a/basics/checking-accounts/anchor/tests/test.ts
+++ b/basics/checking-accounts/anchor/tests/test.ts
@@ -1,43 +1,34 @@
-import * as anchor from "@coral-xyz/anchor"
-import { AnchorProgramExample } from "../target/types/anchor_program_example"
-import {
- Keypair,
- SystemProgram,
- Transaction,
- sendAndConfirmTransaction,
-} from "@solana/web3.js"
+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';
-describe("Anchor example", () => {
- const provider = anchor.AnchorProvider.env()
- anchor.setProvider(provider)
- const program = anchor.workspace
- .AnchorProgramExample as anchor.Program
- const wallet = provider.wallet as anchor.Wallet
+describe('Anchor example', () => {
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+ const program = anchor.workspace.AnchorProgramExample as anchor.Program;
+ 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()
+ const accountToChange = new Keypair();
// Our program will create this.
- const accountToCreate = new Keypair()
+ const accountToCreate = new Keypair();
- it("Create an account owned by our program", async () => {
- let instruction = SystemProgram.createAccount({
+ 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 () => {
+ it('Check accounts', async () => {
await program.methods
.checkAccounts()
.accounts({
@@ -45,6 +36,6 @@ describe("Anchor example", () => {
accountToCreate: accountToCreate.publicKey,
accountToChange: accountToChange.publicKey,
})
- .rpc()
- })
-})
+ .rpc();
+ });
+});
diff --git a/basics/checking-accounts/native/cicd.sh b/basics/checking-accounts/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/checking-accounts/native/cicd.sh
+++ b/basics/checking-accounts/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/checking-accounts/native/package.json b/basics/checking-accounts/native/package.json
index b71a6ab9b..37e486d35 100644
--- a/basics/checking-accounts/native/package.json
+++ b/basics/checking-accounts/native/package.json
@@ -1,10 +1,12 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
- "@solana/web3.js": "^1.47.3",
- "fs": "^0.0.1-security"
+ "@solana/web3.js": "^1.47.3"
},
"devDependencies": {
"@types/bn.js": "^5.1.0",
@@ -13,6 +15,7 @@
"chai": "^4.3.4",
"mocha": "^9.0.3",
"ts-mocha": "^10.0.0",
- "typescript": "^4.3.5"
+ "typescript": "^4.3.5",
+ "solana-bankrun": "^0.3.0"
}
}
diff --git a/basics/checking-accounts/native/pnpm-lock.yaml b/basics/checking-accounts/native/pnpm-lock.yaml
new file mode 100644
index 000000000..315de63a2
--- /dev/null
+++ b/basics/checking-accounts/native/pnpm-lock.yaml
@@ -0,0 +1,1342 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/checking-accounts/native/program/Cargo.toml b/basics/checking-accounts/native/program/Cargo.toml
index 3f17cac1a..0185f0dd2 100644
--- a/basics/checking-accounts/native/program/Cargo.toml
+++ b/basics/checking-accounts/native/program/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2021"
[dependencies]
-solana-program = "1.10.12"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/checking-accounts/native/tests/test.ts b/basics/checking-accounts/native/tests/test.ts
index f8653fd12..d7102d4f2 100644
--- a/basics/checking-accounts/native/tests/test.ts
+++ b/basics/checking-accounts/native/tests/test.ts
@@ -1,72 +1,54 @@
-import {
- Connection,
- Keypair,
- PublicKey,
- sendAndConfirmTransaction,
- SystemProgram,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-
-
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
-
-describe("Checking accounts", async () => {
-
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/so/program-keypair.json');
-
- const PROGRAM_ID: PublicKey = new PublicKey(
- program.publicKey
- );
+import { describe, test } from 'node:test';
+import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { start } from 'solana-bankrun';
+
+describe('Checking accounts', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'checking_accounts_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+ const rent = await client.getRent();
+
+ // We'll create this ahead of time.
+ // Our program will try to modify it.
+ const accountToChange = Keypair.generate();
+ // Our program will create this.
+ const accountToCreate = Keypair.generate();
+
+ test('Create an account owned by our program', async () => {
+ const blockhash = context.lastBlockhash;
+ const ix = SystemProgram.createAccount({
+ fromPubkey: payer.publicKey,
+ newAccountPubkey: accountToChange.publicKey,
+ lamports: Number(rent.minimumBalance(BigInt(0))),
+ space: 0,
+ programId: PROGRAM_ID, // Our program
+ });
- // We'll create this ahead of time.
- // Our program will try to modify it.
- const accountToChange = Keypair.generate();
- // Our program will create this.
- const accountToCreate = Keypair.generate();
-
- it("Create an account owned by our program", async () => {
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, accountToChange);
- let ix = SystemProgram.createAccount({
- fromPubkey: payer.publicKey,
- newAccountPubkey: accountToChange.publicKey,
- lamports: await connection.getMinimumBalanceForRentExemption(0),
- space: 0,
- programId: PROGRAM_ID, // Our program
- });
+ await client.processTransaction(tx);
+ });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, accountToChange]
- );
+ test('Check accounts', async () => {
+ const blockhash = context.lastBlockhash;
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: accountToCreate.publicKey, isSigner: true, isWritable: true },
+ { pubkey: accountToChange.publicKey, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: Buffer.alloc(0),
});
-
- it("Check accounts", async () => {
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: payer.publicKey, isSigner: true, isWritable: true},
- {pubkey: accountToCreate.publicKey, isSigner: true, isWritable: true},
- {pubkey: accountToChange.publicKey, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: PROGRAM_ID,
- data: Buffer.alloc(0),
- });
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, accountToChange, accountToCreate);
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, accountToCreate, accountToChange]
- );
- });
+ await client.processTransaction(tx);
});
-
\ No newline at end of file
+});
diff --git a/basics/checking-accounts/solang/Anchor.toml b/basics/checking-accounts/solang/Anchor.toml
deleted file mode 100644
index 71dfc3e88..000000000
--- a/basics/checking-accounts/solang/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-checking_accounts = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/checking-accounts/solang/package.json b/basics/checking-accounts/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/checking-accounts/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/checking-accounts/solang/solidity/checking-accounts.sol b/basics/checking-accounts/solang/solidity/checking-accounts.sol
deleted file mode 100644
index 7cf427c4a..000000000
--- a/basics/checking-accounts/solang/solidity/checking-accounts.sol
+++ /dev/null
@@ -1,48 +0,0 @@
-
-import "solana";
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract checking_accounts {
-
- // The dataAccount is unused in this example, but is a required account when using Solang
- @payer(payer) // "payer" is the account that pays to create the dataAccount
- constructor() {}
-
- function checkAccounts(address accountToChange, address accountToCreate) public view {
- print("Number of Accounts Provided: {:}".format(tx.accounts.length));
-
- // Find the accounts we are looking for and perform checks on them
- for (uint64 i = 0; i < tx.accounts.length; i++) {
- if (tx.accounts[i].key == accountToChange) {
- print("Found Account To Change");
- programOwnerCheck(tx.accounts[i]);
- }
- if (tx.accounts[i].key == accountToCreate) {
- print("Found Account To Create");
- notInitializedCheck(tx.accounts[i]);
- signerCheck(tx.accounts[i]);
- }
- }
-
- // (Create account...) (unimplemented)
- // (Change account...) (unimplemented)
- }
-
- function programOwnerCheck(AccountInfo account) internal pure {
- print("Progam Owner Check");
- // The owner of this account should be this program
- require(account.owner == type(checking_accounts).program_id, "Account to change does not have the correct program id.");
- }
-
- function notInitializedCheck(AccountInfo account) internal pure {
- print("Check Account Not Initialized");
- // This account should not be initialized (has no lamports)
- require(account.lamports == 0, "The program expected the account to create to not yet be initialized.");
- }
-
- function signerCheck(AccountInfo account) internal pure {
- print("Check Account Signed Transaction");
- // This account should be a signer on the transaction
- require(account.is_signer, "Account required to be a signer");
- }
-}
diff --git a/basics/checking-accounts/solang/tests/checking-accounts.ts b/basics/checking-accounts/solang/tests/checking-accounts.ts
deleted file mode 100644
index 3065942e6..000000000
--- a/basics/checking-accounts/solang/tests/checking-accounts.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { CheckingAccounts } from "../target/types/checking_accounts";
-import {
- SystemProgram,
- Transaction,
- sendAndConfirmTransaction,
-} from "@solana/web3.js";
-
-describe("checking-accounts", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- // Generate a new random keypair for the data account.
- const dataAccount = anchor.web3.Keypair.generate();
-
- // Generate a new keypair to represent the account we will change.
- const accountToChange = anchor.web3.Keypair.generate();
- // Generate a new keypair to represent the account we will create.
- const accountToCreate = anchor.web3.Keypair.generate();
- const wallet = provider.wallet as anchor.Wallet;
- const connection = provider.connection;
-
- const program = anchor.workspace
- .CheckingAccounts as Program;
-
- it("Is initialized!", async () => {
- // Create the new dataAccount, this is an account required by Solang even though we don't use it
- const tx = await program.methods
- .new()
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([dataAccount])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
- });
-
- it("Create an account owned by our program", async () => {
- // Create the new account owned by our program by directly calling the system program
- let ix = SystemProgram.createAccount({
- fromPubkey: wallet.publicKey,
- newAccountPubkey: accountToChange.publicKey,
- lamports: await connection.getMinimumBalanceForRentExemption(0),
- space: 0,
- programId: program.programId, // Our program
- });
-
- await sendAndConfirmTransaction(connection, new Transaction().add(ix), [
- wallet.payer,
- accountToChange,
- ]);
- });
-
- it("Check Accounts", async () => {
- // Invoke the checkAccounts instruction on our program, passing in the account we want to "check"
- const tx = await program.methods
- .checkAccounts(accountToChange.publicKey, accountToCreate.publicKey)
- .accounts({ dataAccount: dataAccount.publicKey })
- .remainingAccounts([
- {
- pubkey: accountToChange.publicKey,
- isWritable: true,
- isSigner: false,
- },
- {
- pubkey: accountToCreate.publicKey,
- isWritable: true,
- isSigner: true,
- },
- ])
- .signers([accountToCreate])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
- });
-});
diff --git a/basics/checking-accounts/solang/tsconfig.json b/basics/checking-accounts/solang/tsconfig.json
deleted file mode 100644
index 5436e66f2..000000000
--- a/basics/checking-accounts/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
-}
-
\ No newline at end of file
diff --git a/basics/checking-accounts/steel/.gitignore b/basics/checking-accounts/steel/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/checking-accounts/steel/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/checking-accounts/steel/Cargo.toml b/basics/checking-accounts/steel/Cargo.toml
new file mode 100644
index 000000000..2c00a539a
--- /dev/null
+++ b/basics/checking-accounts/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+respository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+steel-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/checking-accounts/steel/README.md b/basics/checking-accounts/steel/README.md
new file mode 100644
index 000000000..4f4fe2a54
--- /dev/null
+++ b/basics/checking-accounts/steel/README.md
@@ -0,0 +1,22 @@
+# Steel
+
+**Steel** is a ...
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Event`](api/src/event.rs) – Custom program events.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`Hello`](program/src/hello.rs) – Hello ...
+
+## State
+- [`User`](api/src/state/user.rs) – User ...
+
+## Tests
+
+To run the test suit, use the Solana toolchain:
+```
+cargo test-sbf
+```
diff --git a/basics/checking-accounts/steel/api/Cargo.toml b/basics/checking-accounts/steel/api/Cargo.toml
new file mode 100644
index 000000000..34b563782
--- /dev/null
+++ b/basics/checking-accounts/steel/api/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "steel-api"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/checking-accounts/steel/api/src/consts.rs b/basics/checking-accounts/steel/api/src/consts.rs
new file mode 100644
index 000000000..97104be5e
--- /dev/null
+++ b/basics/checking-accounts/steel/api/src/consts.rs
@@ -0,0 +1,2 @@
+/// Seed of the account_to_change account PDA.
+pub const ACCOUNT_TO_CHANGE: &[u8] = b"account_to_change";
diff --git a/basics/checking-accounts/steel/api/src/instruction.rs b/basics/checking-accounts/steel/api/src/instruction.rs
new file mode 100644
index 000000000..f6225266c
--- /dev/null
+++ b/basics/checking-accounts/steel/api/src/instruction.rs
@@ -0,0 +1,13 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum SteelInstruction {
+ CheckAccounts = 0,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct CheckAccounts {}
+
+instruction!(SteelInstruction, CheckAccounts);
diff --git a/basics/checking-accounts/steel/api/src/lib.rs b/basics/checking-accounts/steel/api/src/lib.rs
new file mode 100644
index 000000000..6db8ac73d
--- /dev/null
+++ b/basics/checking-accounts/steel/api/src/lib.rs
@@ -0,0 +1,16 @@
+pub mod consts;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/basics/checking-accounts/steel/api/src/sdk.rs b/basics/checking-accounts/steel/api/src/sdk.rs
new file mode 100644
index 000000000..60df2db5f
--- /dev/null
+++ b/basics/checking-accounts/steel/api/src/sdk.rs
@@ -0,0 +1,20 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn check_accounts(
+ signer: Pubkey,
+ account_to_create: Pubkey,
+ account_to_change: Pubkey,
+) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(account_to_create, false),
+ AccountMeta::new(account_to_change, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: CheckAccounts {}.to_bytes(),
+ }
+}
diff --git a/basics/checking-accounts/steel/api/src/state/account_to_change.rs b/basics/checking-accounts/steel/api/src/state/account_to_change.rs
new file mode 100644
index 000000000..674d9f7bf
--- /dev/null
+++ b/basics/checking-accounts/steel/api/src/state/account_to_change.rs
@@ -0,0 +1,9 @@
+use steel::*;
+
+use super::SteelAccount;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct AccountToChange {}
+
+account!(SteelAccount, AccountToChange);
diff --git a/basics/checking-accounts/steel/api/src/state/mod.rs b/basics/checking-accounts/steel/api/src/state/mod.rs
new file mode 100644
index 000000000..e44c1daa3
--- /dev/null
+++ b/basics/checking-accounts/steel/api/src/state/mod.rs
@@ -0,0 +1,18 @@
+mod account_to_change;
+
+pub use account_to_change::*;
+
+use steel::*;
+
+use crate::consts::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum SteelAccount {
+ AccountToChange = 0,
+}
+
+/// Fetch PDA of the account_to_change account.
+pub fn account_to_change_pda() -> (Pubkey, u8) {
+ Pubkey::find_program_address(&[ACCOUNT_TO_CHANGE], &crate::id())
+}
diff --git a/basics/checking-accounts/steel/program/Cargo.toml b/basics/checking-accounts/steel/program/Cargo.toml
new file mode 100644
index 000000000..db99b68cc
--- /dev/null
+++ b/basics/checking-accounts/steel/program/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "steel-program"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+steel-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/checking-accounts/steel/program/src/check_accounts.rs b/basics/checking-accounts/steel/program/src/check_accounts.rs
new file mode 100644
index 000000000..67f70fc6f
--- /dev/null
+++ b/basics/checking-accounts/steel/program/src/check_accounts.rs
@@ -0,0 +1,49 @@
+use solana_program::msg;
+use steel::*;
+
+pub fn process_check_accounts(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult {
+ // Load accounts.
+ // You can verify the list has the correct number of accounts.
+ let [signer_info, account_to_create_info, account_to_change_info, system_program] = accounts
+ else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ // You can verify if an account is a signer
+ signer_info.is_signer()?;
+
+ // You can verify the program ID from the instruction is in fact
+ // the program ID of your program.
+ if system_program.is_program(&system_program::ID).is_err() {
+ return Err(ProgramError::IncorrectProgramId);
+ };
+
+ // You can make sure an account has NOT been initialized.
+
+ msg!("New account: {}", account_to_create_info.key);
+ if account_to_create_info.lamports() != 0 {
+ msg!("The program expected the account to create to not yet be initialized.");
+ return Err(ProgramError::AccountAlreadyInitialized);
+ };
+ // (Create account...)
+
+ // You can also make sure an account has been initialized.
+ msg!("Account to change: {}", account_to_change_info.key);
+ if account_to_change_info.lamports() == 0 {
+ msg!("The program expected the account to change to be initialized.");
+ return Err(ProgramError::UninitializedAccount);
+ };
+
+ // If we want to modify an account's data, it must be owned by our program.
+ if account_to_change_info.owner != &steel_api::ID {
+ msg!("Account to change does not have the correct program id.");
+ return Err(ProgramError::IncorrectProgramId);
+ };
+
+ // You can also check pubkeys against constants.
+ if system_program.key != &system_program::ID {
+ return Err(ProgramError::IncorrectProgramId);
+ };
+
+ Ok(())
+}
diff --git a/basics/checking-accounts/steel/program/src/lib.rs b/basics/checking-accounts/steel/program/src/lib.rs
new file mode 100644
index 000000000..421e9e3b3
--- /dev/null
+++ b/basics/checking-accounts/steel/program/src/lib.rs
@@ -0,0 +1,22 @@
+mod check_accounts;
+
+use check_accounts::*;
+
+use steel::*;
+use steel_api::prelude::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&steel_api::ID, program_id, data)?;
+
+ match ix {
+ SteelInstruction::CheckAccounts => process_check_accounts(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/checking-accounts/steel/program/tests/test.rs b/basics/checking-accounts/steel/program/tests/test.rs
new file mode 100644
index 000000000..bc8f607c0
--- /dev/null
+++ b/basics/checking-accounts/steel/program/tests/test.rs
@@ -0,0 +1,51 @@
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+use steel_api::prelude::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "steel_program",
+ steel_api::ID,
+ processor!(steel_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+
+ let account_to_create = Keypair::new();
+ let account_to_change = Keypair::new();
+
+ let account_to_change_ix = solana_sdk::system_instruction::create_account(
+ &payer.pubkey(),
+ &account_to_change.pubkey(),
+ solana_sdk::native_token::LAMPORTS_PER_SOL,
+ 0,
+ &steel_api::ID,
+ );
+
+ let tx = Transaction::new_signed_with_payer(
+ &[account_to_change_ix],
+ Some(&payer.pubkey()),
+ &[&payer, &account_to_change],
+ blockhash,
+ );
+
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Submit check_accounts transaction.
+ let ix = check_accounts(
+ payer.pubkey(),
+ account_to_create.pubkey(),
+ account_to_change.pubkey(),
+ );
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+}
diff --git a/basics/close-account/anchor/Anchor.toml b/basics/close-account/anchor/Anchor.toml
index 1a5a5770d..dd81fc487 100644
--- a/basics/close-account/anchor/Anchor.toml
+++ b/basics/close-account/anchor/Anchor.toml
@@ -13,4 +13,4 @@ cluster = "Localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/close-account/anchor/Cargo.toml b/basics/close-account/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/close-account/anchor/Cargo.toml
+++ b/basics/close-account/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/close-account/anchor/migrations/deploy.ts b/basics/close-account/anchor/migrations/deploy.ts
index 82fb175fa..64a1c3599 100644
--- a/basics/close-account/anchor/migrations/deploy.ts
+++ b/basics/close-account/anchor/migrations/deploy.ts
@@ -2,9 +2,9 @@
// single deploy script that's invoked from the CLI, injecting a provider
// configured from the workspace's Anchor.toml.
-const anchor = require("@coral-xyz/anchor");
+const anchor = require('@coral-xyz/anchor');
-module.exports = async function (provider) {
+module.exports = async (provider) => {
// Configure client to use the provider.
anchor.setProvider(provider);
diff --git a/basics/close-account/anchor/package.json b/basics/close-account/anchor/package.json
index 7ce74a967..0749ba2d1 100644
--- a/basics/close-account/anchor/package.json
+++ b/basics/close-account/anchor/package.json
@@ -4,16 +4,18 @@
"lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
},
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@coral-xyz/anchor": "^0.30.0",
+ "@solana/web3.js": "^1.95.2"
},
"devDependencies": {
- "chai": "^4.3.4",
- "mocha": "^9.0.3",
- "ts-mocha": "^10.0.0",
+ "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",
- "typescript": "^4.3.5",
- "prettier": "^2.6.2"
+ "chai": "^4.3.4",
+ "mocha": "^9.0.3",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^4.3.5"
}
}
diff --git a/basics/close-account/anchor/pnpm-lock.yaml b/basics/close-account/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..cf21eb739
--- /dev/null
+++ b/basics/close-account/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/close-account/anchor/programs/close-account/Cargo.toml b/basics/close-account/anchor/programs/close-account/Cargo.toml
index d4ab97c9f..58eae1131 100644
--- a/basics/close-account/anchor/programs/close-account/Cargo.toml
+++ b/basics/close-account/anchor/programs/close-account/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "close_account_program"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/close-account/anchor/programs/close-account/src/instructions/create_user.rs b/basics/close-account/anchor/programs/close-account/src/instructions/create_user.rs
index 55fc45d95..95bab0137 100644
--- a/basics/close-account/anchor/programs/close-account/src/instructions/create_user.rs
+++ b/basics/close-account/anchor/programs/close-account/src/instructions/create_user.rs
@@ -22,7 +22,7 @@ pub struct CreateUserContext<'info> {
pub fn create_user(ctx: Context, name: String) -> Result<()> {
*ctx.accounts.user_account = UserState {
- bump: *ctx.bumps.get("user_account").unwrap(),
+ bump: ctx.bumps.user_account,
user: ctx.accounts.user.key(),
name,
};
diff --git a/basics/close-account/anchor/tests/bankrun.test.ts b/basics/close-account/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..d7f4f3fcd
--- /dev/null
+++ b/basics/close-account/anchor/tests/bankrun.test.ts
@@ -0,0 +1,53 @@
+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');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+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 provider = new BankrunProvider(context);
+
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+ // Derive the PDA for the user's account.
+ const [userAccountAddress] = PublicKey.findProgramAddressSync([Buffer.from('USER'), payer.publicKey.toBuffer()], program.programId);
+
+ it('Create Account', async () => {
+ await program.methods
+ .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');
+ assert.equal(userAccount.user.toBase58(), payer.publicKey.toBase58());
+ });
+
+ it('Close Account', async () => {
+ await program.methods
+ .closeUser()
+ .accounts({
+ user: payer.publicKey,
+ })
+ .rpc();
+
+ // The account should no longer exist, returning null.
+ try {
+ 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'
+ assert.equal(err.message, `Could not find ${userAccountAddress}`);
+ }
+ });
+});
diff --git a/basics/close-account/anchor/tests/close-account.ts b/basics/close-account/anchor/tests/close-account.ts
index 1f3a5ebbb..eba6ac2d9 100644
--- a/basics/close-account/anchor/tests/close-account.ts
+++ b/basics/close-account/anchor/tests/close-account.ts
@@ -1,54 +1,46 @@
-import * as anchor from "@coral-xyz/anchor"
-import { Program } from "@coral-xyz/anchor"
-import { CloseAccountProgram } from "../target/types/close_account_program"
-import { PublicKey } from "@solana/web3.js"
-import assert from "assert"
+import assert from 'node:assert';
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import { PublicKey } from '@solana/web3.js';
+import type { CloseAccountProgram } from '../target/types/close_account_program';
-describe("close-an-account", () => {
+describe('close-an-account', () => {
// Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env()
- anchor.setProvider(provider)
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
- const program = anchor.workspace
- .CloseAccountProgram as Program
- const payer = provider.wallet as anchor.Wallet
+ const program = anchor.workspace.CloseAccountProgram as Program;
+ const payer = provider.wallet as anchor.Wallet;
// 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,
userAccount: userAccountAddress,
})
- .rpc()
+ .rpc();
// Fetch the account data
- const userAccount = await program.account.userState.fetch(
- userAccountAddress
- )
- assert.equal(userAccount.name, "John Doe")
- assert.equal(userAccount.user.toBase58(), payer.publicKey.toBase58())
- })
+ 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({
user: payer.publicKey,
userAccount: userAccountAddress,
})
- .rpc()
+ .rpc();
// The account should no longer exist, returning null.
- const userAccount = await program.account.userState.fetchNullable(
- userAccountAddress
- )
- assert.equal(userAccount, null)
- })
-})
+ const userAccount = await program.account.userState.fetchNullable(userAccountAddress);
+ assert.equal(userAccount, null);
+ });
+});
diff --git a/basics/close-account/native/cicd.sh b/basics/close-account/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/close-account/native/cicd.sh
+++ b/basics/close-account/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/close-account/native/package.json b/basics/close-account/native/package.json
index de70cafa2..58a4c74de 100644
--- a/basics/close-account/native/package.json
+++ b/basics/close-account/native/package.json
@@ -1,10 +1,12 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tests/tsconfig.test.json -t 1000000 ./tests/close-account.test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
- "@solana/web3.js": "^1.35",
- "fs": "^0.0.1-security"
+ "@solana/web3.js": "^1.35"
},
"devDependencies": {
"@types/bn.js": "^5.1.0",
@@ -12,7 +14,8 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
-}
\ No newline at end of file
+}
diff --git a/basics/close-account/native/pnpm-lock.yaml b/basics/close-account/native/pnpm-lock.yaml
new file mode 100644
index 000000000..6ce07e029
--- /dev/null
+++ b/basics/close-account/native/pnpm-lock.yaml
@@ -0,0 +1,1342 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.35
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/close-account/native/program/Cargo.toml b/basics/close-account/native/program/Cargo.toml
index 6dc2c2cf4..13f48c06c 100644
--- a/basics/close-account/native/program/Cargo.toml
+++ b/basics/close-account/native/program/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
borsh = "0.9.3"
borsh-derive = "0.9.1"
-solana-program = "1.16.10"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/close-account/native/tests/close-account.test.ts b/basics/close-account/native/tests/close-account.test.ts
index 2cc1036d8..cb8640c3d 100644
--- a/basics/close-account/native/tests/close-account.test.ts
+++ b/basics/close-account/native/tests/close-account.test.ts
@@ -1,60 +1,35 @@
-import {
- Connection,
- Keypair,
- PublicKey,
- sendAndConfirmTransaction,
- Transaction,
-} from '@solana/web3.js';
-import {
- describe,
- it,
-} from 'mocha';
-import {
- createCreateUserInstruction,
- createCloseUserInstruction,
- createKeypairFromFile,
-} from '../ts';
-
-
-
-describe("Close Account!", async () => {
-
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/deploy/program-keypair.json');
-
- const testAccountPublicKey = PublicKey.findProgramAddressSync(
- [Buffer.from("USER"), payer.publicKey.toBuffer()],
- program.publicKey,
- )[0];
-
- it("Create the account", async () => {
- console.log(`${testAccountPublicKey}`);
- const ix = createCreateUserInstruction(
- testAccountPublicKey,
- payer.publicKey,
- program.publicKey,
- "Jacob",
- );
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
- });
-
- it("Close the account", async () => {
- const ix = createCloseUserInstruction(
- testAccountPublicKey,
- payer.publicKey,
- program.publicKey,
- );
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer],
- { skipPreflight: true }
- );
- });
+import { describe, test } from 'node:test';
+import { PublicKey, Transaction } from '@solana/web3.js';
+import { start } from 'solana-bankrun';
+import { createCloseUserInstruction, createCreateUserInstruction } from '../ts';
+
+describe('Close Account!', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'close_account_native_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ const testAccountPublicKey = PublicKey.findProgramAddressSync([Buffer.from('USER'), payer.publicKey.toBuffer()], PROGRAM_ID)[0];
+
+ test('Create the account', async () => {
+ const blockhash = context.lastBlockhash;
+ const ix = createCreateUserInstruction(testAccountPublicKey, payer.publicKey, PROGRAM_ID, 'Jacob');
+
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ await client.processTransaction(tx);
+ });
+
+ test('Close the account', async () => {
+ const blockhash = context.lastBlockhash;
+
+ const ix = createCloseUserInstruction(testAccountPublicKey, payer.publicKey, PROGRAM_ID);
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ await client.processTransaction(tx);
});
-
\ No newline at end of file
+});
diff --git a/basics/close-account/native/ts/index.ts b/basics/close-account/native/ts/index.ts
index 2ba714562..898deed08 100644
--- a/basics/close-account/native/ts/index.ts
+++ b/basics/close-account/native/ts/index.ts
@@ -1,3 +1,2 @@
export * from './instructions';
export * from './state';
-export * from './util/util';
\ No newline at end of file
diff --git a/basics/close-account/native/ts/instructions/close.ts b/basics/close-account/native/ts/instructions/close.ts
index 2a10b093b..697d347bf 100644
--- a/basics/close-account/native/ts/instructions/close.ts
+++ b/basics/close-account/native/ts/instructions/close.ts
@@ -1,60 +1,50 @@
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-import {
- PublicKey,
- SystemProgram,
- TransactionInstruction
-} from '@solana/web3.js';
-import { MyInstruction } from ".";
-
+import { Buffer } from 'node:buffer';
+import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { MyInstruction } from '.';
export class Close {
+ instruction: MyInstruction;
+ constructor(props: {
instruction: MyInstruction;
+ }) {
+ this.instruction = props.instruction;
+ }
+
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CloseSchema, this));
+ }
- constructor(props: {
- instruction: MyInstruction,
- }) {
- this.instruction = props.instruction;
- }
-
- toBuffer() {
- return Buffer.from(borsh.serialize(CloseSchema, this))
- };
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(CloseSchema, Close, buffer);
- };
-};
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(CloseSchema, Close, buffer);
+ }
+}
export const CloseSchema = new Map([
- [ Close, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ],
- }]
+ [
+ Close,
+ {
+ kind: 'struct',
+ fields: [['instruction', 'u8']],
+ },
+ ],
]);
-export function createCloseUserInstruction(
- target: PublicKey,
- payer: PublicKey,
- programId: PublicKey,
-): TransactionInstruction {
-
- const instructionObject = new Close({
- instruction: MyInstruction.CloseUser,
- });
-
- const ix = new TransactionInstruction({
- keys: [
- {pubkey: target, isSigner: false, isWritable: true},
- {pubkey: payer, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: programId,
- data: instructionObject.toBuffer(),
- });
-
- return ix;
-}
\ No newline at end of file
+export function createCloseUserInstruction(target: PublicKey, payer: PublicKey, programId: PublicKey): TransactionInstruction {
+ const instructionObject = new Close({
+ instruction: MyInstruction.CloseUser,
+ });
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: target, isSigner: false, isWritable: true },
+ { pubkey: payer, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: programId,
+ data: instructionObject.toBuffer(),
+ });
+
+ return ix;
+}
diff --git a/basics/close-account/native/ts/instructions/create.ts b/basics/close-account/native/ts/instructions/create.ts
index e97ecbe0b..100b6cd68 100644
--- a/basics/close-account/native/ts/instructions/create.ts
+++ b/basics/close-account/native/ts/instructions/create.ts
@@ -1,66 +1,54 @@
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-import {
- PublicKey,
- SystemProgram,
- TransactionInstruction
-} from '@solana/web3.js';
-import { MyInstruction } from ".";
-
+import { Buffer } from 'node:buffer';
+import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { MyInstruction } from '.';
export class Create {
+ instruction: MyInstruction;
+ name: string;
- instruction: MyInstruction;
- name: string;
+ constructor(props: { instruction: MyInstruction; name: string }) {
+ this.instruction = props.instruction;
+ this.name = props.name;
+ }
- constructor(props: {
- instruction: MyInstruction,
- name: string,
- }) {
- this.instruction = props.instruction;
- this.name = props.name;
- }
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CreateSchema, this));
+ }
- toBuffer() {
- return Buffer.from(borsh.serialize(CreateSchema, this))
- };
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(CreateSchema, Create, buffer);
- };
-};
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(CreateSchema, Create, buffer);
+ }
+}
export const CreateSchema = new Map([
- [ Create, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ['name', 'string'],
- ],
- }]
+ [
+ Create,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['name', 'string'],
+ ],
+ },
+ ],
]);
-export function createCreateUserInstruction(
- target: PublicKey,
- payer: PublicKey,
- programId: PublicKey,
- name: string,
-): TransactionInstruction {
-
- const instructionObject = new Create({
- instruction: MyInstruction.CreateUser,
- name,
- });
-
- const ix = new TransactionInstruction({
- keys: [
- {pubkey: target, isSigner: false, isWritable: true},
- {pubkey: payer, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: programId,
- data: instructionObject.toBuffer(),
- });
-
- return ix;
-}
\ No newline at end of file
+export function createCreateUserInstruction(target: PublicKey, payer: PublicKey, programId: PublicKey, name: string): TransactionInstruction {
+ const instructionObject = new Create({
+ instruction: MyInstruction.CreateUser,
+ name,
+ });
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: target, isSigner: false, isWritable: true },
+ { pubkey: payer, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: programId,
+ data: instructionObject.toBuffer(),
+ });
+
+ return ix;
+}
diff --git a/basics/close-account/native/ts/instructions/index.ts b/basics/close-account/native/ts/instructions/index.ts
index e7a8bf230..630b8a387 100644
--- a/basics/close-account/native/ts/instructions/index.ts
+++ b/basics/close-account/native/ts/instructions/index.ts
@@ -2,6 +2,6 @@ export * from './create';
export * from './close';
export enum MyInstruction {
- CreateUser,
- CloseUser,
-}
\ No newline at end of file
+ CreateUser = 0,
+ CloseUser = 1,
+}
diff --git a/basics/close-account/native/ts/state/index.ts b/basics/close-account/native/ts/state/index.ts
index d8c67fddf..4dad1be41 100644
--- a/basics/close-account/native/ts/state/index.ts
+++ b/basics/close-account/native/ts/state/index.ts
@@ -1,35 +1,34 @@
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-
+import { Buffer } from 'node:buffer';
+import * as borsh from 'borsh';
export class User {
+ name: string;
+ constructor(props: {
name: string;
+ }) {
+ this.name = props.name;
+ }
- constructor(props: {
- name: string,
- }) {
- this.name = props.name;
- }
+ toBase58() {
+ return borsh.serialize(UserSchema, this).toString();
+ }
- toBase58() {
- return borsh.serialize(UserSchema, this).toString()
- };
+ toBuffer() {
+ return Buffer.from(borsh.serialize(UserSchema, this));
+ }
- toBuffer() {
- return Buffer.from(borsh.serialize(UserSchema, this))
- };
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(UserSchema, User, buffer);
- };
-};
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(UserSchema, User, buffer);
+ }
+}
export const UserSchema = new Map([
- [ User, {
- kind: 'struct',
- fields: [
- ['name', 'string'],
- ],
- }]
-]);
\ No newline at end of file
+ [
+ User,
+ {
+ kind: 'struct',
+ fields: [['name', 'string']],
+ },
+ ],
+]);
diff --git a/basics/close-account/native/ts/util/index.ts b/basics/close-account/native/ts/util/index.ts
deleted file mode 100644
index 133b1de3f..000000000
--- a/basics/close-account/native/ts/util/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './util';
\ No newline at end of file
diff --git a/basics/close-account/native/ts/util/util.ts b/basics/close-account/native/ts/util/util.ts
deleted file mode 100644
index aaae07dae..000000000
--- a/basics/close-account/native/ts/util/util.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Keypair } from '@solana/web3.js';
-
-
-export function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
diff --git a/basics/close-account/steel/.gitignore b/basics/close-account/steel/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/close-account/steel/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/close-account/steel/Cargo.toml b/basics/close-account/steel/Cargo.toml
new file mode 100644
index 000000000..8234e1199
--- /dev/null
+++ b/basics/close-account/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+members = ["api", "program"]
+resolver = "2"
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = "https://github.com/solana-developers/program-examples"
+documentation = "https://github.com/solana-developers/program-examples"
+respository = "https://github.com/solana-developers/program-examples"
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+close-account-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/close-account/steel/README.md b/basics/close-account/steel/README.md
new file mode 100644
index 000000000..604146bb9
--- /dev/null
+++ b/basics/close-account/steel/README.md
@@ -0,0 +1,22 @@
+# CloseAccount
+
+**CloseAccount** is a ...
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Event`](api/src/event.rs) – Custom program events.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`Hello`](program/src/hello.rs) – Hello ...
+
+## State
+- [`User`](api/src/state/user.rs) – User ...
+
+## Tests
+
+To run the test suit, use the Solana toolchain:
+```
+cargo test-sbf
+```
diff --git a/basics/close-account/steel/api/Cargo.toml b/basics/close-account/steel/api/Cargo.toml
new file mode 100644
index 000000000..e57d05cf4
--- /dev/null
+++ b/basics/close-account/steel/api/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "close-account-api"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+bytemuck.workspace = true
+jzon = "0.12.5"
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/close-account/steel/api/src/error.rs b/basics/close-account/steel/api/src/error.rs
new file mode 100644
index 000000000..9a0fe19fe
--- /dev/null
+++ b/basics/close-account/steel/api/src/error.rs
@@ -0,0 +1,18 @@
+use steel::*;
+
+/// A [Result] type representing `Result`
+pub type CloseAccountResult = Result;
+
+/// Error handling enum for this create
+#[derive(Debug, Error, Clone, Copy, PartialEq, Eq, IntoPrimitive)]
+#[repr(u32)]
+pub enum CloseAccountError {
+ /// A name can only be 64 bytes in length when converted to bytes
+ #[error("Invalid Name Length. The maximum length of the string is 64 bytes.")]
+ MaxNameLengthExceeded = 0,
+ /// Only UTF-8 String types are supported
+ #[error("Only UTF-8 String encoding is supported")]
+ OnlyUtf8IsSupported = 1,
+}
+
+error!(CloseAccountError);
diff --git a/basics/close-account/steel/api/src/instruction.rs b/basics/close-account/steel/api/src/instruction.rs
new file mode 100644
index 000000000..375cf6f77
--- /dev/null
+++ b/basics/close-account/steel/api/src/instruction.rs
@@ -0,0 +1,25 @@
+use steel::*;
+
+/// Used in generating the discriminats for instructions
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum MyInstruction {
+ /// Create account discriminant represented by `0`
+ CreateAccount = 0,
+ /// Close account discriminant represented by `1`
+ CloseAccount = 1,
+}
+
+/// Create account struct with the name
+/// as an array of 64 bytes
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct CreateAccount(pub [u8; 64]);
+
+/// UsedClose Account
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct CloseAccount;
+
+instruction!(MyInstruction, CreateAccount);
+instruction!(MyInstruction, CloseAccount);
diff --git a/basics/close-account/steel/api/src/lib.rs b/basics/close-account/steel/api/src/lib.rs
new file mode 100644
index 000000000..4485ade1c
--- /dev/null
+++ b/basics/close-account/steel/api/src/lib.rs
@@ -0,0 +1,18 @@
+#![forbid(unsafe_code)]
+
+pub mod error;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::error::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+}
+
+use steel::*;
+
+// Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/basics/close-account/steel/api/src/sdk.rs b/basics/close-account/steel/api/src/sdk.rs
new file mode 100644
index 000000000..9004c8204
--- /dev/null
+++ b/basics/close-account/steel/api/src/sdk.rs
@@ -0,0 +1,31 @@
+use steel::*;
+
+use crate::prelude::*;
+
+/// Create an PDA and store a String in it
+pub fn create_account(signer: Pubkey, user: CreateAccount) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(User::pda(signer).0, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: user.to_bytes(),
+ }
+}
+
+/// Creates an instruction to close the account,
+/// in our case the PDA. The PDA address is derived from
+/// the `payer` public key
+pub fn close_account(signer: Pubkey) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(User::pda(signer).0, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: CloseAccount.to_bytes(),
+ }
+}
diff --git a/basics/close-account/steel/api/src/state/mod.rs b/basics/close-account/steel/api/src/state/mod.rs
new file mode 100644
index 000000000..ba80f7ece
--- /dev/null
+++ b/basics/close-account/steel/api/src/state/mod.rs
@@ -0,0 +1,2 @@
+mod user;
+pub use user::*;
diff --git a/basics/close-account/steel/api/src/state/user.rs b/basics/close-account/steel/api/src/state/user.rs
new file mode 100644
index 000000000..01ac23672
--- /dev/null
+++ b/basics/close-account/steel/api/src/state/user.rs
@@ -0,0 +1,75 @@
+use steel::*;
+
+use crate::error::{CloseAccountError, CloseAccountResult};
+
+/// An enum which is used to derive a discriminator for the user account.
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum UserAccount {
+ /// The user is represented by a discriminator of `0`
+ User = 0,
+}
+
+/// The user Account structure which stores a
+/// `name` as bytes with max array length of u64 due to the
+/// requirement for memory alignment since 64 is a factor of 8.
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct User {
+ /// The name string stored as bytes.
+ /// The `&str` is converted into bytes and copied upto
+ /// the length of the bytes, if the bytes are not 64, it
+ /// pads with zeroes upto 64, if it is more than 64 an error
+ /// is returned.
+ pub name: [u8; 64],
+}
+
+impl User {
+ /// Seed for the [User] used to in PDA generation
+ pub const SEED_PREFIX: &'static str = "USER";
+
+ /// Create a new user, convert the name into bytes
+ /// and add those bytes to a 64 byte array
+ pub fn new(name: &str) -> CloseAccountResult {
+ let name_bytes = name.as_bytes();
+
+ Self::check_length(name_bytes)?;
+
+ let mut name = [0u8; 64];
+ name[0..name_bytes.len()].copy_from_slice(name_bytes);
+
+ Ok(Self { name })
+ }
+
+ /// Converts the byte array into a UTF-8 [str]
+ /// using the `trim_end_matches("\0")` of [str] method
+ /// to remove padded zeroes if any. Padded zeroes are
+ /// represented by `\0`
+ pub fn to_string(&self) -> CloseAccountResult {
+ let value =
+ core::str::from_utf8(&self.name).map_err(|_| CloseAccountError::OnlyUtf8IsSupported)?;
+
+ Ok(value.trim_end_matches("\0").to_string())
+ }
+
+ fn check_length(bytes: &[u8]) -> CloseAccountResult<()> {
+ if bytes.len() > 64 {
+ return Err(CloseAccountError::MaxNameLengthExceeded);
+ }
+
+ Ok(())
+ }
+
+ /// Generate a PDA from the [Self::SEED_PREFIX] constant
+ /// and the payer public key. This returns a tuple struct
+ /// ([Pubkey], [u8])
+ pub fn pda(payer: Pubkey) -> (Pubkey, u8) {
+ Pubkey::try_find_program_address(
+ &[Self::SEED_PREFIX.as_bytes(), payer.as_ref()],
+ &crate::id(),
+ )
+ .unwrap()
+ }
+}
+
+account!(UserAccount, User);
diff --git a/basics/close-account/steel/cicd.sh b/basics/close-account/steel/cicd.sh
new file mode 100644
index 000000000..0903cf896
--- /dev/null
+++ b/basics/close-account/steel/cicd.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This script is for quick building & deploying of the program.
+# It also serves as a reference for the commands used for building & deploying Solana programs.
+# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
+
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/close-account/steel/package.json b/basics/close-account/steel/package.json
new file mode 100644
index 000000000..03bbcb3db
--- /dev/null
+++ b/basics/close-account/steel/package.json
@@ -0,0 +1,18 @@
+{
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./target/so",
+ "deploy": "solana program deploy ./target/so/close_account_program.so"
+ },
+ "dependencies": {
+ "@coral-xyz/borsh": "^0.30.1",
+ "@solana/web3.js": "^1.35"
+ },
+ "devDependencies": {
+ "solana-bankrun": "^0.4.0",
+ "typescript": "^5.6.3",
+ "ts-mocha": "^10.0.0"
+ },
+ "packageManager": "pnpm@9.9.0+sha512.60c18acd138bff695d339be6ad13f7e936eea6745660d4cc4a776d5247c540d0edee1a563695c183a66eb917ef88f2b4feb1fc25f32a7adcadc7aaf3438e99c1"
+}
diff --git a/basics/close-account/steel/pnpm-lock.yaml b/basics/close-account/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..181cae091
--- /dev/null
+++ b/basics/close-account/steel/pnpm-lock.yaml
@@ -0,0 +1,1249 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/borsh':
+ specifier: ^0.30.1
+ version: 0.30.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))
+ '@solana/web3.js':
+ specifier: ^1.35
+ version: 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)
+ devDependencies:
+ solana-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@11.4.0)
+ typescript:
+ specifier: ^5.6.3
+ version: 5.8.3
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@coral-xyz/borsh@0.30.1':
+ resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.8.0':
+ resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ debug@4.4.1:
+ resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@7.0.0:
+ resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==}
+ engines: {node: '>=0.3.1'}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@11.4.0:
+ resolution: {integrity: sha512-O6oi5Y9G6uu8f9iqXR6iKNLWHLRex3PKbmHynfpmUnMJJGrdgXh8ZmS85Ei5KR2Gnl+/gQ9s+Ktv5CqKybNw4A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)
+ bn.js: 5.2.2
+ buffer-layout: 1.2.2
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@5.8.3)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@5.8.3)
+ typescript: 5.8.3
+
+ '@solana/codecs-numbers@2.1.1(typescript@5.8.3)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@5.8.3)
+ '@solana/errors': 2.1.1(typescript@5.8.3)
+ typescript: 5.8.3
+
+ '@solana/errors@2.1.1(typescript@5.8.3)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 5.8.3
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@5.8.3)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.1.0: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ debug@4.4.1(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@7.0.0: {}
+
+ eastasianwidth@0.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ get-caller-file@2.0.5: {}
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ lru-cache@10.4.3: {}
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ minipass@7.1.2: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@11.4.0:
+ dependencies:
+ browser-stdout: 1.3.1
+ chokidar: 4.0.3
+ debug: 4.4.1(supports-color@8.1.1)
+ diff: 7.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 10.4.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ picocolors: 1.1.1
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 17.7.2
+ yargs-parser: 21.1.1
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ package-json-from-dist@1.0.1: {}
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ picocolors@1.1.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@4.1.2: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ signal-exit@4.1.0: {}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@11.4.0):
+ dependencies:
+ mocha: 11.4.0
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ typescript@5.8.3: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/close-account/steel/program/Cargo.toml b/basics/close-account/steel/program/Cargo.toml
new file mode 100644
index 000000000..3c891cda3
--- /dev/null
+++ b/basics/close-account/steel/program/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "close-account-program"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+close-account-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+bs64 = "0.1.2"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/close-account/steel/program/src/close_user.rs b/basics/close-account/steel/program/src/close_user.rs
new file mode 100644
index 000000000..6040a492d
--- /dev/null
+++ b/basics/close-account/steel/program/src/close_user.rs
@@ -0,0 +1,12 @@
+use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult};
+use steel::{ProgramError, *};
+
+pub fn close_user(accounts: &[AccountInfo]) -> ProgramResult {
+ let [payer, target_account, _] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ payer.is_signer()?;
+
+ steel::close_account(target_account, payer)
+}
diff --git a/basics/close-account/steel/program/src/create_user.rs b/basics/close-account/steel/program/src/create_user.rs
new file mode 100644
index 000000000..9c7c166ad
--- /dev/null
+++ b/basics/close-account/steel/program/src/create_user.rs
@@ -0,0 +1,33 @@
+use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult};
+
+use close_account_api::prelude::{CreateAccount, User};
+use steel::{create_account, system_program, AccountInfoValidation, AsAccount, ProgramError};
+
+pub fn create_user(accounts: &[AccountInfo], data: &[u8]) -> ProgramResult {
+ let value = CreateAccount::try_from_bytes(data)?;
+
+ let [payer, target_account, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ payer.is_signer()?;
+
+ target_account.is_empty()?.is_writable()?.has_seeds(
+ &[User::SEED_PREFIX.as_bytes(), payer.key.as_ref()],
+ &close_account_api::ID,
+ )?;
+ system_program.is_program(&system_program::ID)?;
+
+ create_account::(
+ target_account,
+ system_program,
+ payer,
+ &close_account_api::ID,
+ &[User::SEED_PREFIX.as_bytes(), payer.key.as_ref()],
+ )?;
+
+ let user = target_account.as_account_mut::(&close_account_api::ID)?;
+ user.name = value.0;
+
+ Ok(())
+}
diff --git a/basics/close-account/steel/program/src/lib.rs b/basics/close-account/steel/program/src/lib.rs
new file mode 100644
index 000000000..2d07fac82
--- /dev/null
+++ b/basics/close-account/steel/program/src/lib.rs
@@ -0,0 +1,25 @@
+use close_account_api::prelude::*;
+use steel::*;
+
+mod create_user;
+pub(crate) use create_user::*;
+
+mod close_user;
+pub(crate) use close_user::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&close_account_api::ID, program_id, data)?;
+
+ match ix {
+ MyInstruction::CreateAccount => create_user(accounts, data)?,
+ MyInstruction::CloseAccount => close_user(accounts)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/close-account/steel/program/tests/test.rs b/basics/close-account/steel/program/tests/test.rs
new file mode 100644
index 000000000..cb7fcd5f5
--- /dev/null
+++ b/basics/close-account/steel/program/tests/test.rs
@@ -0,0 +1,48 @@
+use close_account_api::prelude::*;
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+use steel::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "close-account",
+ close_account_api::ID,
+ processor!(close_account_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+
+ let name = "foobarbaz";
+ let account = User::new(name).unwrap();
+
+ // Submit initialize transaction.
+ let ix = close_account_api::sdk::create_account(payer.pubkey(), CreateAccount(account.name));
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ let user_pda = User::pda(payer.pubkey()).0;
+ let pda_account = banks.get_account(user_pda).await.unwrap().unwrap();
+ let name_deser = User::try_from_bytes(&pda_account.data).unwrap();
+
+ assert_eq!(pda_account.owner, close_account_api::ID);
+ assert_eq!(name_deser.to_string().unwrap().as_str(), name);
+
+ // Test Closing an Account
+ // Submit initialize transaction.
+ let ix = close_account_api::sdk::close_account(payer.pubkey());
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ let pda_account = banks.get_account(user_pda).await.unwrap();
+
+ assert!(pda_account.is_none());
+}
diff --git a/basics/close-account/steel/tests/close-account.test.ts b/basics/close-account/steel/tests/close-account.test.ts
new file mode 100644
index 000000000..792dd85f1
--- /dev/null
+++ b/basics/close-account/steel/tests/close-account.test.ts
@@ -0,0 +1,35 @@
+import { describe, test } from 'node:test';
+import { PublicKey, Transaction } from '@solana/web3.js';
+import { start } from 'solana-bankrun';
+import { createCloseUserInstruction, createCreateUserInstruction } from '../ts';
+
+describe('Close Account!', async () => {
+ const PROGRAM_ID = new PublicKey('z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35');
+ const context = await start([{ name: 'close_account_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ const testAccountPublicKey = PublicKey.findProgramAddressSync([Buffer.from('USER'), payer.publicKey.toBuffer()], PROGRAM_ID)[0];
+
+ test('Create the account', async () => {
+ const blockhash = context.lastBlockhash;
+ const ix = createCreateUserInstruction(payer.publicKey, testAccountPublicKey, PROGRAM_ID, 'Jacob');
+
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ await client.processTransaction(tx);
+ });
+
+ test('Close the account', async () => {
+ const blockhash = context.lastBlockhash;
+
+ const ix = createCloseUserInstruction(payer.publicKey, testAccountPublicKey, PROGRAM_ID);
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ await client.processTransaction(tx);
+ });
+});
diff --git a/basics/program-derived-addresses/solang/tsconfig.json b/basics/close-account/steel/tests/tsconfig.test.json
similarity index 100%
rename from basics/program-derived-addresses/solang/tsconfig.json
rename to basics/close-account/steel/tests/tsconfig.test.json
diff --git a/basics/close-account/steel/ts/index.ts b/basics/close-account/steel/ts/index.ts
new file mode 100644
index 000000000..32b452fa4
--- /dev/null
+++ b/basics/close-account/steel/ts/index.ts
@@ -0,0 +1 @@
+export * from './instructions';
diff --git a/basics/close-account/steel/ts/instructions/close.ts b/basics/close-account/steel/ts/instructions/close.ts
new file mode 100644
index 000000000..4be2a0d46
--- /dev/null
+++ b/basics/close-account/steel/ts/instructions/close.ts
@@ -0,0 +1,42 @@
+import { Buffer } from 'node:buffer';
+import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
+import { MyInstruction, closeAccountSchema } from '.';
+
+export class Close {
+ instruction: MyInstruction;
+
+ constructor(props: { instruction: MyInstruction }) {
+ this.instruction = props.instruction;
+ }
+
+ toBuffer() {
+ const buffer = Buffer.alloc(1000);
+
+ closeAccountSchema.encode(
+ {
+ CloseUser: '',
+ },
+ buffer,
+ );
+
+ return buffer.subarray(0, closeAccountSchema.getSpan(buffer));
+ }
+}
+
+export function createCloseUserInstruction(payer: PublicKey, target: PublicKey, programId: PublicKey): TransactionInstruction {
+ const instructionObject = new Close({
+ instruction: MyInstruction.CloseUser,
+ });
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer, isSigner: true, isWritable: true },
+ { pubkey: target, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: programId,
+ data: instructionObject.toBuffer(),
+ });
+
+ return ix;
+}
diff --git a/basics/close-account/steel/ts/instructions/create.ts b/basics/close-account/steel/ts/instructions/create.ts
new file mode 100644
index 000000000..fa169313d
--- /dev/null
+++ b/basics/close-account/steel/ts/instructions/create.ts
@@ -0,0 +1,55 @@
+import { Buffer } from 'node:buffer';
+import { PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
+import { MyInstruction, closeAccountSchema } from '.';
+
+export class Create {
+ instruction: MyInstruction;
+ name: string;
+
+ constructor(props: { instruction: MyInstruction; name: string }) {
+ this.instruction = props.instruction;
+ this.name = props.name;
+ }
+
+ toBuffer() {
+ const textBuffer = Buffer.alloc(64);
+ const buffer = Buffer.alloc(1000);
+
+ textBuffer.write('foobarbaz', 0, 'utf-8');
+
+ closeAccountSchema.encode(
+ {
+ CreateUser: Array.from(textBuffer),
+ },
+ buffer,
+ );
+
+ return buffer.subarray(0, closeAccountSchema.getSpan(buffer));
+ }
+}
+
+export function createCreateUserInstruction(payer: PublicKey, target: PublicKey, programId: PublicKey, name: string): TransactionInstruction {
+ const instructionObject = new Create({
+ instruction: MyInstruction.CreateUser,
+ name,
+ });
+
+ const seed = 'USER';
+ const seedBytes = new Uint8Array(seed.split('').map((char) => char.charCodeAt(0)));
+
+ const [pda, _] = PublicKey.findProgramAddressSync([seedBytes, payer.toBuffer()], programId);
+
+ const data = instructionObject.toBuffer();
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer, isSigner: true, isWritable: true },
+ { pubkey: pda, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: programId,
+ data,
+ });
+
+ return ix;
+}
diff --git a/basics/close-account/steel/ts/instructions/index.ts b/basics/close-account/steel/ts/instructions/index.ts
new file mode 100644
index 000000000..ae0c009d1
--- /dev/null
+++ b/basics/close-account/steel/ts/instructions/index.ts
@@ -0,0 +1,11 @@
+export * from './create';
+export * from './close';
+
+import * as borsh from '@coral-xyz/borsh';
+
+export enum MyInstruction {
+ CreateUser = 0,
+ CloseUser = 1,
+}
+
+export const closeAccountSchema = borsh.rustEnum([borsh.struct([borsh.array(borsh.u8(), 64, 'name')], 'CreateUser'), borsh.struct([], 'CloseUser')]);
diff --git a/basics/counter/anchor/Anchor.toml b/basics/counter/anchor/Anchor.toml
index f8eb2170a..644ecc21e 100644
--- a/basics/counter/anchor/Anchor.toml
+++ b/basics/counter/anchor/Anchor.toml
@@ -13,4 +13,4 @@ cluster = "Localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/counter/anchor/Cargo.toml b/basics/counter/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/counter/anchor/Cargo.toml
+++ b/basics/counter/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/counter/anchor/migrations/deploy.ts b/basics/counter/anchor/migrations/deploy.ts
index 82fb175fa..64a1c3599 100644
--- a/basics/counter/anchor/migrations/deploy.ts
+++ b/basics/counter/anchor/migrations/deploy.ts
@@ -2,9 +2,9 @@
// single deploy script that's invoked from the CLI, injecting a provider
// configured from the workspace's Anchor.toml.
-const anchor = require("@coral-xyz/anchor");
+const anchor = require('@coral-xyz/anchor');
-module.exports = async function (provider) {
+module.exports = async (provider) => {
// Configure client to use the provider.
anchor.setProvider(provider);
diff --git a/basics/counter/anchor/package.json b/basics/counter/anchor/package.json
index 7ce74a967..7a2879346 100644
--- a/basics/counter/anchor/package.json
+++ b/basics/counter/anchor/package.json
@@ -4,16 +4,19 @@
"lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
},
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@coral-xyz/anchor": "^0.30.0",
+ "@solana/web3.js": "^1.95.2"
},
"devDependencies": {
- "chai": "^4.3.4",
- "mocha": "^9.0.3",
- "ts-mocha": "^10.0.0",
+ "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",
- "typescript": "^4.3.5",
- "prettier": "^2.6.2"
+ "chai": "^4.3.4",
+ "mocha": "^9.0.3",
+ "prettier": "^2.6.2",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^4.3.5"
}
}
diff --git a/basics/counter/anchor/pnpm-lock.yaml b/basics/counter/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..a687c7d38
--- /dev/null
+++ b/basics/counter/anchor/pnpm-lock.yaml
@@ -0,0 +1,1463 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ prettier@2.8.8: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/counter/anchor/programs/counter_anchor/Cargo.toml b/basics/counter/anchor/programs/counter_anchor/Cargo.toml
index 967533bf3..458c271fb 100644
--- a/basics/counter/anchor/programs/counter_anchor/Cargo.toml
+++ b/basics/counter/anchor/programs/counter_anchor/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "counter_anchor"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/counter/anchor/tests/bankrun.test.ts b/basics/counter/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..4d2ba3f4d
--- /dev/null
+++ b/basics/counter/anchor/tests/bankrun.test.ts
@@ -0,0 +1,47 @@
+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');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+describe('counter_anchor', async () => {
+ // Configure the client to use the anchor-bankrun
+ const context = await startAnchor('', [{ name: 'counter_anchor', programId: PROGRAM_ID }], []);
+ const provider = new BankrunProvider(context);
+
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ // Generate a new keypair for the counter account
+ const counterKeypair = new Keypair();
+
+ it('Initialize Counter', async () => {
+ await program.methods
+ .initializeCounter()
+ .accounts({
+ counter: counterKeypair.publicKey,
+ payer: payer.publicKey,
+ })
+ .signers([counterKeypair])
+ .rpc();
+
+ const currentCount = await program.account.counter.fetch(counterKeypair.publicKey);
+
+ assert(currentCount.count.toNumber() === 0, 'Expected initialized count to be 0');
+ });
+
+ it('Increment Counter', async () => {
+ await program.methods.increment().accounts({ counter: counterKeypair.publicKey }).rpc();
+
+ const currentCount = await program.account.counter.fetch(counterKeypair.publicKey);
+
+ assert(currentCount.count.toNumber() === 1, 'Expected count to be 1');
+ });
+});
diff --git a/basics/counter/anchor/tests/counter_anchor.ts b/basics/counter/anchor/tests/counter_anchor.ts
index b706d8f08..85901abb4 100644
--- a/basics/counter/anchor/tests/counter_anchor.ts
+++ b/basics/counter/anchor/tests/counter_anchor.ts
@@ -1,21 +1,21 @@
-import * as anchor from "@coral-xyz/anchor"
-import { Program } from "@coral-xyz/anchor"
-import { Keypair } from "@solana/web3.js"
-import { assert } from "chai"
-import { CounterAnchor } from "../target/types/counter_anchor"
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import { Keypair } from '@solana/web3.js';
+import { assert } from 'chai';
+import type { CounterAnchor } from '../target/types/counter_anchor';
-describe("counter_anchor", () => {
+describe('counter_anchor', () => {
// Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env()
- anchor.setProvider(provider)
- const payer = provider.wallet as anchor.Wallet
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+ const payer = provider.wallet as anchor.Wallet;
- const program = anchor.workspace.CounterAnchor as Program
+ const program = anchor.workspace.CounterAnchor as Program;
// Generate a new keypair for the counter account
- const counterKeypair = new Keypair()
+ const counterKeypair = new Keypair();
- it("Initialize Counter", async () => {
+ it('Initialize Counter', async () => {
await program.methods
.initializeCounter()
.accounts({
@@ -23,41 +23,26 @@ describe("counter_anchor", () => {
payer: payer.publicKey,
})
.signers([counterKeypair])
- .rpc()
+ .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');
+ });
- it("Increment Counter Again", async () => {
- await program.methods
- .increment()
- .accounts({ counter: counterKeypair.publicKey })
- .rpc()
+ it('Increment Counter Again', 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() === 2, "Expected count to be 2")
- })
-})
+ assert(currentCount.count.toNumber() === 2, 'Expected count to be 2');
+ });
+});
diff --git a/basics/counter/mpl-stack/.solitarc.js b/basics/counter/mpl-stack/.solitarc.js
index 4e9970bff..74dc762c5 100644
--- a/basics/counter/mpl-stack/.solitarc.js
+++ b/basics/counter/mpl-stack/.solitarc.js
@@ -1,16 +1,16 @@
// @ts-check
-const path = require('path');
+const path = require('node:path');
const programDir = path.join(__dirname);
const idlDir = path.join(__dirname, 'idl');
const sdkDir = path.join(__dirname, 'ts', 'generated');
const binaryInstallDir = path.join(__dirname, 'target', 'solita');
module.exports = {
- idlGenerator: 'shank',
- programName: 'counter_mpl_stack',
- programId: 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS',
- idlDir,
- sdkDir,
- binaryInstallDir,
- programDir,
-};
\ No newline at end of file
+ idlGenerator: 'shank',
+ programName: 'counter_mpl_stack',
+ programId: 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS',
+ idlDir,
+ sdkDir,
+ binaryInstallDir,
+ programDir,
+};
diff --git a/basics/counter/mpl-stack/Cargo.toml b/basics/counter/mpl-stack/Cargo.toml
index af5e2a8b2..becdb0f9d 100644
--- a/basics/counter/mpl-stack/Cargo.toml
+++ b/basics/counter/mpl-stack/Cargo.toml
@@ -14,4 +14,4 @@ default = []
[dependencies]
borsh = "0.9"
shank = "0.0.8"
-solana-program = "1.16.10"
+solana-program = "2.1"
diff --git a/basics/counter/mpl-stack/README.md b/basics/counter/mpl-stack/README.md
index c6cd611ef..9a4923707 100644
--- a/basics/counter/mpl-stack/README.md
+++ b/basics/counter/mpl-stack/README.md
@@ -5,9 +5,9 @@ This example program is written using Solana native using MPL stack.
## Setup
-1. Build the program with `cargo build-bpf`
+1. Build the program with `cargo build-sbf`
2. Compile the idl with `shank build`
3. Build the typescript SDK with `yarn solita`
- - Temporarily, we have to modify line 58 in ts/generated/accounts/Counter.ts
+ - Temporarily, we have to modify line 58 in ts/generated/accounts/Counter.ts
to `const accountInfo = await connection.getAccountInfo(address, { commitment: "confirmed" });` in order to allow the tests to pass. In the future versions of Solita, this will be fixed.
4. Run tests with `yarn test`
diff --git a/basics/counter/mpl-stack/idl/counter_mpl_stack.json b/basics/counter/mpl-stack/idl/counter_mpl_stack.json
index d18d8f646..3369f316c 100644
--- a/basics/counter/mpl-stack/idl/counter_mpl_stack.json
+++ b/basics/counter/mpl-stack/idl/counter_mpl_stack.json
@@ -39,4 +39,4 @@
"binaryVersion": "0.0.8",
"libVersion": "0.0.8"
}
-}
\ No newline at end of file
+}
diff --git a/basics/counter/mpl-stack/idl/counter_solana_native.json b/basics/counter/mpl-stack/idl/counter_solana_native.json
index 478bde4a3..97b709b96 100644
--- a/basics/counter/mpl-stack/idl/counter_solana_native.json
+++ b/basics/counter/mpl-stack/idl/counter_solana_native.json
@@ -30,4 +30,4 @@
"origin": "shank",
"address": "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"
}
-}
\ No newline at end of file
+}
diff --git a/basics/counter/mpl-stack/jest.config.js b/basics/counter/mpl-stack/jest.config.js
index 4d51b2a32..3943c3dbb 100644
--- a/basics/counter/mpl-stack/jest.config.js
+++ b/basics/counter/mpl-stack/jest.config.js
@@ -1,6 +1,6 @@
module.exports = {
- preset: 'ts-jest/presets/default',
- testEnvironment: 'node',
- testTimeout: 100000,
- resolver: "ts-jest-resolver",
-};
\ No newline at end of file
+ preset: 'ts-jest/presets/default',
+ testEnvironment: 'node',
+ testTimeout: 100000,
+ resolver: 'ts-jest-resolver',
+};
diff --git a/basics/counter/mpl-stack/tests/counter.test.ts b/basics/counter/mpl-stack/tests/counter.test.ts
index e1afed24a..16e283c14 100644
--- a/basics/counter/mpl-stack/tests/counter.test.ts
+++ b/basics/counter/mpl-stack/tests/counter.test.ts
@@ -1,119 +1,105 @@
+import type { bignum } from '@metaplex-foundation/beet';
import {
- Connection,
- Keypair,
- LAMPORTS_PER_SOL,
- Transaction,
- TransactionInstruction,
- sendAndConfirmTransaction,
- SystemProgram
+ Connection,
+ Keypair,
+ LAMPORTS_PER_SOL,
+ SystemProgram,
+ Transaction,
+ type TransactionInstruction,
+ sendAndConfirmTransaction,
} from '@solana/web3.js';
-import {
- bignum
-} from '@metaplex-foundation/beet';
-import { assert } from 'chai';
import { BN } from 'bn.js';
+import { assert } from 'chai';
-import {
- createIncrementInstruction,
- Counter,
- PROGRAM_ID,
-} from '../ts';
+import { Counter, PROGRAM_ID, createIncrementInstruction } from '../ts';
function convertBignumToNumber(bignum: bignum): number {
- return new BN(bignum).toNumber();
+ return new BN(bignum).toNumber();
}
-describe("Counter Solana Native", () => {
- const connection = new Connection("http://localhost:8899/");
-
- it("Test allocate counter + increment tx", async () => {
- // Randomly generate our wallet
- const payerKeypair = Keypair.generate();
- const payer = payerKeypair.publicKey;
-
- // Randomly generate the account key
- // to sign for setting up the Counter state
- const counterKeypair = Keypair.generate();
- const counter = counterKeypair.publicKey;
-
- // Airdrop our wallet 1 Sol
- await connection.requestAirdrop(payer, LAMPORTS_PER_SOL);
-
- // Create a TransactionInstruction to interact with our counter program
- const allocIx: TransactionInstruction = SystemProgram.createAccount({
- fromPubkey: payer,
- newAccountPubkey: counter,
- lamports: await connection.getMinimumBalanceForRentExemption(Counter.byteSize),
- space: Counter.byteSize,
- programId: PROGRAM_ID
- })
- const incrementIx: TransactionInstruction = createIncrementInstruction({ counter });
- let tx = new Transaction().add(allocIx).add(incrementIx);
-
- // Explicitly set the feePayer to be our wallet (this is set to first signer by default)
- tx.feePayer = payer;
-
- // Fetch a "timestamp" so validators know this is a recent transaction
- tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash;
-
- // Send transaction to network (local network)
- await sendAndConfirmTransaction(
- connection,
- tx,
- [payerKeypair, counterKeypair],
- { skipPreflight: true, commitment: 'confirmed' }
- );
-
- // Get the counter account info from network
- let count = (await Counter.fromAccountAddress(connection, counter)).count;
- assert((new BN(count)).toNumber() === 1, "Expected count to have been 1");
- console.log(`[alloc+increment] count is: ${count}`);
+describe('Counter Solana Native', () => {
+ const connection = new Connection('http://localhost:8899/');
+
+ it('Test allocate counter + increment tx', async () => {
+ // Randomly generate our wallet
+ const payerKeypair = Keypair.generate();
+ const payer = payerKeypair.publicKey;
+
+ // Randomly generate the account key
+ // to sign for setting up the Counter state
+ const counterKeypair = Keypair.generate();
+ const counter = counterKeypair.publicKey;
+
+ // Airdrop our wallet 1 Sol
+ await connection.requestAirdrop(payer, LAMPORTS_PER_SOL);
+
+ // Create a TransactionInstruction to interact with our counter program
+ const allocIx: TransactionInstruction = SystemProgram.createAccount({
+ fromPubkey: payer,
+ newAccountPubkey: counter,
+ lamports: await connection.getMinimumBalanceForRentExemption(Counter.byteSize),
+ space: Counter.byteSize,
+ programId: PROGRAM_ID,
+ });
+ const incrementIx: TransactionInstruction = createIncrementInstruction({
+ counter,
});
- it("Test allocate tx and increment tx", async () => {
- const payerKeypair = Keypair.generate();
- const payer = payerKeypair.publicKey;
-
- const counterKeypair = Keypair.generate();
- const counter = counterKeypair.publicKey;
-
- await connection.requestAirdrop(payer, LAMPORTS_PER_SOL);
-
- // Check allocate tx
- const allocIx: TransactionInstruction = SystemProgram.createAccount({
- fromPubkey: payer,
- newAccountPubkey: counter,
- lamports: await connection.getMinimumBalanceForRentExemption(Counter.byteSize),
- space: Counter.byteSize,
- programId: PROGRAM_ID
- })
- let tx = new Transaction().add(allocIx);
- tx.feePayer = payer;
- tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash;
- await sendAndConfirmTransaction(
- connection,
- tx,
- [payerKeypair, counterKeypair],
- { skipPreflight: true, commitment: 'confirmed' }
- );
-
- let count = (await Counter.fromAccountAddress(connection, counter)).count;
- assert(convertBignumToNumber(count) === 0, "Expected count to have been 0");
- console.log(`[allocate] count is: ${count}`);
-
- // Check increment tx
- const incrementIx: TransactionInstruction = createIncrementInstruction({ counter });
- tx = new Transaction().add(incrementIx);
- tx.feePayer = payer;
- tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash;
- await sendAndConfirmTransaction(
- connection,
- tx,
- [payerKeypair],
- { skipPreflight: true, commitment: 'confirmed' }
- );
-
- count = (await Counter.fromAccountAddress(connection, counter)).count;
- assert(convertBignumToNumber(count) === 1, "Expected count to have been 1");
- console.log(`[increment] count is: ${count}`);
- })
-})
\ No newline at end of file
+ const tx = new Transaction().add(allocIx).add(incrementIx);
+
+ // Explicitly set the feePayer to be our wallet (this is set to first signer by default)
+ tx.feePayer = payer;
+
+ // Fetch a "timestamp" so validators know this is a recent transaction
+ tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash;
+
+ // Send transaction to network (local network)
+ await sendAndConfirmTransaction(connection, tx, [payerKeypair, counterKeypair], { skipPreflight: true, commitment: 'confirmed' });
+
+ // Get the counter account info from network
+ const count = (await Counter.fromAccountAddress(connection, counter)).count;
+ assert(new BN(count).toNumber() === 1, 'Expected count to have been 1');
+ console.log(`[alloc+increment] count is: ${count}`);
+ });
+ it('Test allocate tx and increment tx', async () => {
+ const payerKeypair = Keypair.generate();
+ const payer = payerKeypair.publicKey;
+
+ const counterKeypair = Keypair.generate();
+ const counter = counterKeypair.publicKey;
+
+ await connection.requestAirdrop(payer, LAMPORTS_PER_SOL);
+
+ // Check allocate tx
+ const allocIx: TransactionInstruction = SystemProgram.createAccount({
+ fromPubkey: payer,
+ newAccountPubkey: counter,
+ lamports: await connection.getMinimumBalanceForRentExemption(Counter.byteSize),
+ space: Counter.byteSize,
+ programId: PROGRAM_ID,
+ });
+ let tx = new Transaction().add(allocIx);
+ tx.feePayer = payer;
+ tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash;
+ await sendAndConfirmTransaction(connection, tx, [payerKeypair, counterKeypair], { skipPreflight: true, commitment: 'confirmed' });
+
+ let count = (await Counter.fromAccountAddress(connection, counter)).count;
+ assert(convertBignumToNumber(count) === 0, 'Expected count to have been 0');
+ console.log(`[allocate] count is: ${count}`);
+
+ // Check increment tx
+ const incrementIx: TransactionInstruction = createIncrementInstruction({
+ counter,
+ });
+ tx = new Transaction().add(incrementIx);
+ tx.feePayer = payer;
+ tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash;
+ await sendAndConfirmTransaction(connection, tx, [payerKeypair], {
+ skipPreflight: true,
+ commitment: 'confirmed',
+ });
+
+ count = (await Counter.fromAccountAddress(connection, counter)).count;
+ assert(convertBignumToNumber(count) === 1, 'Expected count to have been 1');
+ console.log(`[increment] count is: ${count}`);
+ });
+});
diff --git a/basics/counter/mpl-stack/ts/generated/accounts/Counter.ts b/basics/counter/mpl-stack/ts/generated/accounts/Counter.ts
index 3ae2bea18..8595a99e1 100644
--- a/basics/counter/mpl-stack/ts/generated/accounts/Counter.ts
+++ b/basics/counter/mpl-stack/ts/generated/accounts/Counter.ts
@@ -5,9 +5,9 @@
* See: https://github.com/metaplex-foundation/solita
*/
-import * as beet from '@metaplex-foundation/beet'
-import * as web3 from '@solana/web3.js'
-import * as beetSolana from '@metaplex-foundation/beet-solana'
+import * as beet from '@metaplex-foundation/beet';
+import * as beetSolana from '@metaplex-foundation/beet-solana';
+import * as web3 from '@solana/web3.js';
/**
* Arguments used to create {@link Counter}
@@ -15,8 +15,8 @@ import * as beetSolana from '@metaplex-foundation/beet-solana'
* @category generated
*/
export type CounterArgs = {
- count: beet.bignum
-}
+ count: beet.bignum;
+};
/**
* Holds the data for the {@link Counter} Account and provides de/serialization
* functionality for that data
@@ -25,24 +25,21 @@ export type CounterArgs = {
* @category generated
*/
export class Counter implements CounterArgs {
- private constructor(readonly count: beet.bignum) { }
+ private constructor(readonly count: beet.bignum) {}
/**
* Creates a {@link Counter} instance from the provided args.
*/
static fromArgs(args: CounterArgs) {
- return new Counter(args.count)
+ return new Counter(args.count);
}
/**
* Deserializes the {@link Counter} from the data of the provided {@link web3.AccountInfo}.
* @returns a tuple of the account data and the offset up to which the buffer was read to obtain it.
*/
- static fromAccountInfo(
- accountInfo: web3.AccountInfo,
- offset = 0
- ): [Counter, number] {
- return Counter.deserialize(accountInfo.data, offset)
+ static fromAccountInfo(accountInfo: web3.AccountInfo, offset = 0): [Counter, number] {
+ return Counter.deserialize(accountInfo.data, offset);
}
/**
@@ -51,15 +48,14 @@ export class Counter implements CounterArgs {
*
* @throws Error if no account info is found at the address or if deserialization fails
*/
- static async fromAccountAddress(
- connection: web3.Connection,
- address: web3.PublicKey
- ): Promise {
- const accountInfo = await connection.getAccountInfo(address, { commitment: "confirmed" });
+ static async fromAccountAddress(connection: web3.Connection, address: web3.PublicKey): Promise {
+ const accountInfo = await connection.getAccountInfo(address, {
+ commitment: 'confirmed',
+ });
if (accountInfo == null) {
- throw new Error(`Unable to find Counter account at ${address}`)
+ throw new Error(`Unable to find Counter account at ${address}`);
}
- return Counter.fromAccountInfo(accountInfo, 0)[0]
+ return Counter.fromAccountInfo(accountInfo, 0)[0];
}
/**
@@ -68,12 +64,8 @@ export class Counter implements CounterArgs {
*
* @param programId - the program that owns the accounts we are filtering
*/
- static gpaBuilder(
- programId: web3.PublicKey = new web3.PublicKey(
- 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS'
- )
- ) {
- return beetSolana.GpaBuilder.fromStruct(programId, counterBeet)
+ static gpaBuilder(programId: web3.PublicKey = new web3.PublicKey('Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS')) {
+ return beetSolana.GpaBuilder.fromStruct(programId, counterBeet);
}
/**
@@ -81,7 +73,7 @@ export class Counter implements CounterArgs {
* @returns a tuple of the account data and the offset up to which the buffer was read to obtain it.
*/
static deserialize(buf: Buffer, offset = 0): [Counter, number] {
- return counterBeet.deserialize(buf, offset)
+ return counterBeet.deserialize(buf, offset);
}
/**
@@ -89,7 +81,7 @@ export class Counter implements CounterArgs {
* @returns a tuple of the created Buffer and the offset up to which the buffer was written to store it.
*/
serialize(): [Buffer, number] {
- return counterBeet.serialize(this)
+ return counterBeet.serialize(this);
}
/**
@@ -97,7 +89,7 @@ export class Counter implements CounterArgs {
* {@link Counter}
*/
static get byteSize() {
- return counterBeet.byteSize
+ return counterBeet.byteSize;
}
/**
@@ -106,14 +98,8 @@ export class Counter implements CounterArgs {
*
* @param connection used to retrieve the rent exemption information
*/
- static async getMinimumBalanceForRentExemption(
- connection: web3.Connection,
- commitment?: web3.Commitment
- ): Promise {
- return connection.getMinimumBalanceForRentExemption(
- Counter.byteSize,
- commitment
- )
+ static async getMinimumBalanceForRentExemption(connection: web3.Connection, commitment?: web3.Commitment): Promise {
+ return connection.getMinimumBalanceForRentExemption(Counter.byteSize, commitment);
}
/**
@@ -121,7 +107,7 @@ export class Counter implements CounterArgs {
* hold {@link Counter} data.
*/
static hasCorrectByteSize(buf: Buffer, offset = 0) {
- return buf.byteLength - offset === Counter.byteSize
+ return buf.byteLength - offset === Counter.byteSize;
}
/**
@@ -131,17 +117,17 @@ export class Counter implements CounterArgs {
pretty() {
return {
count: (() => {
- const x = <{ toNumber: () => number }>this.count
+ const x = <{ toNumber: () => number }>this.count;
if (typeof x.toNumber === 'function') {
try {
- return x.toNumber()
+ return x.toNumber();
} catch (_) {
- return x
+ return x;
}
}
- return x
+ return x;
})(),
- }
+ };
}
}
@@ -149,8 +135,4 @@ export class Counter implements CounterArgs {
* @category Accounts
* @category generated
*/
-export const counterBeet = new beet.BeetStruct(
- [['count', beet.u64]],
- Counter.fromArgs,
- 'Counter'
-)
+export const counterBeet = new beet.BeetStruct([['count', beet.u64]], Counter.fromArgs, 'Counter');
diff --git a/basics/counter/mpl-stack/ts/generated/accounts/index.ts b/basics/counter/mpl-stack/ts/generated/accounts/index.ts
index 302ea1028..cea7bf897 100644
--- a/basics/counter/mpl-stack/ts/generated/accounts/index.ts
+++ b/basics/counter/mpl-stack/ts/generated/accounts/index.ts
@@ -1,5 +1,5 @@
-export * from './Counter'
+export * from './Counter';
-import { Counter } from './Counter'
+import { Counter } from './Counter';
-export const accountProviders = { Counter }
+export const accountProviders = { Counter };
diff --git a/basics/counter/mpl-stack/ts/generated/index.ts b/basics/counter/mpl-stack/ts/generated/index.ts
index d0c93cd6b..984f80fa3 100644
--- a/basics/counter/mpl-stack/ts/generated/index.ts
+++ b/basics/counter/mpl-stack/ts/generated/index.ts
@@ -1,6 +1,6 @@
-import { PublicKey } from '@solana/web3.js'
-export * from './accounts'
-export * from './instructions'
+import { PublicKey } from '@solana/web3.js';
+export * from './accounts';
+export * from './instructions';
/**
* Program address
@@ -8,7 +8,7 @@ export * from './instructions'
* @category constants
* @category generated
*/
-export const PROGRAM_ADDRESS = 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS'
+export const PROGRAM_ADDRESS = 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS';
/**
* Program public key
@@ -16,4 +16,4 @@ export const PROGRAM_ADDRESS = 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS'
* @category constants
* @category generated
*/
-export const PROGRAM_ID = new PublicKey(PROGRAM_ADDRESS)
+export const PROGRAM_ID = new PublicKey(PROGRAM_ADDRESS);
diff --git a/basics/counter/mpl-stack/ts/generated/instructions/Increment.ts b/basics/counter/mpl-stack/ts/generated/instructions/Increment.ts
index 644fc7e84..9f9e542fa 100644
--- a/basics/counter/mpl-stack/ts/generated/instructions/Increment.ts
+++ b/basics/counter/mpl-stack/ts/generated/instructions/Increment.ts
@@ -5,8 +5,8 @@
* See: https://github.com/metaplex-foundation/solita
*/
-import * as beet from '@metaplex-foundation/beet'
-import * as web3 from '@solana/web3.js'
+import * as beet from '@metaplex-foundation/beet';
+import * as web3 from '@solana/web3.js';
/**
* @category Instructions
@@ -14,8 +14,8 @@ import * as web3 from '@solana/web3.js'
* @category generated
*/
export const IncrementStruct = new beet.BeetArgsStruct<{
- instructionDiscriminator: number
-}>([['instructionDiscriminator', beet.u8]], 'IncrementInstructionArgs')
+ instructionDiscriminator: number;
+}>([['instructionDiscriminator', beet.u8]], 'IncrementInstructionArgs');
/**
* Accounts required by the _Increment_ instruction
*
@@ -25,10 +25,10 @@ export const IncrementStruct = new beet.BeetArgsStruct<{
* @category generated
*/
export type IncrementInstructionAccounts = {
- counter: web3.PublicKey
-}
+ counter: web3.PublicKey;
+};
-export const incrementInstructionDiscriminator = 0
+export const incrementInstructionDiscriminator = 0;
/**
* Creates a _Increment_ instruction.
@@ -40,23 +40,23 @@ export const incrementInstructionDiscriminator = 0
*/
export function createIncrementInstruction(
accounts: IncrementInstructionAccounts,
- programId = new web3.PublicKey('Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS')
+ programId = new web3.PublicKey('Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS'),
) {
const [data] = IncrementStruct.serialize({
instructionDiscriminator: incrementInstructionDiscriminator,
- })
+ });
const keys: web3.AccountMeta[] = [
{
pubkey: accounts.counter,
isWritable: true,
isSigner: false,
},
- ]
+ ];
const ix = new web3.TransactionInstruction({
programId,
keys,
data,
- })
- return ix
+ });
+ return ix;
}
diff --git a/basics/counter/mpl-stack/ts/generated/instructions/index.ts b/basics/counter/mpl-stack/ts/generated/instructions/index.ts
index c15f12dbd..b9941ec47 100644
--- a/basics/counter/mpl-stack/ts/generated/instructions/index.ts
+++ b/basics/counter/mpl-stack/ts/generated/instructions/index.ts
@@ -1 +1 @@
-export * from './Increment'
+export * from './Increment';
diff --git a/basics/counter/mpl-stack/ts/index.ts b/basics/counter/mpl-stack/ts/index.ts
index 96ef8122e..69e4e4eb8 100644
--- a/basics/counter/mpl-stack/ts/index.ts
+++ b/basics/counter/mpl-stack/ts/index.ts
@@ -1 +1 @@
-export * from './generated';
\ No newline at end of file
+export * from './generated';
diff --git a/basics/counter/native/Cargo.toml b/basics/counter/native/Cargo.toml
deleted file mode 100644
index 189208bcc..000000000
--- a/basics/counter/native/Cargo.toml
+++ /dev/null
@@ -1,16 +0,0 @@
-[package]
-name = "counter-solana-native"
-version = "0.1.0"
-edition = "2021"
-
-[lib]
-crate-type = ["cdylib", "lib"]
-
-[features]
-no-entrypoint = []
-cpi = ["no-entrypoint"]
-default = []
-
-[dependencies]
-borsh = "0.9"
-solana-program = "1.16.10"
diff --git a/basics/counter/native/README.md b/basics/counter/native/README.md
index 3cf6c3414..6369c41d7 100644
--- a/basics/counter/native/README.md
+++ b/basics/counter/native/README.md
@@ -4,7 +4,7 @@ This example program is written in Solana using only the Solana toolsuite.
## Setup
-1. Build the program with `cargo build-bpf`
+1. Build the program with `cargo build-sbf`
2. Run tests + local validator with `yarn test`
## Debugging
diff --git a/basics/counter/native/jest.config.js b/basics/counter/native/jest.config.js
deleted file mode 100644
index 4d51b2a32..000000000
--- a/basics/counter/native/jest.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
- preset: 'ts-jest/presets/default',
- testEnvironment: 'node',
- testTimeout: 100000,
- resolver: "ts-jest-resolver",
-};
\ No newline at end of file
diff --git a/basics/counter/native/package.json b/basics/counter/native/package.json
index 1d59df861..bc7f404d1 100644
--- a/basics/counter/native/package.json
+++ b/basics/counter/native/package.json
@@ -7,22 +7,22 @@
"license": "Apache-2.0",
"private": false,
"scripts": {
- "start-validator": "solana-test-validator --reset --quiet --bpf-program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS ./target/deploy/counter_solana_native.so",
- "run-tests": "jest tests --detectOpenHandles",
- "test": "start-server-and-test start-validator http://localhost:8899/health run-tests"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"devDependencies": {
- "@types/bn.js": "^5.1.1",
- "@types/jest": "^29.0.0",
- "chai": "^4.3.6",
- "jest": "^29.0.2",
- "start-server-and-test": "^1.14.0",
- "ts-jest": "^28.0.8",
- "ts-jest-resolver": "^2.0.0",
- "ts-node": "^10.9.1",
- "typescript": "^4.8.2"
+ "@types/bn.js": "^5.1.0",
+ "@types/chai": "^4.3.1",
+ "@types/mocha": "^9.1.1",
+ "chai": "^4.3.4",
+ "mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^4.3.5"
},
"dependencies": {
- "@solana/web3.js": "^1.56.2"
+ "@solana/web3.js": "^1.91.4"
}
-}
\ No newline at end of file
+}
diff --git a/basics/counter/native/pnpm-lock.yaml b/basics/counter/native/pnpm-lock.yaml
new file mode 100644
index 000000000..5d5d40850
--- /dev/null
+++ b/basics/counter/native/pnpm-lock.yaml
@@ -0,0 +1,1295 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.91.4
+ version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.24.5':
+ resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.4.0':
+ resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.91.8':
+ resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.0:
+ resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@7.11.0:
+ resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.0:
+ resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.24.5':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.4.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.5
+ '@noble/curves': 1.4.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 7.11.0
+ superstruct: 0.14.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@7.11.0:
+ dependencies:
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.14.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/counter/native/program/Cargo.toml b/basics/counter/native/program/Cargo.toml
new file mode 100644
index 000000000..b9262ffa5
--- /dev/null
+++ b/basics/counter/native/program/Cargo.toml
@@ -0,0 +1,16 @@
+[package]
+name = "counter-solana-native"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[features]
+no-entrypoint = []
+cpi = ["no-entrypoint"]
+default = []
+
+[dependencies]
+borsh = "0.9.3"
+solana-program = "2.0"
diff --git a/basics/counter/native/src/lib.rs b/basics/counter/native/program/src/lib.rs
similarity index 100%
rename from basics/counter/native/src/lib.rs
rename to basics/counter/native/program/src/lib.rs
diff --git a/basics/counter/native/src/state.rs b/basics/counter/native/program/src/state.rs
similarity index 100%
rename from basics/counter/native/src/state.rs
rename to basics/counter/native/program/src/state.rs
diff --git a/basics/counter/native/tests/counter.test.ts b/basics/counter/native/tests/counter.test.ts
index 8ddf7e0c8..4f27cfb5e 100644
--- a/basics/counter/native/tests/counter.test.ts
+++ b/basics/counter/native/tests/counter.test.ts
@@ -1,123 +1,99 @@
-import {
- Connection,
- Keypair,
- LAMPORTS_PER_SOL,
- Transaction,
- TransactionInstruction,
- sendAndConfirmTransaction,
- SystemProgram
-} from '@solana/web3.js';
+import { describe, test } from 'node:test';
+import { Keypair, PublicKey, SystemProgram, Transaction, type TransactionInstruction } from '@solana/web3.js';
import { assert } from 'chai';
-
-import {
- createIncrementInstruction,
- deserializeCounterAccount,
- Counter,
- COUNTER_ACCOUNT_SIZE,
- PROGRAM_ID,
-} from '../ts';
-
-describe("Counter Solana Native", () => {
- const connection = new Connection("http://localhost:8899/");
-
- it("Test allocate counter + increment tx", async () => {
- // Randomly generate our wallet
- const payerKeypair = Keypair.generate();
- const payer = payerKeypair.publicKey;
-
- // Randomly generate the account key
- // to sign for setting up the Counter state
- const counterKeypair = Keypair.generate();
- const counter = counterKeypair.publicKey;
-
- // Airdrop our wallet 1 Sol
- await connection.requestAirdrop(payer, LAMPORTS_PER_SOL);
-
- // Create a TransactionInstruction to interact with our counter program
- const allocIx: TransactionInstruction = SystemProgram.createAccount({
- fromPubkey: payer,
- newAccountPubkey: counter,
- lamports: await connection.getMinimumBalanceForRentExemption(COUNTER_ACCOUNT_SIZE),
- space: COUNTER_ACCOUNT_SIZE,
- programId: PROGRAM_ID
- })
- const incrementIx: TransactionInstruction = createIncrementInstruction({ counter }, {});
- let tx = new Transaction().add(allocIx).add(incrementIx);
-
- // Explicitly set the feePayer to be our wallet (this is set to first signer by default)
- tx.feePayer = payer;
-
- // Fetch a "timestamp" so validators know this is a recent transaction
- tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash;
-
- // Send transaction to network (local network)
- await sendAndConfirmTransaction(
- connection,
- tx,
- [payerKeypair, counterKeypair],
- { skipPreflight: true, commitment: 'confirmed' }
- );
-
- // Get the counter account info from network
- const counterAccountInfo = await connection.getAccountInfo(counter, { commitment: "confirmed" });
- assert(counterAccountInfo, "Expected counter account to have been created");
-
- // Deserialize the counter & check count has been incremented
- const counterAccount = deserializeCounterAccount(counterAccountInfo.data);
- assert(counterAccount.count.toNumber() === 1, "Expected count to have been 1");
- console.log(`[alloc+increment] count is: ${counterAccount.count.toNumber()}`);
+import { start } from 'solana-bankrun';
+import { COUNTER_ACCOUNT_SIZE, PROGRAM_ID, createIncrementInstruction, deserializeCounterAccount } from '../ts';
+
+describe('Counter Solana Native', async () => {
+ // Randomly generate the program keypair and load the program to solana-bankrun
+ const context = await start([{ name: 'counter_solana_native', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ // Get the payer keypair from the context, this will be used to sign transactions with enough lamports
+ const payer = context.payer;
+ // Get the rent object to calculate rent for the accounts
+ const rent = await client.getRent();
+
+ test('Test allocate counter + increment tx', async () => {
+ // Randomly generate the account key
+ // to sign for setting up the Counter state
+ const counterKeypair = Keypair.generate();
+ const counter = counterKeypair.publicKey;
+
+ // Create a TransactionInstruction to interact with our counter program
+ const allocIx: TransactionInstruction = SystemProgram.createAccount({
+ fromPubkey: payer.publicKey,
+ newAccountPubkey: counter,
+ lamports: Number(rent.minimumBalance(BigInt(COUNTER_ACCOUNT_SIZE))),
+ space: COUNTER_ACCOUNT_SIZE,
+ programId: PROGRAM_ID,
+ });
+ const incrementIx: TransactionInstruction = createIncrementInstruction({ counter }, {});
+ const tx = new Transaction().add(allocIx).add(incrementIx);
+
+ // Explicitly set the feePayer to be our wallet (this is set to first signer by default)
+ tx.feePayer = payer.publicKey;
+
+ // Fetch a "timestamp" so validators know this is a recent transaction
+ const blockhash = context.lastBlockhash;
+ tx.recentBlockhash = blockhash;
+
+ // Sign the transaction with the payer's keypair
+ tx.sign(payer, counterKeypair);
+
+ // Send transaction to bankrun
+ await client.processTransaction(tx);
+
+ // Get the counter account info from network
+ const counterAccountInfo = await client.getAccount(counter);
+ assert(counterAccountInfo, 'Expected counter account to have been created');
+
+ // Deserialize the counter & check count has been incremented
+ const counterAccount = deserializeCounterAccount(Buffer.from(counterAccountInfo.data));
+ assert(counterAccount.count.toNumber() === 1, 'Expected count to have been 1');
+ console.log(`[alloc+increment] count is: ${counterAccount.count.toNumber()}`);
+ });
+
+ test('Test allocate tx and increment tx', async () => {
+ const counterKeypair = Keypair.generate();
+ const counter = counterKeypair.publicKey;
+
+ // Check allocate tx
+ const allocIx: TransactionInstruction = SystemProgram.createAccount({
+ fromPubkey: payer.publicKey,
+ newAccountPubkey: counter,
+ lamports: Number(rent.minimumBalance(BigInt(COUNTER_ACCOUNT_SIZE))),
+ space: COUNTER_ACCOUNT_SIZE,
+ programId: PROGRAM_ID,
});
- it("Test allocate tx and increment tx", async () => {
- const payerKeypair = Keypair.generate();
- const payer = payerKeypair.publicKey;
-
- const counterKeypair = Keypair.generate();
- const counter = counterKeypair.publicKey;
-
- await connection.requestAirdrop(payer, LAMPORTS_PER_SOL);
-
- // Check allocate tx
- const allocIx: TransactionInstruction = SystemProgram.createAccount({
- fromPubkey: payer,
- newAccountPubkey: counter,
- lamports: await connection.getMinimumBalanceForRentExemption(COUNTER_ACCOUNT_SIZE),
- space: COUNTER_ACCOUNT_SIZE,
- programId: PROGRAM_ID
- })
- let tx = new Transaction().add(allocIx);
- tx.feePayer = payer;
- tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash;
- await sendAndConfirmTransaction(
- connection,
- tx,
- [payerKeypair, counterKeypair],
- { skipPreflight: true, commitment: 'confirmed' }
- );
-
- let counterAccountInfo = await connection.getAccountInfo(counter, { commitment: "confirmed" });
- assert(counterAccountInfo, "Expected counter account to have been created");
-
- let counterAccount = deserializeCounterAccount(counterAccountInfo.data);
- assert(counterAccount.count.toNumber() === 0, "Expected count to have been 0");
- console.log(`[allocate] count is: ${counterAccount.count.toNumber()}`);
-
- // Check increment tx
- const incrementIx: TransactionInstruction = createIncrementInstruction({ counter }, {});
- tx = new Transaction().add(incrementIx);
- tx.feePayer = payer;
- tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash;
- await sendAndConfirmTransaction(
- connection,
- tx,
- [payerKeypair],
- { skipPreflight: true, commitment: 'confirmed' }
- );
-
- counterAccountInfo = await connection.getAccountInfo(counter, { commitment: "confirmed" });
- assert(counterAccountInfo, "Expected counter account to have been created");
-
- counterAccount = deserializeCounterAccount(counterAccountInfo.data);
- assert(counterAccount.count.toNumber() === 1, "Expected count to have been 1");
- console.log(`[increment] count is: ${counterAccount.count.toNumber()}`);
- })
-})
\ No newline at end of file
+ let tx = new Transaction().add(allocIx);
+ const blockhash = context.lastBlockhash;
+ tx.feePayer = payer.publicKey;
+ tx.recentBlockhash = blockhash;
+ tx.sign(payer, counterKeypair);
+
+ await client.processTransaction(tx);
+
+ let counterAccountInfo = await client.getAccount(counter);
+ assert(counterAccountInfo, 'Expected counter account to have been created');
+
+ let counterAccount = deserializeCounterAccount(Buffer.from(counterAccountInfo.data));
+ assert(counterAccount.count.toNumber() === 0, 'Expected count to have been 0');
+ console.log(`[allocate] count is: ${counterAccount.count.toNumber()}`);
+
+ // Check increment tx
+ const incrementIx: TransactionInstruction = createIncrementInstruction({ counter }, {});
+ tx = new Transaction().add(incrementIx);
+ tx.feePayer = payer.publicKey;
+ tx.recentBlockhash = blockhash;
+ tx.sign(payer);
+
+ await client.processTransaction(tx);
+
+ counterAccountInfo = await client.getAccount(counter);
+ assert(counterAccountInfo, 'Expected counter account to have been created');
+
+ counterAccount = deserializeCounterAccount(Buffer.from(counterAccountInfo.data));
+ assert(counterAccount.count.toNumber() === 1, 'Expected count to have been 1');
+ console.log(`[increment] count is: ${counterAccount.count.toNumber()}`);
+ });
+});
diff --git a/tokens/token-2022/transfer-fees/native/tsconfig.json b/basics/counter/native/tests/tsconfig.test.json
similarity index 100%
rename from tokens/token-2022/transfer-fees/native/tsconfig.json
rename to basics/counter/native/tests/tsconfig.test.json
diff --git a/basics/counter/native/ts/accounts/counter.ts b/basics/counter/native/ts/accounts/counter.ts
index 678fed04f..04b7f4844 100644
--- a/basics/counter/native/ts/accounts/counter.ts
+++ b/basics/counter/native/ts/accounts/counter.ts
@@ -1,17 +1,17 @@
-import * as BN from 'bn.js';
+import BN from 'bn.js';
export type Counter = {
- count: BN
-}
+ count: BN;
+};
export const COUNTER_ACCOUNT_SIZE = 8;
export function deserializeCounterAccount(data: Buffer): Counter {
- if (data.byteLength !== 8) {
- throw Error("Need exactly 8 bytes to deserialize counter")
- }
+ if (data.byteLength !== 8) {
+ throw Error('Need exactly 8 bytes to deserialize counter');
+ }
- return {
- count: new BN(data, 'le')
- }
-}
\ No newline at end of file
+ return {
+ count: new BN(data, 'le'),
+ };
+}
diff --git a/basics/counter/native/ts/accounts/index.ts b/basics/counter/native/ts/accounts/index.ts
index ff26daca0..0ab63758b 100644
--- a/basics/counter/native/ts/accounts/index.ts
+++ b/basics/counter/native/ts/accounts/index.ts
@@ -1 +1 @@
-export * from './counter';
\ No newline at end of file
+export * from './counter';
diff --git a/basics/counter/native/ts/index.ts b/basics/counter/native/ts/index.ts
index 6db9b6846..49c999a6d 100644
--- a/basics/counter/native/ts/index.ts
+++ b/basics/counter/native/ts/index.ts
@@ -2,4 +2,4 @@ import { PublicKey } from '@solana/web3.js';
export * from './instructions';
export * from './accounts';
-export const PROGRAM_ID = new PublicKey("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
\ No newline at end of file
+export const PROGRAM_ID = new PublicKey('Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS');
diff --git a/basics/counter/native/ts/instructions/createIncrementInstruction.ts b/basics/counter/native/ts/instructions/createIncrementInstruction.ts
index 024f8c036..6e0bf48c4 100644
--- a/basics/counter/native/ts/instructions/createIncrementInstruction.ts
+++ b/basics/counter/native/ts/instructions/createIncrementInstruction.ts
@@ -1,25 +1,20 @@
-import { PublicKey, TransactionInstruction } from '@solana/web3.js';
+import { type PublicKey, TransactionInstruction } from '@solana/web3.js';
import { PROGRAM_ID } from '../';
export type IncrementInstructionAccounts = {
- counter: PublicKey,
-}
-export type IncrementInstructionArgs = {
-}
+ counter: PublicKey;
+};
-export function createIncrementInstruction(
- accounts: IncrementInstructionAccounts,
- args: IncrementInstructionArgs
-): TransactionInstruction {
- return new TransactionInstruction({
- programId: PROGRAM_ID,
- keys: [
- {
- pubkey: accounts.counter,
- isSigner: false,
- isWritable: true
- }
- ],
- data: Buffer.from([0x0])
- })
-}
\ No newline at end of file
+export function createIncrementInstruction(accounts: IncrementInstructionAccounts): TransactionInstruction {
+ return new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [
+ {
+ pubkey: accounts.counter,
+ isSigner: false,
+ isWritable: true,
+ },
+ ],
+ data: Buffer.from([0x0]),
+ });
+}
diff --git a/basics/counter/native/ts/instructions/index.ts b/basics/counter/native/ts/instructions/index.ts
index 749ba1656..a0249a40c 100644
--- a/basics/counter/native/ts/instructions/index.ts
+++ b/basics/counter/native/ts/instructions/index.ts
@@ -1 +1 @@
-export * from './createIncrementInstruction';
\ No newline at end of file
+export * from './createIncrementInstruction';
diff --git a/basics/counter/seahorse/Anchor.toml b/basics/counter/seahorse/Anchor.toml
index 767cb4dd8..93a958348 100644
--- a/basics/counter/seahorse/Anchor.toml
+++ b/basics/counter/seahorse/Anchor.toml
@@ -12,4 +12,4 @@ cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/counter/seahorse/Cargo.toml b/basics/counter/seahorse/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/counter/seahorse/Cargo.toml
+++ b/basics/counter/seahorse/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/counter/seahorse/migrations/deploy.ts b/basics/counter/seahorse/migrations/deploy.ts
index 82fb175fa..64a1c3599 100644
--- a/basics/counter/seahorse/migrations/deploy.ts
+++ b/basics/counter/seahorse/migrations/deploy.ts
@@ -2,9 +2,9 @@
// single deploy script that's invoked from the CLI, injecting a provider
// configured from the workspace's Anchor.toml.
-const anchor = require("@coral-xyz/anchor");
+const anchor = require('@coral-xyz/anchor');
-module.exports = async function (provider) {
+module.exports = async (provider) => {
// Configure client to use the provider.
anchor.setProvider(provider);
diff --git a/basics/counter/seahorse/package.json b/basics/counter/seahorse/package.json
index 7ce74a967..814697ca9 100644
--- a/basics/counter/seahorse/package.json
+++ b/basics/counter/seahorse/package.json
@@ -4,7 +4,7 @@
"lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
},
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@coral-xyz/anchor": "^0.30.0"
},
"devDependencies": {
"chai": "^4.3.4",
diff --git a/basics/counter/seahorse/programs/counter_seahorse/Cargo.toml b/basics/counter/seahorse/programs/counter_seahorse/Cargo.toml
index 4111ce99c..c84b0cba0 100644
--- a/basics/counter/seahorse/programs/counter_seahorse/Cargo.toml
+++ b/basics/counter/seahorse/programs/counter_seahorse/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "counter_seahorse"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
anchor-lang = "0.25.0"
diff --git a/basics/counter/seahorse/tests/counter_seahorse.ts b/basics/counter/seahorse/tests/counter_seahorse.ts
index 7d9c5a159..f0ee9574a 100644
--- a/basics/counter/seahorse/tests/counter_seahorse.ts
+++ b/basics/counter/seahorse/tests/counter_seahorse.ts
@@ -1,21 +1,18 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { Keypair, PublicKey, SystemProgram } from "@solana/web3.js";
-import { assert } from "chai";
-import { CounterSeahorse } from "../target/types/counter_seahorse";
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import { Keypair, PublicKey, SystemProgram } from '@solana/web3.js';
+import { assert } from 'chai';
+import type { CounterSeahorse } from '../target/types/counter_seahorse';
-describe("counter_seahorse", () => {
+describe('counter_seahorse', () => {
// Configure the client to use the local cluster.
anchor.setProvider(anchor.AnchorProvider.env());
const program = anchor.workspace.CounterSeahorse as Program;
- it("Increment counter", async () => {
+ it('Increment counter', async () => {
const seed = 69;
- const counter = PublicKey.findProgramAddressSync(
- [Buffer.from([0x45])],
- program.programId
- )[0];
+ const counter = PublicKey.findProgramAddressSync([Buffer.from([0x45])], program.programId)[0];
// Initialize counter
await program.methods
@@ -33,9 +30,7 @@ describe("counter_seahorse", () => {
})
.rpc();
- const count = (
- await program.account.counter.fetch(counter)
- ).count.toNumber();
- assert(count === 1, "Expected count to be 1");
+ const count = (await program.account.counter.fetch(counter)).count.toNumber();
+ assert(count === 1, 'Expected count to be 1');
});
});
diff --git a/basics/counter/solang/Anchor.toml b/basics/counter/solang/Anchor.toml
deleted file mode 100644
index df009e864..000000000
--- a/basics/counter/solang/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-counter = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/counter/solang/package.json b/basics/counter/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/counter/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/counter/solang/solidity/counter.sol b/basics/counter/solang/solidity/counter.sol
deleted file mode 100644
index 2b4b1e984..000000000
--- a/basics/counter/solang/solidity/counter.sol
+++ /dev/null
@@ -1,23 +0,0 @@
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract counter {
- // The counter value that is stored in the account
- uint64 private count;
-
- // The constructor is used to create a new counter account
- @payer(payer) // The "payer" pays for the counter account creation
- constructor() {
- // Initialize the count to zero
- count = 0;
- }
-
- // Increments the count by one.
- function increment() public {
- count += 1;
- }
-
- // Returns the count value
- function get() public view returns (uint64) {
- return count;
- }
-}
diff --git a/basics/counter/solang/tests/counter.ts b/basics/counter/solang/tests/counter.ts
deleted file mode 100644
index 67138911d..000000000
--- a/basics/counter/solang/tests/counter.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import * as anchor from "@coral-xyz/anchor"
-import { Program } from "@coral-xyz/anchor"
-import { Counter } from "../target/types/counter"
-import { assert } from "chai"
-
-describe("counter", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env()
- anchor.setProvider(provider)
-
- // Generate a new random keypair for the data account.
- const dataAccount = anchor.web3.Keypair.generate()
- const wallet = provider.wallet
-
- const program = anchor.workspace.Counter as Program
-
- it("Is initialized!", async () => {
- // Initialize new Counter account
- const tx = await program.methods
- .new() // wallet.publicKey is the payer for the new account
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([dataAccount]) // dataAccount keypair is a required signer because we're using it to create a new account
- .rpc()
- console.log("Your transaction signature", tx)
-
- // Fetch the counter value
- const val = await program.methods
- .get()
- .accounts({ dataAccount: dataAccount.publicKey })
- .view()
-
- assert(Number(val) === 0)
- console.log("Count:", Number(val))
- })
-
- it("Increment", async () => {
- // Increment the counter
- const tx = await program.methods
- .increment()
- .accounts({ dataAccount: dataAccount.publicKey })
- .rpc()
- console.log("Your transaction signature", tx)
-
- // Fetch the counter value
- const val = await program.methods
- .get()
- .accounts({ dataAccount: dataAccount.publicKey })
- .view()
-
- assert(Number(val) === 1)
- console.log("Count:", Number(val))
- })
-})
diff --git a/basics/counter/solang/tsconfig.json b/basics/counter/solang/tsconfig.json
deleted file mode 100644
index 3c8dd81c7..000000000
--- a/basics/counter/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
- }
-
\ No newline at end of file
diff --git a/basics/counter/steel/.gitignore b/basics/counter/steel/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/counter/steel/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/counter/steel/Cargo.toml b/basics/counter/steel/Cargo.toml
new file mode 100644
index 000000000..c21f7bd6f
--- /dev/null
+++ b/basics/counter/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+respository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+counter-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/counter/steel/README.md b/basics/counter/steel/README.md
new file mode 100644
index 000000000..b554ce305
--- /dev/null
+++ b/basics/counter/steel/README.md
@@ -0,0 +1,25 @@
+# Counter
+
+See the [Counter's README](../README.md) for more information.
+
+## Building
+
+```sh
+cargo build-sbf
+
+```
+## Tests
+
+This project includes both:
+- Rust tests: [`program/tests`](/program/tests) directory.
+- Node.js tests using [Bankrun](https://kevinheavey.github.io/solana-bankrun/): [`tests`](/tests) directory.
+
+```sh
+# rust tests
+cargo test-sbf
+
+# node tests
+pnpm build-and-test # this will also build the program
+#or
+pnpm test # if you have already built the program
+```
diff --git a/basics/counter/steel/api/Cargo.toml b/basics/counter/steel/api/Cargo.toml
new file mode 100644
index 000000000..9baf48efb
--- /dev/null
+++ b/basics/counter/steel/api/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "counter-api"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/counter/steel/api/src/consts.rs b/basics/counter/steel/api/src/consts.rs
new file mode 100644
index 000000000..21895e795
--- /dev/null
+++ b/basics/counter/steel/api/src/consts.rs
@@ -0,0 +1,2 @@
+/// Seed of the counter account PDA.
+pub const COUNTER_SEED: &[u8] = b"counter";
diff --git a/basics/counter/steel/api/src/instruction.rs b/basics/counter/steel/api/src/instruction.rs
new file mode 100644
index 000000000..7011e58ff
--- /dev/null
+++ b/basics/counter/steel/api/src/instruction.rs
@@ -0,0 +1,21 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum CounterInstruction {
+ Initialize = 0,
+ Increment = 1,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Initialize {}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Increment {
+ pub amount: [u8; 8],
+}
+
+instruction!(CounterInstruction, Initialize);
+instruction!(CounterInstruction, Increment);
diff --git a/basics/counter/steel/api/src/lib.rs b/basics/counter/steel/api/src/lib.rs
new file mode 100644
index 000000000..6db8ac73d
--- /dev/null
+++ b/basics/counter/steel/api/src/lib.rs
@@ -0,0 +1,16 @@
+pub mod consts;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/basics/counter/steel/api/src/sdk.rs b/basics/counter/steel/api/src/sdk.rs
new file mode 100644
index 000000000..ad0f6353d
--- /dev/null
+++ b/basics/counter/steel/api/src/sdk.rs
@@ -0,0 +1,29 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn initialize(signer: Pubkey) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(counter_pda().0, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: Initialize {}.to_bytes(),
+ }
+}
+
+pub fn increment(signer: Pubkey, amount: u64) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(counter_pda().0, false),
+ ],
+ data: Increment {
+ amount: amount.to_le_bytes(),
+ }
+ .to_bytes(),
+ }
+}
diff --git a/basics/counter/steel/api/src/state.rs b/basics/counter/steel/api/src/state.rs
new file mode 100644
index 000000000..71890a1fc
--- /dev/null
+++ b/basics/counter/steel/api/src/state.rs
@@ -0,0 +1,22 @@
+use steel::*;
+
+use crate::consts::COUNTER_SEED;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum CounterAccount {
+ Counter = 0,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct Counter {
+ pub value: u64,
+}
+
+account!(CounterAccount, Counter);
+
+/// Fetch PDA of the counter account.
+pub fn counter_pda() -> (Pubkey, u8) {
+ Pubkey::find_program_address(&[COUNTER_SEED], &crate::id())
+}
diff --git a/basics/counter/steel/package.json b/basics/counter/steel/package.json
new file mode 100644
index 000000000..85cb11e72
--- /dev/null
+++ b/basics/counter/steel/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "counter-program",
+ "version": "1.0.0",
+ "description": "Counter program for Solana made with the Steel framework",
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/counter_program.so"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@solana/web3.js": "^1.95.4"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.3.7",
+ "@types/mocha": "10.0.9",
+ "@types/node": "^22.7.4",
+ "borsh": "^2.0.0",
+ "chai": "^4.3.7",
+ "mocha": "10.7.3",
+ "solana-bankrun": "0.4.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "5.6.3"
+ }
+}
diff --git a/basics/counter/steel/pnpm-lock.yaml b/basics/counter/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..363f694b0
--- /dev/null
+++ b/basics/counter/steel/pnpm-lock.yaml
@@ -0,0 +1,1268 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.95.4
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/chai':
+ specifier: ^4.3.7
+ version: 4.3.20
+ '@types/mocha':
+ specifier: 10.0.9
+ version: 10.0.9
+ '@types/node':
+ specifier: ^22.7.4
+ version: 22.7.7
+ borsh:
+ specifier: ^2.0.0
+ version: 2.0.0
+ chai:
+ specifier: ^4.3.7
+ version: 4.5.0
+ mocha:
+ specifier: 10.7.3
+ version: 10.7.3
+ solana-bankrun:
+ specifier: 0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@10.7.3)
+ typescript:
+ specifier: 5.6.3
+ version: 5.6.3
+
+packages:
+
+ '@babel/runtime@7.25.7':
+ resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@10.0.9':
+ resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.7.7':
+ resolution: {integrity: sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ borsh@2.0.0:
+ resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@10.7.3:
+ resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.7':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.7
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.7.7
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@10.0.9': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.7.7':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.7.7
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.7.7
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ borsh@2.0.0: {}
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ debug@4.3.7(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@10.7.3:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.7(supports-color@8.1.1)
+ diff: 5.2.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 8.1.0
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 16.2.0
+ yargs-parser: 20.2.9
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@10.7.3):
+ dependencies:
+ mocha: 10.7.3
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/counter/steel/program/Cargo.toml b/basics/counter/steel/program/Cargo.toml
new file mode 100644
index 000000000..2f103bd2c
--- /dev/null
+++ b/basics/counter/steel/program/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "counter-program"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+counter-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+bs64 = "0.1.2"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/counter/steel/program/src/increment.rs b/basics/counter/steel/program/src/increment.rs
new file mode 100644
index 000000000..a08c27943
--- /dev/null
+++ b/basics/counter/steel/program/src/increment.rs
@@ -0,0 +1,28 @@
+use counter_api::prelude::*;
+use steel::*;
+
+use solana_program::msg;
+
+pub fn process_increment(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ msg!("Processing Increment instruction");
+
+ // Parse args.
+ let args = Increment::try_from_bytes(data)?;
+ let amount = u64::from_le_bytes(args.amount);
+ msg!("Parsed amount: {}", amount);
+
+ // Load accounts.
+ let [signer_info, counter_info] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ signer_info.is_signer()?;
+ let counter = counter_info
+ .as_account_mut::(&counter_api::ID)?
+ .assert_mut(|c| c.value < 100)?;
+
+ // Update state
+ counter.value += amount;
+
+ msg!("Final amount: {}", counter.value);
+ Ok(())
+}
diff --git a/basics/counter/steel/program/src/initialize.rs b/basics/counter/steel/program/src/initialize.rs
new file mode 100644
index 000000000..0ec6b6e0d
--- /dev/null
+++ b/basics/counter/steel/program/src/initialize.rs
@@ -0,0 +1,30 @@
+use counter_api::prelude::*;
+use steel::*;
+
+pub fn process_initialize(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult {
+ // Load accounts.
+ let [signer_info, counter_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ signer_info.is_signer()?;
+ counter_info
+ .is_empty()?
+ .is_writable()?
+ .has_seeds(&[COUNTER_SEED], &counter_api::ID)?;
+ system_program.is_program(&system_program::ID)?;
+
+ // Initialize counter.
+ create_account::(
+ counter_info,
+ system_program,
+ signer_info,
+ &counter_api::ID,
+ &[COUNTER_SEED],
+ )?;
+
+ let counter = counter_info.as_account_mut::(&counter_api::ID)?;
+ counter.value = 0;
+
+ Ok(())
+}
diff --git a/basics/counter/steel/program/src/lib.rs b/basics/counter/steel/program/src/lib.rs
new file mode 100644
index 000000000..e20fad361
--- /dev/null
+++ b/basics/counter/steel/program/src/lib.rs
@@ -0,0 +1,25 @@
+mod increment;
+mod initialize;
+
+use increment::*;
+use initialize::*;
+
+use counter_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&counter_api::ID, program_id, data)?;
+
+ match ix {
+ CounterInstruction::Initialize => process_initialize(accounts, data)?,
+ CounterInstruction::Increment => process_increment(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/counter/steel/program/tests/test.rs b/basics/counter/steel/program/tests/test.rs
new file mode 100644
index 000000000..8262f4b0c
--- /dev/null
+++ b/basics/counter/steel/program/tests/test.rs
@@ -0,0 +1,45 @@
+use counter_api::prelude::*;
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+use steel::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "counter_program",
+ counter_api::ID,
+ processor!(counter_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn should_initialize_and_increment_counter() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+
+ // Submit initialize transaction.
+ let ix = initialize(payer.pubkey());
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Verify counter was initialized.
+ let counter_address = counter_pda().0;
+ let counter_account = banks.get_account(counter_address).await.unwrap().unwrap();
+ let counter = Counter::try_from_bytes(&counter_account.data).unwrap();
+ assert_eq!(counter_account.owner, counter_api::ID);
+ assert_eq!(counter.value, 0);
+
+ // Submit add transaction.
+ let ix = increment(payer.pubkey(), 42);
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Verify counter was incremented.
+ let counter_account = banks.get_account(counter_address).await.unwrap().unwrap();
+ let counter = Counter::try_from_bytes(&counter_account.data).unwrap();
+ assert_eq!(counter.value, 42);
+}
diff --git a/basics/counter/steel/tests/main.test.ts b/basics/counter/steel/tests/main.test.ts
new file mode 100644
index 000000000..c5b69d00c
--- /dev/null
+++ b/basics/counter/steel/tests/main.test.ts
@@ -0,0 +1,103 @@
+import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { assert } from 'chai';
+import { describe, it } from 'mocha';
+import { BanksClient, ProgramTestContext, start } from 'solana-bankrun';
+
+describe('counter program', async () => {
+ const PROGRAM_ID = new PublicKey('z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35');
+
+ let context: ProgramTestContext;
+ let client: BanksClient;
+ let payer: Keypair;
+
+ before(async () => {
+ context = await start([{ name: 'counter_program', programId: PROGRAM_ID }], []);
+ client = context.banksClient;
+ payer = context.payer;
+ });
+
+ it('initialize and increment the counter', async () => {
+ // derive the counter PDA
+ const [counterPDA] = PublicKey.findProgramAddressSync(
+ [Buffer.from('counter')], // seed
+ PROGRAM_ID,
+ );
+
+ const instructionDiscriminators = {
+ initialize: Buffer.from([0]),
+ increment: Buffer.from([1]),
+ };
+
+ // create the initialize instruction
+ const initializeIx = new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: counterPDA, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ data: instructionDiscriminators.initialize,
+ });
+
+ // send the initialize transaction
+ const initializeTx = new Transaction();
+ initializeTx.recentBlockhash = context.lastBlockhash;
+ initializeTx.add(initializeIx).sign(payer);
+
+ // process the transaction
+ await client.processTransaction(initializeTx);
+
+ // fetch the counter account data
+ const accountInfo = await client.getAccount(counterPDA);
+ assert(accountInfo !== null, 'counter account should exist');
+
+ // define the counter schema
+ const counterSchema: borsh.Schema = {
+ struct: { discriminator: 'u64', value: 'u64' },
+ };
+
+ // deserialize the counter account data
+ const counterData = borsh.deserialize(counterSchema, accountInfo?.data) as {
+ value: bigint;
+ };
+
+ // check the counter value is 0
+ assert(counterData.value === BigInt(0), 'counter value should be 0');
+
+ // increment (must be a number between 0 and 255)
+ const amount = BigInt(42);
+ const amountBuffer = Buffer.alloc(8);
+ amountBuffer.writeBigUInt64LE(amount);
+
+ // data for the increment instruction
+ const incrementData = Buffer.concat([instructionDiscriminators.increment, amountBuffer]);
+
+ // create the increment instruction
+ const incrementIx = new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: counterPDA, isSigner: false, isWritable: true },
+ ],
+ data: incrementData,
+ });
+
+ // send the increment transaction
+ const incrementTx = new Transaction();
+ incrementTx.recentBlockhash = context.lastBlockhash;
+ incrementTx.add(incrementIx).sign(payer);
+
+ // process the transaction
+ await client.processTransaction(incrementTx);
+
+ // fetch the counter account data
+ const updatedAccountInfo = await client.getAccount(counterPDA);
+ assert(updatedAccountInfo !== null, 'counter account should exist');
+
+ // deserialize the updated counter account data
+ const updatedCounterData = borsh.deserialize(counterSchema, updatedAccountInfo?.data) as { value: bigint };
+
+ assert(updatedCounterData.value === BigInt(amount), `counter value should be ${amount} but we got ${updatedCounterData.value}`);
+ });
+});
diff --git a/basics/counter/steel/tsconfig.json b/basics/counter/steel/tsconfig.json
new file mode 100644
index 000000000..8c20b2236
--- /dev/null
+++ b/basics/counter/steel/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/basics/create-account/anchor/Anchor.toml b/basics/create-account/anchor/Anchor.toml
index 301bcb9f9..b2d99674b 100644
--- a/basics/create-account/anchor/Anchor.toml
+++ b/basics/create-account/anchor/Anchor.toml
@@ -13,4 +13,4 @@ cluster = "Localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/create-account/anchor/Cargo.toml b/basics/create-account/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/create-account/anchor/Cargo.toml
+++ b/basics/create-account/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/create-account/anchor/package.json b/basics/create-account/anchor/package.json
index ab411155f..67c3dbc37 100644
--- a/basics/create-account/anchor/package.json
+++ b/basics/create-account/anchor/package.json
@@ -1,12 +1,15 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
+ "chai": "^4.4.1",
"mocha": "^9.0.3",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
diff --git a/basics/create-account/anchor/pnpm-lock.yaml b/basics/create-account/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..9b0903214
--- /dev/null
+++ b/basics/create-account/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.4.1
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.5.0':
+ resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.5.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.5.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/create-account/anchor/programs/create-system-account/Cargo.toml b/basics/create-account/anchor/programs/create-system-account/Cargo.toml
index f82b3e3d5..aa40f2778 100644
--- a/basics/create-account/anchor/programs/create-system-account/Cargo.toml
+++ b/basics/create-account/anchor/programs/create-system-account/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "create_system_account"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/create-account/anchor/tests/bankrun.test.ts b/basics/create-account/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..ff602c181
--- /dev/null
+++ b/basics/create-account/anchor/tests/bankrun.test.ts
@@ -0,0 +1,41 @@
+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';
+
+const IDL = require('../target/idl/create_system_account.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 }], []);
+ const provider = new BankrunProvider(context);
+
+ const wallet = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+ const connection = provider.connection;
+
+ it('Create the account', async () => {
+ // Generate a new keypair for the new account
+ const newKeypair = new Keypair();
+
+ await program.methods
+ .createSystemAccount()
+ .accounts({
+ payer: wallet.publicKey,
+ newAccount: newKeypair.publicKey,
+ })
+ .signers([newKeypair])
+ .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(newKeypair.publicKey);
+ assert(accountInfo.lamports === lamports);
+ });
+});
diff --git a/basics/create-account/anchor/tests/test.ts b/basics/create-account/anchor/tests/test.ts
index aff495ad2..42efa5568 100644
--- a/basics/create-account/anchor/tests/test.ts
+++ b/basics/create-account/anchor/tests/test.ts
@@ -1,19 +1,18 @@
-import * as anchor from "@coral-xyz/anchor"
-import { CreateSystemAccount } from "../target/types/create_system_account"
-import { Keypair, SystemProgram } from "@solana/web3.js"
-import { assert } from "chai"
+import * as anchor from '@coral-xyz/anchor';
+import { Keypair, SystemProgram } from '@solana/web3.js';
+import { assert } from 'chai';
+import type { CreateSystemAccount } from '../target/types/create_system_account';
-describe("Create a system account", () => {
- const provider = anchor.AnchorProvider.env()
- anchor.setProvider(provider)
- const wallet = provider.wallet as anchor.Wallet
- const connection = provider.connection
- const program = anchor.workspace
- .CreateSystemAccount as anchor.Program
+describe('Create a system account', () => {
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+ const wallet = provider.wallet as anchor.Wallet;
+ const connection = provider.connection;
+ const program = anchor.workspace.CreateSystemAccount as anchor.Program;
- it("Create the account", async () => {
+ it('Create the account', async () => {
// Generate a new keypair for the new account
- const newKeypair = new Keypair()
+ const newKeypair = new Keypair();
await program.methods
.createSystemAccount()
@@ -22,14 +21,13 @@ describe("Create a system account", () => {
newAccount: newKeypair.publicKey,
})
.signers([newKeypair])
- .rpc()
+ .rpc();
// Minimum balance for rent exemption for new account
- const lamports = await connection.getMinimumBalanceForRentExemption(0)
+ const lamports = await connection.getMinimumBalanceForRentExemption(0);
// Check that the account was created
- const accountInfo = await connection.getAccountInfo(newKeypair.publicKey)
- assert((accountInfo.owner = SystemProgram.programId))
- assert(accountInfo.lamports === lamports)
- })
-})
+ const accountInfo = await connection.getAccountInfo(newKeypair.publicKey);
+ assert(accountInfo.lamports === lamports);
+ });
+});
diff --git a/basics/create-account/native/cicd.sh b/basics/create-account/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/create-account/native/cicd.sh
+++ b/basics/create-account/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/create-account/native/package.json b/basics/create-account/native/package.json
index b71a6ab9b..6de220221 100644
--- a/basics/create-account/native/package.json
+++ b/basics/create-account/native/package.json
@@ -1,10 +1,12 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
- "@solana/web3.js": "^1.47.3",
- "fs": "^0.0.1-security"
+ "@solana/web3.js": "^1.47.3"
},
"devDependencies": {
"@types/bn.js": "^5.1.0",
@@ -12,6 +14,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/create-account/native/pnpm-lock.yaml b/basics/create-account/native/pnpm-lock.yaml
new file mode 100644
index 000000000..315de63a2
--- /dev/null
+++ b/basics/create-account/native/pnpm-lock.yaml
@@ -0,0 +1,1342 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/create-account/native/program/Cargo.toml b/basics/create-account/native/program/Cargo.toml
index a2fd4dba4..7fe65cb8d 100644
--- a/basics/create-account/native/program/Cargo.toml
+++ b/basics/create-account/native/program/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2021"
[dependencies]
-solana-program = "1.16.10"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/create-account/native/tests/test.ts b/basics/create-account/native/tests/test.ts
index 3dbc0293c..951aade69 100644
--- a/basics/create-account/native/tests/test.ts
+++ b/basics/create-account/native/tests/test.ts
@@ -1,68 +1,51 @@
-import {
- Connection,
- Keypair,
- LAMPORTS_PER_SOL,
- PublicKey,
- sendAndConfirmTransaction,
- SystemProgram,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-
-
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
-
-describe("Create a system account", async () => {
-
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/so/program-keypair.json')
+import { describe, test } from 'node:test';
+import { Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { start } from 'solana-bankrun';
+
+describe('Create a system account', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'create_account_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ test('Create the account via a cross program invocation', async () => {
+ const newKeypair = Keypair.generate();
+ const blockhash = context.lastBlockhash;
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: newKeypair.publicKey, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: Buffer.alloc(0),
+ });
- const PROGRAM_ID: PublicKey = program.publicKey;
-
- it("Create the account via a cross program invocation", async () => {
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, newKeypair);
- const newKeypair = Keypair.generate();
+ await client.processTransaction(tx);
+ });
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: payer.publicKey, isSigner: true, isWritable: true},
- {pubkey: newKeypair.publicKey, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: PROGRAM_ID,
- data: Buffer.alloc(0),
- });
+ test('Create the account via direct call to system program', async () => {
+ const newKeypair = Keypair.generate();
+ const blockhash = context.lastBlockhash;
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, newKeypair]
- );
+ const ix = SystemProgram.createAccount({
+ fromPubkey: payer.publicKey,
+ newAccountPubkey: newKeypair.publicKey,
+ lamports: LAMPORTS_PER_SOL,
+ space: 0,
+ programId: SystemProgram.programId,
});
- it("Create the account via direct call to system program", async () => {
-
- const newKeypair = Keypair.generate();
-
- const ix = SystemProgram.createAccount({
- fromPubkey: payer.publicKey,
- newAccountPubkey: newKeypair.publicKey,
- lamports: LAMPORTS_PER_SOL,
- space: 0,
- programId: SystemProgram.programId
- })
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, newKeypair);
- await sendAndConfirmTransaction(connection,
- new Transaction().add(ix),
- [payer, newKeypair]);
-
- console.log(`Account with public key ${newKeypair.publicKey} successfully created`);
- });
+ await client.processTransaction(tx);
+ console.log(`Account with public key ${newKeypair.publicKey} successfully created`);
});
-
\ No newline at end of file
+});
diff --git a/basics/create-account/steel/.gitignore b/basics/create-account/steel/.gitignore
new file mode 100644
index 000000000..1fae5e12b
--- /dev/null
+++ b/basics/create-account/steel/.gitignore
@@ -0,0 +1,3 @@
+target
+test-ledger
+node_modules
diff --git a/basics/create-account/steel/Cargo.toml b/basics/create-account/steel/Cargo.toml
new file mode 100644
index 000000000..09639f0e7
--- /dev/null
+++ b/basics/create-account/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+create-account-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/create-account/steel/README.md b/basics/create-account/steel/README.md
new file mode 100644
index 000000000..e97375294
--- /dev/null
+++ b/basics/create-account/steel/README.md
@@ -0,0 +1,31 @@
+# Steel: Create account
+
+This "create-account" program is written using **Steel**, a framework for writing onchain programs.
+
+## API
+- [`Error`](api/src/error.rs) - Custom defined errors.
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`Initialize`](program/src/initialize.rs) – Initialize the account creation.
+
+## State
+- [`New Account`](api/src/state.rs) – Link account and the struct that stores unique user ID.
+
+## Get started
+
+Compile your program:
+```sh
+pnpm build
+```
+
+Run unit and integration tests:
+```sh
+pnpm test
+```
+
+Do both together:
+```sh
+pnpm build-and-test
+```
diff --git a/basics/create-account/steel/api/Cargo.toml b/basics/create-account/steel/api/Cargo.toml
new file mode 100644
index 000000000..57adea1c1
--- /dev/null
+++ b/basics/create-account/steel/api/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "create-account-api"
+description = "API for interacting with the create account program"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/create-account/steel/api/src/error.rs b/basics/create-account/steel/api/src/error.rs
new file mode 100644
index 000000000..73d8527a0
--- /dev/null
+++ b/basics/create-account/steel/api/src/error.rs
@@ -0,0 +1,12 @@
+use steel::*;
+
+/// Declare custom error enum
+#[derive(Debug, Error, Clone, Copy, PartialEq, Eq, IntoPrimitive)]
+#[repr(u32)]
+pub enum CreateAccountError {
+ /// Discriminator for error is set to '0'
+ #[error("There was an error while creating your account")]
+ AccountCreation = 0,
+}
+
+error!(CreateAccountError);
diff --git a/basics/create-account/steel/api/src/instruction.rs b/basics/create-account/steel/api/src/instruction.rs
new file mode 100644
index 000000000..12df41611
--- /dev/null
+++ b/basics/create-account/steel/api/src/instruction.rs
@@ -0,0 +1,18 @@
+use steel::*;
+
+/// Declare the Instructions enum for create account
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum CreateAccountInstruction {
+ /// Initialize account discriminator set to '0'
+ InitializeAccount = 0,
+}
+
+/// Empty initialize account struct since
+/// no data input is needed
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct InitializeAccount {}
+
+// Link Instructions enum to variant
+instruction!(CreateAccountInstruction, InitializeAccount);
diff --git a/basics/create-account/steel/api/src/lib.rs b/basics/create-account/steel/api/src/lib.rs
new file mode 100644
index 000000000..c5d193a21
--- /dev/null
+++ b/basics/create-account/steel/api/src/lib.rs
@@ -0,0 +1,15 @@
+pub mod error;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::error::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+}
+
+use steel::*;
+
+declare_id!("12rpZ18eGj7BeKvSFRZ45cni97HctTbKziBnW3MsH3NG");
diff --git a/basics/create-account/steel/api/src/sdk.rs b/basics/create-account/steel/api/src/sdk.rs
new file mode 100644
index 000000000..094ddf5d4
--- /dev/null
+++ b/basics/create-account/steel/api/src/sdk.rs
@@ -0,0 +1,15 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn initialize_account(signer: Pubkey, new_account_key: Pubkey) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(new_account_key, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: InitializeAccount {}.to_bytes(),
+ }
+}
diff --git a/basics/create-account/steel/api/src/state.rs b/basics/create-account/steel/api/src/state.rs
new file mode 100644
index 000000000..8cfbd8894
--- /dev/null
+++ b/basics/create-account/steel/api/src/state.rs
@@ -0,0 +1,17 @@
+use steel::*;
+
+/// This enum is used to get a discriminator
+/// for the new account.
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum CreateAccountDiscriminator {
+ NewAccount = 0,
+}
+
+/// This empty struct represents the system account
+/// It contains no data and is used to create a new account
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct NewAccount {}
+
+account!(CreateAccountDiscriminator, NewAccount);
diff --git a/basics/create-account/steel/cicd.sh b/basics/create-account/steel/cicd.sh
new file mode 100755
index 000000000..884f04c83
--- /dev/null
+++ b/basics/create-account/steel/cicd.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# Buld and deploy this program with ease using a single command
+# Run this script with "bash cicd.sh" or "./cicd.sh"
+# Note: Try running "chmod +x cicd.sh" if you face any issues.
+
+# Check if cargo is installed
+if ! command -v cargo &> /dev/null
+then
+ echo "Cargo could not be found. Please install Rust."
+ exit 1
+fi
+
+# Check if solana CLI is installed
+if ! command -v solana &> /dev/null
+then
+ echo "Solana CLI could not be found. Please install Solana."
+ exit 1
+fi
+
+
+# Build
+cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so
+
+# Deploy
+solana program deploy ./program/target/so/create_account_program.so
diff --git a/basics/create-account/steel/package.json b/basics/create-account/steel/package.json
new file mode 100644
index 000000000..009bef7b3
--- /dev/null
+++ b/basics/create-account/steel/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "create-account-program",
+ "version": "1.0.0",
+ "type": "module",
+ "description": "Create an account using the steel framework for Solana",
+ "main": "index.js",
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/create_account_program.so"
+ },
+ "keywords": ["solana"],
+ "author": "",
+ "license": "MIT",
+ "dependencies": {
+ "@solana/web3.js": "^1.95.4"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.3.20",
+ "@types/mocha": "^10.0.9",
+ "@types/node": "^22.8.1",
+ "chai": "^4.5.0",
+ "mocha": "^10.7.3",
+ "solana-bankrun": "^0.4.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^5.6.3"
+ }
+}
diff --git a/basics/create-account/steel/pnpm-lock.yaml b/basics/create-account/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..70aef7f52
--- /dev/null
+++ b/basics/create-account/steel/pnpm-lock.yaml
@@ -0,0 +1,1260 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.95.4
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/chai':
+ specifier: ^4.3.20
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^10.0.9
+ version: 10.0.9
+ '@types/node':
+ specifier: ^22.8.1
+ version: 22.8.1
+ chai:
+ specifier: ^4.5.0
+ version: 4.5.0
+ mocha:
+ specifier: ^10.7.3
+ version: 10.7.3
+ solana-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@10.7.3)
+ typescript:
+ specifier: ^5.6.3
+ version: 5.6.3
+
+packages:
+
+ '@babel/runtime@7.26.0':
+ resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@10.0.9':
+ resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.8.1':
+ resolution: {integrity: sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@10.7.3:
+ resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.26.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.26.0
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.8.1
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@10.0.9': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.8.1':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.8.1
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.8.1
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ debug@4.3.7(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@10.7.3:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.6.0
+ debug: 4.3.7(supports-color@8.1.1)
+ diff: 5.2.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 8.1.0
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 16.2.0
+ yargs-parser: 20.2.9
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@10.7.3):
+ dependencies:
+ mocha: 10.7.3
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/create-account/steel/program/Cargo.toml b/basics/create-account/steel/program/Cargo.toml
new file mode 100644
index 000000000..f6cc88648
--- /dev/null
+++ b/basics/create-account/steel/program/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "create-account-program"
+description = ""
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+create-account-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
diff --git a/basics/create-account/steel/program/src/initialize.rs b/basics/create-account/steel/program/src/initialize.rs
new file mode 100644
index 000000000..578262f08
--- /dev/null
+++ b/basics/create-account/steel/program/src/initialize.rs
@@ -0,0 +1,45 @@
+use create_account_api::prelude::*;
+use solana_program::msg;
+use steel::sysvar::rent::Rent;
+use steel::*;
+
+pub fn process_initialize(accounts: &[AccountInfo<'_>]) -> ProgramResult {
+ // Load accounts
+ let [payer, new_account, system_program] = accounts else {
+ msg!("Not enough accounts provided");
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ // Validate accounts
+ payer
+ .is_signer()
+ .map_err(|_| ProgramError::MissingRequiredSignature)?;
+
+ new_account.is_signer()?.is_empty()?.is_writable()?;
+
+ system_program.is_program(&system_program::ID)?;
+
+ // The helper "create_account" will create an account
+ // owned by our program and not the system program
+
+ // Calculate the minimum balance needed for the account
+ // Space required is the size of our NewAccount struct
+ let space_required = std::mem::size_of::() as u64;
+ let lamports_required = (Rent::get()?).minimum_balance(space_required as usize);
+
+ // Create the account by invoking a create_account system instruction
+ solana_program::program::invoke(
+ &solana_program::system_instruction::create_account(
+ payer.key,
+ new_account.key,
+ lamports_required,
+ space_required,
+ &system_program::ID,
+ ),
+ &[payer.clone(), new_account.clone(), system_program.clone()],
+ )?;
+
+ msg!("A new account has been created and initialized!");
+
+ Ok(())
+}
diff --git a/basics/create-account/steel/program/src/lib.rs b/basics/create-account/steel/program/src/lib.rs
new file mode 100644
index 000000000..09971e91b
--- /dev/null
+++ b/basics/create-account/steel/program/src/lib.rs
@@ -0,0 +1,24 @@
+mod initialize;
+
+use create_account_api::prelude::*;
+use initialize::*;
+use steel::*;
+
+/// Process the input before sending it over
+/// to our main program to use.
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, _data) = parse_instruction(&create_account_api::ID, program_id, data)?;
+
+ match ix {
+ CreateAccountInstruction::InitializeAccount => process_initialize(accounts)?,
+ }
+
+ Ok(())
+}
+
+// Declare entrypoint for our program
+entrypoint!(process_instruction);
diff --git a/basics/create-account/steel/tests/main.test.ts b/basics/create-account/steel/tests/main.test.ts
new file mode 100644
index 000000000..afea0dca1
--- /dev/null
+++ b/basics/create-account/steel/tests/main.test.ts
@@ -0,0 +1,46 @@
+import { type Blockhash, Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { assert } from 'chai';
+import { before, describe, it } from 'mocha';
+import { type BanksClient, type ProgramTestContext, start } from 'solana-bankrun';
+
+const PROGRAM_ID = new PublicKey('12rpZ18eGj7BeKvSFRZ45cni97HctTbKziBnW3MsH3NG');
+
+const instructionDiscriminators = {
+ InitializeAccount: Buffer.from([0]),
+};
+
+describe('Create a system account', () => {
+ let context: ProgramTestContext;
+ let lastBlock: Blockhash;
+ let client: BanksClient;
+ let payer: Keypair;
+
+ before(async () => {
+ context = await start([{ name: 'create_account_program', programId: PROGRAM_ID }], []);
+ client = context.banksClient;
+ payer = context.payer;
+ lastBlock = context.lastBlockhash;
+ });
+
+ it('should create the account via a cross program invocation', async () => {
+ const newAccount = Keypair.generate();
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: newAccount.publicKey, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: Buffer.concat([instructionDiscriminators.InitializeAccount]),
+ });
+
+ const tx = new Transaction();
+ tx.recentBlockhash = lastBlock;
+ tx.add(ix).sign(payer, newAccount);
+
+ // No other tests required besides confirming if the transaction is processed
+ // Since transactions are atomic, we can be certain the account was created
+ await client.processTransaction(tx);
+ });
+});
diff --git a/basics/create-account/steel/tsconfig.json b/basics/create-account/steel/tsconfig.json
new file mode 100644
index 000000000..f7e571235
--- /dev/null
+++ b/basics/create-account/steel/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "strict": true,
+ "sourceMap": true,
+ "outDir": "./dist",
+ "baseUrl": "."
+ }
+}
diff --git a/basics/cross-program-invocation/anchor/.gitignore b/basics/cross-program-invocation/anchor/.gitignore
new file mode 100644
index 000000000..2e0446b07
--- /dev/null
+++ b/basics/cross-program-invocation/anchor/.gitignore
@@ -0,0 +1,7 @@
+.anchor
+.DS_Store
+target
+**/*.rs.bk
+node_modules
+test-ledger
+.yarn
diff --git a/basics/cross-program-invocation/anchor/.prettierignore b/basics/cross-program-invocation/anchor/.prettierignore
new file mode 100644
index 000000000..414258343
--- /dev/null
+++ b/basics/cross-program-invocation/anchor/.prettierignore
@@ -0,0 +1,7 @@
+.anchor
+.DS_Store
+target
+node_modules
+dist
+build
+test-ledger
diff --git a/basics/cross-program-invocation/anchor/Anchor.toml b/basics/cross-program-invocation/anchor/Anchor.toml
index 43ae901f0..a9d5b8c8c 100644
--- a/basics/cross-program-invocation/anchor/Anchor.toml
+++ b/basics/cross-program-invocation/anchor/Anchor.toml
@@ -1,10 +1,12 @@
+[toolchain]
+
[features]
-seeds = false
+resolution = true
skip-lint = false
[programs.localnet]
-hand = "EJfTLXDCJTVwBgGpz9X2Me4CWHbvg8F8zsM7fiVJLLeR"
-lever = "CABVoybzrbAJSv7QhQd6GXNGKxDMRjw9niqFzizhk6uk"
+hand = "Bi5N7SUQhpGknVcqPTzdFFVueQoxoUu8YTLz75J6fT8A"
+lever = "E64FVeubGC4NPNF2UBJYX4AkrVowf74fRJD9q6YhwstN"
[registry]
url = "https://api.apr.dev/"
@@ -14,4 +16,4 @@ cluster = "Localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/cross-program-invocation/anchor/Cargo.toml b/basics/cross-program-invocation/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/cross-program-invocation/anchor/Cargo.toml
+++ b/basics/cross-program-invocation/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/cross-program-invocation/anchor/idls/lever.json b/basics/cross-program-invocation/anchor/idls/lever.json
new file mode 100644
index 000000000..3ec862d79
--- /dev/null
+++ b/basics/cross-program-invocation/anchor/idls/lever.json
@@ -0,0 +1,68 @@
+{
+ "address": "E64FVeubGC4NPNF2UBJYX4AkrVowf74fRJD9q6YhwstN",
+ "metadata": {
+ "name": "lever",
+ "version": "0.1.0",
+ "spec": "0.1.0",
+ "description": "Created with Anchor"
+ },
+ "instructions": [
+ {
+ "name": "initialize",
+ "discriminator": [175, 175, 109, 31, 13, 152, 155, 237],
+ "accounts": [
+ {
+ "name": "power",
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "user",
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "system_program",
+ "address": "11111111111111111111111111111111"
+ }
+ ],
+ "args": []
+ },
+ {
+ "name": "switch_power",
+ "discriminator": [226, 238, 56, 172, 191, 45, 122, 87],
+ "accounts": [
+ {
+ "name": "power",
+ "writable": true
+ }
+ ],
+ "args": [
+ {
+ "name": "name",
+ "type": "string"
+ }
+ ]
+ }
+ ],
+ "accounts": [
+ {
+ "name": "PowerStatus",
+ "discriminator": [145, 147, 198, 35, 253, 101, 231, 26]
+ }
+ ],
+ "types": [
+ {
+ "name": "PowerStatus",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "is_on",
+ "type": "bool"
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/basics/cross-program-invocation/anchor/migrations/deploy.ts b/basics/cross-program-invocation/anchor/migrations/deploy.ts
new file mode 100644
index 000000000..64a1c3599
--- /dev/null
+++ b/basics/cross-program-invocation/anchor/migrations/deploy.ts
@@ -0,0 +1,12 @@
+// Migrations are an early feature. Currently, they're nothing more than this
+// single deploy script that's invoked from the CLI, injecting a provider
+// configured from the workspace's Anchor.toml.
+
+const anchor = require('@coral-xyz/anchor');
+
+module.exports = async (provider) => {
+ // Configure client to use the provider.
+ anchor.setProvider(provider);
+
+ // Add your deploy script here.
+};
diff --git a/basics/cross-program-invocation/anchor/package.json b/basics/cross-program-invocation/anchor/package.json
index ab411155f..82cf64cbe 100644
--- a/basics/cross-program-invocation/anchor/package.json
+++ b/basics/cross-program-invocation/anchor/package.json
@@ -1,14 +1,22 @@
{
+ "scripts": {
+ "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+ },
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@coral-xyz/anchor": "^0.30.0",
+ "@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",
+ "solana-bankrun": "^0.3.0",
"chai": "^4.3.4",
"mocha": "^9.0.3",
"ts-mocha": "^10.0.0",
- "typescript": "^4.3.5"
+ "@types/bn.js": "^5.1.0",
+ "@types/chai": "^4.3.0",
+ "@types/mocha": "^9.0.0",
+ "typescript": "^4.3.5",
+ "prettier": "^2.6.2"
}
}
diff --git a/basics/cross-program-invocation/anchor/pnpm-lock.yaml b/basics/cross-program-invocation/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..5b0b57556
--- /dev/null
+++ b/basics/cross-program-invocation/anchor/pnpm-lock.yaml
@@ -0,0 +1,1463 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.5.0':
+ resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.5.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.5.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ prettier@2.8.8: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/cross-program-invocation/anchor/programs/hand/Cargo.toml b/basics/cross-program-invocation/anchor/programs/hand/Cargo.toml
index a754d2c90..bdce1eded 100644
--- a/basics/cross-program-invocation/anchor/programs/hand/Cargo.toml
+++ b/basics/cross-program-invocation/anchor/programs/hand/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "cross-program-invocatio-anchor-hand"
+name = "hand"
version = "0.1.0"
description = "Created with Anchor"
edition = "2021"
@@ -9,12 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "hand"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
-cross-program-invocatio-anchor-lever = { path = "../lever", features = ["cpi"] }
+anchor-lang = "0.31.1"
diff --git a/basics/cross-program-invocation/anchor/programs/hand/src/lib.rs b/basics/cross-program-invocation/anchor/programs/hand/src/lib.rs
index 359fe1859..99164d557 100644
--- a/basics/cross-program-invocation/anchor/programs/hand/src/lib.rs
+++ b/basics/cross-program-invocation/anchor/programs/hand/src/lib.rs
@@ -1,29 +1,27 @@
-#![allow(clippy::result_large_err)]
-
use anchor_lang::prelude::*;
-use lever::cpi::accounts::SetPowerStatus;
-use lever::program::Lever;
-use lever::{self, PowerStatus};
-declare_id!("EJfTLXDCJTVwBgGpz9X2Me4CWHbvg8F8zsM7fiVJLLeR");
+declare_id!("Bi5N7SUQhpGknVcqPTzdFFVueQoxoUu8YTLz75J6fT8A");
+
+// automatically generate module using program idl found in ./idls
+declare_program!(lever);
+use lever::accounts::PowerStatus;
+use lever::cpi::accounts::SwitchPower;
+use lever::cpi::switch_power;
+use lever::program::Lever;
#[program]
-mod hand {
+pub mod hand {
use super::*;
- pub fn pull_lever(ctx: Context, name: String) -> anchor_lang::Result<()> {
- // Hitting the switch_power method on the lever program
- //
- lever::cpi::switch_power(
- CpiContext::new(
- ctx.accounts.lever_program.to_account_info(),
- // Using the accounts context struct from the lever program
- //
- SetPowerStatus {
- power: ctx.accounts.power.to_account_info(),
- },
- ),
- name,
- )
+
+ pub fn pull_lever(ctx: Context, name: String) -> Result<()> {
+ let cpi_ctx = CpiContext::new(
+ ctx.accounts.lever_program.to_account_info(),
+ SwitchPower {
+ power: ctx.accounts.power.to_account_info(),
+ },
+ );
+ switch_power(cpi_ctx, name)?;
+ Ok(())
}
}
diff --git a/basics/cross-program-invocation/anchor/programs/lever/Cargo.toml b/basics/cross-program-invocation/anchor/programs/lever/Cargo.toml
index b98c6b5a1..4c6775a5f 100644
--- a/basics/cross-program-invocation/anchor/programs/lever/Cargo.toml
+++ b/basics/cross-program-invocation/anchor/programs/lever/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "cross-program-invocatio-anchor-lever"
+name = "lever"
version = "0.1.0"
description = "Created with Anchor"
edition = "2021"
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "lever"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/cross-program-invocation/anchor/programs/lever/src/lib.rs b/basics/cross-program-invocation/anchor/programs/lever/src/lib.rs
index 4ba180adc..d3ebd3f3c 100644
--- a/basics/cross-program-invocation/anchor/programs/lever/src/lib.rs
+++ b/basics/cross-program-invocation/anchor/programs/lever/src/lib.rs
@@ -1,12 +1,11 @@
-#![allow(clippy::result_large_err)]
-
use anchor_lang::prelude::*;
-declare_id!("CABVoybzrbAJSv7QhQd6GXNGKxDMRjw9niqFzizhk6uk");
+declare_id!("E64FVeubGC4NPNF2UBJYX4AkrVowf74fRJD9q6YhwstN");
#[program]
pub mod lever {
use super::*;
+
pub fn initialize(_ctx: Context) -> Result<()> {
Ok(())
}
diff --git a/basics/cross-program-invocation/anchor/tests/bankrun.test.ts b/basics/cross-program-invocation/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..99fb8576a
--- /dev/null
+++ b/basics/cross-program-invocation/anchor/tests/bankrun.test.ts
@@ -0,0 +1,65 @@
+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 { 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');
+const HAND_PROGRAM_ID = new PublicKey(HAND_IDL.address);
+const LEVER_PROGRAM_ID = new PublicKey(LEVER_IDL.address);
+
+describe('cpi', async () => {
+ const context = await startAnchor(
+ '',
+ [
+ {
+ name: 'hand',
+ programId: HAND_PROGRAM_ID,
+ },
+ {
+ name: 'lever',
+ programId: LEVER_PROGRAM_ID,
+ },
+ ],
+ [],
+ );
+ const provider = new BankrunProvider(context);
+
+ const hand = new anchor.Program(HAND_IDL, provider);
+ const lever = new anchor.Program(LEVER_IDL, provider);
+
+ // Generate a new keypair for the power account
+ const powerAccount = new anchor.web3.Keypair();
+
+ it('Initialize the lever!', async () => {
+ await lever.methods
+ .initialize()
+ .accounts({
+ power: powerAccount.publicKey,
+ user: provider.wallet.publicKey,
+ })
+ .signers([powerAccount])
+ .rpc();
+ });
+
+ it('Pull the lever!', async () => {
+ await hand.methods
+ .pullLever('Chris')
+ .accounts({
+ power: powerAccount.publicKey,
+ })
+ .rpc();
+ });
+
+ it('Pull it again!', async () => {
+ await hand.methods
+ .pullLever('Ashley')
+ .accounts({
+ power: powerAccount.publicKey,
+ })
+ .rpc();
+ });
+});
diff --git a/basics/cross-program-invocation/anchor/tests/cpi.ts b/basics/cross-program-invocation/anchor/tests/cpi.ts
new file mode 100644
index 000000000..fc7e7088e
--- /dev/null
+++ b/basics/cross-program-invocation/anchor/tests/cpi.ts
@@ -0,0 +1,44 @@
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import type { Hand } from '../target/types/hand';
+import type { Lever } from '../target/types/lever';
+
+describe('cpi', () => {
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+
+ const hand = anchor.workspace.Hand as Program;
+ const lever = anchor.workspace.Lever as Program;
+
+ // Generate a new keypair for the power account
+ const powerAccount = new anchor.web3.Keypair();
+
+ it('Initialize the lever!', async () => {
+ await lever.methods
+ .initialize()
+ .accounts({
+ power: powerAccount.publicKey,
+ user: provider.wallet.publicKey,
+ })
+ .signers([powerAccount])
+ .rpc();
+ });
+
+ it('Pull the lever!', async () => {
+ await hand.methods
+ .pullLever('Chris')
+ .accounts({
+ power: powerAccount.publicKey,
+ })
+ .rpc();
+ });
+
+ it('Pull it again!', async () => {
+ await hand.methods
+ .pullLever('Ashley')
+ .accounts({
+ power: powerAccount.publicKey,
+ })
+ .rpc();
+ });
+});
diff --git a/basics/cross-program-invocation/anchor/tests/test.ts b/basics/cross-program-invocation/anchor/tests/test.ts
deleted file mode 100644
index 0a7fd4578..000000000
--- a/basics/cross-program-invocation/anchor/tests/test.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import * as anchor from "@coral-xyz/anchor"
-import { Hand } from "../target/types/hand"
-import { Lever } from "../target/types/lever"
-import { Keypair } from "@solana/web3.js"
-
-describe("CPI Example", () => {
- const provider = anchor.AnchorProvider.env()
- anchor.setProvider(provider)
- const hand = anchor.workspace.Hand as anchor.Program
- const lever = anchor.workspace.Lever as anchor.Program
-
- // Generate a new keypair for the power account
- const powerAccount = new Keypair()
-
- it("Initialize the lever!", async () => {
- await lever.methods
- .initialize()
- .accounts({
- power: powerAccount.publicKey,
- user: provider.wallet.publicKey,
- })
- .signers([powerAccount])
- .rpc()
- })
-
- it("Pull the lever!", async () => {
- await hand.methods
- .pullLever("Chris")
- .accounts({
- power: powerAccount.publicKey,
- leverProgram: lever.programId,
- })
- .rpc()
- })
-
- it("Pull it again!", async () => {
- await hand.methods
- .pullLever("Ashley")
- .accounts({
- power: powerAccount.publicKey,
- leverProgram: lever.programId,
- })
- .rpc()
- })
-})
diff --git a/basics/cross-program-invocation/native/Cargo.toml b/basics/cross-program-invocation/native/Cargo.toml
index a60de986d..946f3922e 100644
--- a/basics/cross-program-invocation/native/Cargo.toml
+++ b/basics/cross-program-invocation/native/Cargo.toml
@@ -2,3 +2,4 @@
members = [
"programs/*"
]
+resolver = "2"
diff --git a/basics/cross-program-invocation/native/cicd.sh b/basics/cross-program-invocation/native/cicd.sh
index ccdee80e1..9fd5e4644 100644
--- a/basics/cross-program-invocation/native/cicd.sh
+++ b/basics/cross-program-invocation/native/cicd.sh
@@ -4,7 +4,7 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --bpf-out-dir=./target/so
+cargo build-sbf --bpf-out-dir=./target/so
echo "Hand:"
solana program deploy ./target/so/hand.so | grep "Program Id:"
echo "Lever:"
diff --git a/basics/cross-program-invocation/native/package.json b/basics/cross-program-invocation/native/package.json
index 34b501b0d..e45629211 100644
--- a/basics/cross-program-invocation/native/package.json
+++ b/basics/cross-program-invocation/native/package.json
@@ -1,6 +1,9 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
"@solana/web3.js": "^1.47.3",
diff --git a/basics/cross-program-invocation/native/pnpm-lock.yaml b/basics/cross-program-invocation/native/pnpm-lock.yaml
new file mode 100644
index 000000000..144f2a383
--- /dev/null
+++ b/basics/cross-program-invocation/native/pnpm-lock.yaml
@@ -0,0 +1,1289 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ borsh:
+ specifier: ^0.7.0
+ version: 0.7.0
+ buffer:
+ specifier: ^6.0.3
+ version: 6.0.3
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/cross-program-invocation/native/programs/hand/Cargo.toml b/basics/cross-program-invocation/native/programs/hand/Cargo.toml
index e90bf570d..c904eb640 100644
--- a/basics/cross-program-invocation/native/programs/hand/Cargo.toml
+++ b/basics/cross-program-invocation/native/programs/hand/Cargo.toml
@@ -10,8 +10,8 @@ cpi = ["no-entrypoint"]
[dependencies]
borsh = "0.10"
borsh-derive = "0.10"
-solana-program = "1.16.10"
-cross-program-invocatio-native-lever = { path = "../lever", features = [ "cpi" ] }
+solana-program = "2.0"
+cross-program-invocatio-native-lever = { path = "../lever", features = ["cpi"] }
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/cross-program-invocation/native/programs/lever/Cargo.toml b/basics/cross-program-invocation/native/programs/lever/Cargo.toml
index 2c7aab55f..893fc8121 100644
--- a/basics/cross-program-invocation/native/programs/lever/Cargo.toml
+++ b/basics/cross-program-invocation/native/programs/lever/Cargo.toml
@@ -10,7 +10,7 @@ cpi = ["no-entrypoint"]
[dependencies]
borsh = "0.10"
borsh-derive = "0.10"
-solana-program = "1.16.10"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/cross-program-invocation/native/tests/test.ts b/basics/cross-program-invocation/native/tests/test.ts
index f5f10e14c..f9e300f95 100644
--- a/basics/cross-program-invocation/native/tests/test.ts
+++ b/basics/cross-program-invocation/native/tests/test.ts
@@ -1,105 +1,78 @@
-import {
- Connection,
- Keypair,
- sendAndConfirmTransaction,
- SystemProgram,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
+import { Buffer } from 'node:buffer';
+import { Connection, Keypair, SystemProgram, Transaction, TransactionInstruction, sendAndConfirmTransaction } from '@solana/web3.js';
+import * as borsh from 'borsh';
function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
+ return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8'))));
+}
+describe('CPI Example', () => {
+ const connection = new Connection('http://localhost:8899/', 'confirmed');
+ const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`);
+ const hand = createKeypairFromFile('./target/so/hand-keypair.json');
+ const lever = createKeypairFromFile('./target/so/lever-keypair.json');
-describe("CPI Example", () => {
-
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const hand = createKeypairFromFile('./target/so/hand-keypair.json');
- const lever = createKeypairFromFile('./target/so/lever-keypair.json');
+ class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+ }
- class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
- };
+ class PowerStatus extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(PowerStatusSchema, this));
+ }
+ }
+ const PowerStatusSchema = new Map([[PowerStatus, { kind: 'struct', fields: [['is_on', 'u8']] }]]);
- class PowerStatus extends Assignable {
- toBuffer() { return Buffer.from(borsh.serialize(PowerStatusSchema, this)) }
- };
- const PowerStatusSchema = new Map([[ PowerStatus, { kind: 'struct', fields: [ ['is_on', 'u8'] ]} ]]);
-
- class SetPowerStatus extends Assignable {
- toBuffer() { return Buffer.from(borsh.serialize(SetPowerStatusSchema, this)) }
- };
- const SetPowerStatusSchema = new Map([[ SetPowerStatus, { kind: 'struct', fields: [ ['name', 'string'] ]} ]]);
-
- const powerAccount = Keypair.generate();
-
- it("Initialize the lever!", async () => {
+ class SetPowerStatus extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(SetPowerStatusSchema, this));
+ }
+ }
+ const SetPowerStatusSchema = new Map([[SetPowerStatus, { kind: 'struct', fields: [['name', 'string']] }]]);
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: powerAccount.publicKey, isSigner: true, isWritable: true},
- {pubkey: payer.publicKey, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: lever.publicKey,
- data: (new PowerStatus({is_on: true})).toBuffer(),
- });
+ const powerAccount = Keypair.generate();
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, powerAccount]
- );
-
+ it('Initialize the lever!', async () => {
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: powerAccount.publicKey, isSigner: true, isWritable: true },
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: lever.publicKey,
+ data: new PowerStatus({ is_on: true }).toBuffer(),
});
-
- it("Pull the lever!", async () => {
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: powerAccount.publicKey, isSigner: false, isWritable: true},
- {pubkey: lever.publicKey, isSigner: false, isWritable: false},
- ],
- programId: hand.publicKey,
- data: new SetPowerStatus({name: "Chris"}).toBuffer(),
- });
+ await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, powerAccount]);
+ });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
-
+ it('Pull the lever!', async () => {
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: powerAccount.publicKey, isSigner: false, isWritable: true },
+ { pubkey: lever.publicKey, isSigner: false, isWritable: false },
+ ],
+ programId: hand.publicKey,
+ data: new SetPowerStatus({ name: 'Chris' }).toBuffer(),
});
-
- it("Pull it again!", async () => {
-
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: powerAccount.publicKey, isSigner: false, isWritable: true},
- {pubkey: lever.publicKey, isSigner: false, isWritable: false},
- ],
- programId: hand.publicKey,
- data: new SetPowerStatus({name: "Ashley"}).toBuffer(),
- });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
-
+ await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]);
+ });
+
+ it('Pull it again!', async () => {
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: powerAccount.publicKey, isSigner: false, isWritable: true },
+ { pubkey: lever.publicKey, isSigner: false, isWritable: false },
+ ],
+ programId: hand.publicKey,
+ data: new SetPowerStatus({ name: 'Ashley' }).toBuffer(),
});
+
+ await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]);
+ });
});
-
-
\ No newline at end of file
diff --git a/basics/cross-program-invocation/solang/Anchor.toml b/basics/cross-program-invocation/solang/Anchor.toml
deleted file mode 100644
index 16b6ca453..000000000
--- a/basics/cross-program-invocation/solang/Anchor.toml
+++ /dev/null
@@ -1,16 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-hand = "9rN5nSQBX1gcbweshWAfRE4Ccv5puJfxUJhqKZ5BEdoP"
-lever = "4wFN9As94uDgcBK9umEi6DNjRLi8gq7jaHwSw3829xq8"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/cross-program-invocation/solang/package.json b/basics/cross-program-invocation/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/cross-program-invocation/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/cross-program-invocation/solang/solidity/hand.sol b/basics/cross-program-invocation/solang/solidity/hand.sol
deleted file mode 100644
index 5c155990e..000000000
--- a/basics/cross-program-invocation/solang/solidity/hand.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-
-import "solana";
-
-// Interface to the lever program.
-leverInterface constant leverProgram = leverInterface(address'4wFN9As94uDgcBK9umEi6DNjRLi8gq7jaHwSw3829xq8');
-interface leverInterface {
- function switchPower(string name) external;
-}
-
-@program_id("9rN5nSQBX1gcbweshWAfRE4Ccv5puJfxUJhqKZ5BEdoP")
-contract hand {
-
- // Creating a data account is required by Solang, but the account is not used in this example.
- // We only interact with the lever program.
- @payer(payer) // payer for the data account
- constructor() {}
-
- // "Pull the lever" by calling the switchPower instruction on the lever program via a Cross Program Invocation.
- function pullLever(address dataAccount, string name) public {
- // The account required by the switchPower instruction.
- // This is the data account created by the lever program (not this program), which stores the state of the switch.
- AccountMeta[1] metas = [
- AccountMeta({pubkey: dataAccount, is_writable: true, is_signer: false})
- ];
-
- // The data required by the switchPower instruction.
- string instructionData = name;
-
- // Invoke the switchPower instruction on the lever program.
- leverProgram.switchPower{accounts: metas}(instructionData);
- }
-}
diff --git a/basics/cross-program-invocation/solang/solidity/lever.sol b/basics/cross-program-invocation/solang/solidity/lever.sol
deleted file mode 100644
index e9b349e39..000000000
--- a/basics/cross-program-invocation/solang/solidity/lever.sol
+++ /dev/null
@@ -1,30 +0,0 @@
-
-@program_id("4wFN9As94uDgcBK9umEi6DNjRLi8gq7jaHwSw3829xq8")
-contract lever {
- // Switch state
- bool private isOn = true;
-
- @payer(payer) // payer for the data account
- constructor() {}
-
- // Switch the power on or off
- function switchPower(string name) public {
- // Flip the switch
- isOn = !isOn;
-
- // Print the name of the person who pulled the switch
- print("{:} is pulling the power switch!".format(name));
-
- // Print the current state of the switch
- if (isOn){
- print("The power is now on.");
- } else {
- print("The power is now off!");
- }
- }
-
- // Get the current state of the switch
- function get() public view returns (bool) {
- return isOn;
- }
-}
diff --git a/basics/cross-program-invocation/solang/tests/test.ts b/basics/cross-program-invocation/solang/tests/test.ts
deleted file mode 100644
index 59e7f7ac9..000000000
--- a/basics/cross-program-invocation/solang/tests/test.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { Lever } from "../target/types/lever";
-import { Hand } from "../target/types/hand";
-
-describe("cross-program-invocation", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- // Generate a new keypair for the data accounts for each program
- const dataAccountLever = anchor.web3.Keypair.generate();
- const dataAccountHand = anchor.web3.Keypair.generate();
- const wallet = provider.wallet;
-
- // The lever program and hand program
- const leverProgram = anchor.workspace.Lever as Program;
- const handProgram = anchor.workspace.Hand as Program;
-
- it("Initialize the lever!", async () => {
- // Initialize data account for the lever program
- const tx = await leverProgram.methods
- .new()
- .accounts({ dataAccount: dataAccountLever.publicKey })
- .signers([dataAccountLever])
- .rpc();
- console.log("Your transaction signature", tx);
-
- // Fetch the state of the data account
- const val = await leverProgram.methods
- .get()
- .accounts({ dataAccount: dataAccountLever.publicKey })
- .view();
-
- console.log("State:", val);
- });
-
- it("Pull the lever!", async () => {
- // Initialize data account for the hand program
- // This is required by Solang, but the account is not used
- const tx = await handProgram.methods
- .new()
- .accounts({ dataAccount: dataAccountHand.publicKey })
- .signers([dataAccountHand])
- .rpc();
- console.log("Your transaction signature", tx);
-
- // Call the pullLever instruction on the hand program, which invokes the lever program via CPI
- const tx2 = await handProgram.methods
- .pullLever(dataAccountLever.publicKey, "Chris")
- .accounts({ dataAccount: dataAccountHand.publicKey })
- .remainingAccounts([
- {
- pubkey: dataAccountLever.publicKey, // The lever program's data account, which stores the state
- isWritable: true,
- isSigner: false,
- },
- {
- pubkey: leverProgram.programId, // The lever program's program ID
- isWritable: false,
- isSigner: false,
- },
- ])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx2);
-
- // Fetch the state of the data account
- const val = await leverProgram.methods
- .get()
- .accounts({ dataAccount: dataAccountLever.publicKey })
- .view();
-
- console.log("State:", val);
- });
-
- it("Pull it again!", async () => {
- // Call the pullLever instruction on the hand program, which invokes the lever program via CPI
- const tx = await handProgram.methods
- .pullLever(dataAccountLever.publicKey, "Ashley")
- .accounts({ dataAccount: dataAccountHand.publicKey })
- .remainingAccounts([
- {
- pubkey: dataAccountLever.publicKey, // The lever program's data account, which stores the state
- isWritable: true,
- isSigner: false,
- },
- {
- pubkey: leverProgram.programId, // The lever program's program ID
- isWritable: false,
- isSigner: false,
- },
- ])
- .rpc({ skipPreflight: true });
-
- console.log("Your transaction signature", tx);
-
- // Fetch the state of the data account
- const val = await leverProgram.methods
- .get()
- .accounts({ dataAccount: dataAccountLever.publicKey })
- .view();
-
- console.log("State:", val);
- });
-});
diff --git a/basics/cross-program-invocation/solang/tsconfig.json b/basics/cross-program-invocation/solang/tsconfig.json
deleted file mode 100644
index 5436e66f2..000000000
--- a/basics/cross-program-invocation/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
-}
-
\ No newline at end of file
diff --git a/basics/cross-program-invocation/steel/README.md b/basics/cross-program-invocation/steel/README.md
new file mode 100644
index 000000000..56465a6e4
--- /dev/null
+++ b/basics/cross-program-invocation/steel/README.md
@@ -0,0 +1,6 @@
+## Cross Program Invocation steel example
+
+### Programs
+
+- [Hand](./hand/README.md)
+- [Lever](./lever/README.md)
diff --git a/basics/cross-program-invocation/steel/hand/.gitignore b/basics/cross-program-invocation/steel/hand/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/cross-program-invocation/steel/hand/Cargo.toml b/basics/cross-program-invocation/steel/hand/Cargo.toml
new file mode 100644
index 000000000..ff6a6ab87
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/Cargo.toml
@@ -0,0 +1,25 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+hand-api = { path = "./api", version = "0.1.0" }
+lever-api = { path = "../lever/api", version = "0.1.0" }
+lever-program = { path = "../lever/program", version = "0.1.0", features = [
+ "cpi",
+] }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/cross-program-invocation/steel/hand/README.md b/basics/cross-program-invocation/steel/hand/README.md
new file mode 100644
index 000000000..6ef2fade1
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/README.md
@@ -0,0 +1,21 @@
+# Hand
+
+**Hand** is a ...
+
+## API
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`PullLever`](program/src/pull_lever.rs) – Pull Lever ...
+
+## Get started
+
+Compile your program:
+```sh
+steel build
+```
+
+Run unit and integration tests:
+```sh
+steel test
+```
diff --git a/basics/cross-program-invocation/steel/hand/api/Cargo.toml b/basics/cross-program-invocation/steel/hand/api/Cargo.toml
new file mode 100644
index 000000000..10404f391
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/api/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "hand-api"
+description = "API for interacting with the Hand program"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
+lever-api.workspace = true
diff --git a/basics/cross-program-invocation/steel/hand/api/src/instruction.rs b/basics/cross-program-invocation/steel/hand/api/src/instruction.rs
new file mode 100644
index 000000000..1bc8f9d96
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/api/src/instruction.rs
@@ -0,0 +1,15 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum HandInstruction {
+ PullLever = 0,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct PullLever {
+ pub name: [u8; 32],
+}
+
+instruction!(HandInstruction, PullLever);
diff --git a/basics/cross-program-invocation/steel/hand/api/src/lib.rs b/basics/cross-program-invocation/steel/hand/api/src/lib.rs
new file mode 100644
index 000000000..ac968003f
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/api/src/lib.rs
@@ -0,0 +1,12 @@
+pub mod instruction;
+pub mod sdk;
+
+pub mod prelude {
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("Bi5N7SUQhpGknVcqPTzdFFVueQoxoUu8YTLz75J6fT8A");
diff --git a/basics/cross-program-invocation/steel/hand/api/src/sdk.rs b/basics/cross-program-invocation/steel/hand/api/src/sdk.rs
new file mode 100644
index 000000000..dd0bd361e
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/api/src/sdk.rs
@@ -0,0 +1,20 @@
+use lever_api::prelude::*;
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn pull_lever(power_account: Pubkey, name: &str) -> Instruction {
+ // pub fn pull_lever(power_account: Pubkey, lever_program: Pubkey, name: &str) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(power_account, false),
+ // AccountMeta::new(lever_program, false),
+ AccountMeta::new_readonly(lever_api::ID, false),
+ ],
+ data: PullLever {
+ name: str_to_bytes(name),
+ }
+ .to_bytes(),
+ }
+}
diff --git a/basics/cross-program-invocation/steel/hand/program/Cargo.toml b/basics/cross-program-invocation/steel/hand/program/Cargo.toml
new file mode 100644
index 000000000..957f017d3
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/program/Cargo.toml
@@ -0,0 +1,28 @@
+[package]
+name = "hand-program"
+description = ""
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+hand-api.workspace = true
+lever-api.workspace = true
+lever-program.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/cross-program-invocation/steel/hand/program/src/lib.rs b/basics/cross-program-invocation/steel/hand/program/src/lib.rs
new file mode 100644
index 000000000..7251912e2
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/program/src/lib.rs
@@ -0,0 +1,22 @@
+mod pull_lever;
+
+use pull_lever::*;
+
+use hand_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&hand_api::ID, program_id, data)?;
+
+ match ix {
+ HandInstruction::PullLever => process_pull_lever(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/cross-program-invocation/steel/hand/program/src/pull_lever.rs b/basics/cross-program-invocation/steel/hand/program/src/pull_lever.rs
new file mode 100644
index 000000000..2668f2d6e
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/program/src/pull_lever.rs
@@ -0,0 +1,22 @@
+use hand_api::prelude::*;
+use lever_api::prelude::*;
+use steel::*;
+
+pub fn process_pull_lever(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ // Parse args.
+ let args = PullLever::try_from_bytes(data)?;
+ let name = bytes_to_str(&args.name);
+
+ // Load accounts.
+ let [power_info, lever_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ power_info.is_writable()?;
+
+ let ix = switch_power(*power_info.key, &name);
+
+ solana_program::program::invoke(&ix, &[power_info.clone(), lever_program.clone()])?;
+
+ Ok(())
+}
diff --git a/basics/cross-program-invocation/steel/hand/program/tests/test.rs b/basics/cross-program-invocation/steel/hand/program/tests/test.rs
new file mode 100644
index 000000000..fc6b34d4e
--- /dev/null
+++ b/basics/cross-program-invocation/steel/hand/program/tests/test.rs
@@ -0,0 +1,51 @@
+use hand_api::prelude::*;
+use lever_api::prelude::*;
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "hand_program",
+ hand_api::ID,
+ processor!(hand_program::process_instruction),
+ );
+
+ program_test.add_program(
+ "lever_program",
+ lever_api::ID,
+ processor!(lever_program::process_instruction),
+ );
+
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+ let power_account = Keypair::new();
+
+ // Submit initialize transaction.
+ let ix = initialize(payer.pubkey(), power_account.pubkey());
+ let tx = Transaction::new_signed_with_payer(
+ &[ix],
+ Some(&payer.pubkey()),
+ &[&payer, &power_account],
+ blockhash,
+ );
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Submit pull_lever transaction.
+ let ix = pull_lever(power_account.pubkey(), "Chris");
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ let ix = pull_lever(power_account.pubkey(), "Ashley");
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+}
diff --git a/basics/cross-program-invocation/steel/lever/.gitignore b/basics/cross-program-invocation/steel/lever/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/cross-program-invocation/steel/lever/Cargo.toml b/basics/cross-program-invocation/steel/lever/Cargo.toml
new file mode 100644
index 000000000..d3ec86678
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+lever-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/cross-program-invocation/steel/lever/README.md b/basics/cross-program-invocation/steel/lever/README.md
new file mode 100644
index 000000000..4b01b5852
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/README.md
@@ -0,0 +1,28 @@
+# Lever
+
+**Lever** is a ...
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Event`](api/src/event.rs) – Custom program events.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`SwitchPower`](program/src/switch_power.rs) – Switch Power ...
+- [`Initialize`](program/src/initialize.rs) – Initialize ...
+
+## State
+- [`PowerStatus`](api/src/state/power_status.rs) – Power status ...
+
+## Get started
+
+Compile your program:
+```sh
+steel build
+```
+
+Run unit and integration tests:
+```sh
+steel test
+```
diff --git a/basics/cross-program-invocation/steel/lever/api/Cargo.toml b/basics/cross-program-invocation/steel/lever/api/Cargo.toml
new file mode 100644
index 000000000..159b3dedf
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/api/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "lever-api"
+description = "API for interacting with the Lever program"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/cross-program-invocation/steel/lever/api/src/consts.rs b/basics/cross-program-invocation/steel/lever/api/src/consts.rs
new file mode 100644
index 000000000..af20c1a11
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/api/src/consts.rs
@@ -0,0 +1,2 @@
+/// Seed of the counter account PDA.
+pub const COUNTER: &[u8] = b"counter";
diff --git a/basics/cross-program-invocation/steel/lever/api/src/error.rs b/basics/cross-program-invocation/steel/lever/api/src/error.rs
new file mode 100644
index 000000000..a6b46c777
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/api/src/error.rs
@@ -0,0 +1,10 @@
+use steel::*;
+
+#[derive(Debug, Error, Clone, Copy, PartialEq, Eq, IntoPrimitive)]
+#[repr(u32)]
+pub enum LeverError {
+ #[error("This is a dummy error")]
+ Dummy = 0,
+}
+
+error!(LeverError);
diff --git a/basics/cross-program-invocation/steel/lever/api/src/instruction.rs b/basics/cross-program-invocation/steel/lever/api/src/instruction.rs
new file mode 100644
index 000000000..45bd9dad3
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/api/src/instruction.rs
@@ -0,0 +1,21 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum LeverInstruction {
+ Initialize = 0,
+ SetPowerStatus = 1,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Initialize {}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct SetPowerStatus {
+ pub name: [u8; 32],
+}
+
+instruction!(LeverInstruction, Initialize);
+instruction!(LeverInstruction, SetPowerStatus);
diff --git a/basics/cross-program-invocation/steel/lever/api/src/lib.rs b/basics/cross-program-invocation/steel/lever/api/src/lib.rs
new file mode 100644
index 000000000..1974d1b96
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/api/src/lib.rs
@@ -0,0 +1,20 @@
+pub mod consts;
+pub mod error;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+pub mod utils;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::error::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+ pub use crate::utils::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("E64FVeubGC4NPNF2UBJYX4AkrVowf74fRJD9q6YhwstN");
diff --git a/basics/cross-program-invocation/steel/lever/api/src/sdk.rs b/basics/cross-program-invocation/steel/lever/api/src/sdk.rs
new file mode 100644
index 000000000..ce5ab8fb3
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/api/src/sdk.rs
@@ -0,0 +1,26 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn initialize(user: Pubkey, power_account: Pubkey) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(user, true),
+ AccountMeta::new(power_account, true),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: Initialize {}.to_bytes(),
+ }
+}
+
+pub fn switch_power(power_account: Pubkey, name: &str) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![AccountMeta::new(power_account, false)],
+ data: SetPowerStatus {
+ name: str_to_bytes(name),
+ }
+ .to_bytes(),
+ }
+}
diff --git a/basics/cross-program-invocation/steel/lever/api/src/state/mod.rs b/basics/cross-program-invocation/steel/lever/api/src/state/mod.rs
new file mode 100644
index 000000000..ae4d12439
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/api/src/state/mod.rs
@@ -0,0 +1,16 @@
+mod power_status;
+
+pub use power_status::*;
+
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum LeverAccount {
+ PowerStatus = 0,
+}
+
+// /// Fetch PDA of the counter account.
+// pub fn counter_pda() -> (Pubkey, u8) {
+// Pubkey::find_program_address(&[COUNTER], &crate::id())
+// }
diff --git a/basics/cross-program-invocation/steel/lever/api/src/state/power_status.rs b/basics/cross-program-invocation/steel/lever/api/src/state/power_status.rs
new file mode 100644
index 000000000..b30fc5c69
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/api/src/state/power_status.rs
@@ -0,0 +1,11 @@
+use steel::*;
+
+use super::LeverAccount;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct PowerStatus {
+ pub is_on: u8,
+}
+
+account!(LeverAccount, PowerStatus);
diff --git a/basics/cross-program-invocation/steel/lever/api/src/utils.rs b/basics/cross-program-invocation/steel/lever/api/src/utils.rs
new file mode 100644
index 000000000..d39d4b0a8
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/api/src/utils.rs
@@ -0,0 +1,13 @@
+pub fn str_to_bytes(name: &str) -> [u8; 32] {
+ let mut name_bytes = [0u8; 32];
+ name_bytes[..name.len()].copy_from_slice(name.as_bytes());
+ name_bytes
+}
+
+pub fn bytes_to_str(bytes: &[u8; 32]) -> String {
+ // Find the first occurrence of 0 (null terminator) or take all bytes if no null found
+ let length = bytes.iter().position(|&x| x == 0).unwrap_or(bytes.len());
+
+ // Convert the slice up to the null terminator (or full length) to a string
+ String::from_utf8_lossy(&bytes[..length]).into_owned()
+}
diff --git a/basics/cross-program-invocation/steel/lever/program/Cargo.toml b/basics/cross-program-invocation/steel/lever/program/Cargo.toml
new file mode 100644
index 000000000..08fdfd845
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/program/Cargo.toml
@@ -0,0 +1,30 @@
+[package]
+name = "lever-program"
+description = ""
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[features]
+no-entrypoint = []
+cpi = ["no-entrypoint"]
+
+[dependencies]
+lever-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/cross-program-invocation/steel/lever/program/src/initialize.rs b/basics/cross-program-invocation/steel/lever/program/src/initialize.rs
new file mode 100644
index 000000000..76f4874df
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/program/src/initialize.rs
@@ -0,0 +1,17 @@
+use lever_api::prelude::*;
+use steel::*;
+
+pub fn process_initialize(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult {
+ // Load accounts.
+ let [signer_info, power_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ signer_info.is_signer()?;
+ power_info.is_empty()?.is_writable()?;
+ system_program.is_program(&system_program::ID)?;
+
+ // Initialize power.
+ create_account::(power_info, system_program, signer_info, &lever_api::ID, &[])?;
+
+ Ok(())
+}
diff --git a/basics/cross-program-invocation/steel/lever/program/src/lib.rs b/basics/cross-program-invocation/steel/lever/program/src/lib.rs
new file mode 100644
index 000000000..0aa3ab168
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/program/src/lib.rs
@@ -0,0 +1,25 @@
+mod initialize;
+mod switch_power;
+
+use initialize::*;
+use switch_power::*;
+
+use lever_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&lever_api::ID, program_id, data)?;
+
+ match ix {
+ LeverInstruction::Initialize => process_initialize(accounts, data)?,
+ LeverInstruction::SetPowerStatus => process_switch_power(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/cross-program-invocation/steel/lever/program/src/switch_power.rs b/basics/cross-program-invocation/steel/lever/program/src/switch_power.rs
new file mode 100644
index 000000000..d3f1869f9
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/program/src/switch_power.rs
@@ -0,0 +1,36 @@
+use lever_api::prelude::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_switch_power(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ // Parse args.
+ let args = SetPowerStatus::try_from_bytes(data)?;
+ let name = bytes_to_str(&args.name);
+
+ // Load accounts.
+ let [power_info] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ power_info.is_writable()?;
+
+ let power = power_info
+ .as_account_mut::(&lever_api::ID)?
+ .assert_mut(|c| c.is_on <= 1)?;
+
+ match power.is_on {
+ 0 => power.is_on = 1,
+ 1 => power.is_on = 0,
+ _ => panic!("Invalid boolean value"),
+ }
+
+ msg!("{} is pulling the power switch!", &name);
+
+ match power.is_on {
+ 1 => msg!("The power is now on."),
+ 0 => msg!("The power is now off!"),
+ _ => panic!("Invalid boolean value"),
+ };
+
+ Ok(())
+}
diff --git a/basics/cross-program-invocation/steel/lever/program/tests/test.rs b/basics/cross-program-invocation/steel/lever/program/tests/test.rs
new file mode 100644
index 000000000..2756b2644
--- /dev/null
+++ b/basics/cross-program-invocation/steel/lever/program/tests/test.rs
@@ -0,0 +1,52 @@
+use lever_api::prelude::*;
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+use steel::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "lever_program",
+ lever_api::ID,
+ processor!(lever_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ let (mut banks, payer, blockhash) = setup().await;
+
+ let power_account = Keypair::new();
+
+ // Submit initialize transaction.
+ let ix = initialize(payer.pubkey(), power_account.pubkey());
+ let tx = Transaction::new_signed_with_payer(
+ &[ix],
+ Some(&payer.pubkey()),
+ &[&payer, &power_account],
+ blockhash,
+ );
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Verify power account was initialized.
+ let power_address = power_account.pubkey();
+ let power_account = banks.get_account(power_address).await.unwrap().unwrap();
+ let power_status = PowerStatus::try_from_bytes(&power_account.data).unwrap();
+ assert_eq!(power_account.owner, lever_api::ID);
+ assert_eq!(power_status.is_on, 0);
+
+ // Submit switch_power transaction.
+ let ix = switch_power(power_address, "Chris");
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // // Verify power_status was changed.
+ let power_account = banks.get_account(power_address).await.unwrap().unwrap();
+ let power_status = PowerStatus::try_from_bytes(&power_account.data).unwrap();
+ assert_eq!(power_account.owner, lever_api::ID);
+ assert_eq!(power_status.is_on, 1);
+}
diff --git a/basics/favorites/anchor/.gitignore b/basics/favorites/anchor/.gitignore
new file mode 100644
index 000000000..6e66c84b7
--- /dev/null
+++ b/basics/favorites/anchor/.gitignore
@@ -0,0 +1,9 @@
+
+.anchor
+.DS_Store
+target
+**/*.rs.bk
+node_modules
+test-ledger
+.yarn
+.env
diff --git a/basics/processing-instructions/solang/.prettierignore b/basics/favorites/anchor/.prettierignore
similarity index 100%
rename from basics/processing-instructions/solang/.prettierignore
rename to basics/favorites/anchor/.prettierignore
diff --git a/basics/favorites/anchor/Anchor.toml b/basics/favorites/anchor/Anchor.toml
new file mode 100644
index 000000000..4122ebdb8
--- /dev/null
+++ b/basics/favorites/anchor/Anchor.toml
@@ -0,0 +1,18 @@
+[toolchain]
+
+[features]
+resolution = true
+skip-lint = false
+
+[programs.localnet]
+favorites = "ww9C83noARSQVBnqmCUmaVdbJjmiwcV9j2LkXYMoUCV"
+
+[registry]
+url = "https://api.apr.dev/"
+
+[provider]
+cluster = "Localnet"
+wallet = "~/.config/solana/id.json"
+
+[scripts]
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.test.ts"
diff --git a/basics/favorites/anchor/Cargo.toml b/basics/favorites/anchor/Cargo.toml
new file mode 100644
index 000000000..14a951cee
--- /dev/null
+++ b/basics/favorites/anchor/Cargo.toml
@@ -0,0 +1,15 @@
+[workspace]
+members = [
+ "programs/*"
+]
+resolver = "2"
+
+[profile.release]
+overflow-checks = true
+lto = "fat"
+codegen-units = 1
+
+[profile.release.build-override]
+opt-level = 3
+incremental = false
+codegen-units = 1
diff --git a/basics/favorites/anchor/README.md b/basics/favorites/anchor/README.md
new file mode 100644
index 000000000..6edd69541
--- /dev/null
+++ b/basics/favorites/anchor/README.md
@@ -0,0 +1,9 @@
+# Favorites
+
+This is a basic Anchor app using PDAs to store data for a user, and Anchor's account checks to ensure each user is only allowed to modify their own data.
+
+It's used by the [https://github.com/solana-developers/professional-education](Solana Professional Education) course.
+
+## Usage
+
+`anchor test`, `anchor deploy` etc.
diff --git a/basics/favorites/anchor/migrations/deploy.ts b/basics/favorites/anchor/migrations/deploy.ts
new file mode 100644
index 000000000..64a1c3599
--- /dev/null
+++ b/basics/favorites/anchor/migrations/deploy.ts
@@ -0,0 +1,12 @@
+// Migrations are an early feature. Currently, they're nothing more than this
+// single deploy script that's invoked from the CLI, injecting a provider
+// configured from the workspace's Anchor.toml.
+
+const anchor = require('@coral-xyz/anchor');
+
+module.exports = async (provider) => {
+ // Configure client to use the provider.
+ anchor.setProvider(provider);
+
+ // Add your deploy script here.
+};
diff --git a/basics/favorites/anchor/package.json b/basics/favorites/anchor/package.json
new file mode 100644
index 000000000..f64f6853f
--- /dev/null
+++ b/basics/favorites/anchor/package.json
@@ -0,0 +1,24 @@
+{
+ "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"
+ }
+}
diff --git a/basics/favorites/anchor/pnpm-lock.yaml b/basics/favorites/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..9b30c814c
--- /dev/null
+++ b/basics/favorites/anchor/pnpm-lock.yaml
@@ -0,0 +1,1499 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ '@solana/web3.js':
+ specifier: ^1.95.2
+ version: 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana-developers/helpers@2.3.0':
+ resolution: {integrity: sha512-OVdm/RJ9OMI23AnBYX/8UWuNtHRUxaXRUzhXo4WRtXYPHdQ+jTFS2TsjKSJ/F3a0kUZ6nN0b5TekFZvqYF0Qdg==}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.11':
+ resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.14.2':
+ resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.10':
+ resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base-x@4.0.0:
+ resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@5.0.0:
+ resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.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)
+ bs58: 5.0.0
+ dotenv: 16.4.5
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.11':
+ dependencies:
+ tslib: 2.6.3
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.14.2':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@types/ws@8.5.10':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.0
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ prettier@2.8.8: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.11
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.10
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.3: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/favorites/anchor/programs/favorites/Cargo.toml b/basics/favorites/anchor/programs/favorites/Cargo.toml
new file mode 100644
index 000000000..a2e231db7
--- /dev/null
+++ b/basics/favorites/anchor/programs/favorites/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "favorites"
+version = "0.1.0"
+description = "Created with Anchor"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+name = "favorites"
+
+[features]
+no-entrypoint = []
+no-idl = []
+no-log-ix-name = []
+cpi = ["no-entrypoint"]
+default = []
+idl-build = ["anchor-lang/idl-build"]
+
+[dependencies]
+anchor-lang = {version = "0.31.1", features = ["init-if-needed"]}
+solana-program = "=2.0.3"
diff --git a/compression/cutils/programs/cutils/Xargo.toml b/basics/favorites/anchor/programs/favorites/Xargo.toml
similarity index 100%
rename from compression/cutils/programs/cutils/Xargo.toml
rename to basics/favorites/anchor/programs/favorites/Xargo.toml
diff --git a/basics/favorites/anchor/programs/favorites/src/lib.rs b/basics/favorites/anchor/programs/favorites/src/lib.rs
new file mode 100644
index 000000000..e690166a5
--- /dev/null
+++ b/basics/favorites/anchor/programs/favorites/src/lib.rs
@@ -0,0 +1,61 @@
+use anchor_lang::prelude::*;
+// Our program's address!
+// This matches the key in the target/deploy directory
+declare_id!("ww9C83noARSQVBnqmCUmaVdbJjmiwcV9j2LkXYMoUCV");
+
+// Anchor programs always use 8 bits for the discriminator
+pub const ANCHOR_DISCRIMINATOR_SIZE: usize = 8;
+
+// 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, number: u64, color: String, hobbies: Vec) -> Result<()> {
+ msg!("Greetings from {}", context.program_id);
+ let user_public_key = context.accounts.user.key();
+ msg!(
+ "User {user_public_key}'s favorite number is {number}, favorite color is: {color}, and their hobbies are {hobbies:?}",
+ );
+
+ context.accounts.favorites.set_inner(Favorites {
+ number,
+ color,
+ hobbies
+ });
+ Ok(())
+ }
+
+ // We can also add a get_favorites instruction handler to return the user's favorite number and color
+}
+
+// What we will put inside the Favorites PDA
+#[account]
+#[derive(InitSpace)]
+pub struct Favorites {
+ pub number: u64,
+
+ #[max_len(50)]
+ pub color: String,
+
+ #[max_len(5, 50)]
+ pub hobbies: Vec
+}
+// When people call the set_favorites instruction, they will need to provide the accounts that will be modifed. This keeps Solana fast!
+#[derive(Accounts)]
+pub struct SetFavorites<'info> {
+ #[account(mut)]
+ pub user: Signer<'info>,
+
+ #[account(
+ init_if_needed,
+ payer = user,
+ space = ANCHOR_DISCRIMINATOR_SIZE + Favorites::INIT_SPACE,
+ seeds=[b"favorites", user.key().as_ref()],
+ bump
+ )]
+ pub favorites: Account<'info, Favorites>,
+
+ pub system_program: Program<'info, System>,
+}
diff --git a/basics/favorites/anchor/tests/favorites-bankrun.test.ts b/basics/favorites/anchor/tests/favorites-bankrun.test.ts
new file mode 100644
index 000000000..51a50e1c0
--- /dev/null
+++ b/basics/favorites/anchor/tests/favorites-bankrun.test.ts
@@ -0,0 +1,84 @@
+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';
+
+const web3 = anchor.web3;
+const IDL = require('../target/idl/favorites.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+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 provider = new BankrunProvider(context);
+ anchor.setProvider(provider);
+ const user = (provider.wallet as anchor.Wallet).payer;
+ const someRandomGuy = anchor.web3.Keypair.generate();
+
+ const program = new anchor.Program(IDL, provider);
+
+ // Here's what we want to write to the blockchain
+ const favoriteNumber = new anchor.BN(23);
+ 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
+ const balance = await context.banksClient.getBalance(user.publicKey);
+ const balanceInSOL = balance / BigInt(web3.LAMPORTS_PER_SOL);
+ const formattedBalance = new Intl.NumberFormat().format(balanceInSOL);
+ console.log(`Balance: ${formattedBalance} SOL`);
+
+ it('Writes our favorites to the blockchain', async () => {
+ await program.methods
+ // set_favourites in Rust becomes setFavorites in TypeScript
+ .setFavorites(favoriteNumber, favoriteColor, favoriteHobbies)
+ // Sign the transaction
+ .signers([user])
+ // Send the transaction to the cluster or RPC
+ .rpc();
+
+ // Find the PDA for the user's favorites
+ 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!
+ assert.equal(dataFromPda.color, favoriteColor);
+ // A little extra work to make sure the BNs are equal
+ assert.equal(dataFromPda.number.toString(), favoriteNumber.toString());
+ // And check the hobbies too
+ assert.deepEqual(dataFromPda.hobbies, favoriteHobbies);
+ });
+
+ it('Updates the favorites', async () => {
+ const newFavoriteHobbies = ['skiing', 'skydiving', 'biking', 'swimming'];
+ try {
+ await program.methods.setFavorites(favoriteNumber, favoriteColor, newFavoriteHobbies).signers([user]).rpc();
+ } catch (error) {
+ console.error((error as Error).message);
+ const customErrorMessage = getCustomErrorMessage(systemProgramErrors, error);
+ throw new Error(customErrorMessage);
+ }
+ });
+
+ it('Rejects transactions from unauthorized signers', async () => {
+ try {
+ await program.methods
+ // set_favourites in Rust becomes setFavorites in TypeScript
+ .setFavorites(favoriteNumber, favoriteColor, favoriteHobbies)
+ // Sign the transaction
+ .signers([someRandomGuy])
+ // Send the transaction to the cluster or RPC
+ .rpc();
+ } catch (error) {
+ const errorMessage = (error as Error).message;
+ assert.isTrue(errorMessage.includes('unknown signer'));
+ }
+ });
+});
diff --git a/basics/favorites/anchor/tests/favorites.test.ts b/basics/favorites/anchor/tests/favorites.test.ts
new file mode 100644
index 000000000..9837c3c54
--- /dev/null
+++ b/basics/favorites/anchor/tests/favorites.test.ts
@@ -0,0 +1,81 @@
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } 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', () => {
+ // Use the cluster and the keypair from Anchor.toml
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+
+ // See https://github.com/coral-xyz/anchor/issues/3122
+ const user = (provider.wallet as anchor.Wallet).payer;
+ const someRandomGuy = anchor.web3.Keypair.generate();
+ const program = anchor.workspace.Favorites as Program;
+
+ // Here's what we want to write to the blockchain
+ const favoriteNumber = new anchor.BN(23);
+ 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 85 billion dollars worth of SOL
+ before(async () => {
+ const balance = await provider.connection.getBalance(user.publicKey);
+ const balanceInSOL = balance / web3.LAMPORTS_PER_SOL;
+ const formattedBalance = new Intl.NumberFormat().format(balanceInSOL);
+ console.log(`Balance: ${formattedBalance} SOL`);
+ });
+
+ it('Writes our favorites to the blockchain', async () => {
+ await program.methods
+ // set_favourites in Rust becomes setFavorites in TypeScript
+ .setFavorites(favoriteNumber, favoriteColor, favoriteHobbies)
+ // Sign the transaction
+ .signers([user])
+ // Send the transaction to the cluster or RPC
+ .rpc();
+
+ // Find the PDA for the user's favorites
+ 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!
+ assert.equal(dataFromPda.color, favoriteColor);
+ // A little extra work to make sure the BNs are equal
+ assert.equal(dataFromPda.number.toString(), favoriteNumber.toString());
+ // And check the hobbies too
+ assert.deepEqual(dataFromPda.hobbies, favoriteHobbies);
+ });
+
+ it('Updates the favorites', async () => {
+ const newFavoriteHobbies = ['skiing', 'skydiving', 'biking', 'swimming'];
+ try {
+ const signature = await program.methods.setFavorites(favoriteNumber, favoriteColor, newFavoriteHobbies).signers([user]).rpc();
+
+ console.log(`Transaction signature: ${signature}`);
+ } catch (error) {
+ console.error((error as Error).message);
+ const customErrorMessage = getCustomErrorMessage(systemProgramErrors, error);
+ throw new Error(customErrorMessage);
+ }
+ });
+
+ it('Rejects transactions from unauthorized signers', async () => {
+ try {
+ await program.methods
+ // set_favourites in Rust becomes setFavorites in TypeScript
+ .setFavorites(favoriteNumber, favoriteColor, favoriteHobbies)
+ // Sign the transaction
+ .signers([someRandomGuy])
+ // Send the transaction to the cluster or RPC
+ .rpc();
+ } catch (error) {
+ const errorMessage = (error as Error).message;
+ assert.isTrue(errorMessage.includes('unknown signer'));
+ }
+ });
+});
diff --git a/basics/favorites/anchor/tests/system-errors.ts b/basics/favorites/anchor/tests/system-errors.ts
new file mode 100644
index 000000000..845ce2f30
--- /dev/null
+++ b/basics/favorites/anchor/tests/system-errors.ts
@@ -0,0 +1,20 @@
+// From https://github.com/solana-labs/solana/blob/a94920a4eadf1008fc292e47e041c1b3b0d949df/sdk/program/src/system_instruction.rs
+export const systemProgramErrors = [
+ 'an account with the same address already exists',
+
+ 'account does not have enough SOL to perform the operation',
+
+ 'cannot assign account to this program id',
+
+ 'cannot allocate account data of this length',
+
+ 'length of requested seed is too long',
+
+ 'provided address does not match addressed derived from seed',
+
+ 'advancing stored nonce requires a populated RecentBlockhashes sysvar',
+
+ 'stored nonce is still in recent_blockhashes',
+
+ 'specified nonce does not match stored nonce',
+];
diff --git a/basics/favorites/anchor/tsconfig.json b/basics/favorites/anchor/tsconfig.json
new file mode 100644
index 000000000..cd5d2e3d0
--- /dev/null
+++ b/basics/favorites/anchor/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/basics/favorites/native/cicd.sh b/basics/favorites/native/cicd.sh
new file mode 100644
index 000000000..0903cf896
--- /dev/null
+++ b/basics/favorites/native/cicd.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This script is for quick building & deploying of the program.
+# It also serves as a reference for the commands used for building & deploying Solana programs.
+# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
+
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/favorites/native/package.json b/basics/favorites/native/package.json
new file mode 100644
index 000000000..31a8d608d
--- /dev/null
+++ b/basics/favorites/native/package.json
@@ -0,0 +1,23 @@
+{
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
+ },
+ "dependencies": {
+ "@solana/web3.js": "^1.47.3",
+ "borsh": "^2.0.0"
+ },
+ "devDependencies": {
+ "@types/bn.js": "^5.1.0",
+ "@types/chai": "^4.3.1",
+ "@types/mocha": "^9.1.1",
+ "@types/node": "^22.8.1",
+ "chai": "^4.3.4",
+ "mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^4.3.5"
+ }
+}
diff --git a/basics/favorites/native/pnpm-lock.yaml b/basics/favorites/native/pnpm-lock.yaml
new file mode 100644
index 000000000..a2611a893
--- /dev/null
+++ b/basics/favorites/native/pnpm-lock.yaml
@@ -0,0 +1,1353 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ borsh:
+ specifier: ^2.0.0
+ version: 2.0.0
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ '@types/node':
+ specifier: ^22.8.1
+ version: 22.15.19
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ borsh@2.0.0:
+ resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ borsh@2.0.0: {}
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/favorites/native/program/Cargo.toml b/basics/favorites/native/program/Cargo.toml
new file mode 100644
index 000000000..69728af1b
--- /dev/null
+++ b/basics/favorites/native/program/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "favorites-native"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+borsh = "0.9.3"
+solana-program = "2.0"
+borsh-derive = "0.9.1"
+
+[lib]
+crate-type = ["cdylib", "lib"]
diff --git a/basics/favorites/native/program/src/instructions/create_pda.rs b/basics/favorites/native/program/src/instructions/create_pda.rs
new file mode 100644
index 000000000..5f4733505
--- /dev/null
+++ b/basics/favorites/native/program/src/instructions/create_pda.rs
@@ -0,0 +1,62 @@
+use crate::state::Favorites;
+use borsh::BorshSerialize;
+use solana_program::{
+ account_info::{next_account_info, AccountInfo},
+ entrypoint::ProgramResult,
+ msg,
+ program::invoke_signed,
+ program_error::ProgramError,
+ pubkey::Pubkey,
+ rent::Rent,
+ system_instruction,
+ sysvar::Sysvar,
+};
+
+pub fn create_pda(program_id: &Pubkey, accounts: &[AccountInfo], data: Favorites) -> ProgramResult {
+ let account_iter = &mut accounts.iter();
+ let user = next_account_info(account_iter)?; // the user who's signing the transaction
+ let favorite_account = next_account_info(account_iter)?; // The target account that will be created in the process
+ let system_program = next_account_info(account_iter)?;
+
+ // deriving the favorite pda
+ let (favorite_pda, favorite_bump) =
+ Pubkey::find_program_address(&[b"favorite", user.key.as_ref()], program_id);
+
+ // Checking if the favorite account is same as the derived favorite pda
+ if favorite_account.key != &favorite_pda {
+ return Err(ProgramError::IncorrectProgramId);
+ }
+
+ // 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 lamports = (Rent::get()?).minimum_balance(space);
+
+ let ix = system_instruction::create_account(
+ user.key,
+ favorite_account.key,
+ lamports,
+ space as u64,
+ program_id,
+ );
+
+ invoke_signed(
+ &ix,
+ &[
+ user.clone(),
+ favorite_account.clone(),
+ system_program.clone(),
+ ],
+ &[&[b"favorite", user.key.as_ref(), &[favorite_bump]]],
+ )?;
+
+ // Serialize and store the data
+ data.serialize(&mut &mut favorite_account.data.borrow_mut()[..])?;
+ msg!("{:#?}", data);
+ } else {
+ return Err(ProgramError::AccountAlreadyInitialized.into());
+ }
+
+ Ok(())
+}
diff --git a/basics/favorites/native/program/src/instructions/get_pda.rs b/basics/favorites/native/program/src/instructions/get_pda.rs
new file mode 100644
index 000000000..d03d5ff50
--- /dev/null
+++ b/basics/favorites/native/program/src/instructions/get_pda.rs
@@ -0,0 +1,35 @@
+use crate::state::Favorites;
+use borsh::BorshDeserialize;
+use solana_program::{
+ account_info::{next_account_info, AccountInfo},
+ entrypoint::ProgramResult,
+ msg,
+ program_error::ProgramError,
+ pubkey::Pubkey,
+};
+
+pub fn get_pda(program_id: &Pubkey, accounts: &[AccountInfo]) -> ProgramResult {
+ let account_iter = &mut accounts.iter();
+ let user = next_account_info(account_iter)?;
+ let favorite_account = next_account_info(account_iter)?;
+
+ // deriving the favorite pda
+ let (favorite_pda, _) =
+ Pubkey::find_program_address(&[b"favorite", user.key.as_ref()], program_id);
+
+ // Checking if the favorite account is same as the derived favorite pda
+ if favorite_account.key != &favorite_pda {
+ return Err(ProgramError::IncorrectProgramId);
+ };
+
+ let favorites = Favorites::try_from_slice(&favorite_account.data.borrow())?;
+
+ msg!(
+ "User {}'s favorite number is {}, favorite color is: {}, and their hobbies are {:#?}",
+ user.key,
+ favorites.number,
+ favorites.color,
+ favorites.hobbies
+ );
+ Ok(())
+}
diff --git a/basics/favorites/native/program/src/instructions/mod.rs b/basics/favorites/native/program/src/instructions/mod.rs
new file mode 100644
index 000000000..23c5a44e6
--- /dev/null
+++ b/basics/favorites/native/program/src/instructions/mod.rs
@@ -0,0 +1,5 @@
+pub mod create_pda;
+pub mod get_pda;
+
+use create_pda::*;
+use get_pda::*;
diff --git a/basics/favorites/native/program/src/lib.rs b/basics/favorites/native/program/src/lib.rs
new file mode 100644
index 000000000..2ef9be695
--- /dev/null
+++ b/basics/favorites/native/program/src/lib.rs
@@ -0,0 +1,9 @@
+use solana_program::entrypoint;
+
+pub mod instructions;
+pub mod processor;
+pub mod state;
+
+use processor::process_instruction;
+
+entrypoint!(process_instruction);
diff --git a/basics/favorites/native/program/src/processor.rs b/basics/favorites/native/program/src/processor.rs
new file mode 100644
index 000000000..f8439993e
--- /dev/null
+++ b/basics/favorites/native/program/src/processor.rs
@@ -0,0 +1,26 @@
+use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult, pubkey::Pubkey};
+
+use crate::instructions::{create_pda::*, get_pda::*};
+use crate::state::Favorites;
+use borsh::{BorshDeserialize, BorshSerialize};
+
+#[derive(BorshDeserialize, BorshSerialize)]
+pub enum FavoritesInstruction {
+ CreatePda(Favorites),
+ GetPda,
+}
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ instruction_data: &[u8],
+) -> ProgramResult {
+ let instruction = FavoritesInstruction::try_from_slice(instruction_data)?;
+
+ match instruction {
+ FavoritesInstruction::CreatePda(data) => create_pda(program_id, accounts, data),
+ FavoritesInstruction::GetPda => get_pda(program_id, accounts),
+ }?;
+
+ Ok(())
+}
diff --git a/basics/favorites/native/program/src/state.rs b/basics/favorites/native/program/src/state.rs
new file mode 100644
index 000000000..67c5f0407
--- /dev/null
+++ b/basics/favorites/native/program/src/state.rs
@@ -0,0 +1,11 @@
+use borsh::{BorshDeserialize, BorshSerialize};
+
+#[derive(BorshDeserialize, BorshSerialize, Debug)]
+pub struct Favorites {
+ pub number: u64,
+ pub color: String,
+ pub hobbies: Vec,
+}
+
+#[derive(BorshDeserialize, BorshSerialize)]
+pub struct GetFavorites {}
diff --git a/basics/favorites/native/tests/test.ts b/basics/favorites/native/tests/test.ts
new file mode 100644
index 000000000..f83e8fac6
--- /dev/null
+++ b/basics/favorites/native/tests/test.ts
@@ -0,0 +1,200 @@
+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';
+
+// This is a helper class to assign properties to the class
+class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+}
+
+enum MyInstruction {
+ CreateFav = 0,
+ GetFav = 1,
+}
+
+class CreateFav extends Assignable {
+ number: number;
+ instruction: MyInstruction;
+ color: string;
+ hobbies: string[];
+
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CreateNewAccountSchema, this));
+ }
+
+ static fromBuffer(buffer: Buffer): CreateFav {
+ return borsh.deserialize(
+ {
+ struct: {
+ number: 'u64',
+ color: 'string',
+ hobbies: {
+ array: {
+ type: 'string',
+ },
+ },
+ },
+ },
+ buffer,
+ ) as CreateFav;
+ }
+}
+const CreateNewAccountSchema = {
+ struct: {
+ instruction: 'u8',
+ number: 'u64',
+ color: 'string',
+ hobbies: {
+ array: {
+ type: 'string',
+ },
+ },
+ },
+};
+
+class GetFav extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(GetFavSchema, this));
+ }
+}
+const GetFavSchema = {
+ struct: {
+ instruction: 'u8',
+ },
+};
+
+describe('Favorites Solana Native', () => {
+ // Randomly generate the program keypair and load the program to solana-bankrun
+ const programId = PublicKey.unique();
+
+ let context: ProgramTestContext;
+ let client: BanksClient;
+ let payer: Keypair;
+ let blockhash: Blockhash;
+
+ beforeEach(async () => {
+ 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'] };
+ const favorites = new CreateFav(favData);
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: favoritesPda, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId,
+ data: favorites.toBuffer(),
+ });
+
+ const tx = new Transaction().add(ix);
+
+ tx.feePayer = payer.publicKey;
+ tx.recentBlockhash = blockhash;
+ tx.sign(payer);
+ tx.recentBlockhash = blockhash;
+ await client.processTransaction(tx);
+
+ const account = await client.getAccount(favoritesPda);
+ const data = Buffer.from(account.data);
+
+ const favoritesData = CreateFav.fromBuffer(data);
+
+ console.log('Deserialized data:', favoritesData);
+
+ 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 favorites = new CreateFav(favData);
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: favoritesPda, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId,
+ data: favorites.toBuffer(),
+ });
+
+ const tx = new Transaction().add(ix);
+
+ tx.feePayer = payer.publicKey;
+ tx.recentBlockhash = blockhash;
+ tx.sign(payer);
+ tx.recentBlockhash = blockhash;
+ try {
+ await client.processTransaction(tx);
+ console.error('Expected the test to fail');
+ } catch (err) {
+ assert(true);
+ }
+ });
+
+ 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 favorites = new CreateFav(favData);
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: favoritesPda, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId,
+ data: favorites.toBuffer(),
+ });
+
+ const tx1 = new Transaction().add(ix);
+
+ tx1.feePayer = payer.publicKey;
+ tx1.recentBlockhash = blockhash;
+ tx1.sign(payer);
+ tx1.recentBlockhash = blockhash;
+ await client.processTransaction(tx1);
+
+ // Getting the user's data through the get_pda instruction
+ const getfavData = { instruction: MyInstruction.GetFav };
+ const getfavorites = new GetFav(getfavData);
+
+ const ix2 = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: favoritesPda, isSigner: false, isWritable: false },
+ ],
+ programId,
+ data: getfavorites.toBuffer(),
+ });
+
+ const tx = new Transaction().add(ix2);
+
+ tx.feePayer = payer.publicKey;
+ tx.recentBlockhash = blockhash;
+ tx.sign(payer);
+ tx.recentBlockhash = blockhash;
+ await client.processTransaction(tx);
+ });
+});
diff --git a/basics/favorites/native/tsconfig.json b/basics/favorites/native/tsconfig.json
new file mode 100644
index 000000000..8c20b2236
--- /dev/null
+++ b/basics/favorites/native/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/basics/favorites/steel/.gitignore b/basics/favorites/steel/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/favorites/steel/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/favorites/steel/Cargo.toml b/basics/favorites/steel/Cargo.toml
new file mode 100644
index 000000000..2c00a539a
--- /dev/null
+++ b/basics/favorites/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+respository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+steel-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/favorites/steel/README.md b/basics/favorites/steel/README.md
new file mode 100644
index 000000000..4f4fe2a54
--- /dev/null
+++ b/basics/favorites/steel/README.md
@@ -0,0 +1,22 @@
+# Steel
+
+**Steel** is a ...
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Event`](api/src/event.rs) – Custom program events.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`Hello`](program/src/hello.rs) – Hello ...
+
+## State
+- [`User`](api/src/state/user.rs) – User ...
+
+## Tests
+
+To run the test suit, use the Solana toolchain:
+```
+cargo test-sbf
+```
diff --git a/basics/favorites/steel/api/Cargo.toml b/basics/favorites/steel/api/Cargo.toml
new file mode 100644
index 000000000..34b563782
--- /dev/null
+++ b/basics/favorites/steel/api/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "steel-api"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/favorites/steel/api/src/consts.rs b/basics/favorites/steel/api/src/consts.rs
new file mode 100644
index 000000000..c263203b1
--- /dev/null
+++ b/basics/favorites/steel/api/src/consts.rs
@@ -0,0 +1,2 @@
+/// Seed of the favorites account PDA.
+pub const FAVORITES: &[u8] = b"favorites";
diff --git a/basics/favorites/steel/api/src/error.rs b/basics/favorites/steel/api/src/error.rs
new file mode 100644
index 000000000..96e84da4d
--- /dev/null
+++ b/basics/favorites/steel/api/src/error.rs
@@ -0,0 +1,10 @@
+use steel::*;
+
+#[derive(Debug, Error, Clone, Copy, PartialEq, Eq, IntoPrimitive)]
+#[repr(u32)]
+pub enum SteelError {
+ #[error("This is a dummy error")]
+ Dummy = 0,
+}
+
+error!(SteelError);
diff --git a/basics/favorites/steel/api/src/instruction.rs b/basics/favorites/steel/api/src/instruction.rs
new file mode 100644
index 000000000..539638583
--- /dev/null
+++ b/basics/favorites/steel/api/src/instruction.rs
@@ -0,0 +1,19 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum SteelInstruction {
+ SetFavorites = 0,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct SetFavorites {
+ pub number: [u8; 8],
+
+ pub color: [u8; 32],
+
+ pub hobbies: [[u8; 32]; 3],
+}
+
+instruction!(SteelInstruction, SetFavorites);
diff --git a/basics/favorites/steel/api/src/lib.rs b/basics/favorites/steel/api/src/lib.rs
new file mode 100644
index 000000000..76867dc34
--- /dev/null
+++ b/basics/favorites/steel/api/src/lib.rs
@@ -0,0 +1,20 @@
+pub mod consts;
+pub mod error;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+pub mod utils;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::error::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+ pub use crate::utils::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/basics/favorites/steel/api/src/sdk.rs b/basics/favorites/steel/api/src/sdk.rs
new file mode 100644
index 000000000..6f5d875bd
--- /dev/null
+++ b/basics/favorites/steel/api/src/sdk.rs
@@ -0,0 +1,24 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn set_favorites(signer: Pubkey, number: u64, color: &str, hobbies: Vec<&str>) -> Instruction {
+ let color_bytes: [u8; 32] = string_to_bytes32_padded(color).unwrap();
+
+ let hobbies_bytes = strings_to_bytes32_array_padded(hobbies).unwrap();
+
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(favorites_pda().0, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: SetFavorites {
+ number: number.to_le_bytes(),
+ color: color_bytes,
+ hobbies: hobbies_bytes,
+ }
+ .to_bytes(),
+ }
+}
diff --git a/basics/favorites/steel/api/src/state/favorites.rs b/basics/favorites/steel/api/src/state/favorites.rs
new file mode 100644
index 000000000..6f912c586
--- /dev/null
+++ b/basics/favorites/steel/api/src/state/favorites.rs
@@ -0,0 +1,15 @@
+use steel::*;
+
+use super::SteelAccount;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct Favorites {
+ pub number: u64,
+
+ pub color: [u8; 32],
+
+ pub hobbies: [[u8; 32]; 3],
+}
+
+account!(SteelAccount, Favorites);
diff --git a/basics/favorites/steel/api/src/state/mod.rs b/basics/favorites/steel/api/src/state/mod.rs
new file mode 100644
index 000000000..72eb8dd98
--- /dev/null
+++ b/basics/favorites/steel/api/src/state/mod.rs
@@ -0,0 +1,18 @@
+mod favorites;
+
+pub use favorites::*;
+
+use steel::*;
+
+use crate::consts::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum SteelAccount {
+ Favorites = 0,
+}
+
+/// Fetch PDA of the favorites account.
+pub fn favorites_pda() -> (Pubkey, u8) {
+ Pubkey::find_program_address(&[FAVORITES], &crate::id())
+}
diff --git a/basics/favorites/steel/api/src/utils.rs b/basics/favorites/steel/api/src/utils.rs
new file mode 100644
index 000000000..a590bf2f9
--- /dev/null
+++ b/basics/favorites/steel/api/src/utils.rs
@@ -0,0 +1,85 @@
+use std::error::Error;
+use std::fmt;
+
+#[derive(Debug)]
+pub enum ConversionError {
+ StringTooLong(usize),
+ StringTooShort(usize),
+ VecLengthMismatch { expected: usize, actual: usize },
+ InvalidUtf8,
+}
+
+impl fmt::Display for ConversionError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+ ConversionError::StringTooLong(len) => {
+ write!(f, "String length {} exceeds 32 bytes", len)
+ }
+ ConversionError::StringTooShort(len) => {
+ write!(f, "String length {} is less than 32 bytes", len)
+ }
+ ConversionError::VecLengthMismatch { expected, actual } => {
+ write!(
+ f,
+ "Vector length mismatch: expected {}, got {}",
+ expected, actual
+ )
+ }
+ ConversionError::InvalidUtf8 => write!(f, "Invalid UTF-8 sequence in bytes"),
+ }
+ }
+}
+
+impl Error for ConversionError {}
+
+// Convert string to bytes with padding
+pub fn string_to_bytes32_padded(input: &str) -> Result<[u8; 32], ConversionError> {
+ let bytes = input.as_bytes();
+ let len = bytes.len();
+
+ if len > 32 {
+ return Err(ConversionError::StringTooLong(len));
+ }
+
+ let mut result = [0u8; 32];
+ result[..len].copy_from_slice(bytes);
+ Ok(result)
+}
+
+// Convert bytes back to string, trimming trailing zeros
+pub fn bytes32_to_string(bytes: &[u8; 32]) -> Result {
+ // Find the actual length by looking for the first zero or taking full length
+ let actual_len = bytes.iter().position(|&b| b == 0).unwrap_or(32);
+
+ // Convert the slice up to actual_len to a string
+ String::from_utf8(bytes[..actual_len].to_vec()).map_err(|_| ConversionError::InvalidUtf8)
+}
+
+// Convert vec of strings to byte arrays with padding
+pub fn strings_to_bytes32_array_padded(
+ inputs: Vec<&str>,
+) -> Result<[[u8; 32]; N], ConversionError> {
+ if inputs.len() != N {
+ return Err(ConversionError::VecLengthMismatch {
+ expected: N,
+ actual: inputs.len(),
+ });
+ }
+
+ let mut result = [[0u8; 32]; N];
+ for (i, input) in inputs.iter().enumerate() {
+ result[i] = string_to_bytes32_padded(input)?;
+ }
+ Ok(result)
+}
+
+// Convert array of byte arrays back to vec of strings
+pub fn bytes32_array_to_strings(
+ bytes_array: &[[u8; 32]; N],
+) -> Result, ConversionError> {
+ let mut result = Vec::with_capacity(N);
+ for bytes in bytes_array.iter() {
+ result.push(bytes32_to_string(bytes)?);
+ }
+ Ok(result)
+}
diff --git a/basics/favorites/steel/program/Cargo.toml b/basics/favorites/steel/program/Cargo.toml
new file mode 100644
index 000000000..db99b68cc
--- /dev/null
+++ b/basics/favorites/steel/program/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "steel-program"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+steel-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/favorites/steel/program/src/lib.rs b/basics/favorites/steel/program/src/lib.rs
new file mode 100644
index 000000000..a6b8cd616
--- /dev/null
+++ b/basics/favorites/steel/program/src/lib.rs
@@ -0,0 +1,22 @@
+mod set_favorites;
+
+pub use set_favorites::*;
+
+use steel::*;
+use steel_api::prelude::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&steel_api::ID, program_id, data)?;
+
+ match ix {
+ SteelInstruction::SetFavorites => process_set_favorites(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/favorites/steel/program/src/set_favorites.rs b/basics/favorites/steel/program/src/set_favorites.rs
new file mode 100644
index 000000000..cc86aef40
--- /dev/null
+++ b/basics/favorites/steel/program/src/set_favorites.rs
@@ -0,0 +1,49 @@
+use solana_program::msg;
+use steel::*;
+use steel_api::prelude::*;
+
+pub fn process_set_favorites(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ // Parse args.
+ let args = SetFavorites::try_from_bytes(data)?;
+ let number = u64::from_le_bytes(args.number);
+ let color = bytes32_to_string(&args.color).unwrap();
+ let hobbies = bytes32_array_to_strings(&args.hobbies).unwrap();
+
+ // Get expected pda bump.
+ let favorites_bump = favorites_pda().1;
+
+ // Load accounts.
+ let [user_info, favorites_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ user_info.is_signer()?;
+ favorites_info.is_empty()?.is_writable()?.has_seeds(
+ &[FAVORITES],
+ favorites_bump,
+ &steel_api::ID,
+ )?;
+ system_program.is_program(&system_program::ID)?;
+
+ // Initialize favorites.
+ create_account::(
+ favorites_info,
+ &steel_api::ID,
+ &[FAVORITES, &[favorites_bump]],
+ system_program,
+ user_info,
+ )?;
+
+ msg!("Greetings from {}", &steel_api::ID);
+ let user_public_key = user_info.key;
+
+ msg!(
+ "User {user_public_key}'s favorite number is {number}, favorite color is: {color}, and their hobbies are {hobbies:?}",
+ );
+
+ let favorites = favorites_info.to_account_mut::(&steel_api::ID)?;
+ favorites.number = number;
+ favorites.color = args.color;
+ favorites.hobbies = args.hobbies;
+
+ Ok(())
+}
diff --git a/basics/favorites/steel/program/src/utils.rs b/basics/favorites/steel/program/src/utils.rs
new file mode 100644
index 000000000..2af1c9fd1
--- /dev/null
+++ b/basics/favorites/steel/program/src/utils.rs
@@ -0,0 +1,137 @@
+use std::error::Error;
+use std::fmt;
+
+#[derive(Debug)]
+pub enum ConversionError {
+ StringTooLong(usize),
+ StringTooShort(usize),
+ VecLengthMismatch { expected: usize, actual: usize },
+ InvalidUtf8,
+}
+
+impl fmt::Display for ConversionError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+ ConversionError::StringTooLong(len) => {
+ write!(f, "String length {} exceeds 32 bytes", len)
+ }
+ ConversionError::StringTooShort(len) => {
+ write!(f, "String length {} is less than 32 bytes", len)
+ }
+ ConversionError::VecLengthMismatch { expected, actual } => {
+ write!(
+ f,
+ "Vector length mismatch: expected {}, got {}",
+ expected, actual
+ )
+ }
+ ConversionError::InvalidUtf8 => write!(f, "Invalid UTF-8 sequence in bytes"),
+ }
+ }
+}
+
+impl Error for ConversionError {}
+
+// Convert string to bytes with padding
+pub fn string_to_bytes32_padded(input: &str) -> Result<[u8; 32], ConversionError> {
+ let bytes = input.as_bytes();
+ let len = bytes.len();
+
+ if len > 32 {
+ return Err(ConversionError::StringTooLong(len));
+ }
+
+ let mut result = [0u8; 32];
+ result[..len].copy_from_slice(bytes);
+ Ok(result)
+}
+
+// NEW: Convert bytes back to string, trimming trailing zeros
+pub fn bytes32_to_string(bytes: &[u8; 32]) -> Result {
+ // Find the actual length by looking for the first zero or taking full length
+ let actual_len = bytes.iter().position(|&b| b == 0).unwrap_or(32);
+
+ // Convert the slice up to actual_len to a string
+ String::from_utf8(bytes[..actual_len].to_vec()).map_err(|_| ConversionError::InvalidUtf8)
+}
+
+// Convert vec of strings to byte arrays with padding
+pub fn strings_to_bytes32_array_padded(
+ inputs: Vec<&str>,
+) -> Result<[[u8; 32]; N], ConversionError> {
+ if inputs.len() != N {
+ return Err(ConversionError::VecLengthMismatch {
+ expected: N,
+ actual: inputs.len(),
+ });
+ }
+
+ let mut result = [[0u8; 32]; N];
+ for (i, input) in inputs.iter().enumerate() {
+ result[i] = string_to_bytes32_padded(input)?;
+ }
+ Ok(result)
+}
+
+// NEW: Convert array of byte arrays back to vec of strings
+pub fn bytes32_array_to_strings(
+ bytes_array: &[[u8; 32]; N],
+) -> Result, ConversionError> {
+ let mut result = Vec::with_capacity(N);
+ for bytes in bytes_array.iter() {
+ result.push(bytes32_to_string(bytes)?);
+ }
+ Ok(result)
+}
+
+// // Convert string to bytes with padding
+// pub fn string_to_bytes32_padded(input: &str) -> Result<[u8; 32], ConversionError> {
+// let bytes = input.as_bytes();
+// let len = bytes.len();
+
+// if len > 32 {
+// return Err(ConversionError::StringTooLong(len));
+// }
+
+// let mut result = [0u8; 32];
+// result[..len].copy_from_slice(bytes);
+// Ok(result)
+// }
+
+// // NEW: Convert bytes back to string, trimming trailing zeros
+// pub fn bytes32_to_string(bytes: &[u8; 32]) -> Result {
+// // Find the actual length by looking for the first zero or taking full length
+// let actual_len = bytes.iter().position(|&b| b == 0).unwrap_or(32);
+
+// // Convert the slice up to actual_len to a string
+// String::from_utf8(bytes[..actual_len].to_vec()).map_err(|_| ConversionError::InvalidUtf8)
+// }
+
+// // Convert vec of strings to byte arrays with padding
+// pub fn strings_to_bytes32_array_padded(
+// inputs: Vec<&str>,
+// ) -> Result<[[u8; 32]; N], ConversionError> {
+// if inputs.len() != N {
+// return Err(ConversionError::VecLengthMismatch {
+// expected: N,
+// actual: inputs.len(),
+// });
+// }
+
+// let mut result = [[0u8; 32]; N];
+// for (i, input) in inputs.iter().enumerate() {
+// result[i] = string_to_bytes32_padded(input)?;
+// }
+// Ok(result)
+// }
+
+// // NEW: Convert array of byte arrays back to vec of strings
+// pub fn bytes32_array_to_strings(
+// bytes_array: &[[u8; 32]; N],
+// ) -> Result, ConversionError> {
+// let mut result = Vec::with_capacity(N);
+// for bytes in bytes_array.iter() {
+// result.push(bytes32_to_string(bytes)?);
+// }
+// Ok(result)
+// }
diff --git a/basics/favorites/steel/program/tests/test.rs b/basics/favorites/steel/program/tests/test.rs
new file mode 100644
index 000000000..b501372a6
--- /dev/null
+++ b/basics/favorites/steel/program/tests/test.rs
@@ -0,0 +1,53 @@
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+use steel::*;
+use steel_api::prelude::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "steel_program",
+ steel_api::ID,
+ processor!(steel_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+
+ let favorite_number: u64 = 23;
+ let favorite_color: &str = "purple";
+ let mut favorite_hobbies: Vec<&str> = Vec::new();
+ favorite_hobbies.push("skiing");
+ favorite_hobbies.push("skydiving");
+ favorite_hobbies.push("biking");
+
+ // Submit set favorites transaction.
+ let ix = set_favorites(
+ payer.pubkey(),
+ favorite_number,
+ favorite_color,
+ favorite_hobbies,
+ );
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Verify favorites was updated.
+ let favorites_address = favorites_pda().0;
+ let favorites_account = banks.get_account(favorites_address).await.unwrap().unwrap();
+ let favorites = Favorites::try_from_bytes(&favorites_account.data).unwrap();
+
+ let favorites_number = favorites.number;
+ let favorites_color = bytes32_to_string(&favorites.color).unwrap();
+ let favorites_hobbies = bytes32_array_to_strings(&favorites.hobbies).unwrap();
+
+ assert_eq!(favorites_account.owner, steel_api::ID);
+ assert_eq!(favorites_number, 23);
+ assert_eq!(favorites_color, "purple");
+ assert_eq!(favorites_hobbies[0], "skiing");
+}
diff --git a/basics/hello-solana/anchor/Anchor.toml b/basics/hello-solana/anchor/Anchor.toml
index e8a4f59d6..ef9757f65 100644
--- a/basics/hello-solana/anchor/Anchor.toml
+++ b/basics/hello-solana/anchor/Anchor.toml
@@ -13,4 +13,4 @@ cluster = "Localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/hello-solana/anchor/Cargo.toml b/basics/hello-solana/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/hello-solana/anchor/Cargo.toml
+++ b/basics/hello-solana/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/hello-solana/anchor/package.json b/basics/hello-solana/anchor/package.json
index ab411155f..439798a07 100644
--- a/basics/hello-solana/anchor/package.json
+++ b/basics/hello-solana/anchor/package.json
@@ -1,8 +1,11 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
diff --git a/basics/hello-solana/anchor/pnpm-lock.yaml b/basics/hello-solana/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..cf21eb739
--- /dev/null
+++ b/basics/hello-solana/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/hello-solana/anchor/programs/hello-solana/Cargo.toml b/basics/hello-solana/anchor/programs/hello-solana/Cargo.toml
index bf212ad20..261241f92 100644
--- a/basics/hello-solana/anchor/programs/hello-solana/Cargo.toml
+++ b/basics/hello-solana/anchor/programs/hello-solana/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "hello_solana"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/hello-solana/anchor/tests/bankrun.test.ts b/basics/hello-solana/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..26b73264e
--- /dev/null
+++ b/basics/hello-solana/anchor/tests/bankrun.test.ts
@@ -0,0 +1,24 @@
+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';
+
+const IDL = require('../target/idl/hello_solana.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+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 provider = new BankrunProvider(context);
+
+ const program = new anchor.Program(IDL, provider);
+
+ it('Say hello!', async () => {
+ // Just run Anchor's IDL method to build a transaction!
+ //
+ await program.methods.hello().accounts({}).rpc();
+ });
+});
diff --git a/basics/hello-solana/anchor/tests/test.ts b/basics/hello-solana/anchor/tests/test.ts
index 5ff886423..a563837e3 100644
--- a/basics/hello-solana/anchor/tests/test.ts
+++ b/basics/hello-solana/anchor/tests/test.ts
@@ -1,7 +1,7 @@
-import * as anchor from "@coral-xyz/anchor";
-import { HelloSolana } from "../target/types/hello_solana";
+import * as anchor from '@coral-xyz/anchor';
+import { HelloSolana } from '../target/types/hello_solana';
-describe("hello-solana", () => {
+describe('hello-solana', () => {
// Configure the Anchor provider & load the program IDL
// The IDL gives you a typescript module
//
@@ -9,7 +9,7 @@ describe("hello-solana", () => {
anchor.setProvider(provider);
const program = anchor.workspace.HelloSolana as anchor.Program;
- it("Say hello!", async () => {
+ it('Say hello!', async () => {
// Just run Anchor's IDL method to build a transaction!
//
await program.methods.hello().accounts({}).rpc();
diff --git a/basics/hello-solana/native/cicd.sh b/basics/hello-solana/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/hello-solana/native/cicd.sh
+++ b/basics/hello-solana/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/hello-solana/native/package.json b/basics/hello-solana/native/package.json
index b71a6ab9b..76cd4def3 100644
--- a/basics/hello-solana/native/package.json
+++ b/basics/hello-solana/native/package.json
@@ -1,10 +1,12 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/hello_solana_program.so"
},
"dependencies": {
- "@solana/web3.js": "^1.47.3",
- "fs": "^0.0.1-security"
+ "@solana/web3.js": "^1.47.3"
},
"devDependencies": {
"@types/bn.js": "^5.1.0",
@@ -12,6 +14,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/hello-solana/native/pnpm-lock.yaml b/basics/hello-solana/native/pnpm-lock.yaml
new file mode 100644
index 000000000..315de63a2
--- /dev/null
+++ b/basics/hello-solana/native/pnpm-lock.yaml
@@ -0,0 +1,1342 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/hello-solana/native/program/Cargo.toml b/basics/hello-solana/native/program/Cargo.toml
index 5bfea9184..a2dff0c91 100644
--- a/basics/hello-solana/native/program/Cargo.toml
+++ b/basics/hello-solana/native/program/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2021"
[dependencies]
-solana-program = "1.16.10"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/hello-solana/native/tests/index.test.ts b/basics/hello-solana/native/tests/index.test.ts
new file mode 100644
index 000000000..ec7daa61e
--- /dev/null
+++ b/basics/hello-solana/native/tests/index.test.ts
@@ -0,0 +1,36 @@
+import { describe, test } from 'node:test';
+import { PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { assert } from 'chai';
+import { start } from 'solana-bankrun';
+
+describe('hello-solana', async () => {
+ // load program in solana-bankrun
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'hello_solana_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ test('Say hello!', async () => {
+ const blockhash = context.lastBlockhash;
+ // We set up our instruction first.
+ const ix = new TransactionInstruction({
+ keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }],
+ programId: PROGRAM_ID,
+ data: Buffer.alloc(0), // No data
+ });
+
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ // Now we process the transaction
+ 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[2] === `Program log: Our program's Program ID: ${PROGRAM_ID}`);
+ assert(transaction.logMessages[3].startsWith(`Program ${PROGRAM_ID} consumed`));
+ assert(transaction.logMessages[4] === `Program ${PROGRAM_ID} success`);
+ assert(transaction.logMessages.length === 5);
+ });
+});
diff --git a/basics/hello-solana/native/tests/test.ts b/basics/hello-solana/native/tests/test.ts
deleted file mode 100644
index 6aa820493..000000000
--- a/basics/hello-solana/native/tests/test.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import {
- Connection,
- Keypair,
- sendAndConfirmTransaction,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
-
-describe("hello-solana", () => {
-
- // Loading these from local files for development
- //
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/so/program-keypair.json');
-
- it("Say hello!", async () => {
-
- // We set up our instruction first.
- //
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: payer.publicKey, isSigner: true, isWritable: true}
- ],
- programId: program.publicKey,
- data: Buffer.alloc(0), // No data
- });
-
- // Now we send the transaction over RPC
- //
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix), // Add our instruction (you can add more than one)
- [payer]
- );
- });
- });
-
\ No newline at end of file
diff --git a/basics/hello-solana/seahorse/hello_solana/Anchor.toml b/basics/hello-solana/seahorse/hello_solana/Anchor.toml
index e4a8f0bc4..e8a989da5 100644
--- a/basics/hello-solana/seahorse/hello_solana/Anchor.toml
+++ b/basics/hello-solana/seahorse/hello_solana/Anchor.toml
@@ -11,4 +11,4 @@ cluster = "localnet"
wallet = "/home/thefunnyintrovert/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/hello-solana/seahorse/hello_solana/Cargo.toml b/basics/hello-solana/seahorse/hello_solana/Cargo.toml
index a60de986d..946f3922e 100644
--- a/basics/hello-solana/seahorse/hello_solana/Cargo.toml
+++ b/basics/hello-solana/seahorse/hello_solana/Cargo.toml
@@ -2,3 +2,4 @@
members = [
"programs/*"
]
+resolver = "2"
diff --git a/basics/hello-solana/seahorse/hello_solana/migrations/deploy.ts b/basics/hello-solana/seahorse/hello_solana/migrations/deploy.ts
index 82fb175fa..64a1c3599 100644
--- a/basics/hello-solana/seahorse/hello_solana/migrations/deploy.ts
+++ b/basics/hello-solana/seahorse/hello_solana/migrations/deploy.ts
@@ -2,9 +2,9 @@
// single deploy script that's invoked from the CLI, injecting a provider
// configured from the workspace's Anchor.toml.
-const anchor = require("@coral-xyz/anchor");
+const anchor = require('@coral-xyz/anchor');
-module.exports = async function (provider) {
+module.exports = async (provider) => {
// Configure client to use the provider.
anchor.setProvider(provider);
diff --git a/basics/hello-solana/seahorse/hello_solana/package.json b/basics/hello-solana/seahorse/hello_solana/package.json
index 03847224a..6a11c071b 100644
--- a/basics/hello-solana/seahorse/hello_solana/package.json
+++ b/basics/hello-solana/seahorse/hello_solana/package.json
@@ -4,7 +4,7 @@
"lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
},
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@coral-xyz/anchor": "^0.30.0"
},
"devDependencies": {
"@types/bn.js": "^5.1.0",
diff --git a/basics/hello-solana/seahorse/hello_solana/programs/hello_solana/Cargo.toml b/basics/hello-solana/seahorse/hello_solana/programs/hello_solana/Cargo.toml
index 48ec8f9ef..affa4adf2 100644
--- a/basics/hello-solana/seahorse/hello_solana/programs/hello_solana/Cargo.toml
+++ b/basics/hello-solana/seahorse/hello_solana/programs/hello_solana/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "hello_solana"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[profile.release]
overflow-checks = true
diff --git a/basics/hello-solana/seahorse/hello_solana/tests/hello_solana.ts b/basics/hello-solana/seahorse/hello_solana/tests/hello_solana.ts
index 4a1890b5d..b0f273827 100644
--- a/basics/hello-solana/seahorse/hello_solana/tests/hello_solana.ts
+++ b/basics/hello-solana/seahorse/hello_solana/tests/hello_solana.ts
@@ -1,14 +1,14 @@
-import * as anchor from "@coral-xyz/anchor";
-import { HelloSolana } from "../target/types/hello_solana";
+import * as anchor from '@coral-xyz/anchor';
+import type { HelloSolana } from '../target/types/hello_solana';
-describe("hello_solana", () => {
+describe('hello_solana', () => {
// Configure the client to use the local cluster.
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const program = anchor.workspace.HelloSolana as anchor.Program;
const payer = provider.wallet as anchor.Wallet;
- it("Say hello!", async () => {
+ it('Say hello!', async () => {
// Just run Anchor's IDL method to build a transaction
// and sign it via a signer.
await program.methods
diff --git a/basics/hello-solana/solang/Anchor.toml b/basics/hello-solana/solang/Anchor.toml
deleted file mode 100644
index a1584295c..000000000
--- a/basics/hello-solana/solang/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-hello_solana = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/hello-solana/solang/package.json b/basics/hello-solana/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/hello-solana/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/hello-solana/solang/solidity/hello-solana.sol b/basics/hello-solana/solang/solidity/hello-solana.sol
deleted file mode 100644
index b6af36479..000000000
--- a/basics/hello-solana/solang/solidity/hello-solana.sol
+++ /dev/null
@@ -1,15 +0,0 @@
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract hello_solana {
- // The constructor is used to create a new account
- // Here we create a new account that stores no data and only prints messages to the program logs when the constructor is called.
- @payer(payer) // The "payer" pays for the account creation
- constructor() {
- // We get the program ID by calling 'type(hello_solana).program_id', where "hello_solana" is the name of the contract.
- address programId = type(hello_solana).program_id;
-
- // Print messages to the program logs
- print("Hello, Solana!");
- print("Our program's Program ID: {:}".format(programId));
- }
-}
diff --git a/basics/hello-solana/solang/tests/hello-solana.ts b/basics/hello-solana/solang/tests/hello-solana.ts
deleted file mode 100644
index 8c68c077d..000000000
--- a/basics/hello-solana/solang/tests/hello-solana.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { HelloSolana } from "../target/types/hello_solana";
-
-describe("hello-solana", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- // Generate a new random keypair for the data account.
- const dataAccount = anchor.web3.Keypair.generate();
- const wallet = provider.wallet;
-
- const program = anchor.workspace.HelloSolana as Program;
-
- it("Is initialized!", async () => {
- // Initialize a new data account
- const tx = await program.methods
- .new() // wallet.publicKey is the payer for the new account
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([dataAccount]) // dataAccount keypair is a required signer because we're using it to create a new account
- .rpc();
- console.log("Your transaction signature", tx);
- });
-});
diff --git a/basics/hello-solana/solang/tsconfig.json b/basics/hello-solana/solang/tsconfig.json
deleted file mode 100644
index 5436e66f2..000000000
--- a/basics/hello-solana/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
-}
-
\ No newline at end of file
diff --git a/basics/hello-solana/steel/Cargo.toml b/basics/hello-solana/steel/Cargo.toml
new file mode 100644
index 000000000..0698b60ce
--- /dev/null
+++ b/basics/hello-solana/steel/Cargo.toml
@@ -0,0 +1,22 @@
+[workspace]
+resolver = "2"
+members = ["program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+hello-solana-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "2.0"
+thiserror = "1.0"
+solana-sdk = "1.18"
diff --git a/basics/hello-solana/steel/package.json b/basics/hello-solana/steel/package.json
new file mode 100644
index 000000000..7b16847c5
--- /dev/null
+++ b/basics/hello-solana/steel/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "steel-hello-solana",
+ "version": "1.0.0",
+ "description": "hello world with steel framework for solana",
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/hello_solana_program.so"
+ },
+ "keywords": [],
+ "author": "Ayush Chauhan",
+ "license": "ISC",
+ "devDependencies": {
+ "@types/bn.js": "^5.1.0",
+ "@types/chai": "^4.3.1",
+ "@types/mocha": "^9.1.1",
+ "@types/node": "^22.7.4",
+ "chai": "^4.3.4",
+ "mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^4.3.5"
+ },
+ "dependencies": {
+ "@solana/web3.js": "^1.95.3"
+ }
+}
diff --git a/basics/hello-solana/steel/pnpm-lock.yaml b/basics/hello-solana/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..768835516
--- /dev/null
+++ b/basics/hello-solana/steel/pnpm-lock.yaml
@@ -0,0 +1,1336 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.95.3
+ version: 1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ '@types/node':
+ specifier: ^22.7.4
+ version: 22.7.4
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.7':
+ resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.3':
+ resolution: {integrity: sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.7.4':
+ resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.7.0:
+ resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.7':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.7
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.7.0
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.7.4
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.7.4
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.7.4':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.7.4
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.7.4
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.3(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.7.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/hello-solana/steel/program/Cargo.toml b/basics/hello-solana/steel/program/Cargo.toml
new file mode 100644
index 000000000..f6908924f
--- /dev/null
+++ b/basics/hello-solana/steel/program/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "steel-hello-solana"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+solana-program = "=2.0.13"
+steel = "=2.1.1"
diff --git a/basics/hello-solana/steel/program/src/lib.rs b/basics/hello-solana/steel/program/src/lib.rs
new file mode 100644
index 000000000..e0e9b453d
--- /dev/null
+++ b/basics/hello-solana/steel/program/src/lib.rs
@@ -0,0 +1,16 @@
+use solana_program::msg;
+use steel::*;
+
+entrypoint!(process_instruction);
+
+fn process_instruction(
+ program_id: &Pubkey,
+ _accounts: &[AccountInfo],
+ _instruction_data: &[u8],
+) -> ProgramResult {
+ msg!("Hello, Solana!");
+
+ msg!("Our program's Program ID: {}", &program_id);
+
+ Ok(())
+}
diff --git a/basics/hello-solana/steel/tests/index.test.ts b/basics/hello-solana/steel/tests/index.test.ts
new file mode 100644
index 000000000..4e3a04531
--- /dev/null
+++ b/basics/hello-solana/steel/tests/index.test.ts
@@ -0,0 +1,36 @@
+import { describe, test } from 'node:test';
+import { PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { assert } from 'chai';
+import { start } from 'solana-bankrun';
+
+describe('hello-solana', async () => {
+ // load program in solana-bankrun
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'steel_hello_solana', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ test('Say hello!', async () => {
+ const blockhash = context.lastBlockhash;
+ // We set up our instruction first.
+ const ix = new TransactionInstruction({
+ keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }],
+ programId: PROGRAM_ID,
+ data: Buffer.alloc(0), // No data
+ });
+
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ // Now we process the transaction
+ 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[2] === `Program log: Our program's Program ID: ${PROGRAM_ID}`);
+ assert(transaction.logMessages[3].startsWith(`Program ${PROGRAM_ID} consumed`));
+ assert(transaction.logMessages[4] === `Program ${PROGRAM_ID} success`);
+ assert(transaction.logMessages.length === 5);
+ });
+});
diff --git a/basics/hello-solana/steel/tsconfig.json b/basics/hello-solana/steel/tsconfig.json
new file mode 100644
index 000000000..8c20b2236
--- /dev/null
+++ b/basics/hello-solana/steel/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/basics/pda-rent-payer/anchor/Anchor.toml b/basics/pda-rent-payer/anchor/Anchor.toml
index 55e40abd7..f1015a867 100644
--- a/basics/pda-rent-payer/anchor/Anchor.toml
+++ b/basics/pda-rent-payer/anchor/Anchor.toml
@@ -11,4 +11,4 @@ cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/pda-rent-payer/anchor/Cargo.toml b/basics/pda-rent-payer/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/pda-rent-payer/anchor/Cargo.toml
+++ b/basics/pda-rent-payer/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/pda-rent-payer/anchor/package.json b/basics/pda-rent-payer/anchor/package.json
index ab411155f..439798a07 100644
--- a/basics/pda-rent-payer/anchor/package.json
+++ b/basics/pda-rent-payer/anchor/package.json
@@ -1,8 +1,11 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
diff --git a/basics/pda-rent-payer/anchor/pnpm-lock.yaml b/basics/pda-rent-payer/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..ff7d7a5e5
--- /dev/null
+++ b/basics/pda-rent-payer/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.5.0':
+ resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.5.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.5.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/pda-rent-payer/anchor/programs/anchor-program-example/Cargo.toml b/basics/pda-rent-payer/anchor/programs/anchor-program-example/Cargo.toml
index 60488f380..3b05b6de5 100644
--- a/basics/pda-rent-payer/anchor/programs/anchor-program-example/Cargo.toml
+++ b/basics/pda-rent-payer/anchor/programs/anchor-program-example/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "pda_rent_payer"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/pda-rent-payer/anchor/programs/anchor-program-example/src/instructions/create_new_account.rs b/basics/pda-rent-payer/anchor/programs/anchor-program-example/src/instructions/create_new_account.rs
index ebc3d08da..816c42527 100644
--- a/basics/pda-rent-payer/anchor/programs/anchor-program-example/src/instructions/create_new_account.rs
+++ b/basics/pda-rent-payer/anchor/programs/anchor-program-example/src/instructions/create_new_account.rs
@@ -19,7 +19,7 @@ pub struct CreateNewAccount<'info> {
pub fn create_new_account(ctx: Context) -> Result<()> {
// PDA signer seeds
- let signer_seeds: &[&[&[u8]]] = &[&[b"rent_vault", &[*ctx.bumps.get("rent_vault").unwrap()]]];
+ let signer_seeds: &[&[&[u8]]] = &[&[b"rent_vault", &[ctx.bumps.rent_vault]]];
// The minimum lamports for rent exemption
let lamports = (Rent::get()?).minimum_balance(0);
diff --git a/basics/pda-rent-payer/anchor/tests/bankrun.test.ts b/basics/pda-rent-payer/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..e659e2de8
--- /dev/null
+++ b/basics/pda-rent-payer/anchor/tests/bankrun.test.ts
@@ -0,0 +1,58 @@
+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');
+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(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);
+ });
+});
diff --git a/basics/pda-rent-payer/anchor/tests/test.ts b/basics/pda-rent-payer/anchor/tests/test.ts
index 28c373eb2..aaa281dd2 100644
--- a/basics/pda-rent-payer/anchor/tests/test.ts
+++ b/basics/pda-rent-payer/anchor/tests/test.ts
@@ -1,58 +1,51 @@
-import * as anchor from "@coral-xyz/anchor"
-import { PdaRentPayer } from "../target/types/pda_rent_payer"
-import { LAMPORTS_PER_SOL, PublicKey, Keypair } from "@solana/web3.js"
-import { assert } from "chai"
-
-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
+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;
// PDA for the Rent Vault
- const [rentVaultPDA] = PublicKey.findProgramAddressSync(
- [Buffer.from("rent_vault")],
- program.programId
- )
+ const [rentVaultPDA] = PublicKey.findProgramAddressSync([Buffer.from('rent_vault')], program.programId);
- it("Initialize the Rent Vault", async () => {
+ it('Initialize the Rent Vault', async () => {
// 1 SOL
- const fundAmount = new anchor.BN(LAMPORTS_PER_SOL)
+ const fundAmount = new anchor.BN(LAMPORTS_PER_SOL);
await program.methods
.initRentVault(fundAmount)
.accounts({
payer: wallet.publicKey,
- rentVault: rentVaultPDA,
})
- .rpc()
+ .rpc();
// Check rent vault balance
- const accountInfo = await program.provider.connection.getAccountInfo(
- rentVaultPDA
- )
- assert(accountInfo.lamports === fundAmount.toNumber())
- })
+ const accountInfo = await program.provider.connection.getAccountInfo(rentVaultPDA);
+ assert(accountInfo.lamports === fundAmount.toNumber());
+ });
- it("Create a new account using the Rent Vault", async () => {
+ it('Create a new account using the Rent Vault', async () => {
// Generate a new keypair for the new account
- const newAccount = new Keypair()
+ const newAccount = new Keypair();
await program.methods
.createNewAccount()
.accounts({
- rentVault: rentVaultPDA,
newAccount: newAccount.publicKey,
})
.signers([newAccount])
- .rpc()
+ .rpc();
// Minimum balance for rent exemption for new account
- const lamports = await connection.getMinimumBalanceForRentExemption(0)
+ const lamports = await connection.getMinimumBalanceForRentExemption(0);
// Check that the account was created
- const accountInfo = await connection.getAccountInfo(newAccount.publicKey)
- assert(accountInfo.lamports === lamports)
- })
-})
+ const accountInfo = await connection.getAccountInfo(newAccount.publicKey);
+ assert(accountInfo.lamports === lamports);
+ });
+});
diff --git a/basics/pda-rent-payer/native/cicd.sh b/basics/pda-rent-payer/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/pda-rent-payer/native/cicd.sh
+++ b/basics/pda-rent-payer/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/pda-rent-payer/native/package.json b/basics/pda-rent-payer/native/package.json
index b71a6ab9b..6de220221 100644
--- a/basics/pda-rent-payer/native/package.json
+++ b/basics/pda-rent-payer/native/package.json
@@ -1,10 +1,12 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
- "@solana/web3.js": "^1.47.3",
- "fs": "^0.0.1-security"
+ "@solana/web3.js": "^1.47.3"
},
"devDependencies": {
"@types/bn.js": "^5.1.0",
@@ -12,6 +14,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/pda-rent-payer/native/pnpm-lock.yaml b/basics/pda-rent-payer/native/pnpm-lock.yaml
new file mode 100644
index 000000000..315de63a2
--- /dev/null
+++ b/basics/pda-rent-payer/native/pnpm-lock.yaml
@@ -0,0 +1,1342 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/pda-rent-payer/native/program/Cargo.toml b/basics/pda-rent-payer/native/program/Cargo.toml
index 362afbd68..9e244e1a8 100644
--- a/basics/pda-rent-payer/native/program/Cargo.toml
+++ b/basics/pda-rent-payer/native/program/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2021"
[dependencies]
-solana-program = "1.16.10"
+solana-program = "2.0"
borsh = "0.9.3"
borsh-derive = "0.9.1"
diff --git a/basics/pda-rent-payer/native/tests/test.ts b/basics/pda-rent-payer/native/tests/test.ts
index 7d3067b5a..e6b5c102b 100644
--- a/basics/pda-rent-payer/native/tests/test.ts
+++ b/basics/pda-rent-payer/native/tests/test.ts
@@ -1,105 +1,111 @@
-import {
- Connection,
- Keypair,
- PublicKey,
- sendAndConfirmTransaction,
- SystemProgram,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
+import { Buffer } from 'node:buffer';
+import { describe, test } from 'node:test';
+import { Connection, Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction, sendAndConfirmTransaction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { start } from 'solana-bankrun';
+describe('PDA Rent-Payer', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'pda_rent_payer_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
-
-describe("PDA Rent-Payer", () => {
+ class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+ }
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const PROGRAM_ID: PublicKey = createKeypairFromFile('./program/target/deploy/program-keypair.json').publicKey;
+ enum MyInstruction {
+ InitRentVault = 0,
+ CreateNewAccount = 1,
+ }
- class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
- };
+ class InitRentVault extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(InitRentVaultSchema, this));
+ }
+ }
+ const InitRentVaultSchema = new Map([
+ [
+ InitRentVault,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['fund_lamports', 'u64'],
+ ],
+ },
+ ],
+ ]);
- enum MyInstruction {
- InitRentVault,
- CreateNewAccount,
+ class CreateNewAccount extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CreateNewAccountSchema, this));
}
+ }
+ const CreateNewAccountSchema = new Map([
+ [
+ CreateNewAccount,
+ {
+ kind: 'struct',
+ fields: [['instruction', 'u8']],
+ },
+ ],
+ ]);
- class InitRentVault extends Assignable {
- toBuffer() { return Buffer.from(borsh.serialize(InitRentVaultSchema, this)) }
- };
- const InitRentVaultSchema = new Map([
- [ InitRentVault, {
- kind: 'struct',
- fields: [ ['instruction', 'u8'], ['fund_lamports', 'u64'] ],
- }]
- ]);
+ function deriveRentVaultPda() {
+ const pda = PublicKey.findProgramAddressSync([Buffer.from('rent_vault')], PROGRAM_ID);
+ console.log(`PDA: ${pda[0].toBase58()}`);
+ return pda;
+ }
- class CreateNewAccount extends Assignable {
- toBuffer() { return Buffer.from(borsh.serialize(CreateNewAccountSchema, this)) }
- };
- const CreateNewAccountSchema = new Map([
- [ CreateNewAccount, {
- kind: 'struct',
- fields: [ ['instruction', 'u8'] ],
- }]
- ]);
+ test('Initialize the Rent Vault', async () => {
+ const blockhash = context.lastBlockhash;
+ const [rentVaultPda, _] = deriveRentVaultPda();
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: rentVaultPda, isSigner: false, isWritable: true },
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: new InitRentVault({
+ instruction: MyInstruction.InitRentVault,
+ fund_lamports: 1000000000,
+ }).toBuffer(),
+ });
- function deriveRentVaultPda() {
- const pda = PublicKey.findProgramAddressSync(
- [Buffer.from("rent_vault")],
- PROGRAM_ID,
- )
- console.log(`PDA: ${pda[0].toBase58()}`)
- return pda
- }
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
- it("Initialize the Rent Vault", async () => {
- const [rentVaultPda, _] = deriveRentVaultPda();
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: rentVaultPda, isSigner: false, isWritable: true},
- {pubkey: payer.publicKey, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: PROGRAM_ID,
- data: (new InitRentVault({ instruction: MyInstruction.InitRentVault, fund_lamports: 1000000000 })).toBuffer(),
- });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
- });
+ await client.processTransaction(tx);
+ });
- it("Create a new account using the Rent Vault", async () => {
- const newAccount = Keypair.generate();
- const [rentVaultPda, _] = deriveRentVaultPda();
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: newAccount.publicKey, isSigner: true, isWritable: true},
- {pubkey: rentVaultPda, isSigner: false, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: PROGRAM_ID,
- data: new CreateNewAccount({ instruction: MyInstruction.CreateNewAccount }).toBuffer(),
- });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, newAccount]
- );
+ test('Create a new account using the Rent Vault', async () => {
+ const blockhash = context.lastBlockhash;
+ const newAccount = Keypair.generate();
+ const [rentVaultPda, _] = deriveRentVaultPda();
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: newAccount.publicKey, isSigner: true, isWritable: true },
+ { pubkey: rentVaultPda, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: new CreateNewAccount({
+ instruction: MyInstruction.CreateNewAccount,
+ }).toBuffer(),
});
+
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, newAccount); // Add instruction and Sign the transaction
+
+ // Now we process the transaction
+ await client.processTransaction(tx);
+ });
});
diff --git a/basics/pda-rent-payer/solang/Anchor.toml b/basics/pda-rent-payer/solang/Anchor.toml
deleted file mode 100644
index 92f3b296b..000000000
--- a/basics/pda-rent-payer/solang/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-pda_rent_payer = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/pda-rent-payer/solang/libraries/system_instruction.sol b/basics/pda-rent-payer/solang/libraries/system_instruction.sol
deleted file mode 100644
index 0ba370c8c..000000000
--- a/basics/pda-rent-payer/solang/libraries/system_instruction.sol
+++ /dev/null
@@ -1,300 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-// Disclaimer: This library provides a bridge for Solidity to interact with Solana's system instructions. Although it is production ready,
-// it has not been audited for security, so use it at your own risk.
-
-import 'solana';
-
-library SystemInstruction {
- address constant systemAddress = address"11111111111111111111111111111111";
- address constant recentBlockHashes = address"SysvarRecentB1ockHashes11111111111111111111";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
- uint64 constant state_size = 80;
-
- enum Instruction {
- CreateAccount,
- Assign,
- Transfer,
- CreateAccountWithSeed,
- AdvanceNounceAccount,
- WithdrawNonceAccount,
- InitializeNonceAccount,
- AuthorizeNonceAccount,
- Allocate,
- AllocateWithSeed,
- AssignWithSeed,
- TransferWithSeed,
- UpgradeNonceAccount // This is not available on Solana v1.9.15
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to public key for the account to be created
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account(address from, address to, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.CreateAccount), lamports, space, owner);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to the public key for the account to be created. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'to' address using the seed
- /// @param seed the string utilized to created the 'to' public key
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account_with_seed(address from, address to, address base, string seed, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- uint32 buffer_size = 92 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.CreateAccountWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- uint32 offset = seed.length + 44;
- bincode.writeUint64LE(lamports, offset);
- offset += 8;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Assign account to a program (owner)
- ///
- /// @param pubkey the public key for the account whose owner is going to be reassigned
- /// @param owner the public key for the new account owner
- function assign(address pubkey, address owner) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pubkey, is_signer: true, is_writable: true})
- ];
- bytes bincode = abi.encode(uint32(Instruction.Assign), owner);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Assign account to a program (owner) based on a seed
- ///
- /// @param addr the public key for the account whose owner is going to be reassigned. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to created the 'addr' public key
- /// @param owner the public key for the new program owner
- function assign_with_seed(address addr, address base, string seed, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
-
- uint32 buffer_size = 76 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.AssignWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- bincode.writeAddress(owner, 44 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports between accounts
- ///
- /// @param from public key for the funding account
- /// @param to public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer(address from, address to, uint64 lamports) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Transfer), lamports);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports from a derived address
- ///
- /// @param from_pubkey The funding account public key. It should match create_with_seed(from_base, seed, from_owner)
- /// @param from_base the base address that derived the 'from_pubkey' key using the seed
- /// @param seed the string utilized to create the 'from_pubkey' public key
- /// @param from_owner owner to use to derive the funding account address
- /// @param to_pubkey the public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer_with_seed(address from_pubkey, address from_base, string seed, address from_owner, address to_pubkey, uint64 lamports) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: from_base, is_signer: true, is_writable: false}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true})
- ];
-
- uint32 buffer_size = seed.length + 52;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.TransferWithSeed), 0);
- bincode.writeUint64LE(lamports, 4);
- bincode.writeUint64LE(seed.length, 12);
- bincode.writeString(seed, 20);
- bincode.writeAddress(from_owner, 20 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Allocate space in a (possibly new) account without funding
- ///
- /// @param pub_key account for which to allocate space
- /// @param space number of bytes of memory to allocate
- function allocate(address pub_key, uint64 space) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pub_key, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Allocate), space);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Allocate space for an assign an account at an address derived from a base public key and a seed
- ///
- /// @param addr account for which to allocate space. It should match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param space number of bytes of memory to allocate
- /// @param owner owner to use to derive the 'addr' account address
- function allocate_with_seed(address addr, address base, string seed, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = new bytes(seed.length + 84);
- bincode.writeUint32LE(uint32(Instruction.AllocateWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(seed.length, 36);
- bincode.writeString(seed, 44);
- uint32 offset = 44 + seed.length;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new nonce account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the account to be created. The public key must match create_with_seed(base, seed, systemAddress)
- /// @param base the base address that derived the 'nonce' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account_with_seed(address from, address nonce, address base, string seed, address authority, uint64 lamports) internal {
- create_account_with_seed(from, nonce, base, seed, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the nonce account to be created
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account(address from, address nonce, address authority, uint64 lamports) internal {
- create_account(from, nonce, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Consumes a stored nonce, replacing it with a successor
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the publick key for the entity authorized to execute instructins on the account
- function advance_nonce_account(address nonce_pubkey, address authorized_pubkey) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AdvanceNounceAccount));
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Withdraw funds from a nonce account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param to_pubkey the recipient account
- /// @param lamports the number of lamports to withdraw
- function withdraw_nonce_account(address nonce_pubkey, address authorized_pubkey, address to_pubkey, uint64 lamports) internal {
- AccountMeta[5] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.WithdrawNonceAccount), lamports);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Change the entity authorized to execute nonce instructions on the account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param new_authority
- function authorize_nonce_account(address nonce_pubkey, address authorized_pubkey, address new_authority) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AuthorizeNonceAccount), new_authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// One-time idempotent upgrade of legacy nonce version in order to bump them out of chain domain.
- ///
- /// @param nonce the public key for the nonce account
- // This is not available on Solana v1.9.15
- function upgrade_nonce_account(address nonce) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.UpgradeNonceAccount));
- systemAddress.call{accounts: meta}(bincode);
- }
-}
diff --git a/basics/pda-rent-payer/solang/package.json b/basics/pda-rent-payer/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/pda-rent-payer/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/pda-rent-payer/solang/solidity/pda-rent-payer.sol b/basics/pda-rent-payer/solang/solidity/pda-rent-payer.sol
deleted file mode 100644
index bef742063..000000000
--- a/basics/pda-rent-payer/solang/solidity/pda-rent-payer.sol
+++ /dev/null
@@ -1,35 +0,0 @@
-
-import "../libraries/system_instruction.sol";
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract pda_rent_payer {
-
- @payer(payer) // "payer" is the account that pays for creating the account
- @seed("rent_vault") // hardcoded seed
- constructor(@bump bytes1 bump, uint64 fundLamports) {
- // Independently derive the PDA address from the seeds, bump, and programId
- (address pda, bytes1 _bump) = try_find_program_address(["rent_vault"], type(pda_rent_payer).program_id);
-
- // Verify that the bump passed to the constructor matches the bump derived from the seeds and programId
- // This ensures that only the canonical pda address can be used to create the account (first bump that generates a valid pda address)
- require(bump == _bump, 'INVALID_BUMP');
-
- // Fund the pda account with additional lamports
- SystemInstruction.transfer(
- tx.accounts.payer.key, // from
- address(this), // to (the address of the account being created)
- fundLamports // amount of lamports to transfer
- );
- }
-
- function createNewAccount(uint64 lamports) public {
- AccountInfo from = tx.accounts[0]; // first account must be an account owned by the program
- AccountInfo to = tx.accounts[1]; // second account must be the intended recipient
-
- print("From: {:}".format(from.key));
- print("To: {:}".format(to.key));
-
- from.lamports -= lamports;
- to.lamports += lamports;
- }
-}
diff --git a/basics/pda-rent-payer/solang/tests/pda-rent-payer.ts b/basics/pda-rent-payer/solang/tests/pda-rent-payer.ts
deleted file mode 100644
index d2ae69ebf..000000000
--- a/basics/pda-rent-payer/solang/tests/pda-rent-payer.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { PdaRentPayer } from "../target/types/pda_rent_payer";
-import { PublicKey } from "@solana/web3.js";
-
-describe("pda-rent-payer", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- const wallet = provider.wallet;
- const connection = provider.connection;
-
- const program = anchor.workspace.PdaRentPayer as Program;
-
- // Amount of additional lamports to fund the dataAccount with.
- const fundLamports = 1 * anchor.web3.LAMPORTS_PER_SOL;
-
- // Derive the PDA that will be used to initialize the dataAccount.
- const [dataAccountPDA, bump] = PublicKey.findProgramAddressSync(
- [Buffer.from("rent_vault")],
- program.programId
- );
-
- it("Initialize the Rent Vault", async () => {
- // Add your test here.
- const tx = await program.methods
- .new([bump], new anchor.BN(fundLamports))
- .accounts({ dataAccount: dataAccountPDA })
- .rpc();
- console.log("Your transaction signature", tx);
-
- const accountInfo = await connection.getAccountInfo(dataAccountPDA);
- console.log("AccountInfo Lamports:", accountInfo.lamports);
- });
-
- it("Create a new account using the Rent Vault", async () => {
- const newAccount = anchor.web3.Keypair.generate();
- const space = 100; // number of bytes
-
- // Get the minimum balance for the account to be rent exempt.
- const lamports = await connection.getMinimumBalanceForRentExemption(space);
-
- // Invoke the createNewAccount instruction on our program
- const tx = await program.methods
- .createNewAccount(new anchor.BN(lamports))
- .accounts({ dataAccount: dataAccountPDA })
- .remainingAccounts([
- {
- pubkey: newAccount.publicKey, // account to create by directly transferring lamports
- isWritable: true,
- isSigner: false,
- },
- ])
- .rpc();
- console.log("Your transaction signature", tx);
-
- const accountInfo = await connection.getAccountInfo(newAccount.publicKey);
- console.log("AccountInfo Lamports:", accountInfo.lamports);
- });
-});
diff --git a/basics/pda-rent-payer/solang/tsconfig.json b/basics/pda-rent-payer/solang/tsconfig.json
deleted file mode 100644
index 5436e66f2..000000000
--- a/basics/pda-rent-payer/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
-}
-
\ No newline at end of file
diff --git a/basics/pda-rent-payer/steel/.gitignore b/basics/pda-rent-payer/steel/.gitignore
new file mode 100644
index 000000000..1fae5e12b
--- /dev/null
+++ b/basics/pda-rent-payer/steel/.gitignore
@@ -0,0 +1,3 @@
+target
+test-ledger
+node_modules
diff --git a/basics/pda-rent-payer/steel/Cargo.toml b/basics/pda-rent-payer/steel/Cargo.toml
new file mode 100644
index 000000000..33a580eb3
--- /dev/null
+++ b/basics/pda-rent-payer/steel/Cargo.toml
@@ -0,0 +1,22 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+pda-rent-payer-api = { path = "./api", version = "0.1.0" }
+borsh = "1.5"
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/pda-rent-payer/steel/README.md b/basics/pda-rent-payer/steel/README.md
new file mode 100644
index 000000000..109ffcf66
--- /dev/null
+++ b/basics/pda-rent-payer/steel/README.md
@@ -0,0 +1,28 @@
+# PDA Rent Payer
+
+**PDA Rent Payer** is a program that uses a PDA to pay the rent
+for the creation of a system program by simply transferring lamports to it
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`Add`](program/src/add.rs) – Add ...
+- [`Initialize`](program/src/initialize.rs) – Initialize ...
+
+## State
+- [`Counter`](api/src/state/counter.rs) – Counter ...
+
+## Get started
+
+Compile your program:
+```sh
+steel build
+```
+
+Run unit and integration tests:
+```sh
+steel test
+```
diff --git a/basics/pda-rent-payer/steel/api/Cargo.toml b/basics/pda-rent-payer/steel/api/Cargo.toml
new file mode 100644
index 000000000..e49a69932
--- /dev/null
+++ b/basics/pda-rent-payer/steel/api/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "pda-rent-payer-api"
+description = "API for interacting with the PDA rent payer program"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[dependencies]
+borsh.workspace = true
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/pda-rent-payer/steel/api/src/consts.rs b/basics/pda-rent-payer/steel/api/src/consts.rs
new file mode 100644
index 000000000..94ba2471b
--- /dev/null
+++ b/basics/pda-rent-payer/steel/api/src/consts.rs
@@ -0,0 +1,5 @@
+// Seed of the rent vault account PDA.
+pub const RENT_VAULT: &[u8] = b"rent_vault";
+
+// Seed of the account PDA to be created.
+// pub const NEW_ACCOUNT: &[u8] = b"new_account";
diff --git a/basics/pda-rent-payer/steel/api/src/error.rs b/basics/pda-rent-payer/steel/api/src/error.rs
new file mode 100644
index 000000000..bfa5520e9
--- /dev/null
+++ b/basics/pda-rent-payer/steel/api/src/error.rs
@@ -0,0 +1,10 @@
+use steel::*;
+
+#[derive(Debug, Error, Clone, Copy, PartialEq, Eq, IntoPrimitive)]
+#[repr(u32)]
+pub enum PdaRentPayerError {
+ #[error("Rent vault account already initialized")]
+ RentVaultInitialized = 0,
+}
+
+error!(PdaRentPayerError);
diff --git a/basics/pda-rent-payer/steel/api/src/instruction.rs b/basics/pda-rent-payer/steel/api/src/instruction.rs
new file mode 100644
index 000000000..94249e540
--- /dev/null
+++ b/basics/pda-rent-payer/steel/api/src/instruction.rs
@@ -0,0 +1,22 @@
+use borsh::{BorshDeserialize, BorshSerialize};
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum PdaRentPayerInstruction {
+ InitializeRentVault = 0,
+ CreateNewAccount = 1,
+}
+
+#[repr(C)]
+#[derive(BorshSerialize, BorshDeserialize, Clone, Copy, Debug, Pod, Zeroable)]
+pub struct InitializeRentVault {
+ pub amount: u64,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct CreateNewAccount {}
+
+instruction!(PdaRentPayerInstruction, InitializeRentVault);
+instruction!(PdaRentPayerInstruction, CreateNewAccount);
diff --git a/basics/pda-rent-payer/steel/api/src/lib.rs b/basics/pda-rent-payer/steel/api/src/lib.rs
new file mode 100644
index 000000000..c250ef1d5
--- /dev/null
+++ b/basics/pda-rent-payer/steel/api/src/lib.rs
@@ -0,0 +1,18 @@
+pub mod consts;
+pub mod error;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::error::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("HK5TuboXztZv7anSa3GptyCZ5wMYiqbY8kNSVEtqWDuD");
diff --git a/basics/pda-rent-payer/steel/api/src/sdk.rs b/basics/pda-rent-payer/steel/api/src/sdk.rs
new file mode 100644
index 000000000..799f3a50a
--- /dev/null
+++ b/basics/pda-rent-payer/steel/api/src/sdk.rs
@@ -0,0 +1,26 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn init_rent_vault(signer_info: Pubkey, system_program: Pubkey, amount: u64) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer_info, true),
+ AccountMeta::new(rent_vault_pda().0, false),
+ AccountMeta::new_readonly(system_program, false),
+ ],
+ data: InitializeRentVault { amount }.to_bytes(),
+ }
+}
+
+pub fn create_new_account(rent_vault: Pubkey, new_account: Pubkey) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(rent_vault, false),
+ AccountMeta::new(new_account, true),
+ ],
+ data: CreateNewAccount {}.to_bytes(),
+ }
+}
diff --git a/basics/pda-rent-payer/steel/api/src/state/accounts.rs b/basics/pda-rent-payer/steel/api/src/state/accounts.rs
new file mode 100644
index 000000000..c2f103cb4
--- /dev/null
+++ b/basics/pda-rent-payer/steel/api/src/state/accounts.rs
@@ -0,0 +1,16 @@
+use super::PdaRentPayerAccountDiscriminator;
+use steel::*;
+
+/// This empty struct represents the payer vault account
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct RentVault {}
+
+/// This empty struct represents the account
+/// that the vault will pay for
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct NewAccount {}
+
+account!(PdaRentPayerAccountDiscriminator, RentVault);
+account!(PdaRentPayerAccountDiscriminator, NewAccount);
diff --git a/basics/pda-rent-payer/steel/api/src/state/mod.rs b/basics/pda-rent-payer/steel/api/src/state/mod.rs
new file mode 100644
index 000000000..cd29b1718
--- /dev/null
+++ b/basics/pda-rent-payer/steel/api/src/state/mod.rs
@@ -0,0 +1,19 @@
+mod accounts;
+
+use crate::consts::*;
+pub use accounts::*;
+use steel::*;
+
+/// This enum represents the discriminator for the
+/// accounts this program can interact with
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum PdaRentPayerAccountDiscriminator {
+ RentVault = 0,
+ NewAccount = 1,
+}
+
+/// Fetch PDA of the rent_vault account.
+pub fn rent_vault_pda() -> (Pubkey, u8) {
+ Pubkey::find_program_address(&[RENT_VAULT], &crate::id())
+}
diff --git a/basics/pda-rent-payer/steel/cicd.sh b/basics/pda-rent-payer/steel/cicd.sh
new file mode 100644
index 000000000..505a158f1
--- /dev/null
+++ b/basics/pda-rent-payer/steel/cicd.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# Buld and deploy this program with ease using a single command
+# Run this script with "bash cicd.sh" or "./cicd.sh"
+# Note: Try running "chmod +x cicd.sh" if you face any issues.
+
+# Check if cargo is installed
+if ! command -v cargo &> /dev/null
+then
+ echo "Cargo could not be found. Please install Rust."
+ exit 1
+fi
+
+# Check if solana CLI is installed
+if ! command -v solana &> /dev/null
+then
+ echo "Solana CLI could not be found. Please install Solana."
+ exit 1
+fi
+
+
+# Build
+cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so
+
+# Deploy
+solana program deploy ./program/target/so/pda_rent_payer_program.so
diff --git a/basics/pda-rent-payer/steel/package.json b/basics/pda-rent-payer/steel/package.json
new file mode 100644
index 000000000..c8c2f55d2
--- /dev/null
+++ b/basics/pda-rent-payer/steel/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "pda-rent-payer-program",
+ "version": "1.0.0",
+ "type": "module",
+ "description": "Use a PDA to pay the rent for the creation of a new account.",
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/pda_rent_payer_program.so"
+ },
+ "keywords": ["solana"],
+ "author": "",
+ "license": "MIT",
+ "dependencies": {
+ "@solana/web3.js": "^1.95.4"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.3.20",
+ "@types/mocha": "^10.0.9",
+ "@types/node": "^22.8.5",
+ "borsh": "^2.0.0",
+ "chai": "^4.5.0",
+ "mocha": "^10.8.2",
+ "solana-bankrun": "^0.4.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^5.6.3"
+ }
+}
diff --git a/basics/pda-rent-payer/steel/pnpm-lock.yaml b/basics/pda-rent-payer/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..1da79b894
--- /dev/null
+++ b/basics/pda-rent-payer/steel/pnpm-lock.yaml
@@ -0,0 +1,1268 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.95.4
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/chai':
+ specifier: ^4.3.20
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^10.0.9
+ version: 10.0.9
+ '@types/node':
+ specifier: ^22.8.5
+ version: 22.8.5
+ borsh:
+ specifier: ^2.0.0
+ version: 2.0.0
+ chai:
+ specifier: ^4.5.0
+ version: 4.5.0
+ mocha:
+ specifier: ^10.8.2
+ version: 10.8.2
+ solana-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@10.8.2)
+ typescript:
+ specifier: ^5.6.3
+ version: 5.6.3
+
+packages:
+
+ '@babel/runtime@7.26.0':
+ resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@10.0.9':
+ resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.8.5':
+ resolution: {integrity: sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ borsh@2.0.0:
+ resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@10.8.2:
+ resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.26.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.26.0
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.8.5
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@10.0.9': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.8.5':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.8.5
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.8.5
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ borsh@2.0.0: {}
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ debug@4.3.7(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@10.8.2:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.6.0
+ debug: 4.3.7(supports-color@8.1.1)
+ diff: 5.2.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 8.1.0
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 16.2.0
+ yargs-parser: 20.2.9
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@10.8.2):
+ dependencies:
+ mocha: 10.8.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/pda-rent-payer/steel/program/Cargo.toml b/basics/pda-rent-payer/steel/program/Cargo.toml
new file mode 100644
index 000000000..79ae1fde0
--- /dev/null
+++ b/basics/pda-rent-payer/steel/program/Cargo.toml
@@ -0,0 +1,26 @@
+[package]
+name = "pda-rent-payer-program"
+description = ""
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+borsh.workspace = true
+pda-rent-payer-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
diff --git a/basics/pda-rent-payer/steel/program/src/create_new_account.rs b/basics/pda-rent-payer/steel/program/src/create_new_account.rs
new file mode 100644
index 000000000..72a1b112d
--- /dev/null
+++ b/basics/pda-rent-payer/steel/program/src/create_new_account.rs
@@ -0,0 +1,38 @@
+use pda_rent_payer_api::prelude::*;
+use solana_program::msg;
+use steel::sysvar::rent::Rent;
+use steel::*;
+
+pub fn process_create_account(accounts: &[AccountInfo<'_>]) -> ProgramResult {
+ // Load accounts
+ let [rent_vault_info, new_account_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ // Validate accounts
+ new_account_info.is_signer()?.is_empty()?.is_writable()?;
+ rent_vault_info
+ .is_writable()?
+ .has_seeds(&[RENT_VAULT], &pda_rent_payer_api::ID)?;
+ system_program.is_program(&system_program::ID)?;
+
+ let vault_balance = rent_vault_info.lamports();
+
+ msg!("Vault balance: {}", vault_balance);
+ // First we get the lamports required for rent
+ // assuming this account has no inner data
+ let lamports_required_for_rent = (Rent::get()?).minimum_balance(0);
+
+ if vault_balance < lamports_required_for_rent {
+ return Err(ProgramError::InsufficientFunds);
+ }
+
+ // Then we create a new account by simply sending a
+ // token amount to the new account.
+ rent_vault_info.send(lamports_required_for_rent, new_account_info);
+
+ msg!("Created new account.");
+ msg!("New account: {:?}", new_account_info.key);
+
+ Ok(())
+}
diff --git a/basics/pda-rent-payer/steel/program/src/init_rent_vault.rs b/basics/pda-rent-payer/steel/program/src/init_rent_vault.rs
new file mode 100644
index 000000000..54b74dfeb
--- /dev/null
+++ b/basics/pda-rent-payer/steel/program/src/init_rent_vault.rs
@@ -0,0 +1,61 @@
+use borsh::BorshDeserialize;
+use pda_rent_payer_api::prelude::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_initialize_vault(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ // Parse args
+ let args = InitializeRentVault::try_from_slice(data)?;
+
+ // Load and validate accounts.
+ let [payer_info, rent_vault_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ payer_info.is_signer()?;
+ rent_vault_info
+ .is_empty()?
+ .is_writable()?
+ .has_seeds(&[RENT_VAULT], &pda_rent_payer_api::ID)?;
+ system_program.is_program(&system_program::ID)?;
+
+ // Initialize vault.
+ create_account::(
+ rent_vault_info,
+ system_program,
+ payer_info,
+ &pda_rent_payer_api::ID,
+ &[RENT_VAULT],
+ )?;
+
+ let (_, bump) = rent_vault_pda();
+
+ // Get account to see if it's created
+ let _vault = rent_vault_info.as_account_mut::(&pda_rent_payer_api::ID)?;
+
+ let transfer = solana_program::program::invoke_signed(
+ &solana_program::system_instruction::transfer(
+ payer_info.key,
+ rent_vault_info.key,
+ args.amount,
+ ),
+ &[
+ payer_info.clone(),
+ rent_vault_info.clone(),
+ system_program.clone(),
+ ],
+ &[&[RENT_VAULT, &[bump]]],
+ );
+
+ let vault_balance = rent_vault_info.lamports();
+ msg!("Updated vault balance: {}", vault_balance);
+
+ match transfer {
+ Ok(_) => (),
+ Err(e) => return Err(e),
+ }
+
+ msg!("Initialized rent vault.");
+ msg!("PDA: {:?}", rent_vault_info.key);
+
+ Ok(())
+}
diff --git a/basics/pda-rent-payer/steel/program/src/lib.rs b/basics/pda-rent-payer/steel/program/src/lib.rs
new file mode 100644
index 000000000..a325d17dc
--- /dev/null
+++ b/basics/pda-rent-payer/steel/program/src/lib.rs
@@ -0,0 +1,27 @@
+mod create_new_account;
+mod init_rent_vault;
+
+use create_new_account::*;
+use init_rent_vault::*;
+
+use pda_rent_payer_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ // Parse instruction automatically detects which instruction is being called
+ // based on the discriminator and returns the instruction and the data
+ let (ix, data) = parse_instruction(&pda_rent_payer_api::ID, program_id, data)?;
+
+ match ix {
+ PdaRentPayerInstruction::InitializeRentVault => process_initialize_vault(accounts, data)?,
+ PdaRentPayerInstruction::CreateNewAccount => process_create_account(accounts)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/pda-rent-payer/steel/tests/main.test.ts b/basics/pda-rent-payer/steel/tests/main.test.ts
new file mode 100644
index 000000000..d2947e9da
--- /dev/null
+++ b/basics/pda-rent-payer/steel/tests/main.test.ts
@@ -0,0 +1,122 @@
+import { type Blockhash, Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { before, describe, it } from 'mocha';
+import { type BanksClient, type ProgramTestContext, start } from 'solana-bankrun';
+
+// Constants
+const PROGRAM_ID = new PublicKey('HK5TuboXztZv7anSa3GptyCZ5wMYiqbY8kNSVEtqWDuD');
+const VAULT_SEED = Buffer.from('rent_vault');
+const LOAD_LAMPORTS = 1 * LAMPORTS_PER_SOL; // 1 SOL
+
+const instructionDiscriminators = {
+ InitializeRentVault: 0,
+ CreateNewAccount: 1,
+};
+
+describe('Pay the rent for an account using a PDA', () => {
+ // Helper classes and methods to serialize instruction data
+ class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+ }
+
+ class InitializeRentVault extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(InitRentVaultSchema, this));
+ }
+ }
+ const InitRentVaultSchema = {
+ struct: {
+ instruction: 'u8',
+ fund_lamports: 'u64',
+ },
+ };
+
+ class CreateNewAccount extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CreateNewAccountSchema, this));
+ }
+ }
+ const CreateNewAccountSchema = {
+ struct: {
+ instruction: 'u8',
+ },
+ };
+
+ const [vault_pda, _] = PublicKey.findProgramAddressSync([VAULT_SEED], PROGRAM_ID);
+
+ let context: ProgramTestContext;
+ let client: BanksClient;
+ let payer: Keypair;
+
+ before(async () => {
+ context = await start([{ name: 'pda_rent_payer_program', programId: PROGRAM_ID }], []);
+ client = context.banksClient;
+ payer = context.payer;
+ });
+
+ it('should initialize rent vault PDA', async () => {
+ const ixdata = new InitializeRentVault({
+ instruction: instructionDiscriminators.InitializeRentVault,
+ fund_lamports: BigInt(LOAD_LAMPORTS),
+ });
+ const data = ixdata.toBuffer();
+
+ const Createix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: false },
+ { pubkey: vault_pda, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data,
+ });
+
+ // const Fundix = SystemProgram.transfer({
+ // fromPubkey: payer.publicKey,
+ // toPubkey: vault_pda,
+ // lamports: LOAD_LAMPORTS,
+ // });
+
+ const tx = new Transaction();
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.add(Createix).sign(payer);
+
+ // Process Transaction with all the instructions
+ await client.processTransaction(tx);
+ });
+
+ it('should create new account using rent vault', async () => {
+ const newAccount = Keypair.generate();
+
+ const data = new CreateNewAccount({
+ instruction: instructionDiscriminators.CreateNewAccount,
+ }).toBuffer();
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: vault_pda, isSigner: false, isWritable: true },
+ { pubkey: newAccount.publicKey, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data,
+ });
+
+ const tx = new Transaction();
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.add(ix).sign(newAccount);
+
+ // Process Transaction with all the instructions
+ await client.processTransaction(tx);
+
+ // assert(
+ // transaction.logMessages[3].startsWith(
+ // "Program log: Created new account!",
+ // ),
+ // );
+ });
+});
diff --git a/basics/pda-rent-payer/steel/tsconfig.json b/basics/pda-rent-payer/steel/tsconfig.json
new file mode 100644
index 000000000..f7e571235
--- /dev/null
+++ b/basics/pda-rent-payer/steel/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "strict": true,
+ "sourceMap": true,
+ "outDir": "./dist",
+ "baseUrl": "."
+ }
+}
diff --git a/basics/processing-instructions/README.md b/basics/processing-instructions/README.md
index 3980619c0..17e81dd06 100644
--- a/basics/processing-instructions/README.md
+++ b/basics/processing-instructions/README.md
@@ -1,11 +1,11 @@
# Custom Instruction Data
-Let's take a look at how to pass our own custom instruction data to a program. This data must be *serialized* to *Berkeley Packet Filter (BPF)* format - which is what the Solana runtime supports for serialized data.
+Let's take a look at how to pass our own custom instruction data to a program. This data must be *serialized* to *Berkeley Packet Filter (BPF)* format - which is what the Solana runtime supports for serialized data.
-BPF is exactly why we use `cargo build-bpf` to build Solana programs in Rust. For instructions sent over RPC it's no different. We'll use a library called `borsh` on both client and program side.
+BPF is exactly why we use `cargo build-sbf` to build Solana programs in Rust. For instructions sent over RPC it's no different. We'll use a library called `borsh` on both client and program side.
_____
-**For native**, we need to add `borsh` and `borsh-derive` to `Cargo.toml` so we can mark a struct as serializable to/from **BPF format**.
+**For native**, we need to add `borsh` and `borsh-derive` to `Cargo.toml` so we can mark a struct as serializable to/from **BPF format**.
-**For Anchor**, you'll see that they've made it quite easy (as in, they do all of the serializing for you).
\ No newline at end of file
+**For Anchor**, you'll see that they've made it quite easy (as in, they do all of the serializing for you).
diff --git a/basics/processing-instructions/anchor/Anchor.toml b/basics/processing-instructions/anchor/Anchor.toml
index ad6645cd1..e214f6440 100644
--- a/basics/processing-instructions/anchor/Anchor.toml
+++ b/basics/processing-instructions/anchor/Anchor.toml
@@ -11,4 +11,4 @@ cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/processing-instructions/anchor/Cargo.toml b/basics/processing-instructions/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/processing-instructions/anchor/Cargo.toml
+++ b/basics/processing-instructions/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/processing-instructions/anchor/package.json b/basics/processing-instructions/anchor/package.json
index ab411155f..439798a07 100644
--- a/basics/processing-instructions/anchor/package.json
+++ b/basics/processing-instructions/anchor/package.json
@@ -1,8 +1,11 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
diff --git a/basics/processing-instructions/anchor/pnpm-lock.yaml b/basics/processing-instructions/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..cf21eb739
--- /dev/null
+++ b/basics/processing-instructions/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/processing-instructions/anchor/programs/processing-instructions/Cargo.toml b/basics/processing-instructions/anchor/programs/processing-instructions/Cargo.toml
index e85411aaf..74759a3f1 100644
--- a/basics/processing-instructions/anchor/programs/processing-instructions/Cargo.toml
+++ b/basics/processing-instructions/anchor/programs/processing-instructions/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "processing_instructions"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/processing-instructions/anchor/tests/bankrun.test.ts b/basics/processing-instructions/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..42804e0b8
--- /dev/null
+++ b/basics/processing-instructions/anchor/tests/bankrun.test.ts
@@ -0,0 +1,23 @@
+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 { ProcessingInstructions } from '../target/types/processing_instructions';
+
+const IDL = require('../target/idl/processing_instructions.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+describe('custom-instruction-data', async () => {
+ const context = await startAnchor('', [{ name: 'processing_instructions', programId: PROGRAM_ID }], []);
+ const provider = new BankrunProvider(context);
+
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ it('Go to the park!', async () => {
+ // Anchor makes it super simple.
+ await program.methods.goToPark('Jimmy', 3).accounts({}).rpc();
+ await program.methods.goToPark('Mary', 10).accounts({}).rpc();
+ });
+});
diff --git a/basics/processing-instructions/anchor/tests/test.ts b/basics/processing-instructions/anchor/tests/test.ts
index cb2ae1c8d..925d2fde7 100644
--- a/basics/processing-instructions/anchor/tests/test.ts
+++ b/basics/processing-instructions/anchor/tests/test.ts
@@ -1,16 +1,15 @@
-import * as anchor from "@coral-xyz/anchor";
-import { ProcessingInstructions } from "../target/types/processing_instructions";
+import * as anchor from '@coral-xyz/anchor';
+import type { ProcessingInstructions } from '../target/types/processing_instructions';
-describe("custom-instruction-data", () => {
+describe('custom-instruction-data', () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
- const program = anchor.workspace
- .ProcessingInstructions as anchor.Program;
+ const program = anchor.workspace.ProcessingInstructions as anchor.Program;
- it("Go to the park!", async () => {
+ it('Go to the park!', async () => {
// Again, Anchor makes it super simple.
//
- await program.methods.goToPark("Jimmy", 3).accounts({}).rpc();
- await program.methods.goToPark("Mary", 10).accounts({}).rpc();
+ await program.methods.goToPark('Jimmy', 3).accounts({}).rpc();
+ await program.methods.goToPark('Mary', 10).accounts({}).rpc();
});
});
diff --git a/basics/processing-instructions/native/cicd.sh b/basics/processing-instructions/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/processing-instructions/native/cicd.sh
+++ b/basics/processing-instructions/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/processing-instructions/native/package.json b/basics/processing-instructions/native/package.json
index b71a6ab9b..6de220221 100644
--- a/basics/processing-instructions/native/package.json
+++ b/basics/processing-instructions/native/package.json
@@ -1,10 +1,12 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
- "@solana/web3.js": "^1.47.3",
- "fs": "^0.0.1-security"
+ "@solana/web3.js": "^1.47.3"
},
"devDependencies": {
"@types/bn.js": "^5.1.0",
@@ -12,6 +14,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/processing-instructions/native/pnpm-lock.yaml b/basics/processing-instructions/native/pnpm-lock.yaml
new file mode 100644
index 000000000..315de63a2
--- /dev/null
+++ b/basics/processing-instructions/native/pnpm-lock.yaml
@@ -0,0 +1,1342 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/processing-instructions/native/program/Cargo.toml b/basics/processing-instructions/native/program/Cargo.toml
index 3440af364..b4a4c3465 100644
--- a/basics/processing-instructions/native/program/Cargo.toml
+++ b/basics/processing-instructions/native/program/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
borsh = "0.9.3"
borsh-derive = "0.9.1"
-solana-program = "1.16.10"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/processing-instructions/native/tests/test.ts b/basics/processing-instructions/native/tests/test.ts
index fa53d2cb7..e8b80427a 100644
--- a/basics/processing-instructions/native/tests/test.ts
+++ b/basics/processing-instructions/native/tests/test.ts
@@ -1,83 +1,70 @@
-import {
- Connection,
- Keypair,
- sendAndConfirmTransaction,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
+import { Buffer } from 'node:buffer';
+import { describe, test } from 'node:test';
+import { PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { start } from 'solana-bankrun';
+describe('custom-instruction-data', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'processing_instructions_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
+ class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+ }
+ class InstructionData extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(InstructionDataSchema, this));
+ }
+ }
-describe("custom-instruction-data", () => {
+ const InstructionDataSchema = new Map([
+ [
+ InstructionData,
+ {
+ kind: 'struct',
+ fields: [
+ ['name', 'string'],
+ ['height', 'u32'],
+ ],
+ },
+ ],
+ ]);
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/so/program-keypair.json');
+ test('Go to the park!', async () => {
+ const blockhash = context.lastBlockhash;
- class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
- };
-
- class InstructionData extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(InstructionDataSchema, this));
- }
- };
-
- const InstructionDataSchema = new Map([
- [
- InstructionData, {
- kind: 'struct',
- fields: [
- ['name', 'string'],
- ['height', 'u32'],
- ]
- }
- ]
- ]);
-
- it("Go to the park!", async () => {
+ const jimmy = new InstructionData({
+ name: 'Jimmy',
+ height: 3,
+ });
- const jimmy = new InstructionData({
- name: "Jimmy",
- height: 3
- });
+ const mary = new InstructionData({
+ name: 'Mary',
+ height: 10,
+ });
- const mary = new InstructionData({
- name: "Mary",
- height: 10
- });
+ const ix1 = new TransactionInstruction({
+ keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }],
+ programId: PROGRAM_ID,
+ data: jimmy.toBuffer(),
+ });
- let ix1 = new TransactionInstruction({
- keys: [
- {pubkey: payer.publicKey, isSigner: true, isWritable: true}
- ],
- programId: program.publicKey,
- data: jimmy.toBuffer(),
- });
+ const ix2 = new TransactionInstruction({
+ ...ix1,
+ data: mary.toBuffer(),
+ });
- let ix2 = new TransactionInstruction({
- ...ix1,
- data: mary.toBuffer(),
- });
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix1).add(ix2).sign(payer);
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix1).add(ix2),
- [payer]
- );
- });
+ await client.processTransaction(tx);
});
-
\ No newline at end of file
+});
diff --git a/basics/processing-instructions/solang/Anchor.toml b/basics/processing-instructions/solang/Anchor.toml
deleted file mode 100644
index 6dbb482d5..000000000
--- a/basics/processing-instructions/solang/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-processing_instructions = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/processing-instructions/solang/package.json b/basics/processing-instructions/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/processing-instructions/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/processing-instructions/solang/solidity/processing-instructions.sol b/basics/processing-instructions/solang/solidity/processing-instructions.sol
deleted file mode 100644
index 4e286a757..000000000
--- a/basics/processing-instructions/solang/solidity/processing-instructions.sol
+++ /dev/null
@@ -1,18 +0,0 @@
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract processing_instructions {
-
- @payer(payer) // payer for the data account, required by Solang but not used in this example
- constructor() {}
-
- function goToPark(string name, uint32 height) public pure {
- // Print messages to the program logs
- print("Welcome to the park, {:}".format(name));
-
- if (height >5) {
- print("You are tall enough to ride this ride. Congratulations.");
- } else {
- print("You are NOT tall enough to ride this ride. Sorry mate.");
- }
- }
-}
diff --git a/basics/processing-instructions/solang/tests/processing-instructions.ts b/basics/processing-instructions/solang/tests/processing-instructions.ts
deleted file mode 100644
index bd9723f1e..000000000
--- a/basics/processing-instructions/solang/tests/processing-instructions.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { ProcessingInstructions } from "../target/types/processing_instructions";
-
-describe("processing-instructions", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- // Generate a new keypair for the data account for the program
- const dataAccount = anchor.web3.Keypair.generate();
- const wallet = provider.wallet;
-
- const program = anchor.workspace
- .ProcessingInstructions as Program;
-
- it("Is initialized!", async () => {
- // Initialize data account for the program, which is required by Solang
- const tx = await program.methods
- .new()
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([dataAccount])
- .rpc();
- console.log("Your transaction signature", tx);
- });
-
- it("Go to the park!", async () => {
- // Call the goToPark instruction on the program, providing the instruction data
- await program.methods
- .goToPark("Jimmy", 3)
- .accounts({ dataAccount: dataAccount.publicKey })
- .rpc();
-
- // Call the goToPark instruction on the program, providing the instruction data
- await program.methods
- .goToPark("Mary", 10)
- .accounts({ dataAccount: dataAccount.publicKey })
- .rpc();
- });
-});
diff --git a/basics/processing-instructions/solang/tsconfig.json b/basics/processing-instructions/solang/tsconfig.json
deleted file mode 100644
index 5436e66f2..000000000
--- a/basics/processing-instructions/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
-}
-
\ No newline at end of file
diff --git a/basics/processing-instructions/steel/.gitignore b/basics/processing-instructions/steel/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/processing-instructions/steel/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/processing-instructions/steel/Cargo.toml b/basics/processing-instructions/steel/Cargo.toml
new file mode 100644
index 000000000..75d93bc2c
--- /dev/null
+++ b/basics/processing-instructions/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+respository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+processing-instructions-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/processing-instructions/steel/README.md b/basics/processing-instructions/steel/README.md
new file mode 100644
index 000000000..a8d93f26f
--- /dev/null
+++ b/basics/processing-instructions/steel/README.md
@@ -0,0 +1,25 @@
+# ProcessingInstructions
+
+See the [Processing instructions's README](../README.md) for more information. In our case, we cannot use Borsh for serialization, as we're constrained by the `Steel` framework dependency on PODs (Plain Old Data).
+
+## Building
+
+```sh
+cargo build-sbf
+
+```
+## Tests
+
+This project includes both:
+- Rust tests: [`program/tests`](/program/tests) directory.
+- Node.js tests using [Bankrun](https://kevinheavey.github.io/solana-bankrun/): [`tests`](/tests) directory.
+
+```sh
+# rust tests
+cargo test-sbf
+
+# node tests
+pnpm build-and-test # this will also build the program
+#or
+pnpm test # if you have already built the program
+```
diff --git a/basics/processing-instructions/steel/api/Cargo.toml b/basics/processing-instructions/steel/api/Cargo.toml
new file mode 100644
index 000000000..3c8ab69c0
--- /dev/null
+++ b/basics/processing-instructions/steel/api/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "processing-instructions-api"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/processing-instructions/steel/api/src/instruction.rs b/basics/processing-instructions/steel/api/src/instruction.rs
new file mode 100644
index 000000000..ac608909d
--- /dev/null
+++ b/basics/processing-instructions/steel/api/src/instruction.rs
@@ -0,0 +1,55 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum ProcessingInstructionsInstruction {
+ GoToThePark = 0,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable, PartialEq)]
+pub struct GoToTheParkData {
+ pub name: [u8; 64],
+ pub height: [u8; 8],
+}
+
+impl_to_bytes!(GoToTheParkData);
+
+fn string_to_bytes(s: &str) -> [u8; 64] {
+ let mut bytes = [0; 64];
+ let s_bytes = s.as_bytes();
+ let len = s_bytes.len().min(64);
+ bytes[..len].copy_from_slice(&s_bytes[..len]);
+ bytes
+}
+
+impl GoToTheParkData {
+ pub fn new(name: String, height: u64) -> Self {
+ Self {
+ name: string_to_bytes(&name),
+ height: height.to_le_bytes(),
+ }
+ }
+
+ pub fn try_from_bytes(data: &[u8]) -> Result<&Self, ProgramError> {
+ bytemuck::try_from_bytes(data).or(Err(ProgramError::InvalidInstructionData))
+ }
+
+ pub fn name(&self) -> String {
+ String::from_utf8_lossy(&self.name)
+ .trim_end_matches(char::from(0))
+ .to_string()
+ }
+
+ pub fn height(&self) -> u64 {
+ u64::from_le_bytes(self.height)
+ }
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct GoToThePark {
+ pub data: GoToTheParkData,
+}
+
+instruction!(ProcessingInstructionsInstruction, GoToThePark);
diff --git a/basics/processing-instructions/steel/api/src/lib.rs b/basics/processing-instructions/steel/api/src/lib.rs
new file mode 100644
index 000000000..47ed892e6
--- /dev/null
+++ b/basics/processing-instructions/steel/api/src/lib.rs
@@ -0,0 +1,12 @@
+pub mod instruction;
+pub mod sdk;
+
+pub mod prelude {
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/basics/processing-instructions/steel/api/src/sdk.rs b/basics/processing-instructions/steel/api/src/sdk.rs
new file mode 100644
index 000000000..0cf5afd7b
--- /dev/null
+++ b/basics/processing-instructions/steel/api/src/sdk.rs
@@ -0,0 +1,11 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn go_to_the_park(signer: Pubkey, data: GoToTheParkData) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![AccountMeta::new(signer, true)],
+ data: GoToThePark { data }.to_bytes(),
+ }
+}
diff --git a/basics/processing-instructions/steel/package.json b/basics/processing-instructions/steel/package.json
new file mode 100644
index 000000000..73d51707e
--- /dev/null
+++ b/basics/processing-instructions/steel/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "processing-instructions",
+ "version": "1.0.0",
+ "description": "",
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/processing_instructions_program.so"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@solana/web3.js": "^1.95.4"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.3.7",
+ "@types/mocha": "10.0.9",
+ "@types/node": "^22.7.4",
+ "chai": "^4.3.7",
+ "mocha": "10.7.3",
+ "solana-bankrun": "0.4.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "5.6.3"
+ }
+}
diff --git a/basics/processing-instructions/steel/pnpm-lock.yaml b/basics/processing-instructions/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..08f17fae3
--- /dev/null
+++ b/basics/processing-instructions/steel/pnpm-lock.yaml
@@ -0,0 +1,1260 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.95.4
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/chai':
+ specifier: ^4.3.7
+ version: 4.3.20
+ '@types/mocha':
+ specifier: 10.0.9
+ version: 10.0.9
+ '@types/node':
+ specifier: ^22.7.4
+ version: 22.7.7
+ chai:
+ specifier: ^4.3.7
+ version: 4.5.0
+ mocha:
+ specifier: 10.7.3
+ version: 10.7.3
+ solana-bankrun:
+ specifier: 0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@10.7.3)
+ typescript:
+ specifier: 5.6.3
+ version: 5.6.3
+
+packages:
+
+ '@babel/runtime@7.25.7':
+ resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@10.0.9':
+ resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.7.7':
+ resolution: {integrity: sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@10.7.3:
+ resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.7':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.7
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.7.7
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@10.0.9': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.7.7':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.7.7
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.7.7
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ debug@4.3.7(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@10.7.3:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.6.0
+ debug: 4.3.7(supports-color@8.1.1)
+ diff: 5.2.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 8.1.0
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 16.2.0
+ yargs-parser: 20.2.9
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@10.7.3):
+ dependencies:
+ mocha: 10.7.3
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/processing-instructions/steel/program/Cargo.toml b/basics/processing-instructions/steel/program/Cargo.toml
new file mode 100644
index 000000000..91ebaef43
--- /dev/null
+++ b/basics/processing-instructions/steel/program/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "processing-instructions-program"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+processing-instructions-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+bs64 = "0.1.2"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/processing-instructions/steel/program/src/go_to_the_park.rs b/basics/processing-instructions/steel/program/src/go_to_the_park.rs
new file mode 100644
index 000000000..f90420a76
--- /dev/null
+++ b/basics/processing-instructions/steel/program/src/go_to_the_park.rs
@@ -0,0 +1,27 @@
+use processing_instructions_api::prelude::*;
+use steel::*;
+
+use solana_program::msg;
+
+pub fn process_go_to_the_park(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ msg!("Processing GoToThePark instruction");
+
+ // Parse args.
+ let args = GoToThePark::try_from_bytes(data)?;
+
+ // Load accounts.
+ let [signer_info] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ signer_info.is_signer()?;
+
+ msg!("Welcome to the park, {}!", args.data.name());
+
+ if args.data.height() > 5 {
+ msg!("You are tall enough to ride this ride. Congratulations.");
+ } else {
+ msg!("You are NOT tall enough to ride this ride. Sorry mate.");
+ };
+
+ Ok(())
+}
diff --git a/basics/processing-instructions/steel/program/src/lib.rs b/basics/processing-instructions/steel/program/src/lib.rs
new file mode 100644
index 000000000..765cd4577
--- /dev/null
+++ b/basics/processing-instructions/steel/program/src/lib.rs
@@ -0,0 +1,28 @@
+mod go_to_the_park;
+
+use go_to_the_park::*;
+use processing_instructions_api::prelude::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ instruction_data: &[u8],
+) -> ProgramResult {
+ msg!("Processing instruction");
+
+ let (ix, data) = parse_instruction(
+ &processing_instructions_api::ID,
+ program_id,
+ instruction_data,
+ )?;
+
+ match ix {
+ ProcessingInstructionsInstruction::GoToThePark => process_go_to_the_park(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/processing-instructions/steel/program/tests/test.rs b/basics/processing-instructions/steel/program/tests/test.rs
new file mode 100644
index 000000000..806f95a98
--- /dev/null
+++ b/basics/processing-instructions/steel/program/tests/test.rs
@@ -0,0 +1,59 @@
+use processing_instructions_api::prelude::*;
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "processing_instructions_program",
+ processing_instructions_api::ID,
+ processor!(processing_instructions_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+// Helper function to assert the presence of log messages
+fn assert_log_contains(logs: &[String], expected: &str) {
+ assert!(
+ logs.iter().any(|msg| msg.contains(expected)),
+ "Missing log: {}",
+ expected
+ );
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+
+ // Submit transaction.
+ let ix1 = go_to_the_park(payer.pubkey(), GoToTheParkData::new("Jimmy".to_string(), 3));
+ let ix2 = go_to_the_park(payer.pubkey(), GoToTheParkData::new("Mary".to_string(), 10));
+ let tx = Transaction::new_signed_with_payer(
+ &[ix1, ix2],
+ Some(&payer.pubkey()),
+ &[&payer],
+ blockhash,
+ );
+
+ let res = banks.process_transaction_with_metadata(tx).await;
+ assert!(res.is_ok(), "Process Transaction failed: {:?}", res.err());
+ let tx_result = res.unwrap();
+ assert!(
+ tx_result.result.is_ok(),
+ "Transaction failed: {:?}",
+ tx_result.result.err()
+ );
+
+ let metadata = tx_result.metadata.unwrap();
+
+ // check the logs
+ // we got 2 instructions, we must see 2 consecutive logs
+ // - Welcome to the park, {name}!
+ // - You are NOT tall enough... and You are tall enough...
+ assert_log_contains(&metadata.log_messages, "Welcome to the park, Jimmy!");
+ assert_log_contains(&metadata.log_messages, "You are NOT tall enough");
+ assert_log_contains(&metadata.log_messages, "Welcome to the park, Mary!");
+ assert_log_contains(&metadata.log_messages, "You are tall enough");
+}
diff --git a/basics/processing-instructions/steel/tests/main.test.ts b/basics/processing-instructions/steel/tests/main.test.ts
new file mode 100644
index 000000000..9c2143b87
--- /dev/null
+++ b/basics/processing-instructions/steel/tests/main.test.ts
@@ -0,0 +1,112 @@
+import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { assert } from 'chai';
+import { describe, it } from 'mocha';
+import { BanksClient, ProgramTestContext, start } from 'solana-bankrun';
+
+type GoToTheParkData = {
+ name: string;
+ height: bigint;
+};
+
+type GoToTheParkDataRaw = {
+ name: Uint8Array;
+ height: bigint;
+};
+
+const instructionDiscriminators = {
+ goToThePark: Buffer.from([0]),
+};
+
+const encodeString = (str: string, length: number): Uint8Array => {
+ const buffer = Buffer.alloc(length, 0);
+ buffer.write(str, 'utf-8');
+ return Uint8Array.from(buffer);
+};
+
+const decodeString = (data: Uint8Array): string => {
+ return Buffer.from(data).toString('utf-8').replace(/\0/g, '');
+};
+
+const encodeBigInt = (value: bigint): Uint8Array => {
+ const buffer = Buffer.alloc(8);
+ buffer.writeBigUInt64LE(value, 0);
+ return Uint8Array.from(buffer);
+};
+
+const createGoToTheParkBuffer = (data: GoToTheParkData): Buffer => {
+ const name = encodeString(data.name, 64);
+ const height = encodeBigInt(data.height); // 8 bytes
+ return Buffer.concat([instructionDiscriminators.goToThePark, name, height]);
+};
+
+const toGoToTheParkData = (data: GoToTheParkDataRaw): GoToTheParkData => {
+ return {
+ name: decodeString(data.name),
+ height: data.height,
+ };
+};
+
+describe('processing instructions', async () => {
+ const PROGRAM_ID = new PublicKey('z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35');
+
+ let context: ProgramTestContext;
+ let client: BanksClient;
+ let payer: Keypair;
+
+ before(async () => {
+ context = await start([{ name: 'processing_instructions_program', programId: PROGRAM_ID }], []);
+ client = context.banksClient;
+ payer = context.payer;
+ });
+
+ it('should go to the park!', async () => {
+ // data for the instruction
+ const jimmy: GoToTheParkData = {
+ name: 'Jimmy',
+ height: BigInt(3),
+ };
+
+ const mary: GoToTheParkData = {
+ name: 'Mary',
+ height: BigInt(10),
+ };
+
+ const jimmyBuffer = createGoToTheParkBuffer(jimmy);
+ const maryBuffer = createGoToTheParkBuffer(mary);
+
+ // create the instructions
+ const ix1 = new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }],
+ data: jimmyBuffer,
+ });
+
+ const ix2 = new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }],
+ data: maryBuffer,
+ });
+
+ // send the transaction
+ const tx = new Transaction();
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.add(ix1).add(ix2).sign(payer);
+
+ // process the transaction
+ const result = await client.processTransaction(tx);
+ assert.ok(result);
+
+ // check the logs
+ // we got 2 instructions, we must see 2 consecutive logs
+ // - Welcome to the park, {name}!
+ // - You are NOT tall enough... and You are tall enough...
+
+ assert(!!result.logMessages.find((msg) => msg.includes(`Welcome to the park, ${jimmy.name}!`)));
+
+ assert(!!result.logMessages.find((msg) => msg.includes('You are NOT tall enough')));
+
+ assert(!!result.logMessages.find((msg) => msg.includes(`Welcome to the park, ${mary.name}!`)));
+
+ assert(!!result.logMessages.find((msg) => msg.includes('You are tall enough')));
+ });
+});
diff --git a/basics/processing-instructions/steel/tsconfig.json b/basics/processing-instructions/steel/tsconfig.json
new file mode 100644
index 000000000..8c20b2236
--- /dev/null
+++ b/basics/processing-instructions/steel/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/basics/program-derived-addresses/anchor/Anchor.toml b/basics/program-derived-addresses/anchor/Anchor.toml
index d05d96d67..3c9ba61fe 100644
--- a/basics/program-derived-addresses/anchor/Anchor.toml
+++ b/basics/program-derived-addresses/anchor/Anchor.toml
@@ -1,7 +1,7 @@
[features]
seeds = false
[programs.localnet]
-anchor_program_example = "FFKtnYFyzPj1qFjE9epkrfYHJwZMdh8CvJrB6XsKeFVz"
+anchor_program_example = "oCCQRZyAbVxujyd8m57MPmDzZDmy2FoKW4ULS7KofCE"
[registry]
url = "https://anchor.projectserum.com/"
@@ -11,4 +11,4 @@ cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/program-derived-addresses/anchor/Cargo.toml b/basics/program-derived-addresses/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/program-derived-addresses/anchor/Cargo.toml
+++ b/basics/program-derived-addresses/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/program-derived-addresses/anchor/package.json b/basics/program-derived-addresses/anchor/package.json
index ab411155f..439798a07 100644
--- a/basics/program-derived-addresses/anchor/package.json
+++ b/basics/program-derived-addresses/anchor/package.json
@@ -1,8 +1,11 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
diff --git a/basics/program-derived-addresses/anchor/pnpm-lock.yaml b/basics/program-derived-addresses/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..cf21eb739
--- /dev/null
+++ b/basics/program-derived-addresses/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/program-derived-addresses/anchor/programs/anchor-program-example/Cargo.toml b/basics/program-derived-addresses/anchor/programs/anchor-program-example/Cargo.toml
index 6b155f891..442bc6065 100644
--- a/basics/program-derived-addresses/anchor/programs/anchor-program-example/Cargo.toml
+++ b/basics/program-derived-addresses/anchor/programs/anchor-program-example/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "anchor_program_example"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/instructions/create.rs b/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/instructions/create.rs
index c8a431f89..d237c185d 100644
--- a/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/instructions/create.rs
+++ b/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/instructions/create.rs
@@ -23,7 +23,7 @@ pub struct CreatePageVisits<'info> {
pub fn create_page_visits(ctx: Context) -> Result<()> {
*ctx.accounts.page_visits = PageVisits {
page_visits: 0,
- bump: *ctx.bumps.get("page_visits").unwrap(),
+ bump: ctx.bumps.page_visits,
};
Ok(())
diff --git a/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/lib.rs b/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/lib.rs
index 9e327630b..638f863b8 100644
--- a/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/lib.rs
+++ b/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/lib.rs
@@ -7,7 +7,7 @@ use instructions::*;
pub mod instructions;
pub mod state;
-declare_id!("FFKtnYFyzPj1qFjE9epkrfYHJwZMdh8CvJrB6XsKeFVz");
+declare_id!("oCCQRZyAbVxujyd8m57MPmDzZDmy2FoKW4ULS7KofCE");
#[program]
pub mod anchor_program_example {
diff --git a/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/state/page_visits.rs b/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/state/page_visits.rs
index 4ac7e92b2..a2bfa65f4 100644
--- a/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/state/page_visits.rs
+++ b/basics/program-derived-addresses/anchor/programs/anchor-program-example/src/state/page_visits.rs
@@ -8,7 +8,7 @@ pub struct PageVisits {
}
impl PageVisits {
- pub const SEED_PREFIX: &[u8; 11] = b"page_visits";
+ pub const SEED_PREFIX: &'static [u8; 11] = b"page_visits";
pub fn increment(&mut self) {
self.page_visits = self.page_visits.checked_add(1).unwrap();
diff --git a/basics/program-derived-addresses/anchor/tests/bankrun.test.ts b/basics/program-derived-addresses/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..aece3a613
--- /dev/null
+++ b/basics/program-derived-addresses/anchor/tests/bankrun.test.ts
@@ -0,0 +1,53 @@
+import { describe, it } from 'node:test';
+import * as anchor from '@coral-xyz/anchor';
+import { PublicKey, Transaction } 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');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+describe('PDAs', async () => {
+ const context = await startAnchor('', [{ name: 'anchor_program_example', programId: PROGRAM_ID }], []);
+ const provider = new BankrunProvider(context);
+ const client = context.banksClient;
+
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ // PDA for the page visits account
+ const [pageVisitPDA] = PublicKey.findProgramAddressSync([Buffer.from('page_visits'), payer.publicKey.toBuffer()], program.programId);
+
+ it('Create the page visits tracking PDA', async () => {
+ await program.methods
+ .createPageVisits()
+ .accounts({
+ payer: payer.publicKey,
+ })
+ .rpc();
+ });
+
+ it('Visit the page!', async () => {
+ await program.methods
+ .incrementPageVisits()
+ .accounts({
+ user: payer.publicKey,
+ })
+ .rpc();
+ });
+
+ it('Visit the page!', async () => {
+ await program.methods
+ .incrementPageVisits()
+ .accounts({
+ user: payer.publicKey,
+ })
+ .rpc();
+ });
+
+ it('View page visits', async () => {
+ const pageVisits = await program.account.pageVisits.fetch(pageVisitPDA);
+ console.log(`Number of page visits: ${pageVisits.pageVisits}`);
+ });
+});
diff --git a/basics/program-derived-addresses/anchor/tests/test.ts b/basics/program-derived-addresses/anchor/tests/test.ts
index 358ce5f9d..8aed4af13 100644
--- a/basics/program-derived-addresses/anchor/tests/test.ts
+++ b/basics/program-derived-addresses/anchor/tests/test.ts
@@ -1,52 +1,45 @@
-import * as anchor from "@coral-xyz/anchor"
-import { AnchorProgramExample } from "../target/types/anchor_program_example"
-import { PublicKey } from "@solana/web3.js"
+import * as anchor from '@coral-xyz/anchor';
+import { PublicKey } from '@solana/web3.js';
+import type { AnchorProgramExample } from '../target/types/anchor_program_example';
-describe("PDAs", () => {
- const provider = anchor.AnchorProvider.env()
- anchor.setProvider(provider)
- const payer = provider.wallet as anchor.Wallet
- const program = anchor.workspace
- .AnchorProgramExample as anchor.Program
+describe('PDAs', () => {
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+ const payer = provider.wallet as anchor.Wallet;
+ const program = anchor.workspace.AnchorProgramExample as anchor.Program;
// PDA for the page visits account
- const [pageVisitPDA] = PublicKey.findProgramAddressSync(
- [Buffer.from("page_visits"), payer.publicKey.toBuffer()],
- program.programId
- )
+ const [pageVisitPDA] = PublicKey.findProgramAddressSync([Buffer.from('page_visits'), payer.publicKey.toBuffer()], program.programId);
- it("Create the page visits tracking PDA", async () => {
+ it('Create the page visits tracking PDA', async () => {
await program.methods
.createPageVisits()
.accounts({
payer: payer.publicKey,
- pageVisits: pageVisitPDA,
})
- .rpc()
- })
+ .rpc();
+ });
- it("Visit the page!", async () => {
+ it('Visit the page!', async () => {
await program.methods
.incrementPageVisits()
.accounts({
user: payer.publicKey,
- pageVisits: pageVisitPDA,
})
- .rpc()
- })
+ .rpc();
+ });
- it("Visit the page!", async () => {
+ it('Visit the page!', async () => {
await program.methods
.incrementPageVisits()
.accounts({
user: payer.publicKey,
- pageVisits: pageVisitPDA,
})
- .rpc()
- })
+ .rpc();
+ });
- it("View page visits", async () => {
- const pageVisits = await program.account.pageVisits.fetch(pageVisitPDA)
- console.log(`Number of page visits: ${pageVisits.pageVisits}`)
- })
-})
+ it('View page visits', async () => {
+ const pageVisits = await program.account.pageVisits.fetch(pageVisitPDA);
+ console.log(`Number of page visits: ${pageVisits.pageVisits}`);
+ });
+});
diff --git a/basics/program-derived-addresses/native/cicd.sh b/basics/program-derived-addresses/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/program-derived-addresses/native/cicd.sh
+++ b/basics/program-derived-addresses/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/program-derived-addresses/native/package.json b/basics/program-derived-addresses/native/package.json
index b71a6ab9b..b6cfa8e71 100644
--- a/basics/program-derived-addresses/native/package.json
+++ b/basics/program-derived-addresses/native/package.json
@@ -1,6 +1,9 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
"@solana/web3.js": "^1.47.3",
@@ -10,8 +13,8 @@
"@types/bn.js": "^5.1.0",
"@types/chai": "^4.3.1",
"@types/mocha": "^9.1.1",
- "chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/program-derived-addresses/native/pnpm-lock.yaml b/basics/program-derived-addresses/native/pnpm-lock.yaml
new file mode 100644
index 000000000..5382ba0a9
--- /dev/null
+++ b/basics/program-derived-addresses/native/pnpm-lock.yaml
@@ -0,0 +1,1290 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/program-derived-addresses/native/program/Cargo.toml b/basics/program-derived-addresses/native/program/Cargo.toml
index da014c458..0ba09939a 100644
--- a/basics/program-derived-addresses/native/program/Cargo.toml
+++ b/basics/program-derived-addresses/native/program/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2021"
[dependencies]
-solana-program = "1.16.10"
+solana-program = "2.0"
borsh = "0.9.3"
borsh-derive = "0.9.1"
diff --git a/basics/program-derived-addresses/native/tests/test.ts b/basics/program-derived-addresses/native/tests/test.ts
index 8e5a23e02..0b9aa3747 100644
--- a/basics/program-derived-addresses/native/tests/test.ts
+++ b/basics/program-derived-addresses/native/tests/test.ts
@@ -1,146 +1,146 @@
-import {
- Connection,
- Keypair,
- PublicKey,
- sendAndConfirmTransaction,
- SystemProgram,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-
-
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
-
-describe("PDAs", () => {
-
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const PROGRAM_ID: PublicKey = new PublicKey(
- "BCw7MQWBugruuYgno5crGUGFNufqGJbPpzZevhRRRQAu"
- );
-
- class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
- };
-
- class PageVisits extends Assignable {
- toBuffer() { return Buffer.from(borsh.serialize(PageVisitsSchema, this)) }
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(PageVisitsSchema, PageVisits, buffer);
- };
- };
- const PageVisitsSchema = new Map([
- [ PageVisits, {
- kind: 'struct',
- fields: [ ['page_visits', 'u32'], ['bump', 'u8'] ],
- }]
- ]);
-
- class IncrementPageVisits extends Assignable {
- toBuffer() { return Buffer.from(borsh.serialize(IncrementPageVisitsSchema, this)) }
- };
- const IncrementPageVisitsSchema = new Map([
- [ IncrementPageVisits, {
- kind: 'struct',
- fields: [],
- }]
- ]);
-
- const testUser = Keypair.generate();
-
- it("Create a test user", async () => {
- let ix = SystemProgram.createAccount({
- fromPubkey: payer.publicKey,
- lamports: await connection.getMinimumBalanceForRentExemption(0),
- newAccountPubkey: testUser.publicKey,
- programId: SystemProgram.programId,
- space: 0,
- });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, testUser]
- );
- console.log(`Local Wallet: ${payer.publicKey}`);
- console.log(`Created User: ${testUser.publicKey}`);
- });
+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';
+
+describe('PDAs', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'program_derived_addresses_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+ const rent = await client.getRent();
+
+ class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+ }
+
+ class PageVisits extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(PageVisitsSchema, this));
+ }
+
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(PageVisitsSchema, PageVisits, buffer);
+ }
+ }
+ const PageVisitsSchema = new Map([
+ [
+ PageVisits,
+ {
+ kind: 'struct',
+ fields: [
+ ['page_visits', 'u32'],
+ ['bump', 'u8'],
+ ],
+ },
+ ],
+ ]);
- function derivePageVisitsPda(userPubkey: PublicKey) {
- return PublicKey.findProgramAddressSync(
- [Buffer.from("page_visits"), userPubkey.toBuffer()],
- PROGRAM_ID,
- )
+ class IncrementPageVisits extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(IncrementPageVisitsSchema, this));
}
+ }
+ const IncrementPageVisitsSchema = new Map([
+ [
+ IncrementPageVisits,
+ {
+ kind: 'struct',
+ fields: [],
+ },
+ ],
+ ]);
- it("Create the page visits tracking PDA", async () => {
- const [pageVisitsPda, pageVisitsBump] = derivePageVisitsPda(testUser.publicKey);
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: pageVisitsPda, isSigner: false, isWritable: true},
- {pubkey: testUser.publicKey, isSigner: false, isWritable: false},
- {pubkey: payer.publicKey, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: PROGRAM_ID,
- data: (new PageVisits({page_visits: 0, bump: pageVisitsBump})).toBuffer(),
- });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
+ const testUser = Keypair.generate();
+
+ test('Create a test user', async () => {
+ const ix = SystemProgram.createAccount({
+ fromPubkey: payer.publicKey,
+ lamports: Number(rent.minimumBalance(BigInt(0))),
+ newAccountPubkey: testUser.publicKey,
+ programId: SystemProgram.programId,
+ space: 0,
});
- it("Visit the page!", async () => {
- const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey);
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: pageVisitsPda, isSigner: false, isWritable: true},
- {pubkey: payer.publicKey, isSigner: true, isWritable: true},
- ],
- programId: PROGRAM_ID,
- data: new IncrementPageVisits({}).toBuffer(),
- });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
+ const tx = new Transaction();
+ const blockhash = context.lastBlockhash;
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, testUser); // Add instruction and Sign the transaction
+
+ await client.processTransaction(tx);
+ console.log(`Local Wallet: ${payer.publicKey}`);
+ console.log(`Created User: ${testUser.publicKey}`);
+ });
+
+ function derivePageVisitsPda(userPubkey: PublicKey) {
+ return PublicKey.findProgramAddressSync([Buffer.from('page_visits'), userPubkey.toBuffer()], PROGRAM_ID);
+ }
+
+ test('Create the page visits tracking PDA', async () => {
+ const [pageVisitsPda, pageVisitsBump] = derivePageVisitsPda(testUser.publicKey);
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: pageVisitsPda, isSigner: false, isWritable: true },
+ { pubkey: testUser.publicKey, isSigner: false, isWritable: false },
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: new PageVisits({ page_visits: 0, bump: pageVisitsBump }).toBuffer(),
});
+ const tx = new Transaction();
+ const blockhash = context.lastBlockhash;
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
- it("Visit the page!", async () => {
- const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey);
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: pageVisitsPda, isSigner: false, isWritable: true},
- {pubkey: payer.publicKey, isSigner: true, isWritable: true},
- ],
- programId: PROGRAM_ID,
- data: new IncrementPageVisits({}).toBuffer(),
- });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
+ await client.processTransaction(tx);
+ });
+
+ test('Visit the page!', async () => {
+ const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey);
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: pageVisitsPda, isSigner: false, isWritable: true },
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ ],
+ programId: PROGRAM_ID,
+ data: new IncrementPageVisits({}).toBuffer(),
});
+ const tx = new Transaction();
+ const blockhash = context.lastBlockhash;
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ await client.processTransaction(tx);
+ });
- it("Read page visits", async () => {
- const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey);
- const accountInfo = await connection.getAccountInfo(pageVisitsPda);
- const readPageVisits = PageVisits.fromBuffer(accountInfo.data);
- console.log(`Number of page visits: ${readPageVisits.page_visits}`);
+ test('Visit the page!', async () => {
+ const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey);
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: pageVisitsPda, isSigner: false, isWritable: true },
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ ],
+ programId: PROGRAM_ID,
+ data: new IncrementPageVisits({}).toBuffer(),
});
+ const tx = new Transaction();
+ const [blockhash, _block_height] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ await client.processTransaction(tx);
+ });
+
+ test('Read page visits', async () => {
+ const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey);
+ const accountInfo = await client.getAccount(pageVisitsPda);
+ const readPageVisits = PageVisits.fromBuffer(Buffer.from(accountInfo.data));
+ console.log(`Number of page visits: ${readPageVisits.page_visits}`);
+ });
});
diff --git a/basics/program-derived-addresses/native/tsconfig.json b/basics/program-derived-addresses/native/tsconfig.json
index cd5d2e3d0..8634a05df 100644
--- a/basics/program-derived-addresses/native/tsconfig.json
+++ b/basics/program-derived-addresses/native/tsconfig.json
@@ -1,6 +1,6 @@
{
"compilerOptions": {
- "types": ["mocha", "chai"],
+ "types": ["mocha"],
"typeRoots": ["./node_modules/@types"],
"lib": ["es2015"],
"module": "commonjs",
diff --git a/basics/program-derived-addresses/solang/.gitignore b/basics/program-derived-addresses/solang/.gitignore
deleted file mode 100644
index 8d401163f..000000000
--- a/basics/program-derived-addresses/solang/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-
-.anchor
-.DS_Store
-target
-**/*.rs.bk
-node_modules
-test-ledger
-.yarn
diff --git a/basics/program-derived-addresses/solang/Anchor.toml b/basics/program-derived-addresses/solang/Anchor.toml
deleted file mode 100644
index 336fd107f..000000000
--- a/basics/program-derived-addresses/solang/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-program_derived_addresses = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/program-derived-addresses/solang/package.json b/basics/program-derived-addresses/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/program-derived-addresses/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/program-derived-addresses/solang/solidity/program-derived-addresses.sol b/basics/program-derived-addresses/solang/solidity/program-derived-addresses.sol
deleted file mode 100644
index 57be6f303..000000000
--- a/basics/program-derived-addresses/solang/solidity/program-derived-addresses.sol
+++ /dev/null
@@ -1,44 +0,0 @@
-
-import "solana";
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract program_derived_addresses {
- // A private instance of the PageVisits struct
- // This is the data that is stored in the account
- PageVisits private accountData;
-
- // The PageVisits struct definition
- struct PageVisits {
- uint32 pageVisits;
- bytes1 bump;
- }
-
- // The constructor is used to create a new account
- // The seeds, bump, and programId are used to derive a unique and deterministic pda (program derived address) to use as the account address
- @payer(payer) // "payer" is the account that pays for creating the account
- @seed("page_visits") // hardcoded seed
- constructor(
- @seed bytes payer, // additional seed using the payer address
- @bump bytes1 bump // bump seed to derive the pda
- ) {
- // Independently derive the PDA address from the seeds, bump, and programId
- (address pda, bytes1 _bump) = try_find_program_address(["page_visits", payer], type(program_derived_addresses).program_id);
-
- // Verify that the bump passed to the constructor matches the bump derived from the seeds and programId
- // This ensures that only the canonical pda address can be used to create the account (first bump that generates a valid pda address)
- require(bump == _bump, 'INVALID_BUMP');
-
- // The PageVisits instance is initialized with pageVisits set to zero and bump set to the bump passed to the constructor
- accountData = PageVisits(0, bump);
- }
-
- // Increments the pageVisits by one.
- function incrementPageVisits() public {
- accountData.pageVisits += 1;
- }
-
- // Returns the accountData (pageVisits and bump) stored on the account
- function get() public view returns (PageVisits) {
- return accountData;
- }
-}
diff --git a/basics/program-derived-addresses/solang/tests/program-derived-addresses.ts b/basics/program-derived-addresses/solang/tests/program-derived-addresses.ts
deleted file mode 100644
index 01f97c632..000000000
--- a/basics/program-derived-addresses/solang/tests/program-derived-addresses.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { ProgramDerivedAddresses } from "../target/types/program_derived_addresses";
-import { PublicKey } from "@solana/web3.js";
-
-describe("program-derived-addresses", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- const wallet = provider.wallet;
-
- const program = anchor.workspace
- .ProgramDerivedAddresses as Program;
-
- // Derive the PDA that will be used to initialize the dataAccount.
- const [dataAccountPDA, bump] = PublicKey.findProgramAddressSync(
- [Buffer.from("page_visits"), wallet.publicKey.toBuffer()],
- program.programId
- );
-
- it("Is initialized!", async () => {
- // Initialize the dataAccount using a PDA as the address.
- // The PDA doesn't have to be passed in explicity as a signer, the program can "sign" for it.
- // This is a feature of PDAs that allows programs to "sign" for PDA that are derived from their programId.
- const tx = await program.methods
- .new(
- wallet.publicKey.toBuffer(), // wallet.publicKey is the payer for the new account
- [bump] // bump seed for the PDA found using findProgramAddress
- )
- .accounts({ dataAccount: dataAccountPDA })
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
-
- // Get the current state of the dataAccount.
- const val = await program.methods
- .get()
- .accounts({ dataAccount: dataAccountPDA })
- .view();
-
- console.log("State:", val);
- });
-
- it("Visit the page!", async () => {
- // Increment the page visits counter.
- const tx = await program.methods
- .incrementPageVisits()
- .accounts({ dataAccount: dataAccountPDA })
- .rpc();
- console.log("Your transaction signature", tx);
-
- // Get the current state of the dataAccount.
- const val = await program.methods
- .get()
- .accounts({ dataAccount: dataAccountPDA })
- .view();
-
- console.log("State:", val);
- });
-});
diff --git a/basics/program-derived-addresses/steel/.gitignore b/basics/program-derived-addresses/steel/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/program-derived-addresses/steel/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/program-derived-addresses/steel/Cargo.toml b/basics/program-derived-addresses/steel/Cargo.toml
new file mode 100644
index 000000000..2b599193d
--- /dev/null
+++ b/basics/program-derived-addresses/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+respository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+program-derived-addresses-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/program-derived-addresses/steel/README.md b/basics/program-derived-addresses/steel/README.md
new file mode 100644
index 000000000..d5575d076
--- /dev/null
+++ b/basics/program-derived-addresses/steel/README.md
@@ -0,0 +1,25 @@
+# Program Derived Addresses
+
+This program demonstrates how to derive addresses. It will use a PDA to store a counter of visits and increment it.
+
+## Building
+
+```sh
+cargo build-sbf
+
+```
+## Tests
+
+This project includes both:
+- Rust tests: [`program/tests`](/program/tests) directory.
+- Node.js tests using [Bankrun](https://kevinheavey.github.io/solana-bankrun/): [`tests`](/tests) directory.
+
+```sh
+# rust tests
+cargo test-sbf
+
+# node tests
+pnpm build-and-test # this will also build the program
+#or
+pnpm test # if you have already built the program
+```
diff --git a/basics/program-derived-addresses/steel/api/Cargo.toml b/basics/program-derived-addresses/steel/api/Cargo.toml
new file mode 100644
index 000000000..e02fc7e72
--- /dev/null
+++ b/basics/program-derived-addresses/steel/api/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "program-derived-addresses-api"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/program-derived-addresses/steel/api/src/consts.rs b/basics/program-derived-addresses/steel/api/src/consts.rs
new file mode 100644
index 000000000..09a886dc3
--- /dev/null
+++ b/basics/program-derived-addresses/steel/api/src/consts.rs
@@ -0,0 +1,2 @@
+/// Seed of the account PDA.
+pub const SEED: &[u8] = b"program-derived-addresses";
diff --git a/basics/program-derived-addresses/steel/api/src/instruction.rs b/basics/program-derived-addresses/steel/api/src/instruction.rs
new file mode 100644
index 000000000..24d6699dd
--- /dev/null
+++ b/basics/program-derived-addresses/steel/api/src/instruction.rs
@@ -0,0 +1,23 @@
+use steel::*;
+
+use crate::state::PageVisits;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum ProgramDerivedAddressesInstruction {
+ Create = 0,
+ Increment = 1,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Create {
+ pub page_visits: PageVisits,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Increment {}
+
+instruction!(ProgramDerivedAddressesInstruction, Create);
+instruction!(ProgramDerivedAddressesInstruction, Increment);
diff --git a/basics/program-derived-addresses/steel/api/src/lib.rs b/basics/program-derived-addresses/steel/api/src/lib.rs
new file mode 100644
index 000000000..6db8ac73d
--- /dev/null
+++ b/basics/program-derived-addresses/steel/api/src/lib.rs
@@ -0,0 +1,16 @@
+pub mod consts;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/basics/program-derived-addresses/steel/api/src/sdk.rs b/basics/program-derived-addresses/steel/api/src/sdk.rs
new file mode 100644
index 000000000..e1fe2f5d1
--- /dev/null
+++ b/basics/program-derived-addresses/steel/api/src/sdk.rs
@@ -0,0 +1,25 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn create(signer: Pubkey, user: Pubkey, page_visits: PageVisits) -> Instruction {
+ let pda = page_visits_pda(&user);
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(user, false),
+ AccountMeta::new(pda.0, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: Create { page_visits }.to_bytes(),
+ }
+}
+
+pub fn increment(page_visits_pda: Pubkey) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![AccountMeta::new(page_visits_pda, false)],
+ data: Increment {}.to_bytes(),
+ }
+}
diff --git a/basics/program-derived-addresses/steel/api/src/state.rs b/basics/program-derived-addresses/steel/api/src/state.rs
new file mode 100644
index 000000000..aedc84ad3
--- /dev/null
+++ b/basics/program-derived-addresses/steel/api/src/state.rs
@@ -0,0 +1,34 @@
+use steel::*;
+
+use crate::consts::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum ProgramDerivedAddressesAccount {
+ PageVisits = 0,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct PageVisits {
+ pub page_visits: [u8; 4], // u32
+ pub bump: [u8; 1],
+}
+
+impl PageVisits {
+ pub fn increment_visits(&mut self) {
+ let visits = u32::from_le_bytes(self.page_visits);
+ self.page_visits = (visits + 1).to_le_bytes();
+ }
+
+ pub fn page_visits(&self) -> u32 {
+ u32::from_le_bytes(self.page_visits)
+ }
+}
+
+account!(ProgramDerivedAddressesAccount, PageVisits);
+
+/// Fetch PDA of the PageVisit account.
+pub fn page_visits_pda(user: &Pubkey) -> (Pubkey, u8) {
+ Pubkey::find_program_address(&[SEED, user.as_ref()], &crate::id())
+}
diff --git a/basics/program-derived-addresses/steel/package.json b/basics/program-derived-addresses/steel/package.json
new file mode 100644
index 000000000..e71394e9e
--- /dev/null
+++ b/basics/program-derived-addresses/steel/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "program-derived-addresses",
+ "version": "1.0.0",
+ "description": "",
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program_derived_addresses_program.so"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@solana/web3.js": "^1.95.4"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.3.7",
+ "@types/mocha": "10.0.9",
+ "@types/node": "^22.7.4",
+ "borsh": "^2.0.0",
+ "chai": "^4.3.7",
+ "mocha": "10.7.3",
+ "solana-bankrun": "0.4.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "5.6.3"
+ }
+}
diff --git a/basics/program-derived-addresses/steel/pnpm-lock.yaml b/basics/program-derived-addresses/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..2a6823148
--- /dev/null
+++ b/basics/program-derived-addresses/steel/pnpm-lock.yaml
@@ -0,0 +1,1268 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.95.4
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/chai':
+ specifier: ^4.3.7
+ version: 4.3.20
+ '@types/mocha':
+ specifier: 10.0.9
+ version: 10.0.9
+ '@types/node':
+ specifier: ^22.7.4
+ version: 22.7.7
+ borsh:
+ specifier: ^2.0.0
+ version: 2.0.0
+ chai:
+ specifier: ^4.3.7
+ version: 4.5.0
+ mocha:
+ specifier: 10.7.3
+ version: 10.7.3
+ solana-bankrun:
+ specifier: 0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@10.7.3)
+ typescript:
+ specifier: 5.6.3
+ version: 5.6.3
+
+packages:
+
+ '@babel/runtime@7.25.7':
+ resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@10.0.9':
+ resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.7.7':
+ resolution: {integrity: sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ borsh@2.0.0:
+ resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@10.7.3:
+ resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.7':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.7
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.7.7
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@10.0.9': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.7.7':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.7.7
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.7.7
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ borsh@2.0.0: {}
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ debug@4.3.7(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@10.7.3:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.6.0
+ debug: 4.3.7(supports-color@8.1.1)
+ diff: 5.2.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 8.1.0
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 16.2.0
+ yargs-parser: 20.2.9
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@10.7.3):
+ dependencies:
+ mocha: 10.7.3
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/program-derived-addresses/steel/program/Cargo.toml b/basics/program-derived-addresses/steel/program/Cargo.toml
new file mode 100644
index 000000000..ee69aa06b
--- /dev/null
+++ b/basics/program-derived-addresses/steel/program/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "program-derived-addresses-program"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+program-derived-addresses-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+bs64 = "0.1.2"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/program-derived-addresses/steel/program/src/create.rs b/basics/program-derived-addresses/steel/program/src/create.rs
new file mode 100644
index 000000000..c2a77f639
--- /dev/null
+++ b/basics/program-derived-addresses/steel/program/src/create.rs
@@ -0,0 +1,41 @@
+use program_derived_addresses_api::prelude::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_create(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ msg!("Processing Create instruction");
+
+ // parse args
+ let args = Create::try_from_bytes(data)?;
+ let page_visits = args.page_visits;
+
+ // load accounts
+ let [signer_info, user_info, pages_visit_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ // validations
+ signer_info.is_signer()?;
+ pages_visit_info.is_empty()?.is_writable()?.has_seeds(
+ &[SEED, &user_info.key.as_ref()],
+ &program_derived_addresses_api::ID,
+ )?;
+ system_program.is_program(&system_program::ID)?;
+
+ // create account
+ create_account::(
+ pages_visit_info,
+ system_program,
+ signer_info,
+ &program_derived_addresses_api::ID,
+ &[SEED, user_info.key.as_ref()],
+ )?;
+
+ let info = pages_visit_info.as_account_mut::(&program_derived_addresses_api::ID)?;
+ info.page_visits = page_visits.page_visits;
+ info.bump = page_visits.bump;
+
+ msg!("page visits: {:?}", u32::from_le_bytes(info.page_visits));
+
+ Ok(())
+}
diff --git a/basics/program-derived-addresses/steel/program/src/increment.rs b/basics/program-derived-addresses/steel/program/src/increment.rs
new file mode 100644
index 000000000..684d73fb6
--- /dev/null
+++ b/basics/program-derived-addresses/steel/program/src/increment.rs
@@ -0,0 +1,19 @@
+use program_derived_addresses_api::prelude::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_increment(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult {
+ msg!("Processing Create instruction");
+
+ // load accounts.
+ let [page_visit_info] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ let info = page_visit_info.as_account_mut::(&program_derived_addresses_api::ID)?;
+
+ // increment page visits
+ info.increment_visits();
+
+ Ok(())
+}
diff --git a/basics/program-derived-addresses/steel/program/src/lib.rs b/basics/program-derived-addresses/steel/program/src/lib.rs
new file mode 100644
index 000000000..4c3b956d5
--- /dev/null
+++ b/basics/program-derived-addresses/steel/program/src/lib.rs
@@ -0,0 +1,29 @@
+mod create;
+mod increment;
+
+use create::*;
+use increment::*;
+
+use program_derived_addresses_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ instruction_data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(
+ &program_derived_addresses_api::ID,
+ program_id,
+ instruction_data,
+ )?;
+
+ match ix {
+ ProgramDerivedAddressesInstruction::Create => process_create(accounts, data)?,
+ ProgramDerivedAddressesInstruction::Increment => process_increment(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/program-derived-addresses/steel/program/tests/test.rs b/basics/program-derived-addresses/steel/program/tests/test.rs
new file mode 100644
index 000000000..2c6a7734a
--- /dev/null
+++ b/basics/program-derived-addresses/steel/program/tests/test.rs
@@ -0,0 +1,56 @@
+use program_derived_addresses_api::prelude::*;
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+use steel::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "program_derived_addresses_program",
+ program_derived_addresses_api::ID,
+ processor!(program_derived_addresses_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+
+ let test_user = Keypair::new();
+ let page_visits_pda = page_visits_pda(&test_user.pubkey());
+
+ let page_visits = PageVisits {
+ page_visits: 0_u32.to_le_bytes(),
+ bump: [page_visits_pda.1],
+ };
+
+ // Submit create transaction
+ let ix_create = create(payer.pubkey(), test_user.pubkey(), page_visits);
+ let tx_create = Transaction::new_signed_with_payer(
+ &[ix_create],
+ Some(&payer.pubkey()),
+ &[&payer],
+ blockhash,
+ );
+ let res_create = banks.process_transaction(tx_create).await;
+ assert!(res_create.is_ok());
+
+ // Submit increment transaction
+ let ix_increment = increment(page_visits_pda.0);
+ let tx_increment = Transaction::new_signed_with_payer(
+ &[ix_increment],
+ Some(&payer.pubkey()),
+ &[&payer],
+ blockhash,
+ );
+ let res_increment = banks.process_transaction(tx_increment).await;
+ assert!(res_increment.is_ok());
+
+ // Verify page visits was incremented
+ let page_visits_account = banks.get_account(page_visits_pda.0).await.unwrap().unwrap();
+ let page_visits = PageVisits::try_from_bytes(&page_visits_account.data).unwrap();
+ assert_eq!(page_visits.page_visits(), 1);
+}
diff --git a/basics/program-derived-addresses/steel/tests/main.test.ts b/basics/program-derived-addresses/steel/tests/main.test.ts
new file mode 100644
index 000000000..5a0f8ba8a
--- /dev/null
+++ b/basics/program-derived-addresses/steel/tests/main.test.ts
@@ -0,0 +1,154 @@
+import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { assert } from 'chai';
+import { describe, it } from 'mocha';
+import { BanksClient, ProgramTestContext, start } from 'solana-bankrun';
+
+type PageVisits = {
+ page_visits: number;
+ bump: number;
+};
+
+const pageVisitsSchema: borsh.Schema = {
+ struct: {
+ discriminator: 'u64',
+ page_visits: 'u32',
+ bump: 'u8',
+ },
+};
+
+const createPageVisitsBuffer = (data: PageVisits): Buffer => {
+ const pageVisits = Buffer.alloc(4);
+ pageVisits.writeUInt32LE(data.page_visits, 0);
+ const bump = Buffer.alloc(1);
+ bump.writeUInt8(data.bump, 0);
+ return Buffer.concat([pageVisits, bump]);
+};
+
+describe('program derived addresses program', async () => {
+ const PROGRAM_ID = new PublicKey('z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35');
+
+ let context: ProgramTestContext;
+ let client: BanksClient;
+ let payer: Keypair;
+
+ const testUser = Keypair.generate();
+
+ const instructionDiscriminators = {
+ create: Buffer.from([0]),
+ increment: Buffer.from([1]),
+ };
+
+ const derivePageVisitsPDA = async (user: PublicKey) => {
+ const seed = Buffer.from('program-derived-addresses');
+ return PublicKey.findProgramAddressSync([seed, user.toBuffer()], PROGRAM_ID);
+ };
+
+ before(async () => {
+ context = await start([{ name: 'program_derived_addresses_program', programId: PROGRAM_ID }], []);
+ client = context.banksClient;
+ payer = context.payer;
+ });
+
+ it('should create a page visits tracking PDA', async () => {
+ const [pageVisitsPDA] = await derivePageVisitsPDA(testUser.publicKey);
+
+ // create the page visits data
+ const pageVisits: PageVisits = { page_visits: 0, bump: 0 };
+ const pageVisitsBuffer = createPageVisitsBuffer(pageVisits);
+ const data = Buffer.concat([instructionDiscriminators.create, pageVisitsBuffer]);
+
+ // create the create instruction
+ const createIx = new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: testUser.publicKey, isSigner: false, isWritable: false },
+ { pubkey: pageVisitsPDA, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ data,
+ });
+
+ // send the create transaction
+ const createTx = new Transaction();
+ createTx.recentBlockhash = context.lastBlockhash;
+ createTx.add(createIx).sign(payer);
+
+ // process the transaction
+ await client.processTransaction(createTx);
+
+ // fetch the counter account data
+ const pageVisitsInfo = await client.getAccount(pageVisitsPDA);
+ assert(pageVisitsInfo !== null, 'account should exist');
+ });
+
+ it('should visit the page and get 1 visit!', async () => {
+ const [pageVisitsPDA] = await derivePageVisitsPDA(testUser.publicKey);
+
+ // create the increment instruction
+ const incrementIx = new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [{ pubkey: pageVisitsPDA, isSigner: false, isWritable: true }],
+ data: instructionDiscriminators.increment,
+ });
+
+ // send the increment transaction
+ const incrementTx = new Transaction();
+ incrementTx.recentBlockhash = context.lastBlockhash;
+ incrementTx.add(incrementIx).sign(payer);
+
+ // process the transaction
+ await client.processTransaction(incrementTx);
+
+ // fetch the account data
+ const pageVisitsInfo = await client.getAccount(pageVisitsPDA);
+ assert(pageVisitsInfo !== null, 'account should exist');
+
+ const data = borsh.deserialize(pageVisitsSchema, pageVisitsInfo?.data) as PageVisits;
+
+ assert(data.page_visits === 1, 'page visits should be 1');
+ });
+
+ it('should visit the page and get 2 visits!', async () => {
+ const [pageVisitsPDA] = await derivePageVisitsPDA(testUser.publicKey);
+
+ // create the increment instruction
+ const incrementIx = new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [{ pubkey: pageVisitsPDA, isSigner: false, isWritable: true }],
+ data: instructionDiscriminators.increment,
+ });
+
+ // get last blockhash
+ const [blockhash, _block_height] = await client.getLatestBlockhash();
+
+ // send the increment transaction
+ const incrementTx = new Transaction();
+ incrementTx.recentBlockhash = blockhash;
+ incrementTx.add(incrementIx).sign(payer);
+
+ // process the transaction
+ await client.processTransaction(incrementTx);
+
+ // fetch the account data
+ const pageVisitsInfo = await client.getAccount(pageVisitsPDA);
+ assert(pageVisitsInfo !== null, 'account should exist');
+
+ const data = borsh.deserialize(pageVisitsSchema, pageVisitsInfo?.data) as PageVisits;
+
+ assert(data.page_visits === 2, 'page visits should be 2');
+ });
+
+ it('should read all the visits of the page', async () => {
+ const [pageVisitsPDA] = await derivePageVisitsPDA(testUser.publicKey);
+
+ // fetch the account data
+ const pageVisitsInfo = await client.getAccount(pageVisitsPDA);
+ assert(pageVisitsInfo !== null, 'account should exist');
+
+ const data = borsh.deserialize(pageVisitsSchema, pageVisitsInfo?.data) as PageVisits;
+
+ assert(data.page_visits === 2, 'page visits should be 2');
+ });
+});
diff --git a/basics/program-derived-addresses/steel/tsconfig.json b/basics/program-derived-addresses/steel/tsconfig.json
new file mode 100644
index 000000000..8c20b2236
--- /dev/null
+++ b/basics/program-derived-addresses/steel/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/basics/realloc/anchor/Anchor.toml b/basics/realloc/anchor/Anchor.toml
index 15b9490d0..3c37422ce 100644
--- a/basics/realloc/anchor/Anchor.toml
+++ b/basics/realloc/anchor/Anchor.toml
@@ -13,4 +13,4 @@ cluster = "Localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/realloc/anchor/Cargo.toml b/basics/realloc/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/realloc/anchor/Cargo.toml
+++ b/basics/realloc/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/realloc/anchor/migrations/deploy.ts b/basics/realloc/anchor/migrations/deploy.ts
index 82fb175fa..64a1c3599 100644
--- a/basics/realloc/anchor/migrations/deploy.ts
+++ b/basics/realloc/anchor/migrations/deploy.ts
@@ -2,9 +2,9 @@
// single deploy script that's invoked from the CLI, injecting a provider
// configured from the workspace's Anchor.toml.
-const anchor = require("@coral-xyz/anchor");
+const anchor = require('@coral-xyz/anchor');
-module.exports = async function (provider) {
+module.exports = async (provider) => {
// Configure client to use the provider.
anchor.setProvider(provider);
diff --git a/basics/realloc/anchor/package.json b/basics/realloc/anchor/package.json
index eb9ad4fb0..9d8340d3a 100644
--- a/basics/realloc/anchor/package.json
+++ b/basics/realloc/anchor/package.json
@@ -1,19 +1,22 @@
{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
+ "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.4.1",
+ "mocha": "^9.0.3",
+ "prettier": "^2.6.2",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^4.3.5"
+ }
}
diff --git a/basics/realloc/anchor/pnpm-lock.yaml b/basics/realloc/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..5bc2a46af
--- /dev/null
+++ b/basics/realloc/anchor/pnpm-lock.yaml
@@ -0,0 +1,1463 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.4.1
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.5.0':
+ resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.5.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.5.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ prettier@2.8.8: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/realloc/anchor/programs/anchor-realloc/Cargo.toml b/basics/realloc/anchor/programs/anchor-realloc/Cargo.toml
index 22c43cb3c..f21f893e5 100644
--- a/basics/realloc/anchor/programs/anchor-realloc/Cargo.toml
+++ b/basics/realloc/anchor/programs/anchor-realloc/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "anchor_realloc"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/realloc/anchor/programs/anchor-realloc/src/lib.rs b/basics/realloc/anchor/programs/anchor-realloc/src/lib.rs
index f6151b935..7a0abc572 100644
--- a/basics/realloc/anchor/programs/anchor-realloc/src/lib.rs
+++ b/basics/realloc/anchor/programs/anchor-realloc/src/lib.rs
@@ -39,10 +39,10 @@ pub struct Update<'info> {
pub payer: Signer<'info>,
#[account(
- mut,
- realloc = Message::required_space(input.len()),
- realloc::payer = payer,
- realloc::zero = true,
+ mut,
+ realloc = Message::required_space(input.len()),
+ realloc::payer = payer,
+ realloc::zero = true,
)]
pub message_account: Account<'info, Message>,
pub system_program: Program<'info, System>,
@@ -60,4 +60,3 @@ impl Message {
input_len
}
}
-
diff --git a/basics/realloc/anchor/tests/anchor-realloc.ts b/basics/realloc/anchor/tests/anchor-realloc.ts
index d3b4fc627..d08507646 100644
--- a/basics/realloc/anchor/tests/anchor-realloc.ts
+++ b/basics/realloc/anchor/tests/anchor-realloc.ts
@@ -1,37 +1,37 @@
-import * as anchor from "@coral-xyz/anchor"
-import { Program } from "@coral-xyz/anchor"
-import { AnchorRealloc } from "../target/types/anchor_realloc"
-import { Keypair } from "@solana/web3.js"
-import { assert } from "chai"
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import { Keypair } from '@solana/web3.js';
+import { assert } from 'chai';
+import type { AnchorRealloc } from '../target/types/anchor_realloc';
-describe("anchor-realloc", () => {
+describe('anchor-realloc', () => {
// Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env()
- anchor.setProvider(provider)
- const payer = provider.wallet as anchor.Wallet
- const connection = provider.connection
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+ const payer = provider.wallet as anchor.Wallet;
+ const connection = provider.connection;
- const program = anchor.workspace.AnchorRealloc as Program
+ const program = anchor.workspace.AnchorRealloc as Program;
- const messageAccount = new Keypair()
+ const messageAccount = new Keypair();
// helper function to check the account data and message
async function checkAccount(publicKey, expectedMessage) {
- const accountInfo = await connection.getAccountInfo(publicKey)
- const accountData = await program.account.message.fetch(publicKey)
+ const accountInfo = await connection.getAccountInfo(publicKey);
+ const accountData = await program.account.message.fetch(publicKey);
// 8 bytes for the discriminator,
// 4 bytes for the length of the message,
// and the length of the message
- assert.equal(accountInfo.data.length, 8 + 4 + expectedMessage.length)
- assert.equal(accountData.message, expectedMessage)
+ assert.equal(accountInfo.data.length, 8 + 4 + expectedMessage.length);
+ assert.equal(accountData.message, expectedMessage);
- console.log(`Account Data Length: ${accountInfo.data.length}`)
- console.log(`Message: ${accountData.message}`)
+ console.log(`Account Data Length: ${accountInfo.data.length}`);
+ console.log(`Message: ${accountData.message}`);
}
- it("Is initialized!", async () => {
- const input = "hello"
+ it('Is initialized!', async () => {
+ const input = 'hello';
await program.methods
.initialize(input)
@@ -40,13 +40,13 @@ describe("anchor-realloc", () => {
messageAccount: messageAccount.publicKey,
})
.signers([messageAccount])
- .rpc()
+ .rpc();
- await checkAccount(messageAccount.publicKey, input)
- })
+ await checkAccount(messageAccount.publicKey, input);
+ });
- it("Update", async () => {
- const input = "hello world"
+ it('Update', async () => {
+ const input = 'hello world';
await program.methods
.update(input)
@@ -54,13 +54,13 @@ describe("anchor-realloc", () => {
payer: payer.publicKey,
messageAccount: messageAccount.publicKey,
})
- .rpc()
+ .rpc();
- await checkAccount(messageAccount.publicKey, input)
- })
+ await checkAccount(messageAccount.publicKey, input);
+ });
- it("Update", async () => {
- const input = "hi"
+ it('Update', async () => {
+ const input = 'hi';
await program.methods
.update(input)
@@ -68,8 +68,8 @@ describe("anchor-realloc", () => {
payer: payer.publicKey,
messageAccount: messageAccount.publicKey,
})
- .rpc()
+ .rpc();
- await checkAccount(messageAccount.publicKey, input)
- })
-})
+ await checkAccount(messageAccount.publicKey, input);
+ });
+});
diff --git a/basics/realloc/anchor/tests/bankrun.test.ts b/basics/realloc/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..968209f36
--- /dev/null
+++ b/basics/realloc/anchor/tests/bankrun.test.ts
@@ -0,0 +1,79 @@
+import { describe, it } from 'node:test';
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } 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 { AnchorRealloc } from '../target/types/anchor_realloc';
+
+const IDL = require('../target/idl/anchor_realloc.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+describe('anchor-realloc', async () => {
+ const context = await startAnchor('', [{ name: 'anchor_realloc', programId: PROGRAM_ID }], []);
+ const provider = new BankrunProvider(context);
+ const connection = provider.connection;
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ const messageAccount = new Keypair();
+
+ // helper function to check the account data and message
+ async function checkAccount(publicKey: PublicKey, expectedMessage: string) {
+ const accountInfo = await connection.getAccountInfo(publicKey);
+ const accountData = await program.account.message.fetch(publicKey);
+
+ // 8 bytes for the discriminator,
+ // 4 bytes for the length of the message,
+ // and the length of the message
+ assert.equal(accountInfo.data.length, 8 + 4 + expectedMessage.length);
+ assert.equal(accountData.message, expectedMessage);
+
+ console.log(`Account Data Length: ${accountInfo.data.length}`);
+ console.log(`Message: ${accountData.message}`);
+ }
+
+ it('Is initialized!', async () => {
+ const input = 'hello';
+
+ await program.methods
+ .initialize(input)
+ .accounts({
+ payer: payer.publicKey,
+ messageAccount: messageAccount.publicKey,
+ })
+ .signers([messageAccount])
+ .rpc();
+
+ await checkAccount(messageAccount.publicKey, input);
+ });
+
+ it('Update', async () => {
+ const input = 'hello world';
+
+ await program.methods
+ .update(input)
+ .accounts({
+ payer: payer.publicKey,
+ messageAccount: messageAccount.publicKey,
+ })
+ .rpc();
+
+ await checkAccount(messageAccount.publicKey, input);
+ });
+
+ it('Update', async () => {
+ const input = 'hi';
+
+ await program.methods
+ .update(input)
+ .accounts({
+ payer: payer.publicKey,
+ messageAccount: messageAccount.publicKey,
+ })
+ .rpc();
+
+ await checkAccount(messageAccount.publicKey, input);
+ });
+});
diff --git a/basics/realloc/anchor/tsconfig.json b/basics/realloc/anchor/tsconfig.json
index 558b83e5e..cd5d2e3d0 100644
--- a/basics/realloc/anchor/tsconfig.json
+++ b/basics/realloc/anchor/tsconfig.json
@@ -1,11 +1,10 @@
{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
- }
-
\ No newline at end of file
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/basics/realloc/native/cicd.sh b/basics/realloc/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/realloc/native/cicd.sh
+++ b/basics/realloc/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/realloc/native/package.json b/basics/realloc/native/package.json
index 2ca6b0d46..ca964f578 100644
--- a/basics/realloc/native/package.json
+++ b/basics/realloc/native/package.json
@@ -1,6 +1,9 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tests/tsconfig.test.json -t 1000000 ./tests/realloc.test.ts"
+ "test": "pnpm ts-mocha -p ./tests/tsconfig.test.json -t 1000000 ./tests/realloc.test.ts",
+ "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
"@solana/web3.js": "^1.35",
@@ -12,6 +15,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/realloc/native/pnpm-lock.yaml b/basics/realloc/native/pnpm-lock.yaml
new file mode 100644
index 000000000..5db256a7e
--- /dev/null
+++ b/basics/realloc/native/pnpm-lock.yaml
@@ -0,0 +1,1350 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.35
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/realloc/native/program/Cargo.toml b/basics/realloc/native/program/Cargo.toml
index 0b4f69c52..5ff8a73d0 100644
--- a/basics/realloc/native/program/Cargo.toml
+++ b/basics/realloc/native/program/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
borsh = "0.9.3"
borsh-derive = "0.9.1"
-solana-program = "1.16.10"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/realloc/native/tests/realloc.test.ts b/basics/realloc/native/tests/realloc.test.ts
index 9378fa67e..690ee7015 100644
--- a/basics/realloc/native/tests/realloc.test.ts
+++ b/basics/realloc/native/tests/realloc.test.ts
@@ -1,126 +1,101 @@
+import { describe, test } from 'node:test';
+import { Keypair, PublicKey, Transaction } from '@solana/web3.js';
+import { start } from 'solana-bankrun';
import {
- Connection,
- Keypair,
- PublicKey,
- sendAndConfirmTransaction,
- Transaction,
-} from '@solana/web3.js';
-import {
- createCreateInstruction,
- createKeypairFromFile,
- createReallocateWithoutZeroInitInstruction,
- createReallocateZeroInitInstruction,
- AddressInfo,
- EnhancedAddressInfo,
- WorkInfo,
+ AddressInfo,
+ EnhancedAddressInfo,
+ WorkInfo,
+ createCreateInstruction,
+ createReallocateWithoutZeroInitInstruction,
+ createReallocateZeroInitInstruction,
} from '../ts';
+describe('Realloc!', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'realloc_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+ const testAccount = Keypair.generate();
-describe("Realloc!", async () => {
+ test('Create the account with data', async () => {
+ console.log(`${testAccount.publicKey}`);
+ const ix = createCreateInstruction(testAccount.publicKey, payer.publicKey, PROGRAM_ID, 'Jacob', 123, 'Main St.', 'Chicago');
- const connection = new Connection(`https://api.devnet.solana.com`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/so/program-keypair.json');
+ const tx = new Transaction();
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.add(ix).sign(payer, testAccount);
+ await client.processTransaction(tx);
- const testAccount = Keypair.generate();
+ await printAddressInfo(testAccount.publicKey);
+ });
- it("Create the account with data", async () => {
- console.log(`${testAccount.publicKey}`);
- const ix = createCreateInstruction(
- testAccount.publicKey,
- payer.publicKey,
- program.publicKey,
- "Jacob",
- 123,
- "Main St.",
- "Chicago",
- );
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, testAccount]
- );
- await printAddressInfo(testAccount.publicKey);
- });
-
- it("Reallocate WITHOUT zero init", async () => {
- const ix = createReallocateWithoutZeroInitInstruction(
- testAccount.publicKey,
- payer.publicKey,
- program.publicKey,
- "Illinois",
- 12345,
- );
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
- await printEnhancedAddressInfo(testAccount.publicKey);
- });
+ test('Reallocate WITHOUT zero init', async () => {
+ const ix = createReallocateWithoutZeroInitInstruction(testAccount.publicKey, payer.publicKey, PROGRAM_ID, 'Illinois', 12345);
+ const tx = new Transaction();
+ const [blockHash, _blockHeight] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockHash;
+ tx.add(ix).sign(payer);
+ await client.processTransaction(tx);
- it("Reallocate WITH zero init", async () => {
- const ix = createReallocateZeroInitInstruction(
- testAccount.publicKey,
- payer.publicKey,
- program.publicKey,
- "Pete",
- "Engineer",
- "Solana Labs",
- 2,
- );
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
- await printWorkInfo(testAccount.publicKey);
- });
+ await printEnhancedAddressInfo(testAccount.publicKey);
+ });
- async function printAddressInfo(pubkey: PublicKey): Promise {
- await delay(2);
- const data = (await connection.getAccountInfo(pubkey))?.data;
- if (data) {
- const addressInfo = AddressInfo.fromBuffer(data);
- console.log("Address info:");
- console.log(` Name: ${addressInfo.name}`);
- console.log(` House Num: ${addressInfo.house_number}`);
- console.log(` Street: ${addressInfo.street}`);
- console.log(` City: ${addressInfo.city}`);
- };
- }
+ test('Reallocate WITH zero init', async () => {
+ const ix = createReallocateZeroInitInstruction(testAccount.publicKey, payer.publicKey, PROGRAM_ID, 'Pete', 'Engineer', 'Solana Labs', 2);
+ const tx = new Transaction();
+ const [blockHash, _blockHeight] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockHash;
+ tx.add(ix).sign(payer);
+ await client.processTransaction(tx);
- async function printEnhancedAddressInfo(pubkey: PublicKey): Promise {
- await delay(2);
- const data = (await connection.getAccountInfo(pubkey))?.data;
- if (data) {
- const enhancedAddressInfo = EnhancedAddressInfo.fromBuffer(data);
- console.log("Enhanced Address info:");
- console.log(` Name: ${enhancedAddressInfo.name}`);
- console.log(` House Num: ${enhancedAddressInfo.house_number}`);
- console.log(` Street: ${enhancedAddressInfo.street}`);
- console.log(` City: ${enhancedAddressInfo.city}`);
- console.log(` State: ${enhancedAddressInfo.state}`);
- console.log(` Zip: ${enhancedAddressInfo.zip}`);
- };
+ await printEnhancedAddressInfo(testAccount.publicKey);
+ await printWorkInfo(testAccount.publicKey);
+ });
+
+ async function printAddressInfo(pubkey: PublicKey): Promise {
+ await sleep(2);
+ const data = (await client.getAccount(pubkey))?.data;
+ if (data) {
+ const addressInfo = AddressInfo.fromBuffer(Buffer.from(data));
+ console.log('Address info:');
+ console.log(` Name: ${addressInfo.name}`);
+ console.log(` House Num: ${addressInfo.house_number}`);
+ console.log(` Street: ${addressInfo.street}`);
+ console.log(` City: ${addressInfo.city}`);
}
+ }
- async function printWorkInfo(pubkey: PublicKey): Promise {
- await delay(2);
- const data = (await connection.getAccountInfo(pubkey))?.data;
- if (data) {
- const workInfo = WorkInfo.fromBuffer(data);
- console.log("Work info:");
- console.log(` Name: ${workInfo.name}`);
- console.log(` Position: ${workInfo.position}`);
- console.log(` Company: ${workInfo.company}`);
- console.log(` Years: ${workInfo.years_employed}`);
- };
+ async function printEnhancedAddressInfo(pubkey: PublicKey): Promise {
+ await sleep(2);
+ const data = (await client.getAccount(pubkey))?.data;
+ if (data) {
+ const enhancedAddressInfo = EnhancedAddressInfo.fromBuffer(Buffer.from(data));
+ console.log('Enhanced Address info:');
+ console.log(` Name: ${enhancedAddressInfo.name}`);
+ console.log(` House Num: ${enhancedAddressInfo.house_number}`);
+ console.log(` Street: ${enhancedAddressInfo.street}`);
+ console.log(` City: ${enhancedAddressInfo.city}`);
+ console.log(` State: ${enhancedAddressInfo.state}`);
+ console.log(` Zip: ${enhancedAddressInfo.zip}`);
}
+ }
- function delay(s: number) {
- return new Promise( resolve => setTimeout(resolve, s * 1000) );
+ async function printWorkInfo(pubkey: PublicKey): Promise {
+ await sleep(2);
+ const data = (await client.getAccount(pubkey))?.data;
+ if (data) {
+ const workInfo = WorkInfo.fromBuffer(Buffer.from(data));
+ console.log('Work info:');
+ console.log(` Name: ${workInfo.name}`);
+ console.log(` Position: ${workInfo.position}`);
+ console.log(` Company: ${workInfo.company}`);
+ console.log(` Years: ${workInfo.years_employed}`);
}
- });
-
\ No newline at end of file
+ }
+
+ function sleep(s: number) {
+ const SECONDS = 1000;
+ return new Promise((resolve) => setTimeout(resolve, s * SECONDS));
+ }
+});
diff --git a/basics/realloc/native/ts/index.ts b/basics/realloc/native/ts/index.ts
index 0eca67361..70c7f3510 100644
--- a/basics/realloc/native/ts/index.ts
+++ b/basics/realloc/native/ts/index.ts
@@ -1,8 +1,7 @@
-
export * from './instructions/create';
export * from './instructions/instruction';
export * from './instructions/reallocate';
export * from './state/address-info';
export * from './state/enhanced-address-info';
export * from './state/work-info';
-export * from './util/util';
\ No newline at end of file
+export * from './util/util';
diff --git a/basics/realloc/native/ts/instructions/create.ts b/basics/realloc/native/ts/instructions/create.ts
index 3de82e3f7..d60a9c800 100644
--- a/basics/realloc/native/ts/instructions/create.ts
+++ b/basics/realloc/native/ts/instructions/create.ts
@@ -1,84 +1,80 @@
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-import {
- PublicKey,
- SystemProgram,
- TransactionInstruction
-} from '@solana/web3.js';
+import { Buffer } from 'node:buffer';
+import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
import { ReallocInstruction } from './instruction';
-
export class Create {
+ instruction: ReallocInstruction;
+ name: string;
+ house_number: number;
+ street: string;
+ city: string;
+ constructor(props: {
instruction: ReallocInstruction;
name: string;
house_number: number;
street: string;
city: string;
+ }) {
+ this.instruction = props.instruction;
+ this.name = props.name;
+ this.house_number = props.house_number;
+ this.street = props.street;
+ this.city = props.city;
+ }
- constructor(props: {
- instruction: ReallocInstruction,
- name: string,
- house_number: number,
- street: string,
- city: string,
- }) {
- this.instruction = props.instruction;
- this.name = props.name;
- this.house_number = props.house_number;
- this.street = props.street;
- this.city = props.city;
- }
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CreateSchema, this));
+ }
- toBuffer() {
- return Buffer.from(borsh.serialize(CreateSchema, this))
- };
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(CreateSchema, Create, buffer);
- };
-};
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(CreateSchema, Create, buffer);
+ }
+}
export const CreateSchema = new Map([
- [ Create, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ['name', 'string'],
- ['house_number', 'u8'],
- ['street', 'string'],
- ['city', 'string'],
- ],
- }]
+ [
+ Create,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['name', 'string'],
+ ['house_number', 'u8'],
+ ['street', 'string'],
+ ['city', 'string'],
+ ],
+ },
+ ],
]);
export function createCreateInstruction(
- target: PublicKey,
- payer: PublicKey,
- programId: PublicKey,
- name: string,
- house_number: number,
- street: string,
- city: string,
+ target: PublicKey,
+ payer: PublicKey,
+ programId: PublicKey,
+ name: string,
+ house_number: number,
+ street: string,
+ city: string,
): TransactionInstruction {
+ const instructionObject = new Create({
+ instruction: ReallocInstruction.Create,
+ name,
+ house_number,
+ street,
+ city,
+ });
- const instructionObject = new Create({
- instruction: ReallocInstruction.Create,
- name,
- house_number,
- street,
- city,
- });
-
- const ix = new TransactionInstruction({
- keys: [
- {pubkey: target, isSigner: false, isWritable: true},
- {pubkey: payer, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: programId,
- data: instructionObject.toBuffer(),
- });
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: target, isSigner: false, isWritable: true },
+ { pubkey: payer, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: programId,
+ data: instructionObject.toBuffer(),
+ });
- return ix;
-}
\ No newline at end of file
+ return ix;
+}
diff --git a/basics/realloc/native/ts/instructions/index.ts b/basics/realloc/native/ts/instructions/index.ts
index a972d4992..a0876a284 100644
--- a/basics/realloc/native/ts/instructions/index.ts
+++ b/basics/realloc/native/ts/instructions/index.ts
@@ -1,3 +1,3 @@
export * from './create';
export * from './instruction';
-export * from './reallocate';
\ No newline at end of file
+export * from './reallocate';
diff --git a/basics/realloc/native/ts/instructions/instruction.ts b/basics/realloc/native/ts/instructions/instruction.ts
index 6e4281173..31121a6f2 100644
--- a/basics/realloc/native/ts/instructions/instruction.ts
+++ b/basics/realloc/native/ts/instructions/instruction.ts
@@ -1,5 +1,5 @@
export enum ReallocInstruction {
- Create,
- ReallocateWithoutZeroInit,
- ReallocateZeroInit,
-}
\ No newline at end of file
+ Create = 0,
+ ReallocateWithoutZeroInit = 1,
+ ReallocateZeroInit = 2,
+}
diff --git a/basics/realloc/native/ts/instructions/reallocate.ts b/basics/realloc/native/ts/instructions/reallocate.ts
index ab4e8d721..1d7df1774 100644
--- a/basics/realloc/native/ts/instructions/reallocate.ts
+++ b/basics/realloc/native/ts/instructions/reallocate.ts
@@ -1,147 +1,140 @@
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-import {
- PublicKey,
- SystemProgram,
- TransactionInstruction
-} from '@solana/web3.js';
+import { Buffer } from 'node:buffer';
+import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
import { ReallocInstruction } from './instruction';
-
export class ReallocateWithoutZeroInit {
+ instruction: ReallocInstruction;
+ state: string;
+ zip: number;
+ constructor(props: {
instruction: ReallocInstruction;
state: string;
zip: number;
-
- constructor(props: {
- instruction: ReallocInstruction,
- state: string,
- zip: number,
- }) {
- this.instruction = props.instruction;
- this.state = props.state;
- this.zip = props.zip;
- }
-
- toBuffer() {
- return Buffer.from(borsh.serialize(ReallocateWithoutZeroInitSchema, this))
- };
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(ReallocateWithoutZeroInitSchema, ReallocateWithoutZeroInit, buffer);
- };
-};
+ }) {
+ this.instruction = props.instruction;
+ this.state = props.state;
+ this.zip = props.zip;
+ }
+
+ toBuffer() {
+ return Buffer.from(borsh.serialize(ReallocateWithoutZeroInitSchema, this));
+ }
+
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(ReallocateWithoutZeroInitSchema, ReallocateWithoutZeroInit, buffer);
+ }
+}
export const ReallocateWithoutZeroInitSchema = new Map([
- [ ReallocateWithoutZeroInit, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ['state', 'string'],
- ['zip', 'u32'],
- ],
- }]
+ [
+ ReallocateWithoutZeroInit,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['state', 'string'],
+ ['zip', 'u32'],
+ ],
+ },
+ ],
]);
export function createReallocateWithoutZeroInitInstruction(
- target: PublicKey,
- payer: PublicKey,
- programId: PublicKey,
- state: string,
- zip: number,
+ target: PublicKey,
+ payer: PublicKey,
+ programId: PublicKey,
+ state: string,
+ zip: number,
): TransactionInstruction {
-
- const instructionObject = new ReallocateWithoutZeroInit({
- instruction: ReallocInstruction.ReallocateWithoutZeroInit,
- state,
- zip,
- });
-
- const ix = new TransactionInstruction({
- keys: [
- {pubkey: target, isSigner: false, isWritable: true},
- {pubkey: payer, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: programId,
- data: instructionObject.toBuffer(),
- });
-
- return ix;
+ const instructionObject = new ReallocateWithoutZeroInit({
+ instruction: ReallocInstruction.ReallocateWithoutZeroInit,
+ state,
+ zip,
+ });
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: target, isSigner: false, isWritable: true },
+ { pubkey: payer, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: programId,
+ data: instructionObject.toBuffer(),
+ });
+
+ return ix;
}
-
-
export class ReallocateZeroInit {
+ instruction: ReallocInstruction;
+ name: string;
+ position: string;
+ company: string;
+ years_employed: number;
+ constructor(props: {
instruction: ReallocInstruction;
name: string;
position: string;
company: string;
years_employed: number;
-
- constructor(props: {
- instruction: ReallocInstruction,
- name: string,
- position: string,
- company: string,
- years_employed: number,
- }) {
- this.instruction = props.instruction;
- this.name = props.name;
- this.position = props.position;
- this.company = props.company;
- this.years_employed = props.years_employed;
- }
-
- toBuffer() {
- return Buffer.from(borsh.serialize(ReallocateZeroInitSchema, this))
- };
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(ReallocateZeroInitSchema, ReallocateZeroInit, buffer);
- };
-};
+ }) {
+ this.instruction = props.instruction;
+ this.name = props.name;
+ this.position = props.position;
+ this.company = props.company;
+ this.years_employed = props.years_employed;
+ }
+
+ toBuffer() {
+ return Buffer.from(borsh.serialize(ReallocateZeroInitSchema, this));
+ }
+
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(ReallocateZeroInitSchema, ReallocateZeroInit, buffer);
+ }
+}
export const ReallocateZeroInitSchema = new Map([
- [ ReallocateZeroInit, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ['name', 'string'],
- ['position', 'string'],
- ['company', 'string'],
- ['years_employed', 'u8'],
- ],
- }]
+ [
+ ReallocateZeroInit,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['name', 'string'],
+ ['position', 'string'],
+ ['company', 'string'],
+ ['years_employed', 'u8'],
+ ],
+ },
+ ],
]);
export function createReallocateZeroInitInstruction(
- target: PublicKey,
- payer: PublicKey,
- programId: PublicKey,
- name: string,
- position: string,
- company: string,
- years_employed: number,
+ target: PublicKey,
+ payer: PublicKey,
+ programId: PublicKey,
+ name: string,
+ position: string,
+ company: string,
+ years_employed: number,
): TransactionInstruction {
-
- const instructionObject = new ReallocateZeroInit({
- instruction: ReallocInstruction.ReallocateZeroInit,
- name,
- position,
- company,
- years_employed,
- });
-
- const ix = new TransactionInstruction({
- keys: [
- {pubkey: target, isSigner: false, isWritable: true},
- ],
- programId: programId,
- data: instructionObject.toBuffer(),
- });
-
- return ix;
-}
\ No newline at end of file
+ const instructionObject = new ReallocateZeroInit({
+ instruction: ReallocInstruction.ReallocateZeroInit,
+ name,
+ position,
+ company,
+ years_employed,
+ });
+
+ const ix = new TransactionInstruction({
+ keys: [{ pubkey: target, isSigner: false, isWritable: true }],
+ programId: programId,
+ data: instructionObject.toBuffer(),
+ });
+
+ return ix;
+}
diff --git a/basics/realloc/native/ts/state/address-info.ts b/basics/realloc/native/ts/state/address-info.ts
index 134ddeb0d..d3a3e466f 100644
--- a/basics/realloc/native/ts/state/address-info.ts
+++ b/basics/realloc/native/ts/state/address-info.ts
@@ -1,47 +1,48 @@
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-
+import { Buffer } from 'node:buffer';
+import * as borsh from 'borsh';
export class AddressInfo {
+ name: string;
+ house_number: number;
+ street: string;
+ city: string;
+ constructor(props: {
name: string;
house_number: number;
street: string;
city: string;
+ }) {
+ this.name = props.name;
+ this.house_number = props.house_number;
+ this.street = props.street;
+ this.city = props.city;
+ }
- constructor(props: {
- name: string,
- house_number: number,
- street: string,
- city: string,
- }) {
- this.name = props.name;
- this.house_number = props.house_number;
- this.street = props.street;
- this.city = props.city;
- }
+ toBase58() {
+ return borsh.serialize(AddressInfoSchema, this).toString();
+ }
- toBase58() {
- return borsh.serialize(AddressInfoSchema, this).toString()
- };
+ toBuffer() {
+ return Buffer.from(borsh.serialize(AddressInfoSchema, this));
+ }
- 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);
+ }
+}
export const AddressInfoSchema = new Map([
- [ AddressInfo, {
- kind: 'struct',
- fields: [
- ['name', 'string'],
- ['house_number', 'u8'],
- ['street', 'string'],
- ['city', 'string'],
- ],
- }]
-]);
\ No newline at end of file
+ [
+ AddressInfo,
+ {
+ kind: 'struct',
+ fields: [
+ ['name', 'string'],
+ ['house_number', 'u8'],
+ ['street', 'string'],
+ ['city', 'string'],
+ ],
+ },
+ ],
+]);
diff --git a/basics/realloc/native/ts/state/enhanced-address-info.ts b/basics/realloc/native/ts/state/enhanced-address-info.ts
index 301f4649f..ba7f38b57 100644
--- a/basics/realloc/native/ts/state/enhanced-address-info.ts
+++ b/basics/realloc/native/ts/state/enhanced-address-info.ts
@@ -1,55 +1,56 @@
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-
+import { Buffer } from 'node:buffer';
+import * as borsh from 'borsh';
export class EnhancedAddressInfo {
+ name: string;
+ house_number: number;
+ street: string;
+ city: string;
+ state: string;
+ zip: number;
+ constructor(props: {
name: string;
house_number: number;
street: string;
city: string;
state: string;
zip: number;
+ }) {
+ this.name = props.name;
+ this.house_number = props.house_number;
+ this.street = props.street;
+ this.city = props.city;
+ this.state = props.state;
+ this.zip = props.zip;
+ }
- constructor(props: {
- name: string,
- house_number: number,
- street: string,
- city: string,
- state: string,
- zip: number,
- }) {
- this.name = props.name;
- this.house_number = props.house_number;
- this.street = props.street;
- this.city = props.city;
- this.state = props.state;
- this.zip = props.zip;
- }
+ toBase58() {
+ return borsh.serialize(EnhancedAddressInfoSchema, this).toString();
+ }
- toBase58() {
- return borsh.serialize(EnhancedAddressInfoSchema, this).toString()
- };
+ toBuffer() {
+ return Buffer.from(borsh.serialize(EnhancedAddressInfoSchema, this));
+ }
- toBuffer() {
- return Buffer.from(borsh.serialize(EnhancedAddressInfoSchema, this))
- };
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(EnhancedAddressInfoSchema, EnhancedAddressInfo, buffer);
- };
-};
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(EnhancedAddressInfoSchema, EnhancedAddressInfo, buffer);
+ }
+}
export const EnhancedAddressInfoSchema = new Map([
- [ EnhancedAddressInfo, {
- kind: 'struct',
- fields: [
- ['name', 'string'],
- ['house_number', 'u8'],
- ['street', 'string'],
- ['city', 'string'],
- ['state', 'string'],
- ['zip', 'u32'],
- ],
- }]
-]);
\ No newline at end of file
+ [
+ EnhancedAddressInfo,
+ {
+ kind: 'struct',
+ fields: [
+ ['name', 'string'],
+ ['house_number', 'u8'],
+ ['street', 'string'],
+ ['city', 'string'],
+ ['state', 'string'],
+ ['zip', 'u32'],
+ ],
+ },
+ ],
+]);
diff --git a/basics/realloc/native/ts/state/index.ts b/basics/realloc/native/ts/state/index.ts
index 73bc44697..5b4330eb5 100644
--- a/basics/realloc/native/ts/state/index.ts
+++ b/basics/realloc/native/ts/state/index.ts
@@ -1,3 +1,3 @@
export * from './address-info';
export * from './enhanced-address-info';
-export * from './work-info';
\ No newline at end of file
+export * from './work-info';
diff --git a/basics/realloc/native/ts/state/work-info.ts b/basics/realloc/native/ts/state/work-info.ts
index b57717d9b..8275ba017 100644
--- a/basics/realloc/native/ts/state/work-info.ts
+++ b/basics/realloc/native/ts/state/work-info.ts
@@ -1,47 +1,48 @@
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-
+import { Buffer } from 'node:buffer';
+import * as borsh from 'borsh';
export class WorkInfo {
+ name: string;
+ position: string;
+ company: string;
+ years_employed: number;
+ constructor(props: {
name: string;
position: string;
company: string;
years_employed: number;
+ }) {
+ this.name = props.name;
+ this.position = props.position;
+ this.company = props.company;
+ this.years_employed = props.years_employed;
+ }
- constructor(props: {
- name: string,
- position: string,
- company: string,
- years_employed: number,
- }) {
- this.name = props.name;
- this.position = props.position;
- this.company = props.company;
- this.years_employed = props.years_employed;
- }
+ toBase58() {
+ return borsh.serialize(WorkInfoSchema, this).toString();
+ }
- toBase58() {
- return borsh.serialize(WorkInfoSchema, this).toString()
- };
+ toBuffer() {
+ return Buffer.from(borsh.serialize(WorkInfoSchema, this));
+ }
- toBuffer() {
- return Buffer.from(borsh.serialize(WorkInfoSchema, this))
- };
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(WorkInfoSchema, WorkInfo, buffer);
- };
-};
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(WorkInfoSchema, WorkInfo, buffer);
+ }
+}
export const WorkInfoSchema = new Map([
- [ WorkInfo, {
- kind: 'struct',
- fields: [
- ['name', 'string'],
- ['position', 'string'],
- ['company', 'string'],
- ['years_employed', 'u8'],
- ],
- }]
-]);
\ No newline at end of file
+ [
+ WorkInfo,
+ {
+ kind: 'struct',
+ fields: [
+ ['name', 'string'],
+ ['position', 'string'],
+ ['company', 'string'],
+ ['years_employed', 'u8'],
+ ],
+ },
+ ],
+]);
diff --git a/basics/realloc/native/ts/util/index.ts b/basics/realloc/native/ts/util/index.ts
index 133b1de3f..bbebd88eb 100644
--- a/basics/realloc/native/ts/util/index.ts
+++ b/basics/realloc/native/ts/util/index.ts
@@ -1 +1 @@
-export * from './util';
\ No newline at end of file
+export * from './util';
diff --git a/basics/realloc/native/ts/util/util.ts b/basics/realloc/native/ts/util/util.ts
index aaae07dae..0e63c77df 100644
--- a/basics/realloc/native/ts/util/util.ts
+++ b/basics/realloc/native/ts/util/util.ts
@@ -1,9 +1,5 @@
import { Keypair } from '@solana/web3.js';
-
export function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
+ return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8'))));
+}
diff --git a/basics/realloc/steel/.gitignore b/basics/realloc/steel/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/realloc/steel/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/realloc/steel/Cargo.toml b/basics/realloc/steel/Cargo.toml
new file mode 100644
index 000000000..afb9e8d7f
--- /dev/null
+++ b/basics/realloc/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+realloc-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/realloc/steel/README.md b/basics/realloc/steel/README.md
new file mode 100644
index 000000000..769660f4d
--- /dev/null
+++ b/basics/realloc/steel/README.md
@@ -0,0 +1,28 @@
+# Realloc
+
+**Realloc** is a ...
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Event`](api/src/event.rs) – Custom program events.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`Add`](program/src/add.rs) – Add ...
+- [`Initialize`](program/src/initialize.rs) – Initialize ...
+
+## State
+- [`Counter`](api/src/state/counter.rs) – Counter ...
+
+## Get started
+
+Compile your program:
+```sh
+steel build
+```
+
+Run unit and integration tests:
+```sh
+steel test
+```
diff --git a/basics/realloc/steel/api/Cargo.toml b/basics/realloc/steel/api/Cargo.toml
new file mode 100644
index 000000000..1e0002fb7
--- /dev/null
+++ b/basics/realloc/steel/api/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "realloc-api"
+description = "API for interacting with the Realloc program"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/realloc/steel/api/src/consts.rs b/basics/realloc/steel/api/src/consts.rs
new file mode 100644
index 000000000..115e5abe9
--- /dev/null
+++ b/basics/realloc/steel/api/src/consts.rs
@@ -0,0 +1,4 @@
+/// Seed of the address_info account PDA.
+pub const ADDRESS_INFO: &[u8] = b"address_info";
+
+pub const MAX_STR_LEN: usize = 32;
diff --git a/basics/realloc/steel/api/src/error.rs b/basics/realloc/steel/api/src/error.rs
new file mode 100644
index 000000000..edfa7574e
--- /dev/null
+++ b/basics/realloc/steel/api/src/error.rs
@@ -0,0 +1,10 @@
+use steel::*;
+
+#[derive(Debug, Error, Clone, Copy, PartialEq, Eq, IntoPrimitive)]
+#[repr(u32)]
+pub enum ReallocError {
+ #[error("This is a dummy error")]
+ Dummy = 0,
+}
+
+error!(ReallocError);
diff --git a/basics/realloc/steel/api/src/instruction.rs b/basics/realloc/steel/api/src/instruction.rs
new file mode 100644
index 000000000..d4e000103
--- /dev/null
+++ b/basics/realloc/steel/api/src/instruction.rs
@@ -0,0 +1,21 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum ReallocInstruction {
+ Initialize = 0,
+ Add = 1
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Initialize {}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Add {
+ pub amount: [u8; 8]
+}
+
+instruction!(ReallocInstruction, Initialize);
+instruction!(ReallocInstruction, Add);
diff --git a/basics/realloc/steel/api/src/lib.rs b/basics/realloc/steel/api/src/lib.rs
new file mode 100644
index 000000000..76867dc34
--- /dev/null
+++ b/basics/realloc/steel/api/src/lib.rs
@@ -0,0 +1,20 @@
+pub mod consts;
+pub mod error;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+pub mod utils;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::error::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+ pub use crate::utils::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/basics/realloc/steel/api/src/sdk.rs b/basics/realloc/steel/api/src/sdk.rs
new file mode 100644
index 000000000..c1f0ff619
--- /dev/null
+++ b/basics/realloc/steel/api/src/sdk.rs
@@ -0,0 +1,29 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn initialize(signer: Pubkey) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(counter_pda().0, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: Initialize {}.to_bytes()
+ }
+}
+
+pub fn add(signer: Pubkey, amount: u64) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(counter_pda().0, false),
+ ],
+ data: Add {
+ amount: amount.to_le_bytes(),
+ }
+ .to_bytes(),
+ }
+}
diff --git a/basics/realloc/steel/api/src/state/address_info.rs b/basics/realloc/steel/api/src/state/address_info.rs
new file mode 100644
index 000000000..fd1680b34
--- /dev/null
+++ b/basics/realloc/steel/api/src/state/address_info.rs
@@ -0,0 +1,27 @@
+use crate::consts::*;
+use crate::utils::*;
+use steel::*;
+
+use super::ReallocAccount;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct AddressInfo {
+ pub name: [u8; MAX_STR_LEN],
+ pub house_number: u8,
+ pub street: [u8; MAX_STR_LEN],
+ pub city: [u8; MAX_STR_LEN],
+}
+
+impl AddressInfo {
+ pub fn new(name: &str, house_number: u8, street: &str, city: &str) -> Self {
+ AddressInfo {
+ name: str_to_bytes(name),
+ house_number,
+ street: str_to_bytes(street),
+ city: str_to_bytes(city),
+ }
+ }
+}
+
+account!(ReallocAccount, AddressInfo);
diff --git a/basics/realloc/steel/api/src/state/enchanced_address_info.rs b/basics/realloc/steel/api/src/state/enchanced_address_info.rs
new file mode 100644
index 000000000..95dbd364c
--- /dev/null
+++ b/basics/realloc/steel/api/src/state/enchanced_address_info.rs
@@ -0,0 +1,43 @@
+use crate::consts::*;
+use crate::state::AddressInfo;
+use crate::utils::*;
+use steel::*;
+
+use super::ReallocAccount;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct EnhancedAddressInfoExtender {
+ pub state: [u8; MAX_STR_LEN],
+ pub zip: u32,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct EnhancedAddressInfo {
+ pub zip: u32,
+ pub house_number: u8,
+
+ pub name: [u8; MAX_STR_LEN],
+ pub street: [u8; MAX_STR_LEN],
+ pub city: [u8; MAX_STR_LEN],
+ pub state: [u8; MAX_STR_LEN],
+
+ pub _padding: [u8; 3],
+}
+
+impl EnhancedAddressInfo {
+ pub fn from_address_info(address_info: AddressInfo, state: &str, zip: u32) -> Self {
+ EnhancedAddressInfo {
+ name: address_info.name,
+ house_number: address_info.house_number,
+ street: address_info.street,
+ city: address_info.city,
+ state: str_to_bytes(state),
+ zip,
+ _padding: [0u8; 3],
+ }
+ }
+}
+
+account!(ReallocAccount, EnhancedAddressInfo);
diff --git a/basics/realloc/steel/api/src/state/mod.rs b/basics/realloc/steel/api/src/state/mod.rs
new file mode 100644
index 000000000..8576d0ed1
--- /dev/null
+++ b/basics/realloc/steel/api/src/state/mod.rs
@@ -0,0 +1,25 @@
+mod address_info;
+mod enchanced_address_info;
+mod work_info;
+
+pub use address_info::*;
+pub use enchanced_address_info::*;
+pub use work_info::*;
+
+use steel::*;
+
+use crate::consts::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum ReallocAccount {
+ AddressInfo = 0,
+ EnhancedAddressInfo = 1,
+ EnhancedAddressInfoExtender = 2,
+ WorkInfo = 3,
+}
+
+/// Fetch PDA of the counter account.
+pub fn counter_pda() -> (Pubkey, u8) {
+ Pubkey::find_program_address(&[COUNTER], &crate::id())
+}
diff --git a/basics/realloc/steel/api/src/state/work_info.rs b/basics/realloc/steel/api/src/state/work_info.rs
new file mode 100644
index 000000000..43f3cbda0
--- /dev/null
+++ b/basics/realloc/steel/api/src/state/work_info.rs
@@ -0,0 +1,27 @@
+use crate::consts::*;
+use crate::utils::*;
+use steel::*;
+
+use super::ReallocAccount;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct WorkInfo {
+ pub name: [u8; MAX_STR_LEN],
+ pub position: [u8; MAX_STR_LEN],
+ pub company: [u8; MAX_STR_LEN],
+ pub years_employed: u8,
+}
+
+impl WorkInfo {
+ pub fn new(name: &str, position: &str, company: &str, years_employed: u8) -> Self {
+ WorkInfo {
+ name: str_to_bytes(name),
+ position: str_to_bytes(position),
+ company: str_to_bytes(company),
+ years_employed,
+ }
+ }
+}
+
+account!(ReallocAccount, WorkInfo);
diff --git a/basics/realloc/steel/api/src/utils.rs b/basics/realloc/steel/api/src/utils.rs
new file mode 100644
index 000000000..900ed0062
--- /dev/null
+++ b/basics/realloc/steel/api/src/utils.rs
@@ -0,0 +1,5 @@
+pub fn str_to_bytes(name: &str) -> [u8; MAX_STR_LEN] {
+ let mut name_bytes = [0u8; MAX_STR_LEN];
+ name_bytes[..name.len()].copy_from_slice(name.as_bytes());
+ name_bytes
+}
diff --git a/basics/realloc/steel/program/Cargo.toml b/basics/realloc/steel/program/Cargo.toml
new file mode 100644
index 000000000..ac2bae813
--- /dev/null
+++ b/basics/realloc/steel/program/Cargo.toml
@@ -0,0 +1,26 @@
+[package]
+name = "realloc-program"
+description = ""
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+realloc-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/realloc/steel/program/src/add.rs b/basics/realloc/steel/program/src/add.rs
new file mode 100644
index 000000000..e2aafa05b
--- /dev/null
+++ b/basics/realloc/steel/program/src/add.rs
@@ -0,0 +1,22 @@
+use realloc_api::prelude::*;
+use steel::*;
+
+pub fn process_add(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ // Parse args.
+ let args = Add::try_from_bytes(data)?;
+ let amount = u64::from_le_bytes(args.amount);
+
+ // Load accounts.
+ let [signer_info, counter_info] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ signer_info.is_signer()?;
+ let counter = counter_info
+ .as_account_mut::(&realloc_api::ID)?
+ .assert_mut(|c| c.value < 100)?;
+
+ // Update state
+ counter.value += amount;
+
+ Ok(())
+}
diff --git a/basics/realloc/steel/program/src/initialize.rs b/basics/realloc/steel/program/src/initialize.rs
new file mode 100644
index 000000000..f579bd9a2
--- /dev/null
+++ b/basics/realloc/steel/program/src/initialize.rs
@@ -0,0 +1,28 @@
+use realloc_api::prelude::*;
+use steel::*;
+
+pub fn process_initialize(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult {
+ // Load accounts.
+ let [signer_info, counter_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ signer_info.is_signer()?;
+ counter_info.is_empty()?.is_writable()?.has_seeds(
+ &[COUNTER],
+ &realloc_api::ID
+ )?;
+ system_program.is_program(&system_program::ID)?;
+
+ // Initialize counter.
+ create_account::(
+ counter_info,
+ system_program,
+ signer_info,
+ &realloc_api::ID,
+ &[COUNTER],
+ )?;
+ let counter = counter_info.as_account_mut::(&realloc_api::ID)?;
+ counter.value = 0;
+
+ Ok(())
+}
diff --git a/basics/realloc/steel/program/src/lib.rs b/basics/realloc/steel/program/src/lib.rs
new file mode 100644
index 000000000..8c0f2d75e
--- /dev/null
+++ b/basics/realloc/steel/program/src/lib.rs
@@ -0,0 +1,25 @@
+mod add;
+mod initialize;
+
+use add::*;
+use initialize::*;
+
+use realloc_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&realloc_api::ID, program_id, data)?;
+
+ match ix {
+ ReallocInstruction::Initialize => process_initialize(accounts, data)?,
+ ReallocInstruction::Add => process_add(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/realloc/steel/program/tests/test.rs b/basics/realloc/steel/program/tests/test.rs
new file mode 100644
index 000000000..e75c75637
--- /dev/null
+++ b/basics/realloc/steel/program/tests/test.rs
@@ -0,0 +1,46 @@
+use realloc_api::prelude::*;
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+use steel::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "realloc_program",
+ realloc_api::ID,
+ processor!(realloc_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+
+ // Submit initialize transaction.
+ let ix = initialize(payer.pubkey());
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Verify counter was initialized.
+ let counter_address = counter_pda().0;
+ let counter_account = banks.get_account(counter_address).await.unwrap().unwrap();
+ let counter = Counter::try_from_bytes(&counter_account.data).unwrap();
+ assert_eq!(counter_account.owner, realloc_api::ID);
+ assert_eq!(counter.value, 0);
+
+ // Submit add transaction.
+ let ix = add(payer.pubkey(), 42);
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Verify counter was incremented.
+ let counter_account = banks.get_account(counter_address).await.unwrap().unwrap();
+ let counter = Counter::try_from_bytes(&counter_account.data).unwrap();
+ assert_eq!(counter.value, 42);
+}
+
diff --git a/basics/rent/anchor/Anchor.toml b/basics/rent/anchor/Anchor.toml
index a850d9583..2bfb35a38 100644
--- a/basics/rent/anchor/Anchor.toml
+++ b/basics/rent/anchor/Anchor.toml
@@ -11,4 +11,4 @@ cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/rent/anchor/Cargo.toml b/basics/rent/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/rent/anchor/Cargo.toml
+++ b/basics/rent/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/rent/anchor/package.json b/basics/rent/anchor/package.json
index ab411155f..439798a07 100644
--- a/basics/rent/anchor/package.json
+++ b/basics/rent/anchor/package.json
@@ -1,8 +1,11 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
diff --git a/basics/rent/anchor/pnpm-lock.yaml b/basics/rent/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..ff7d7a5e5
--- /dev/null
+++ b/basics/rent/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.5.0':
+ resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.5.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.5.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/rent/anchor/programs/rent-example/Cargo.toml b/basics/rent/anchor/programs/rent-example/Cargo.toml
index 57d903b99..55c32c559 100644
--- a/basics/rent/anchor/programs/rent-example/Cargo.toml
+++ b/basics/rent/anchor/programs/rent-example/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "rent_example"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/rent/anchor/tests/bankrun.test.ts b/basics/rent/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..da0bbc309
--- /dev/null
+++ b/basics/rent/anchor/tests/bankrun.test.ts
@@ -0,0 +1,42 @@
+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 Idl from '../target/idl/rent_example.json';
+import type { RentExample } from '../target/types/rent_example';
+
+const IDL = require('../target/idl/rent_example.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+describe('Bankrun example', async () => {
+ const context = await startAnchor('', [{ name: 'rent_example', programId: PROGRAM_ID }], []);
+ const provider = new BankrunProvider(context);
+
+ const wallet = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ it('Create the account', async () => {
+ const newKeypair = anchor.web3.Keypair.generate();
+
+ const addressData: anchor.IdlTypes['addressData'] = {
+ name: 'Marcus',
+ address: '123 Main St. San Francisco, CA',
+ };
+
+ // We're just going to serialize our object here so we can check
+ // the size on the client side against the program logs
+ //
+ const addressDataBuffer = new anchor.BorshCoder(Idl as anchor.Idl).types.encode('AddressData', addressData);
+ console.log(`Address data buffer length: ${addressDataBuffer.length}`);
+
+ await program.methods
+ .createSystemAccount(addressData)
+ .accounts({
+ payer: wallet.publicKey,
+ newAccount: newKeypair.publicKey,
+ })
+ .signers([wallet.payer, newKeypair])
+ .rpc();
+ });
+});
diff --git a/basics/rent/anchor/tests/test.ts b/basics/rent/anchor/tests/test.ts
index bac228f21..e0f66b5bc 100644
--- a/basics/rent/anchor/tests/test.ts
+++ b/basics/rent/anchor/tests/test.ts
@@ -1,27 +1,25 @@
-import * as anchor from "@coral-xyz/anchor";
-import { RentExample, IDL } from "../target/types/rent_example";
+import * as anchor from '@coral-xyz/anchor';
+import Idl from '../target/idl/rent_example.json';
+import type { RentExample } from '../target/types/rent_example';
-describe("Create a system account", () => {
+describe('Create a system account', () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const wallet = provider.wallet as anchor.Wallet;
const program = anchor.workspace.RentExample as anchor.Program;
- it("Create the account", async () => {
+ it('Create the account', async () => {
const newKeypair = anchor.web3.Keypair.generate();
- const addressData: anchor.IdlTypes["AddressData"] = {
- name: "Marcus",
- address: "123 Main St. San Francisco, CA",
+ const addressData: anchor.IdlTypes['addressData'] = {
+ name: 'Marcus',
+ address: '123 Main St. San Francisco, CA',
};
// We're just going to serialize our object here so we can check
// the size on the client side against the program logs
//
- const addressDataBuffer = new anchor.BorshCoder(IDL).types.encode(
- "AddressData",
- addressData
- );
+ const addressDataBuffer = new anchor.BorshCoder(Idl as anchor.Idl).types.encode('AddressData', addressData);
console.log(`Address data buffer length: ${addressDataBuffer.length}`);
await program.methods
@@ -29,7 +27,6 @@ describe("Create a system account", () => {
.accounts({
payer: wallet.publicKey,
newAccount: newKeypair.publicKey,
- systemProgram: anchor.web3.SystemProgram.programId,
})
.signers([wallet.payer, newKeypair])
.rpc();
diff --git a/basics/rent/anchor/tsconfig.json b/basics/rent/anchor/tsconfig.json
index cd5d2e3d0..6df5e93b2 100644
--- a/basics/rent/anchor/tsconfig.json
+++ b/basics/rent/anchor/tsconfig.json
@@ -5,6 +5,7 @@
"lib": ["es2015"],
"module": "commonjs",
"target": "es6",
+ "resolveJsonModule": true,
"esModuleInterop": true
}
}
diff --git a/basics/rent/native/cicd.sh b/basics/rent/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/rent/native/cicd.sh
+++ b/basics/rent/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/rent/native/package.json b/basics/rent/native/package.json
index 34b501b0d..f82d3487e 100644
--- a/basics/rent/native/package.json
+++ b/basics/rent/native/package.json
@@ -1,6 +1,9 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
"@solana/web3.js": "^1.47.3",
@@ -14,6 +17,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/rent/native/pnpm-lock.yaml b/basics/rent/native/pnpm-lock.yaml
new file mode 100644
index 000000000..a8f0ba2ef
--- /dev/null
+++ b/basics/rent/native/pnpm-lock.yaml
@@ -0,0 +1,1356 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ borsh:
+ specifier: ^0.7.0
+ version: 0.7.0
+ buffer:
+ specifier: ^6.0.3
+ version: 6.0.3
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/rent/native/program/Cargo.toml b/basics/rent/native/program/Cargo.toml
index 188b7dd09..ab437a559 100644
--- a/basics/rent/native/program/Cargo.toml
+++ b/basics/rent/native/program/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
borsh = "0.9.3"
borsh-derive = "0.9.1"
-solana-program = "1.16.10"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/rent/native/tests/test.ts b/basics/rent/native/tests/test.ts
index 9a7e74400..b2a7fddec 100644
--- a/basics/rent/native/tests/test.ts
+++ b/basics/rent/native/tests/test.ts
@@ -1,84 +1,70 @@
-import {
- Connection,
- Keypair,
- sendAndConfirmTransaction,
- SystemProgram,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
+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';
+describe('Create a system account', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
+ class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+ }
+ class AddressData extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(AddressDataSchema, this));
+ }
+ }
-describe("Create a system account", async () => {
+ const AddressDataSchema = new Map([
+ [
+ AddressData,
+ {
+ kind: 'struct',
+ fields: [
+ ['name', 'string'],
+ ['address', 'string'],
+ ],
+ },
+ ],
+ ]);
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/so/program-keypair.json');
+ test('Create the account', async () => {
+ const newKeypair = Keypair.generate();
- class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
- };
-
- class AddressData extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(AddressDataSchema, this));
- }
- };
-
- const AddressDataSchema = new Map([
- [
- AddressData, {
- kind: 'struct',
- fields: [
- ['name', 'string'],
- ['address', 'string'],
- ]
- }
- ]
- ]);
-
- it("Create the account", async () => {
-
- const newKeypair = Keypair.generate();
+ const addressData = new AddressData({
+ name: 'Marcus',
+ address: '123 Main St. San Francisco, CA',
+ });
- const addressData = new AddressData({
- name: "Marcus",
- address: "123 Main St. San Francisco, CA"
- });
+ // We're just going to serialize our object here so we can check
+ // the size on the client side against the program logs
+ const addressDataBuffer = addressData.toBuffer();
+ console.log(`Address data buffer length: ${addressDataBuffer.length}`);
- // We're just going to serialize our object here so we can check
- // the size on the client side against the program logs
- //
- const addressDataBuffer = addressData.toBuffer();
- console.log(`Address data buffer length: ${addressDataBuffer.length}`)
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: newKeypair.publicKey, isSigner: true, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: addressDataBuffer,
+ });
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: payer.publicKey, isSigner: true, isWritable: true},
- {pubkey: newKeypair.publicKey, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: program.publicKey,
- data: addressDataBuffer,
- });
+ const tx = new Transaction();
+ const blockhash = context.lastBlockhash;
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, newKeypair);
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, newKeypair]
- );
- });
+ await client.processTransaction(tx);
});
-
\ No newline at end of file
+});
diff --git a/basics/rent/solang/.gitignore b/basics/rent/solang/.gitignore
deleted file mode 100644
index 8d401163f..000000000
--- a/basics/rent/solang/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-
-.anchor
-.DS_Store
-target
-**/*.rs.bk
-node_modules
-test-ledger
-.yarn
diff --git a/basics/rent/solang/Anchor.toml b/basics/rent/solang/Anchor.toml
deleted file mode 100644
index 595f325a8..000000000
--- a/basics/rent/solang/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-rent = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/rent/solang/libraries/minimum_balance.sol b/basics/rent/solang/libraries/minimum_balance.sol
deleted file mode 100644
index 77ef3e882..000000000
--- a/basics/rent/solang/libraries/minimum_balance.sol
+++ /dev/null
@@ -1,33 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-// Disclaimer: This library provides functions for working with storage rent. Although it is production ready,
-// it has not been audited for security, so use it at your own risk.
-
-// This is the Solidity version of the rust module rent:
-// https://github.com/solana-labs/solana/blob/master/sdk/program/src/rent.rs
-// As rent is currently not implemented on Solana, only the minimum balance is required.
-
-/// Default rental rate in lamports/byte-year.
-///
-/// This calculation is based on:
-/// - 10^9 lamports per SOL
-/// - $1 per SOL
-/// - $0.01 per megabyte day
-/// - $3.65 per megabyte year
-uint64 constant DEFAULT_LAMPORTS_PER_BYTE_YEAR = 1_000_000_000 / 100 * 365 / (1024 * 1024);
-
-/// Default amount of time (in years) the balance has to include rent for the
-/// account to be rent exempt.
-uint64 constant DEFAULT_EXEMPTION_THRESHOLD = 2;
-
-/// Account storage overhead for calculation of base rent.
-///
-/// This is the number of bytes required to store an account with no data. It is
-/// added to an accounts data length when calculating [`Rent::minimum_balance`].
-uint64 constant ACCOUNT_STORAGE_OVERHEAD = 128;
-
-/// Minimum balance due for rent-exemption of a given account data size.
-function minimum_balance(uint64 data_len) pure returns (uint64) {
- return ((ACCOUNT_STORAGE_OVERHEAD + data_len) * DEFAULT_LAMPORTS_PER_BYTE_YEAR)
- * DEFAULT_EXEMPTION_THRESHOLD;
-}
\ No newline at end of file
diff --git a/basics/rent/solang/libraries/system_instruction.sol b/basics/rent/solang/libraries/system_instruction.sol
deleted file mode 100644
index 0ba370c8c..000000000
--- a/basics/rent/solang/libraries/system_instruction.sol
+++ /dev/null
@@ -1,300 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-// Disclaimer: This library provides a bridge for Solidity to interact with Solana's system instructions. Although it is production ready,
-// it has not been audited for security, so use it at your own risk.
-
-import 'solana';
-
-library SystemInstruction {
- address constant systemAddress = address"11111111111111111111111111111111";
- address constant recentBlockHashes = address"SysvarRecentB1ockHashes11111111111111111111";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
- uint64 constant state_size = 80;
-
- enum Instruction {
- CreateAccount,
- Assign,
- Transfer,
- CreateAccountWithSeed,
- AdvanceNounceAccount,
- WithdrawNonceAccount,
- InitializeNonceAccount,
- AuthorizeNonceAccount,
- Allocate,
- AllocateWithSeed,
- AssignWithSeed,
- TransferWithSeed,
- UpgradeNonceAccount // This is not available on Solana v1.9.15
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to public key for the account to be created
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account(address from, address to, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.CreateAccount), lamports, space, owner);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to the public key for the account to be created. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'to' address using the seed
- /// @param seed the string utilized to created the 'to' public key
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account_with_seed(address from, address to, address base, string seed, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- uint32 buffer_size = 92 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.CreateAccountWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- uint32 offset = seed.length + 44;
- bincode.writeUint64LE(lamports, offset);
- offset += 8;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Assign account to a program (owner)
- ///
- /// @param pubkey the public key for the account whose owner is going to be reassigned
- /// @param owner the public key for the new account owner
- function assign(address pubkey, address owner) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pubkey, is_signer: true, is_writable: true})
- ];
- bytes bincode = abi.encode(uint32(Instruction.Assign), owner);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Assign account to a program (owner) based on a seed
- ///
- /// @param addr the public key for the account whose owner is going to be reassigned. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to created the 'addr' public key
- /// @param owner the public key for the new program owner
- function assign_with_seed(address addr, address base, string seed, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
-
- uint32 buffer_size = 76 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.AssignWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- bincode.writeAddress(owner, 44 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports between accounts
- ///
- /// @param from public key for the funding account
- /// @param to public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer(address from, address to, uint64 lamports) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Transfer), lamports);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports from a derived address
- ///
- /// @param from_pubkey The funding account public key. It should match create_with_seed(from_base, seed, from_owner)
- /// @param from_base the base address that derived the 'from_pubkey' key using the seed
- /// @param seed the string utilized to create the 'from_pubkey' public key
- /// @param from_owner owner to use to derive the funding account address
- /// @param to_pubkey the public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer_with_seed(address from_pubkey, address from_base, string seed, address from_owner, address to_pubkey, uint64 lamports) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: from_base, is_signer: true, is_writable: false}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true})
- ];
-
- uint32 buffer_size = seed.length + 52;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.TransferWithSeed), 0);
- bincode.writeUint64LE(lamports, 4);
- bincode.writeUint64LE(seed.length, 12);
- bincode.writeString(seed, 20);
- bincode.writeAddress(from_owner, 20 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Allocate space in a (possibly new) account without funding
- ///
- /// @param pub_key account for which to allocate space
- /// @param space number of bytes of memory to allocate
- function allocate(address pub_key, uint64 space) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pub_key, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Allocate), space);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Allocate space for an assign an account at an address derived from a base public key and a seed
- ///
- /// @param addr account for which to allocate space. It should match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param space number of bytes of memory to allocate
- /// @param owner owner to use to derive the 'addr' account address
- function allocate_with_seed(address addr, address base, string seed, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = new bytes(seed.length + 84);
- bincode.writeUint32LE(uint32(Instruction.AllocateWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(seed.length, 36);
- bincode.writeString(seed, 44);
- uint32 offset = 44 + seed.length;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new nonce account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the account to be created. The public key must match create_with_seed(base, seed, systemAddress)
- /// @param base the base address that derived the 'nonce' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account_with_seed(address from, address nonce, address base, string seed, address authority, uint64 lamports) internal {
- create_account_with_seed(from, nonce, base, seed, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the nonce account to be created
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account(address from, address nonce, address authority, uint64 lamports) internal {
- create_account(from, nonce, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Consumes a stored nonce, replacing it with a successor
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the publick key for the entity authorized to execute instructins on the account
- function advance_nonce_account(address nonce_pubkey, address authorized_pubkey) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AdvanceNounceAccount));
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Withdraw funds from a nonce account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param to_pubkey the recipient account
- /// @param lamports the number of lamports to withdraw
- function withdraw_nonce_account(address nonce_pubkey, address authorized_pubkey, address to_pubkey, uint64 lamports) internal {
- AccountMeta[5] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.WithdrawNonceAccount), lamports);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Change the entity authorized to execute nonce instructions on the account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param new_authority
- function authorize_nonce_account(address nonce_pubkey, address authorized_pubkey, address new_authority) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AuthorizeNonceAccount), new_authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// One-time idempotent upgrade of legacy nonce version in order to bump them out of chain domain.
- ///
- /// @param nonce the public key for the nonce account
- // This is not available on Solana v1.9.15
- function upgrade_nonce_account(address nonce) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.UpgradeNonceAccount));
- systemAddress.call{accounts: meta}(bincode);
- }
-}
diff --git a/basics/rent/solang/package.json b/basics/rent/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/rent/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/rent/solang/solidity/rent.sol b/basics/rent/solang/solidity/rent.sol
deleted file mode 100644
index 76626be61..000000000
--- a/basics/rent/solang/solidity/rent.sol
+++ /dev/null
@@ -1,24 +0,0 @@
-
-import "../libraries/system_instruction.sol";
-import '../libraries/minimum_balance.sol';
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract rent {
-
- @payer(payer) // The "payer" pays for the data account creation
- constructor() {}
-
- function createSystemAccount(address payer, address newAccount, uint64 space) public {
- // The minimum lamports required for the amount of space allocated to the account
- uint64 lamports = minimum_balance(space);
-
- SystemInstruction.create_account(
- payer, // lamports sent from this account (payer)
- newAccount, // lamports sent to this account (account to be created)
- lamports, // lamport amount (minimum lamports required)
- space, // space required for the account
- SystemInstruction.systemAddress // program owner (system program)
- );
- }
-
-}
diff --git a/basics/rent/solang/tests/rent.ts b/basics/rent/solang/tests/rent.ts
deleted file mode 100644
index c5ff61731..000000000
--- a/basics/rent/solang/tests/rent.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { Rent } from "../target/types/rent";
-
-describe("rent", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- // Generate a new keypair for the data account for the program
- const dataAccount = anchor.web3.Keypair.generate();
- const wallet = provider.wallet;
- const connection = provider.connection;
-
- const program = anchor.workspace.Rent as Program;
-
- it("Is initialized!", async () => {
- // Initialize data account for the program, which is required by Solang
- const tx = await program.methods
- .new()
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([dataAccount])
- .rpc();
- console.log("Your transaction signature", tx);
- });
-
- it("Create new account", async () => {
- // Generate a new keypair for the new account
- const newAccount = anchor.web3.Keypair.generate();
- // Number of bytes of space to allocate for the account
- const space = 100;
-
- // Create a new account via a Cross Program Invocation to the system program
- const tx = await program.methods
- .createSystemAccount(
- wallet.publicKey, // payer
- newAccount.publicKey, // new account
- new anchor.BN(space) // space
- )
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([newAccount]) // new account keypair required as signer
- .remainingAccounts([
- {
- pubkey: wallet.publicKey,
- isWritable: true,
- isSigner: true,
- },
- {
- pubkey: newAccount.publicKey, // new account
- isWritable: true,
- isSigner: true,
- },
- ])
- .rpc();
- console.log("Your transaction signature", tx);
- });
-});
diff --git a/basics/rent/solang/tsconfig.json b/basics/rent/solang/tsconfig.json
deleted file mode 100644
index 5436e66f2..000000000
--- a/basics/rent/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
-}
-
\ No newline at end of file
diff --git a/basics/rent/steel/.gitignore b/basics/rent/steel/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/basics/rent/steel/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/basics/rent/steel/Cargo.toml b/basics/rent/steel/Cargo.toml
new file mode 100644
index 000000000..7bfc3b1f1
--- /dev/null
+++ b/basics/rent/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+rent_example-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/rent/steel/README.md b/basics/rent/steel/README.md
new file mode 100644
index 000000000..0bec2629c
--- /dev/null
+++ b/basics/rent/steel/README.md
@@ -0,0 +1,28 @@
+# RentExample
+
+**RentExample** is a ...
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Event`](api/src/event.rs) – Custom program events.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`Add`](program/src/add.rs) – Add ...
+- [`Initialize`](program/src/initialize.rs) – Initialize ...
+
+## State
+- [`Counter`](api/src/state/counter.rs) – Counter ...
+
+## Get started
+
+Compile your program:
+```sh
+steel build
+```
+
+Run unit and integration tests:
+```sh
+steel test
+```
diff --git a/basics/rent/steel/api/Cargo.toml b/basics/rent/steel/api/Cargo.toml
new file mode 100644
index 000000000..7121fa9c3
--- /dev/null
+++ b/basics/rent/steel/api/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "rent_example-api"
+description = "API for interacting with the RentExample program"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/rent/steel/api/src/error.rs b/basics/rent/steel/api/src/error.rs
new file mode 100644
index 000000000..c8d041045
--- /dev/null
+++ b/basics/rent/steel/api/src/error.rs
@@ -0,0 +1,10 @@
+use steel::*;
+
+#[derive(Debug, Error, Clone, Copy, PartialEq, Eq, IntoPrimitive)]
+#[repr(u32)]
+pub enum RentExampleError {
+ #[error("This is a dummy error")]
+ Dummy = 0,
+}
+
+error!(RentExampleError);
diff --git a/basics/rent/steel/api/src/instruction.rs b/basics/rent/steel/api/src/instruction.rs
new file mode 100644
index 000000000..5a4289fe4
--- /dev/null
+++ b/basics/rent/steel/api/src/instruction.rs
@@ -0,0 +1,16 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum RentInstruction {
+ CreateSystemAccount = 0,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct CreateSystemAccount {
+ pub name: [u8; 32],
+ pub address: [u8; 64],
+}
+
+instruction!(RentInstruction, CreateSystemAccount);
diff --git a/basics/rent/steel/api/src/lib.rs b/basics/rent/steel/api/src/lib.rs
new file mode 100644
index 000000000..3c0c8c90a
--- /dev/null
+++ b/basics/rent/steel/api/src/lib.rs
@@ -0,0 +1,21 @@
+pub mod error;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::error::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+ // Re-export common solana dependencies
+ pub use solana_program::{
+ account_info::AccountInfo, entrypoint::ProgramResult, msg, pubkey::Pubkey, rent::Rent,
+ system_program,
+ };
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/basics/rent/steel/api/src/sdk.rs b/basics/rent/steel/api/src/sdk.rs
new file mode 100644
index 000000000..ddb99ac96
--- /dev/null
+++ b/basics/rent/steel/api/src/sdk.rs
@@ -0,0 +1,29 @@
+use crate::prelude::*;
+use steel::*;
+
+pub fn create_system_account(
+ payer: Pubkey,
+ new_account: Pubkey,
+ name: String,
+ address: String,
+) -> Instruction {
+ let mut name_bytes = [0u8; 32];
+ let mut address_bytes = [0u8; 64];
+
+ name_bytes[..name.len()].copy_from_slice(name.as_bytes());
+ address_bytes[..address.len()].copy_from_slice(address.as_bytes());
+
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(payer, true),
+ AccountMeta::new(new_account, true),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: CreateSystemAccount {
+ name: name_bytes,
+ address: address_bytes,
+ }
+ .to_bytes(),
+ }
+}
diff --git a/basics/rent/steel/api/src/state/address.rs b/basics/rent/steel/api/src/state/address.rs
new file mode 100644
index 000000000..381acd526
--- /dev/null
+++ b/basics/rent/steel/api/src/state/address.rs
@@ -0,0 +1,11 @@
+use super::RentAccount;
+use steel::*;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct Address {
+ pub name: [u8; 32],
+ pub address: [u8; 64],
+}
+
+account!(RentAccount, Address);
diff --git a/basics/rent/steel/api/src/state/mod.rs b/basics/rent/steel/api/src/state/mod.rs
new file mode 100644
index 000000000..fe2aca28e
--- /dev/null
+++ b/basics/rent/steel/api/src/state/mod.rs
@@ -0,0 +1,11 @@
+mod address;
+
+pub use address::*;
+
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum RentAccount {
+ Address = 0,
+}
diff --git a/basics/rent/steel/package.json b/basics/rent/steel/package.json
new file mode 100644
index 000000000..b08f2eb02
--- /dev/null
+++ b/basics/rent/steel/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "rent-example",
+ "version": "1.0.0",
+ "description": "rent example with steel framework for solana",
+ "scripts": {
+ "test": "cargo test-sbf",
+ "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/rent_example_program.so"
+ },
+ "keywords": [],
+ "author": "Sabir Khan",
+ "license": "ISC"
+}
diff --git a/basics/rent/steel/program/Cargo.toml b/basics/rent/steel/program/Cargo.toml
new file mode 100644
index 000000000..89748845d
--- /dev/null
+++ b/basics/rent/steel/program/Cargo.toml
@@ -0,0 +1,26 @@
+[package]
+name = "rent_example-program"
+description = ""
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+rent_example-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/rent/steel/program/src/create_account.rs b/basics/rent/steel/program/src/create_account.rs
new file mode 100644
index 000000000..bceb37a85
--- /dev/null
+++ b/basics/rent/steel/program/src/create_account.rs
@@ -0,0 +1,36 @@
+use rent_example_api::prelude::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_create_account(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ let args = CreateSystemAccount::try_from_bytes(data)?;
+
+ let [payer_info, new_account_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ payer_info.is_signer()?;
+ new_account_info.is_signer()?;
+
+ let account_size = std::mem::size_of::();
+ let rent = Rent::get()?;
+ let lamports_required = rent.minimum_balance(account_size);
+
+ msg!("Account size: {}", account_size);
+ msg!("Lamports required: {}", lamports_required);
+
+ // Create account with correct type argument
+ create_account::(
+ new_account_info,
+ system_program,
+ payer_info,
+ &rent_example_api::ID,
+ &[],
+ )?;
+
+ let address = new_account_info.as_account_mut::(&rent_example_api::ID)?;
+ address.name = args.name;
+ address.address = args.address;
+
+ Ok(())
+}
diff --git a/basics/rent/steel/program/src/lib.rs b/basics/rent/steel/program/src/lib.rs
new file mode 100644
index 000000000..e4d937af0
--- /dev/null
+++ b/basics/rent/steel/program/src/lib.rs
@@ -0,0 +1,21 @@
+mod create_account;
+
+use create_account::*;
+use rent_example_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction::(&rent_example_api::ID, program_id, data)?;
+
+ match ix {
+ RentInstruction::CreateSystemAccount => process_create_account(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/rent/steel/program/tests/test.rs b/basics/rent/steel/program/tests/test.rs
new file mode 100644
index 000000000..0d6fe627f
--- /dev/null
+++ b/basics/rent/steel/program/tests/test.rs
@@ -0,0 +1,95 @@
+use rent_example_api::prelude::*;
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+use steel::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "rent_example_program",
+ rent_example_api::ID,
+ processor!(rent_example_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn test_create_system_account() {
+ // Setup test environment
+ let (mut banks_client, payer, recent_blockhash) = setup().await;
+
+ // Generate a new keypair for the account we'll create
+ let new_account = Keypair::new();
+
+ // Test data
+ let name = "John Doe";
+ let address = "123 Blockchain Street";
+
+ // Create the instruction
+ let ix = create_system_account(
+ payer.pubkey(),
+ new_account.pubkey(),
+ name.to_string(),
+ address.to_string(),
+ );
+
+ // Create and send transaction
+ let mut transaction = Transaction::new_signed_with_payer(
+ &[ix],
+ Some(&payer.pubkey()),
+ &[&payer, &new_account],
+ recent_blockhash,
+ );
+
+ // Process transaction
+ let result = banks_client.process_transaction(transaction).await;
+ assert!(
+ result.is_ok(),
+ "Failed to process transaction: {:?}",
+ result
+ );
+
+ // Fetch and verify the created account
+ let account = banks_client
+ .get_account(new_account.pubkey())
+ .await
+ .expect("Failed to get account")
+ .expect("Account not found");
+
+ // Verify account owner
+ assert_eq!(
+ account.owner,
+ rent_example_api::ID,
+ "Incorrect account owner"
+ );
+
+ // Deserialize and verify account data
+ let address_account =
+ Address::try_from_bytes(&account.data).expect("Failed to deserialize account data");
+
+ // Convert stored bytes back to strings for comparison
+ let stored_name = String::from_utf8(
+ address_account
+ .name
+ .iter()
+ .take_while(|&&b| b != 0)
+ .cloned()
+ .collect::>(),
+ )
+ .unwrap();
+
+ let stored_address = String::from_utf8(
+ address_account
+ .address
+ .iter()
+ .take_while(|&&b| b != 0)
+ .cloned()
+ .collect::>(),
+ )
+ .unwrap();
+
+ // Verify the stored data matches what we sent
+ assert_eq!(stored_name, name, "Stored name doesn't match");
+ assert_eq!(stored_address, address, "Stored address doesn't match");
+}
diff --git a/basics/repository-layout/anchor/Anchor.toml b/basics/repository-layout/anchor/Anchor.toml
index f539d4c9f..f02487b1a 100644
--- a/basics/repository-layout/anchor/Anchor.toml
+++ b/basics/repository-layout/anchor/Anchor.toml
@@ -11,4 +11,4 @@ cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/repository-layout/anchor/Cargo.toml b/basics/repository-layout/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/repository-layout/anchor/Cargo.toml
+++ b/basics/repository-layout/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/repository-layout/anchor/package.json b/basics/repository-layout/anchor/package.json
index ab411155f..439798a07 100644
--- a/basics/repository-layout/anchor/package.json
+++ b/basics/repository-layout/anchor/package.json
@@ -1,8 +1,11 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
diff --git a/basics/repository-layout/anchor/pnpm-lock.yaml b/basics/repository-layout/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..ff7d7a5e5
--- /dev/null
+++ b/basics/repository-layout/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.5.0':
+ resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.5.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.5.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/repository-layout/anchor/programs/carnival/Cargo.toml b/basics/repository-layout/anchor/programs/carnival/Cargo.toml
index 5a9ae4ddd..dc7c34547 100644
--- a/basics/repository-layout/anchor/programs/carnival/Cargo.toml
+++ b/basics/repository-layout/anchor/programs/carnival/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "carnival"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/repository-layout/anchor/tests/bankrun.test.ts b/basics/repository-layout/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..6ccfa9f97
--- /dev/null
+++ b/basics/repository-layout/anchor/tests/bankrun.test.ts
@@ -0,0 +1,51 @@
+import { describe, it } from 'node:test';
+import * as anchor from '@coral-xyz/anchor';
+import { PublicKey, Transaction, sendAndConfirmTransaction } from '@solana/web3.js';
+import { BankrunProvider } from 'anchor-bankrun';
+import { startAnchor } from 'solana-bankrun';
+import type { Carnival } from '../target/types/carnival';
+
+const IDL = require('../target/idl/carnival.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+describe('Bankrun example', async () => {
+ const context = await startAnchor('', [{ name: 'carnival', programId: PROGRAM_ID }], []);
+ const provider = new BankrunProvider(context);
+ const wallet = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ async function sendCarnivalInstructions(instructionsList: anchor.web3.TransactionInstruction[]) {
+ const tx = new Transaction();
+ for (const ix of instructionsList) {
+ tx.add(ix);
+ }
+ await provider.sendAndConfirm(tx, [wallet.payer]);
+ }
+
+ it('Go on some rides!', async () => {
+ await sendCarnivalInstructions([
+ await program.methods.goOnRide('Jimmy', 36, 15, 'Scrambler').instruction(),
+ await program.methods.goOnRide('Mary', 52, 1, 'Ferris Wheel').instruction(),
+ await program.methods.goOnRide('Alice', 56, 15, 'Scrambler').instruction(),
+ await program.methods.goOnRide('Bob', 49, 6, 'Tilt-a-Whirl').instruction(),
+ ]);
+ });
+
+ it('Play some games!', async () => {
+ await sendCarnivalInstructions([
+ await program.methods.playGame('Jimmy', 15, 'I Got It!').instruction(),
+ await program.methods.playGame('Mary', 1, 'Ring Toss').instruction(),
+ await program.methods.playGame('Alice', 15, 'Ladder Climb').instruction(),
+ await program.methods.playGame('Bob', 6, 'Ring Toss').instruction(),
+ ]);
+ });
+
+ it('Eat some food!', async () => {
+ await sendCarnivalInstructions([
+ await program.methods.eatFood('Jimmy', 15, 'Taco Shack').instruction(),
+ await program.methods.eatFood('Mary', 1, "Larry's Pizza").instruction(),
+ await program.methods.eatFood('Alice', 15, "Dough Boy's").instruction(),
+ await program.methods.eatFood('Bob', 6, "Dough Boy's").instruction(),
+ ]);
+ });
+});
diff --git a/basics/repository-layout/anchor/tests/test.ts b/basics/repository-layout/anchor/tests/test.ts
index 44ea7482b..46d281a63 100644
--- a/basics/repository-layout/anchor/tests/test.ts
+++ b/basics/repository-layout/anchor/tests/test.ts
@@ -1,56 +1,44 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Carnival } from "../target/types/carnival";
+import * as anchor from '@coral-xyz/anchor';
+import type { Carnival } from '../target/types/carnival';
-describe("Carnival", () => {
+describe('Carnival', () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const wallet = provider.wallet as anchor.Wallet;
const program = anchor.workspace.Carnival as anchor.Program;
- async function sendCarnivalInstructions(
- instructionsList: anchor.web3.TransactionInstruction[]
- ) {
- let tx = new anchor.web3.Transaction();
- for (var ix of instructionsList) {
+ async function sendCarnivalInstructions(instructionsList: anchor.web3.TransactionInstruction[]) {
+ const tx = new anchor.web3.Transaction();
+ for (const ix of instructionsList) {
tx.add(ix);
}
- await anchor.web3.sendAndConfirmTransaction(provider.connection, tx, [
- wallet.payer,
- ]);
+ await anchor.web3.sendAndConfirmTransaction(provider.connection, tx, [wallet.payer]);
}
- it("Go on some rides!", async () => {
+ it('Go on some rides!', async () => {
await sendCarnivalInstructions([
- await program.methods
- .goOnRide("Jimmy", 36, 15, "Scrambler")
- .instruction(),
- await program.methods
- .goOnRide("Mary", 52, 1, "Ferris Wheel")
- .instruction(),
- await program.methods
- .goOnRide("Alice", 56, 15, "Scrambler")
- .instruction(),
- await program.methods
- .goOnRide("Bob", 49, 6, "Tilt-a-Whirl")
- .instruction(),
+ await program.methods.goOnRide('Jimmy', 36, 15, 'Scrambler').instruction(),
+ await program.methods.goOnRide('Mary', 52, 1, 'Ferris Wheel').instruction(),
+ await program.methods.goOnRide('Alice', 56, 15, 'Scrambler').instruction(),
+ await program.methods.goOnRide('Bob', 49, 6, 'Tilt-a-Whirl').instruction(),
]);
});
- it("Play some games!", async () => {
+ it('Play some games!', async () => {
await sendCarnivalInstructions([
- await program.methods.playGame("Jimmy", 15, "I Got It!").instruction(),
- await program.methods.playGame("Mary", 1, "Ring Toss").instruction(),
- await program.methods.playGame("Alice", 15, "Ladder Climb").instruction(),
- await program.methods.playGame("Bob", 6, "Ring Toss").instruction(),
+ await program.methods.playGame('Jimmy', 15, 'I Got It!').instruction(),
+ await program.methods.playGame('Mary', 1, 'Ring Toss').instruction(),
+ await program.methods.playGame('Alice', 15, 'Ladder Climb').instruction(),
+ await program.methods.playGame('Bob', 6, 'Ring Toss').instruction(),
]);
});
- it("Eat some food!", async () => {
+ it('Eat some food!', async () => {
await sendCarnivalInstructions([
- await program.methods.eatFood("Jimmy", 15, "Taco Shack").instruction(),
- await program.methods.eatFood("Mary", 1, "Larry's Pizza").instruction(),
- await program.methods.eatFood("Alice", 15, "Dough Boy's").instruction(),
- await program.methods.eatFood("Bob", 6, "Dough Boy's").instruction(),
+ await program.methods.eatFood('Jimmy', 15, 'Taco Shack').instruction(),
+ await program.methods.eatFood('Mary', 1, "Larry's Pizza").instruction(),
+ await program.methods.eatFood('Alice', 15, "Dough Boy's").instruction(),
+ await program.methods.eatFood('Bob', 6, "Dough Boy's").instruction(),
]);
});
});
diff --git a/basics/repository-layout/native/cicd.sh b/basics/repository-layout/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/repository-layout/native/cicd.sh
+++ b/basics/repository-layout/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/repository-layout/native/package.json b/basics/repository-layout/native/package.json
index b71a6ab9b..30ecba9e9 100644
--- a/basics/repository-layout/native/package.json
+++ b/basics/repository-layout/native/package.json
@@ -1,6 +1,9 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
"@solana/web3.js": "^1.47.3",
@@ -12,6 +15,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/repository-layout/native/pnpm-lock.yaml b/basics/repository-layout/native/pnpm-lock.yaml
new file mode 100644
index 000000000..09e100fde
--- /dev/null
+++ b/basics/repository-layout/native/pnpm-lock.yaml
@@ -0,0 +1,1350 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/repository-layout/native/program/Cargo.toml b/basics/repository-layout/native/program/Cargo.toml
index fe3463238..0f928a885 100644
--- a/basics/repository-layout/native/program/Cargo.toml
+++ b/basics/repository-layout/native/program/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
borsh = "0.9.3"
borsh-derive = "0.9.1"
-solana-program = "1.16.10"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/repository-layout/native/tests/test.ts b/basics/repository-layout/native/tests/test.ts
index f80c9537f..758a5c9ec 100644
--- a/basics/repository-layout/native/tests/test.ts
+++ b/basics/repository-layout/native/tests/test.ts
@@ -1,176 +1,156 @@
-import {
- Connection,
- Keypair,
- sendAndConfirmTransaction,
- Transaction,
- TransactionInstruction,
-} from '@solana/web3.js';
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
+import { Buffer } from 'node:buffer';
+import { describe, test } from 'node:test';
+import { PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { start } from 'solana-bankrun';
+describe('Carnival', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'repository_layout_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
-
-describe("Carnival", () => {
-
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/so/program-keypair.json');
-
- class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
- };
-
- class CarnivalInstruction extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(CarnivalInstructionSchema, this));
- }
- };
-
- const CarnivalInstructionSchema = new Map([
- [
- CarnivalInstruction, {
- kind: 'struct',
- fields: [
- ['name', 'string'],
- ['height', 'u32'],
- ['ticket_count', 'u32'],
- ['attraction', 'string'],
- ['attraction_name', 'string'],
- ]
- }
- ]
- ]);
-
- async function sendCarnivalInstructions(instructionsList: CarnivalInstruction[]) {
- let tx = new Transaction();
- for (var ix of instructionsList) {
- tx.add(new TransactionInstruction({
- keys: [
- {pubkey: payer.publicKey, isSigner: true, isWritable: true}
- ],
- programId: program.publicKey,
- data: ix.toBuffer(),
- }));
- };
- await sendAndConfirmTransaction(
- connection,
- tx,
- [payer]
- );
+ class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
}
-
- it("Go on some rides!", async () => {
-
- await sendCarnivalInstructions([
- new CarnivalInstruction({
- name: "Jimmy",
- height: 36,
- ticket_count: 15,
- attraction: "ride",
- attraction_name: "Scrambler",
- }),
- new CarnivalInstruction({
- name: "Mary",
- height: 52,
- ticket_count: 1,
- attraction: "ride",
- attraction_name: "Ferris Wheel",
- }),
- new CarnivalInstruction({
- name: "Alice",
- height: 56,
- ticket_count: 15,
- attraction: "ride",
- attraction_name: "Scrambler",
- }),
- new CarnivalInstruction({
- name: "Bob",
- height: 49,
- ticket_count: 6,
- attraction: "ride",
- attraction_name: "Tilt-a-Whirl",
- }),
- ]);
- });
+ }
+ class CarnivalInstruction extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CarnivalInstructionSchema, this));
+ }
+ }
- it("Play some games!", async () => {
+ const CarnivalInstructionSchema = new Map([
+ [
+ CarnivalInstruction,
+ {
+ kind: 'struct',
+ fields: [
+ ['name', 'string'],
+ ['height', 'u32'],
+ ['ticket_count', 'u32'],
+ ['attraction', 'string'],
+ ['attraction_name', 'string'],
+ ],
+ },
+ ],
+ ]);
- await sendCarnivalInstructions([
- new CarnivalInstruction({
- name: "Jimmy",
- height: 36,
- ticket_count: 15,
- attraction: "game",
- attraction_name: "I Got It!",
- }),
- new CarnivalInstruction({
- name: "Mary",
- height: 52,
- ticket_count: 1,
- attraction: "game",
- attraction_name: "Ring Toss",
- }),
- new CarnivalInstruction({
- name: "Alice",
- height: 56,
- ticket_count: 15,
- attraction: "game",
- attraction_name: "Ladder Climb",
- }),
- new CarnivalInstruction({
- name: "Bob",
- height: 49,
- ticket_count: 6,
- attraction: "game",
- attraction_name: "Ring Toss",
- }),
- ]);
- });
+ async function sendCarnivalInstructions(instructionsList: CarnivalInstruction[]) {
+ const tx = new Transaction();
+ for (const ix of instructionsList) {
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.add(
+ new TransactionInstruction({
+ keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }],
+ programId: PROGRAM_ID,
+ data: ix.toBuffer(),
+ }),
+ ).sign(payer);
+ }
+ await client.processTransaction(tx);
+ }
+ test('Go on some rides!', async () => {
+ await sendCarnivalInstructions([
+ new CarnivalInstruction({
+ name: 'Jimmy',
+ height: 36,
+ ticket_count: 15,
+ attraction: 'ride',
+ attraction_name: 'Scrambler',
+ }),
+ new CarnivalInstruction({
+ name: 'Mary',
+ height: 52,
+ ticket_count: 1,
+ attraction: 'ride',
+ attraction_name: 'Ferris Wheel',
+ }),
+ new CarnivalInstruction({
+ name: 'Alice',
+ height: 56,
+ ticket_count: 15,
+ attraction: 'ride',
+ attraction_name: 'Scrambler',
+ }),
+ new CarnivalInstruction({
+ name: 'Bob',
+ height: 49,
+ ticket_count: 6,
+ attraction: 'ride',
+ attraction_name: 'Tilt-a-Whirl',
+ }),
+ ]);
+ });
- it("Eat some food!", async () => {
+ test('Play some games!', async () => {
+ await sendCarnivalInstructions([
+ new CarnivalInstruction({
+ name: 'Jimmy',
+ height: 36,
+ ticket_count: 15,
+ attraction: 'game',
+ attraction_name: 'I Got It!',
+ }),
+ new CarnivalInstruction({
+ name: 'Mary',
+ height: 52,
+ ticket_count: 1,
+ attraction: 'game',
+ attraction_name: 'Ring Toss',
+ }),
+ new CarnivalInstruction({
+ name: 'Alice',
+ height: 56,
+ ticket_count: 15,
+ attraction: 'game',
+ attraction_name: 'Ladder Climb',
+ }),
+ new CarnivalInstruction({
+ name: 'Bob',
+ height: 49,
+ ticket_count: 6,
+ attraction: 'game',
+ attraction_name: 'Ring Toss',
+ }),
+ ]);
+ });
- await sendCarnivalInstructions([
- new CarnivalInstruction({
- name: "Jimmy",
- height: 36,
- ticket_count: 15,
- attraction: "food",
- attraction_name: "Taco Shack",
- }),
- new CarnivalInstruction({
- name: "Mary",
- height: 52,
- ticket_count: 1,
- attraction: "food",
- attraction_name: "Larry's Pizza",
- }),
- new CarnivalInstruction({
- name: "Alice",
- height: 56,
- ticket_count: 15,
- attraction: "food",
- attraction_name: "Dough Boy's",
- }),
- new CarnivalInstruction({
- name: "Bob",
- height: 49,
- ticket_count: 6,
- attraction: "food",
- attraction_name: "Dough Boy's",
- }),
- ]);
- });
+ test('Eat some food!', async () => {
+ await sendCarnivalInstructions([
+ new CarnivalInstruction({
+ name: 'Jimmy',
+ height: 36,
+ ticket_count: 15,
+ attraction: 'food',
+ attraction_name: 'Taco Shack',
+ }),
+ new CarnivalInstruction({
+ name: 'Mary',
+ height: 52,
+ ticket_count: 1,
+ attraction: 'food',
+ attraction_name: "Larry's Pizza",
+ }),
+ new CarnivalInstruction({
+ name: 'Alice',
+ height: 56,
+ ticket_count: 15,
+ attraction: 'food',
+ attraction_name: "Dough Boy's",
+ }),
+ new CarnivalInstruction({
+ name: 'Bob',
+ height: 49,
+ ticket_count: 6,
+ attraction: 'food',
+ attraction_name: "Dough Boy's",
+ }),
+ ]);
});
-
\ No newline at end of file
+});
diff --git a/basics/transfer-sol/anchor/Anchor.toml b/basics/transfer-sol/anchor/Anchor.toml
index 33b86bbd9..a8e16fd9b 100644
--- a/basics/transfer-sol/anchor/Anchor.toml
+++ b/basics/transfer-sol/anchor/Anchor.toml
@@ -11,4 +11,4 @@ cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/transfer-sol/anchor/Cargo.toml b/basics/transfer-sol/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/transfer-sol/anchor/Cargo.toml
+++ b/basics/transfer-sol/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/transfer-sol/anchor/package.json b/basics/transfer-sol/anchor/package.json
index ab411155f..439798a07 100644
--- a/basics/transfer-sol/anchor/package.json
+++ b/basics/transfer-sol/anchor/package.json
@@ -1,8 +1,11 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
+ "@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",
diff --git a/basics/transfer-sol/anchor/pnpm-lock.yaml b/basics/transfer-sol/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..ff7d7a5e5
--- /dev/null
+++ b/basics/transfer-sol/anchor/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.5.0':
+ resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.5.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.5.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.2
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/transfer-sol/anchor/programs/transfer-sol/Cargo.toml b/basics/transfer-sol/anchor/programs/transfer-sol/Cargo.toml
index 398e6e89b..f0d6d177e 100644
--- a/basics/transfer-sol/anchor/programs/transfer-sol/Cargo.toml
+++ b/basics/transfer-sol/anchor/programs/transfer-sol/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "transfer_sol"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
+anchor-lang = "0.31.1"
diff --git a/basics/transfer-sol/anchor/tests/bankrun.test.ts b/basics/transfer-sol/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..9abf17cfa
--- /dev/null
+++ b/basics/transfer-sol/anchor/tests/bankrun.test.ts
@@ -0,0 +1,75 @@
+import { describe, it } from 'node:test';
+import * as anchor from '@coral-xyz/anchor';
+import { Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js';
+import { BankrunProvider } from 'anchor-bankrun';
+import { startAnchor } from 'solana-bankrun';
+import type { TransferSol } from '../target/types/transfer_sol';
+
+const IDL = require('../target/idl/transfer_sol.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+describe('Bankrun example', async () => {
+ const context = await startAnchor('', [{ name: 'transfer_sol', programId: PROGRAM_ID }], []);
+ const provider = new BankrunProvider(context);
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ // 1 SOL
+ const transferAmount = 1 * LAMPORTS_PER_SOL;
+
+ // Generate a new keypair for the recipient
+ const recipient = new Keypair();
+
+ // Generate a new keypair to create an account owned by our program
+ const programOwnedAccount = new Keypair();
+
+ it('Transfer SOL with CPI', async () => {
+ await getBalances(payer.publicKey, recipient.publicKey, 'Beginning');
+
+ await program.methods
+ .transferSolWithCpi(new anchor.BN(transferAmount))
+ .accounts({
+ payer: payer.publicKey,
+ recipient: recipient.publicKey,
+ })
+ .rpc();
+
+ await getBalances(payer.publicKey, recipient.publicKey, 'Resulting');
+ });
+
+ it('Create and fund account owned by our program', async () => {
+ const instruction = SystemProgram.createAccount({
+ fromPubkey: payer.publicKey,
+ newAccountPubkey: programOwnedAccount.publicKey,
+ space: 0,
+ lamports: 1 * LAMPORTS_PER_SOL, // 1 SOL
+ programId: program.programId, // Program Owner, our program's address
+ });
+
+ const transaction = new Transaction().add(instruction);
+
+ await sendAndConfirmTransaction(provider.connection, transaction, [payer.payer, programOwnedAccount]);
+ });
+
+ it('Transfer SOL with Program', async () => {
+ await getBalances(programOwnedAccount.publicKey, payer.publicKey, 'Beginning');
+
+ await program.methods
+ .transferSolWithProgram(new anchor.BN(transferAmount))
+ .accounts({
+ payer: programOwnedAccount.publicKey,
+ recipient: payer.publicKey,
+ })
+ .rpc();
+
+ await getBalances(programOwnedAccount.publicKey, payer.publicKey, 'Resulting');
+ });
+
+ async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) {
+ const payerBalance = await provider.connection.getBalance(payerPubkey);
+ const recipientBalance = await provider.connection.getBalance(recipientPubkey);
+ console.log(`${timeframe} balances:`);
+ console.log(` Payer: ${payerBalance / LAMPORTS_PER_SOL}`);
+ console.log(` Recipient: ${recipientBalance / LAMPORTS_PER_SOL}`);
+ }
+});
diff --git a/basics/transfer-sol/anchor/tests/test.ts b/basics/transfer-sol/anchor/tests/test.ts
index ead6fc476..86796f8a1 100644
--- a/basics/transfer-sol/anchor/tests/test.ts
+++ b/basics/transfer-sol/anchor/tests/test.ts
@@ -1,30 +1,24 @@
-import * as anchor from "@coral-xyz/anchor"
-import { TransferSol } from "../target/types/transfer_sol"
-import {
- Keypair,
- PublicKey,
- LAMPORTS_PER_SOL,
- SystemProgram,
- Transaction,
- sendAndConfirmTransaction,
-} from "@solana/web3.js"
-describe("transfer-sol", () => {
- const provider = anchor.AnchorProvider.env()
- anchor.setProvider(provider)
- const payer = provider.wallet as anchor.Wallet
- const program = anchor.workspace.TransferSol as anchor.Program
+import * as anchor from '@coral-xyz/anchor';
+import { Keypair, LAMPORTS_PER_SOL, type PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js';
+import type { TransferSol } from '../target/types/transfer_sol';
+
+describe('transfer-sol', () => {
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+ const payer = provider.wallet as anchor.Wallet;
+ const program = anchor.workspace.TransferSol as anchor.Program;
// 1 SOL
- const transferAmount = 1 * LAMPORTS_PER_SOL
+ const transferAmount = 1 * LAMPORTS_PER_SOL;
// Generate a new keypair for the recipient
- const recipient = new Keypair()
+ const recipient = new Keypair();
// Generate a new keypair to create an account owned by our program
- const programOwnedAccount = new Keypair()
+ const programOwnedAccount = new Keypair();
- it("Transfer SOL with CPI", async () => {
- await getBalances(payer.publicKey, recipient.publicKey, "Beginning")
+ it('Transfer SOL with CPI', async () => {
+ await getBalances(payer.publicKey, recipient.publicKey, 'Beginning');
await program.methods
.transferSolWithCpi(new anchor.BN(transferAmount))
@@ -32,34 +26,27 @@ describe("transfer-sol", () => {
payer: payer.publicKey,
recipient: recipient.publicKey,
})
- .rpc()
+ .rpc();
- await getBalances(payer.publicKey, recipient.publicKey, "Resulting")
- })
+ await getBalances(payer.publicKey, recipient.publicKey, 'Resulting');
+ });
- it("Create and fund account owned by our program", async () => {
+ it('Create and fund account owned by our program', async () => {
const instruction = SystemProgram.createAccount({
fromPubkey: payer.publicKey,
newAccountPubkey: programOwnedAccount.publicKey,
space: 0,
lamports: 1 * LAMPORTS_PER_SOL, // 1 SOL
programId: program.programId, // Program Owner, our program's address
- })
+ });
- const transaction = new Transaction().add(instruction)
+ const transaction = new Transaction().add(instruction);
- await sendAndConfirmTransaction(provider.connection, transaction, [
- payer.payer,
- programOwnedAccount,
- ])
- })
+ await sendAndConfirmTransaction(provider.connection, transaction, [payer.payer, programOwnedAccount]);
+ });
- it("Transfer SOL with Program", async () => {
- await getBalances(
- programOwnedAccount.publicKey,
- payer.publicKey,
- "Beginning"
- )
+ it('Transfer SOL with Program', async () => {
+ await getBalances(programOwnedAccount.publicKey, payer.publicKey, 'Beginning');
await program.methods
.transferSolWithProgram(new anchor.BN(transferAmount))
@@ -67,24 +54,16 @@ describe("transfer-sol", () => {
payer: programOwnedAccount.publicKey,
recipient: payer.publicKey,
})
- .rpc()
+ .rpc();
- await getBalances(
- programOwnedAccount.publicKey,
- payer.publicKey,
- "Resulting"
- )
- })
+ await getBalances(programOwnedAccount.publicKey, payer.publicKey, 'Resulting');
+ });
- async function getBalances(
- payerPubkey: PublicKey,
- recipientPubkey: PublicKey,
- timeframe: string
- ) {
- let payerBalance = await provider.connection.getBalance(payerPubkey)
- let recipientBalance = await provider.connection.getBalance(recipientPubkey)
- console.log(`${timeframe} balances:`)
- console.log(` Payer: ${payerBalance / LAMPORTS_PER_SOL}`)
- console.log(` Recipient: ${recipientBalance / LAMPORTS_PER_SOL}`)
+ async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) {
+ const payerBalance = await provider.connection.getBalance(payerPubkey);
+ const recipientBalance = await provider.connection.getBalance(recipientPubkey);
+ console.log(`${timeframe} balances:`);
+ console.log(` Payer: ${payerBalance / LAMPORTS_PER_SOL}`);
+ console.log(` Recipient: ${recipientBalance / LAMPORTS_PER_SOL}`);
}
-})
+});
diff --git a/basics/transfer-sol/native/cicd.sh b/basics/transfer-sol/native/cicd.sh
index abe687995..0903cf896 100644
--- a/basics/transfer-sol/native/cicd.sh
+++ b/basics/transfer-sol/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
-solana program deploy ./program/target/so/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/transfer-sol/native/package.json b/basics/transfer-sol/native/package.json
index 4bd0cf727..d6ae4a605 100644
--- a/basics/transfer-sol/native/package.json
+++ b/basics/transfer-sol/native/package.json
@@ -1,6 +1,9 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
},
"dependencies": {
"@solana/web3.js": "^1.47.3",
@@ -13,6 +16,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/basics/transfer-sol/native/pnpm-lock.yaml b/basics/transfer-sol/native/pnpm-lock.yaml
new file mode 100644
index 000000000..6901d9d9d
--- /dev/null
+++ b/basics/transfer-sol/native/pnpm-lock.yaml
@@ -0,0 +1,1359 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ buffer-layout:
+ specifier: ^1.2.2
+ version: 1.2.2
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=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'}
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.15.19':
+ resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.27.1': {}
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.19':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.19
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.21.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/transfer-sol/native/program/Cargo.toml b/basics/transfer-sol/native/program/Cargo.toml
index f10a1470f..973e22016 100644
--- a/basics/transfer-sol/native/program/Cargo.toml
+++ b/basics/transfer-sol/native/program/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
borsh = "0.9.3"
borsh-derive = "0.9.1"
-solana-program = "1.16.10"
+solana-program = "2.0"
[lib]
crate-type = ["cdylib", "lib"]
diff --git a/basics/transfer-sol/native/tests/instruction.ts b/basics/transfer-sol/native/tests/instruction.ts
index 2edb32dbb..d8a74bf60 100644
--- a/basics/transfer-sol/native/tests/instruction.ts
+++ b/basics/transfer-sol/native/tests/instruction.ts
@@ -1,72 +1,67 @@
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-import {
- PublicKey,
- SystemProgram,
- TransactionInstruction
-} from '@solana/web3.js';
-
+import { Buffer } from 'node:buffer';
+import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
export enum InstructionType {
- CpiTransfer,
- ProgramTransfer,
+ CpiTransfer = 0,
+ ProgramTransfer = 1,
}
-
export class TransferInstruction {
+ instruction: InstructionType;
+ amount: number;
+ constructor(props: {
instruction: InstructionType;
amount: number;
+ }) {
+ this.instruction = props.instruction;
+ this.amount = props.amount;
+ }
- constructor(props: {
- instruction: InstructionType,
- amount: number,
- }) {
- this.instruction = props.instruction;
- this.amount = props.amount;
- }
+ toBuffer() {
+ return Buffer.from(borsh.serialize(TransferInstructionSchema, this));
+ }
- toBuffer() {
- return Buffer.from(borsh.serialize(TransferInstructionSchema, this))
- };
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(TransferInstructionSchema, TransferInstruction, buffer);
- };
-};
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(TransferInstructionSchema, TransferInstruction, buffer);
+ }
+}
export const TransferInstructionSchema = new Map([
- [ TransferInstruction, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ['amount', 'u64'],
- ],
- }]
+ [
+ TransferInstruction,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['amount', 'u64'],
+ ],
+ },
+ ],
]);
export function createTransferInstruction(
- payerPubkey: PublicKey,
- recipientPubkey: PublicKey,
- programId: PublicKey,
- instruction: InstructionType,
- amount: number,
+ payerPubkey: PublicKey,
+ recipientPubkey: PublicKey,
+ programId: PublicKey,
+ instruction: InstructionType,
+ amount: number,
): TransactionInstruction {
+ const instructionObject = new TransferInstruction({
+ instruction,
+ amount,
+ });
- const instructionObject = new TransferInstruction({
- instruction,
- amount,
- });
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: payerPubkey, isSigner: true, isWritable: true },
+ { pubkey: recipientPubkey, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId,
+ data: instructionObject.toBuffer(),
+ });
- const ix = new TransactionInstruction({
- keys: [
- {pubkey: payerPubkey, isSigner: true, isWritable: true},
- {pubkey: recipientPubkey, isSigner: false, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId,
- data: instructionObject.toBuffer(),
- });
-
- return ix;
-}
\ No newline at end of file
+ return ix;
+}
diff --git a/basics/transfer-sol/native/tests/test.ts b/basics/transfer-sol/native/tests/test.ts
index c3919127d..734bb7eb2 100644
--- a/basics/transfer-sol/native/tests/test.ts
+++ b/basics/transfer-sol/native/tests/test.ts
@@ -1,103 +1,80 @@
-import {
- Connection,
- Keypair,
- LAMPORTS_PER_SOL,
- PublicKey,
- sendAndConfirmTransaction,
- SystemProgram,
- Transaction,
-} from '@solana/web3.js';
-import { createTransferInstruction, InstructionType } from './instruction';
-
-
-function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
-
-describe("transfer-sol", () => {
-
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/so/program-keypair.json');
-
- const transferAmount = 1 * LAMPORTS_PER_SOL;
- const test1Recipient = Keypair.generate();
- const test2Recipient1 = Keypair.generate();
- const test2Recipient2 = Keypair.generate();
-
- it("Transfer between accounts using the system program", async () => {
-
- await getBalances(payer.publicKey, test1Recipient.publicKey, "Beginning");
-
- let ix = createTransferInstruction(
- payer.publicKey,
- test1Recipient.publicKey,
- program.publicKey,
- InstructionType.CpiTransfer,
- transferAmount
- );
-
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer]
- );
-
- await getBalances(payer.publicKey, test1Recipient.publicKey, "Resulting");
- });
-
- it("Create two accounts for the following test", async () => {
-
- const ix = (pubkey: PublicKey) => {
- return SystemProgram.createAccount({
- fromPubkey: payer.publicKey,
- newAccountPubkey: pubkey,
- space: 0,
- lamports: 2 * LAMPORTS_PER_SOL,
- programId: program.publicKey,
- })
- };
-
- await sendAndConfirmTransaction(
- connection,
- new Transaction()
- .add(ix(test2Recipient1.publicKey))
- .add(ix(test2Recipient2.publicKey))
- ,
- [payer, test2Recipient1, test2Recipient2]
- );
- });
+import { describe, test } from 'node:test';
+import { Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction } from '@solana/web3.js';
+import { start } from 'solana-bankrun';
+import { InstructionType, createTransferInstruction } from './instruction';
+
+describe('transfer-sol', async () => {
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start([{ name: 'transfer_sol_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ const transferAmount = 1 * LAMPORTS_PER_SOL;
+ const test1Recipient = Keypair.generate();
+ const test2Recipient1 = Keypair.generate();
+ const test2Recipient2 = Keypair.generate();
+
+ test('Transfer between accounts using the system program', async () => {
+ await getBalances(payer.publicKey, test1Recipient.publicKey, 'Beginning');
+
+ const ix = createTransferInstruction(payer.publicKey, test1Recipient.publicKey, PROGRAM_ID, InstructionType.CpiTransfer, transferAmount);
- it("Transfer between accounts using our program", async () => {
-
- await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, "Beginning");
-
- let ix = createTransferInstruction(
- test2Recipient1.publicKey,
- test2Recipient2.publicKey,
- program.publicKey,
- InstructionType.ProgramTransfer,
- transferAmount
- );
-
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, test2Recipient1]
- );
-
- await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, "Resulting");
- });
-
- async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) {
- let payerBalance = await connection.getBalance(payerPubkey);
- let recipientBalance = await connection.getBalance(recipientPubkey);
- console.log(`${timeframe} balances:`);
- console.log(` Payer: ${payerBalance}`);
- console.log(` Recipient: ${recipientBalance}`);
+ const tx = new Transaction();
+ const [blockhash, _] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ await client.processTransaction(tx);
+
+ await getBalances(payer.publicKey, test1Recipient.publicKey, 'Resulting');
+ });
+
+ test('Create two accounts for the following test', async () => {
+ const ix = (pubkey: PublicKey) => {
+ return SystemProgram.createAccount({
+ fromPubkey: payer.publicKey,
+ newAccountPubkey: pubkey,
+ space: 0,
+ lamports: 2 * LAMPORTS_PER_SOL,
+ programId: PROGRAM_ID,
+ });
};
+
+ const tx = new Transaction();
+ const [blockhash, _] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix(test2Recipient1.publicKey)).add(ix(test2Recipient2.publicKey)).sign(payer, test2Recipient1, test2Recipient2);
+
+ await client.processTransaction(tx);
+ });
+
+ test('Transfer between accounts using our program', async () => {
+ await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, 'Beginning');
+
+ const ix = createTransferInstruction(
+ test2Recipient1.publicKey,
+ test2Recipient2.publicKey,
+ PROGRAM_ID,
+ InstructionType.ProgramTransfer,
+ transferAmount,
+ );
+
+ const tx = new Transaction();
+ const [blockhash, _] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, test2Recipient1);
+
+ await client.processTransaction(tx);
+
+ await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, 'Resulting');
});
-
\ No newline at end of file
+
+ async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) {
+ const payerBalance = await client.getBalance(payerPubkey);
+ const recipientBalance = await client.getBalance(recipientPubkey);
+
+ console.log(`${timeframe} balances:`);
+ console.log(` Payer: ${payerBalance}`);
+ console.log(` Recipient: ${recipientBalance}`);
+ }
+});
diff --git a/basics/transfer-sol/seahorse/Anchor.toml b/basics/transfer-sol/seahorse/Anchor.toml
index 421216713..0df8cc58f 100644
--- a/basics/transfer-sol/seahorse/Anchor.toml
+++ b/basics/transfer-sol/seahorse/Anchor.toml
@@ -12,4 +12,4 @@ cluster = "Localnet"
wallet = "/Users/devenv/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/transfer-sol/seahorse/Cargo.toml b/basics/transfer-sol/seahorse/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/basics/transfer-sol/seahorse/Cargo.toml
+++ b/basics/transfer-sol/seahorse/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/basics/transfer-sol/seahorse/migrations/deploy.ts b/basics/transfer-sol/seahorse/migrations/deploy.ts
index 82fb175fa..64a1c3599 100644
--- a/basics/transfer-sol/seahorse/migrations/deploy.ts
+++ b/basics/transfer-sol/seahorse/migrations/deploy.ts
@@ -2,9 +2,9 @@
// single deploy script that's invoked from the CLI, injecting a provider
// configured from the workspace's Anchor.toml.
-const anchor = require("@coral-xyz/anchor");
+const anchor = require('@coral-xyz/anchor');
-module.exports = async function (provider) {
+module.exports = async (provider) => {
// Configure client to use the provider.
anchor.setProvider(provider);
diff --git a/basics/transfer-sol/seahorse/package.json b/basics/transfer-sol/seahorse/package.json
index 4de1ab3c2..b5355136b 100644
--- a/basics/transfer-sol/seahorse/package.json
+++ b/basics/transfer-sol/seahorse/package.json
@@ -1,19 +1,19 @@
{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.27.0"
- },
- "devDependencies": {
- "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"
- }
+ "scripts": {
+ "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+ },
+ "dependencies": {
+ "@coral-xyz/anchor": "^0.27.0"
+ },
+ "devDependencies": {
+ "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"
+ }
}
diff --git a/basics/transfer-sol/seahorse/programs/seahorse/Cargo.toml b/basics/transfer-sol/seahorse/programs/seahorse/Cargo.toml
index 5d9226bc0..0f721114c 100644
--- a/basics/transfer-sol/seahorse/programs/seahorse/Cargo.toml
+++ b/basics/transfer-sol/seahorse/programs/seahorse/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "seahorse"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
anchor-lang = "0.27.0"
diff --git a/basics/transfer-sol/seahorse/tests/seahorse.ts b/basics/transfer-sol/seahorse/tests/seahorse.ts
index f6fc02149..9b8d6d99e 100644
--- a/basics/transfer-sol/seahorse/tests/seahorse.ts
+++ b/basics/transfer-sol/seahorse/tests/seahorse.ts
@@ -1,19 +1,16 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { Seahorse } from "../target/types/seahorse";
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import type { Seahorse } from '../target/types/seahorse';
-describe("seahorse", () => {
+describe('seahorse', () => {
// Configure the client to use the local cluster.
anchor.setProvider(anchor.AnchorProvider.env());
const program = anchor.workspace.Seahorse as Program;
- const mockReceiverAccount = anchor.web3.PublicKey.findProgramAddressSync(
- [Buffer.from("mock_account")],
- program.programId
- );
+ const mockReceiverAccount = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('mock_account')], program.programId);
- it("Initialize the Mock account to send our SOL to", async () => {
+ it('Initialize the Mock account to send our SOL to', async () => {
const tx = await program.methods
.initMockAccount()
.accounts({
@@ -22,7 +19,7 @@ describe("seahorse", () => {
})
.rpc();
});
- it("Send SOL To Mock account", async () => {
+ it('Send SOL To Mock account', async () => {
const transferAmount = 1;
// Convert to lamport.
const lamports: number = anchor.web3.LAMPORTS_PER_SOL * transferAmount;
@@ -33,6 +30,6 @@ describe("seahorse", () => {
sender: program.provider.publicKey,
})
.rpc();
- console.log("Your transaction signature: ", tx);
+ console.log('Your transaction signature: ', tx);
});
});
diff --git a/basics/transfer-sol/seahorse/tsconfig.json b/basics/transfer-sol/seahorse/tsconfig.json
index 558b83e5e..cd5d2e3d0 100644
--- a/basics/transfer-sol/seahorse/tsconfig.json
+++ b/basics/transfer-sol/seahorse/tsconfig.json
@@ -1,11 +1,10 @@
{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
- }
-
\ No newline at end of file
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/basics/transfer-sol/solang/.gitignore b/basics/transfer-sol/solang/.gitignore
deleted file mode 100644
index 8d401163f..000000000
--- a/basics/transfer-sol/solang/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-
-.anchor
-.DS_Store
-target
-**/*.rs.bk
-node_modules
-test-ledger
-.yarn
diff --git a/basics/transfer-sol/solang/Anchor.toml b/basics/transfer-sol/solang/Anchor.toml
deleted file mode 100644
index 69c86155f..000000000
--- a/basics/transfer-sol/solang/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-transfer_sol = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/basics/transfer-sol/solang/libraries/system_instruction.sol b/basics/transfer-sol/solang/libraries/system_instruction.sol
deleted file mode 100644
index 0ba370c8c..000000000
--- a/basics/transfer-sol/solang/libraries/system_instruction.sol
+++ /dev/null
@@ -1,300 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-// Disclaimer: This library provides a bridge for Solidity to interact with Solana's system instructions. Although it is production ready,
-// it has not been audited for security, so use it at your own risk.
-
-import 'solana';
-
-library SystemInstruction {
- address constant systemAddress = address"11111111111111111111111111111111";
- address constant recentBlockHashes = address"SysvarRecentB1ockHashes11111111111111111111";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
- uint64 constant state_size = 80;
-
- enum Instruction {
- CreateAccount,
- Assign,
- Transfer,
- CreateAccountWithSeed,
- AdvanceNounceAccount,
- WithdrawNonceAccount,
- InitializeNonceAccount,
- AuthorizeNonceAccount,
- Allocate,
- AllocateWithSeed,
- AssignWithSeed,
- TransferWithSeed,
- UpgradeNonceAccount // This is not available on Solana v1.9.15
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to public key for the account to be created
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account(address from, address to, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.CreateAccount), lamports, space, owner);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to the public key for the account to be created. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'to' address using the seed
- /// @param seed the string utilized to created the 'to' public key
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account_with_seed(address from, address to, address base, string seed, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- uint32 buffer_size = 92 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.CreateAccountWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- uint32 offset = seed.length + 44;
- bincode.writeUint64LE(lamports, offset);
- offset += 8;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Assign account to a program (owner)
- ///
- /// @param pubkey the public key for the account whose owner is going to be reassigned
- /// @param owner the public key for the new account owner
- function assign(address pubkey, address owner) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pubkey, is_signer: true, is_writable: true})
- ];
- bytes bincode = abi.encode(uint32(Instruction.Assign), owner);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Assign account to a program (owner) based on a seed
- ///
- /// @param addr the public key for the account whose owner is going to be reassigned. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to created the 'addr' public key
- /// @param owner the public key for the new program owner
- function assign_with_seed(address addr, address base, string seed, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
-
- uint32 buffer_size = 76 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.AssignWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- bincode.writeAddress(owner, 44 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports between accounts
- ///
- /// @param from public key for the funding account
- /// @param to public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer(address from, address to, uint64 lamports) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Transfer), lamports);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports from a derived address
- ///
- /// @param from_pubkey The funding account public key. It should match create_with_seed(from_base, seed, from_owner)
- /// @param from_base the base address that derived the 'from_pubkey' key using the seed
- /// @param seed the string utilized to create the 'from_pubkey' public key
- /// @param from_owner owner to use to derive the funding account address
- /// @param to_pubkey the public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer_with_seed(address from_pubkey, address from_base, string seed, address from_owner, address to_pubkey, uint64 lamports) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: from_base, is_signer: true, is_writable: false}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true})
- ];
-
- uint32 buffer_size = seed.length + 52;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.TransferWithSeed), 0);
- bincode.writeUint64LE(lamports, 4);
- bincode.writeUint64LE(seed.length, 12);
- bincode.writeString(seed, 20);
- bincode.writeAddress(from_owner, 20 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Allocate space in a (possibly new) account without funding
- ///
- /// @param pub_key account for which to allocate space
- /// @param space number of bytes of memory to allocate
- function allocate(address pub_key, uint64 space) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pub_key, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Allocate), space);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Allocate space for an assign an account at an address derived from a base public key and a seed
- ///
- /// @param addr account for which to allocate space. It should match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param space number of bytes of memory to allocate
- /// @param owner owner to use to derive the 'addr' account address
- function allocate_with_seed(address addr, address base, string seed, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = new bytes(seed.length + 84);
- bincode.writeUint32LE(uint32(Instruction.AllocateWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(seed.length, 36);
- bincode.writeString(seed, 44);
- uint32 offset = 44 + seed.length;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new nonce account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the account to be created. The public key must match create_with_seed(base, seed, systemAddress)
- /// @param base the base address that derived the 'nonce' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account_with_seed(address from, address nonce, address base, string seed, address authority, uint64 lamports) internal {
- create_account_with_seed(from, nonce, base, seed, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the nonce account to be created
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account(address from, address nonce, address authority, uint64 lamports) internal {
- create_account(from, nonce, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Consumes a stored nonce, replacing it with a successor
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the publick key for the entity authorized to execute instructins on the account
- function advance_nonce_account(address nonce_pubkey, address authorized_pubkey) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AdvanceNounceAccount));
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Withdraw funds from a nonce account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param to_pubkey the recipient account
- /// @param lamports the number of lamports to withdraw
- function withdraw_nonce_account(address nonce_pubkey, address authorized_pubkey, address to_pubkey, uint64 lamports) internal {
- AccountMeta[5] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.WithdrawNonceAccount), lamports);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Change the entity authorized to execute nonce instructions on the account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param new_authority
- function authorize_nonce_account(address nonce_pubkey, address authorized_pubkey, address new_authority) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AuthorizeNonceAccount), new_authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// One-time idempotent upgrade of legacy nonce version in order to bump them out of chain domain.
- ///
- /// @param nonce the public key for the nonce account
- // This is not available on Solana v1.9.15
- function upgrade_nonce_account(address nonce) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.UpgradeNonceAccount));
- systemAddress.call{accounts: meta}(bincode);
- }
-}
diff --git a/basics/transfer-sol/solang/package.json b/basics/transfer-sol/solang/package.json
deleted file mode 100644
index eb9ad4fb0..000000000
--- a/basics/transfer-sol/solang/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/basics/transfer-sol/solang/solidity/transfer-sol.sol b/basics/transfer-sol/solang/solidity/transfer-sol.sol
deleted file mode 100644
index 9bba4fd20..000000000
--- a/basics/transfer-sol/solang/solidity/transfer-sol.sol
+++ /dev/null
@@ -1,30 +0,0 @@
-
-import "../libraries/system_instruction.sol";
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract transfer_sol {
-
- @payer(payer) // payer to create new data account
- constructor() {
- // No data is stored in the account in this example
- }
-
- // Transfer SOL from one account to another using CPI (Cross Program Invocation) to the System program
- function transferSolWithCpi(address from, address to, uint64 lamports) public {
- // CPI to transfer SOL using "system_instruction" library
- SystemInstruction.transfer(from, to, lamports);
- }
-
- // Transfer SOL from program owned account to another address by directly modifying the account data lamports
- // This approach only works for accounts owned by the program itself (ex. the dataAccount created in the constructor)
- function transferSolWithProgram(uint64 lamports) public {
- AccountInfo from = tx.accounts[0]; // first account must be an account owned by the program
- AccountInfo to = tx.accounts[1]; // second account must be the intended recipient
-
- print("From: {:}".format(from.key));
- print("To: {:}".format(to.key));
-
- from.lamports -= lamports;
- to.lamports += lamports;
- }
-}
diff --git a/basics/transfer-sol/solang/tests/transfer-sol.ts b/basics/transfer-sol/solang/tests/transfer-sol.ts
deleted file mode 100644
index eef6969df..000000000
--- a/basics/transfer-sol/solang/tests/transfer-sol.ts
+++ /dev/null
@@ -1,129 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { TransferSol } from "../target/types/transfer_sol";
-import { PublicKey } from "@solana/web3.js";
-
-describe("transfer-sol", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- // Generate new keypair to use as data account
- const dataAccount = anchor.web3.Keypair.generate();
- const wallet = provider.wallet;
- const connection = provider.connection;
-
- const program = anchor.workspace.TransferSol as Program;
-
- // Amount to transfer in lamports
- const transferAmount = 1 * anchor.web3.LAMPORTS_PER_SOL; // 1 SOL
-
- it("Is initialized!", async () => {
- // Create the new data account
- // The dataAccount is required by Solang even though it is not use in the transfer instruction
- const tx = await program.methods
- .new()
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([dataAccount])
- .rpc();
- console.log("Your transaction signature", tx);
- });
-
- it("Transfer SOL using CPI to the system program", async () => {
- // Generate new keypair to use as recipient for the transfer
- const recipient = anchor.web3.Keypair.generate(); // test1 recipient
-
- await getBalances(wallet.publicKey, recipient.publicKey, "Beginning");
-
- const tx = await program.methods
- .transferSolWithCpi(
- wallet.publicKey, // sender
- recipient.publicKey, // recipient
- new anchor.BN(transferAmount) // amount in lamports
- )
- .accounts({ dataAccount: dataAccount.publicKey })
- .remainingAccounts([
- {
- pubkey: wallet.publicKey, // sender
- isWritable: true,
- isSigner: true,
- },
- {
- pubkey: recipient.publicKey, // recipient
- isWritable: true,
- isSigner: false,
- },
- ])
- .rpc();
-
- await getBalances(wallet.publicKey, recipient.publicKey, "Resulting");
-
- console.log("Your transaction signature", tx);
- });
-
- it("Transfer SOL to program owned account", async () => {
- await getBalances(wallet.publicKey, dataAccount.publicKey, "Beginning");
-
- const tx = await program.methods
- .transferSolWithCpi(
- wallet.publicKey, // sender
- dataAccount.publicKey, // recipient
- new anchor.BN(transferAmount) // amount in lamports
- )
- .accounts({ dataAccount: dataAccount.publicKey })
- .remainingAccounts([
- {
- pubkey: wallet.publicKey, // sender
- isWritable: true,
- isSigner: true,
- },
- {
- pubkey: dataAccount.publicKey, // recipient
- isWritable: true,
- isSigner: false,
- },
- ])
- .rpc();
-
- await getBalances(wallet.publicKey, dataAccount.publicKey, "Resulting");
-
- console.log("Your transaction signature", tx);
- });
-
- it("Transfer SOL from program owned account", async () => {
- await getBalances(dataAccount.publicKey, wallet.publicKey, "Beginning");
-
- const tx = await program.methods
- .transferSolWithProgram(
- new anchor.BN(transferAmount) // amount in lamports
- )
- .accounts({ dataAccount: dataAccount.publicKey })
- .remainingAccounts([
- {
- pubkey: wallet.publicKey, // recipient
- isWritable: true,
- isSigner: true,
- },
- ])
- .rpc();
-
- await getBalances(dataAccount.publicKey, wallet.publicKey, "Resulting");
-
- console.log("Your transaction signature", tx);
- });
-
- // Helper function to get balances and log them to the console
- async function getBalances(
- payerPubkey: PublicKey,
- recipientPubkey: PublicKey,
- timeframe: string
- ) {
- let payerBalance = await connection.getBalance(payerPubkey);
- let recipientBalance = await connection.getBalance(recipientPubkey);
- console.log(`${timeframe} balances:`);
- console.log(` Payer: ${payerBalance / anchor.web3.LAMPORTS_PER_SOL}`); // convert lamports to SOL
- console.log(
- ` Recipient: ${recipientBalance / anchor.web3.LAMPORTS_PER_SOL}` // convert lamports to SOL
- );
- }
-});
diff --git a/basics/transfer-sol/solang/tsconfig.json b/basics/transfer-sol/solang/tsconfig.json
deleted file mode 100644
index 558b83e5e..000000000
--- a/basics/transfer-sol/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
- }
-
\ No newline at end of file
diff --git a/basics/transfer-sol/steel/Cargo.toml b/basics/transfer-sol/steel/Cargo.toml
new file mode 100644
index 000000000..8be0d9e92
--- /dev/null
+++ b/basics/transfer-sol/steel/Cargo.toml
@@ -0,0 +1,21 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+transfer-sol-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
diff --git a/basics/transfer-sol/steel/README.md b/basics/transfer-sol/steel/README.md
new file mode 100644
index 000000000..10ff0347c
--- /dev/null
+++ b/basics/transfer-sol/steel/README.md
@@ -0,0 +1,22 @@
+# TransferSol
+
+**TransferSol** is a ...
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Event`](api/src/event.rs) – Custom program events.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`Hello`](program/src/hello.rs) – Hello ...
+
+## State
+- [`User`](api/src/state/user.rs) – User ...
+
+## Tests
+
+To run the test suit, use the Solana toolchain:
+```
+cargo test-sbf
+```
diff --git a/basics/transfer-sol/steel/api/Cargo.toml b/basics/transfer-sol/steel/api/Cargo.toml
new file mode 100644
index 000000000..446886081
--- /dev/null
+++ b/basics/transfer-sol/steel/api/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "transfer-sol-api"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/basics/transfer-sol/steel/api/src/instruction.rs b/basics/transfer-sol/steel/api/src/instruction.rs
new file mode 100644
index 000000000..069ca7242
--- /dev/null
+++ b/basics/transfer-sol/steel/api/src/instruction.rs
@@ -0,0 +1,24 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum TransferSolInstruction {
+ TransferSolWithCpi = 0,
+ TransferSolWithProgram = 1,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct TransferSolWithCpi {
+ pub amount: [u8; 8],
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct TransferSolWithProgram {
+ pub amount: [u8; 8],
+}
+
+instruction!(TransferSolInstruction, TransferSolWithCpi);
+instruction!(TransferSolInstruction, TransferSolWithProgram);
+
diff --git a/basics/transfer-sol/steel/api/src/lib.rs b/basics/transfer-sol/steel/api/src/lib.rs
new file mode 100644
index 000000000..d1eea2565
--- /dev/null
+++ b/basics/transfer-sol/steel/api/src/lib.rs
@@ -0,0 +1,12 @@
+pub mod instruction;
+pub mod sdk;
+
+pub mod prelude {
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+}
+
+use steel::*;
+
+// TODO: Set program id
+declare_id!("FNDnd3ZJptKromzx7h71o67AcR1emryyJPb9LjS8WPVw");
diff --git a/basics/transfer-sol/steel/api/src/sdk.rs b/basics/transfer-sol/steel/api/src/sdk.rs
new file mode 100644
index 000000000..e516986ce
--- /dev/null
+++ b/basics/transfer-sol/steel/api/src/sdk.rs
@@ -0,0 +1,32 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn transfer_sol_with_cpi(signer: Pubkey, receiver: Pubkey, amount: u64) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(receiver, false),
+ AccountMeta::new(system_program::ID, false),
+ ],
+ data: TransferSolWithCpi {
+ amount: amount.to_le_bytes(),
+ }
+ .to_bytes(),
+ }
+}
+
+pub fn transfer_sol_with_program(signer: Pubkey, receiver: Pubkey, amount: u64) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(receiver, false),
+ ],
+ data: TransferSolWithProgram {
+ amount: amount.to_le_bytes(),
+ }
+ .to_bytes(),
+ }
+}
diff --git a/basics/transfer-sol/steel/cicd.sh b/basics/transfer-sol/steel/cicd.sh
new file mode 100644
index 000000000..d5960d7b7
--- /dev/null
+++ b/basics/transfer-sol/steel/cicd.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This script is for quick building & deploying of the program.
+# It also serves as a reference for the commands used for building & deploying Solana programs.
+# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
+
+cargo build-sbf --manifest-path=./program/Cargo.toml --bpf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
\ No newline at end of file
diff --git a/basics/transfer-sol/steel/package.json b/basics/transfer-sol/steel/package.json
new file mode 100644
index 000000000..856502800
--- /dev/null
+++ b/basics/transfer-sol/steel/package.json
@@ -0,0 +1,26 @@
+{
+ "scripts": {
+ "test": "steel test",
+ "build-and-test": "steel build && steel test",
+ "build": "steel build",
+ "deploy": "solana program deploy ./program/target/so/program.so",
+ "check:fix": "pnpm biome format --write ./tests",
+ "rust:test": "cargo test-sbf"
+ },
+ "dependencies": {
+ "@solana/web3.js": "^1.47.3",
+ "buffer-layout": "^1.2.2",
+ "fs": "^0.0.1-security"
+ },
+ "devDependencies": {
+ "@biomejs/biome": "1.9.4",
+ "@types/bn.js": "^5.1.0",
+ "@types/chai": "^4.3.1",
+ "@types/mocha": "^9.1.1",
+ "chai": "^4.3.4",
+ "mocha": "^10.7.3",
+ "solana-bankrun": "^0.3.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^5.6.3"
+ }
+}
diff --git a/basics/transfer-sol/steel/pnpm-lock.yaml b/basics/transfer-sol/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..f33845762
--- /dev/null
+++ b/basics/transfer-sol/steel/pnpm-lock.yaml
@@ -0,0 +1,1375 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/web3.js':
+ specifier: ^1.47.3
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer-layout:
+ specifier: ^1.2.2
+ version: 1.2.2
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@biomejs/biome':
+ specifier: 1.9.4
+ version: 1.9.4
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^10.7.3
+ version: 10.7.3
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@10.7.3)
+ typescript:
+ specifier: ^5.6.3
+ version: 5.6.3
+
+packages:
+
+ '@babel/runtime@7.25.9':
+ resolution: {integrity: sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==}
+ engines: {node: '>=6.9.0'}
+
+ '@biomejs/biome@1.9.4':
+ resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==}
+ engines: {node: '>=14.21.3'}
+ hasBin: true
+
+ '@biomejs/cli-darwin-arm64@1.9.4':
+ resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@biomejs/cli-darwin-x64@1.9.4':
+ resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@biomejs/cli-linux-arm64-musl@1.9.4':
+ resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@biomejs/cli-linux-arm64@1.9.4':
+ resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@biomejs/cli-linux-x64-musl@1.9.4':
+ resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+
+ '@biomejs/cli-linux-x64@1.9.4':
+ resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+
+ '@biomejs/cli-win32-arm64@1.9.4':
+ resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@biomejs/cli-win32-x64@1.9.4':
+ resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [win32]
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.7.9':
+ resolution: {integrity: sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@10.7.3:
+ resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ resolution: {integrity: sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.1:
+ resolution: {integrity: sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.1:
+ resolution: {integrity: sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ resolution: {integrity: sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ resolution: {integrity: sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.1:
+ resolution: {integrity: sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.9':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@biomejs/biome@1.9.4':
+ optionalDependencies:
+ '@biomejs/cli-darwin-arm64': 1.9.4
+ '@biomejs/cli-darwin-x64': 1.9.4
+ '@biomejs/cli-linux-arm64': 1.9.4
+ '@biomejs/cli-linux-arm64-musl': 1.9.4
+ '@biomejs/cli-linux-x64': 1.9.4
+ '@biomejs/cli-linux-x64-musl': 1.9.4
+ '@biomejs/cli-win32-arm64': 1.9.4
+ '@biomejs/cli-win32-x64': 1.9.4
+
+ '@biomejs/cli-darwin-arm64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-darwin-x64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-linux-arm64-musl@1.9.4':
+ optional: true
+
+ '@biomejs/cli-linux-arm64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-linux-x64-musl@1.9.4':
+ optional: true
+
+ '@biomejs/cli-linux-x64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-win32-arm64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-win32-x64@1.9.4':
+ optional: true
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.9
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.7.9
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.7.9
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.7.9':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.7.9
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.7.9
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ debug@4.3.7(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@10.7.3:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.6.0
+ debug: 4.3.7(supports-color@8.1.1)
+ diff: 5.2.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 8.1.0
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 16.2.0
+ yargs-parser: 20.2.9
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.1:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.1:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.1:
+ optional: true
+
+ solana-bankrun@0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.1
+ solana-bankrun-darwin-universal: 0.3.1
+ solana-bankrun-darwin-x64: 0.3.1
+ solana-bankrun-linux-x64-gnu: 0.3.1
+ solana-bankrun-linux-x64-musl: 0.3.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@10.7.3):
+ dependencies:
+ mocha: 10.7.3
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/basics/transfer-sol/steel/program/Cargo.toml b/basics/transfer-sol/steel/program/Cargo.toml
new file mode 100644
index 000000000..d64e9a937
--- /dev/null
+++ b/basics/transfer-sol/steel/program/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "transfer-sol-program"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+transfer-sol-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+
+[dev-dependencies]
+bs64 = "0.1.2"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/basics/transfer-sol/steel/program/src/lib.rs b/basics/transfer-sol/steel/program/src/lib.rs
new file mode 100644
index 000000000..a8711303c
--- /dev/null
+++ b/basics/transfer-sol/steel/program/src/lib.rs
@@ -0,0 +1,25 @@
+mod transfer_sol_with_cpi;
+mod transfer_sol_with_program;
+
+use transfer_sol_with_cpi::*;
+use transfer_sol_with_program::*;
+
+use transfer_sol_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&transfer_sol_api::ID, program_id, data)?;
+
+ match ix {
+ TransferSolInstruction::TransferSolWithCpi => process_transfer_sol_with_cpi(accounts, data)?,
+ TransferSolInstruction::TransferSolWithProgram => process_transfer_sol_with_program(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/basics/transfer-sol/steel/program/src/transfer_sol_with_cpi.rs b/basics/transfer-sol/steel/program/src/transfer_sol_with_cpi.rs
new file mode 100644
index 000000000..f12a8abb0
--- /dev/null
+++ b/basics/transfer-sol/steel/program/src/transfer_sol_with_cpi.rs
@@ -0,0 +1,28 @@
+use solana_program::{
+ account_info::AccountInfo, entrypoint::ProgramResult, program::invoke, system_instruction,
+};
+use steel::*;
+use transfer_sol_api::prelude::TransferSolWithCpi;
+
+pub fn process_transfer_sol_with_cpi(accounts: &[AccountInfo], data: &[u8]) -> ProgramResult {
+ // Parse args.
+ let args: &TransferSolWithCpi = TransferSolWithCpi::try_from_bytes(data)?;
+ let amount: u64 = u64::from_le_bytes(args.amount);
+
+ // Load accounts.
+ let [signer_info, receiver_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ signer_info.is_signer()?;
+
+ invoke(
+ &system_instruction::transfer(signer_info.key, receiver_info.key, amount),
+ &[
+ signer_info.clone(),
+ receiver_info.clone(),
+ system_program.clone(),
+ ],
+ )?;
+
+ Ok(())
+}
diff --git a/basics/transfer-sol/steel/program/src/transfer_sol_with_program.rs b/basics/transfer-sol/steel/program/src/transfer_sol_with_program.rs
new file mode 100644
index 000000000..6686f06e9
--- /dev/null
+++ b/basics/transfer-sol/steel/program/src/transfer_sol_with_program.rs
@@ -0,0 +1,20 @@
+use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult};
+use steel::*;
+use transfer_sol_api::prelude::*;
+
+pub fn process_transfer_sol_with_program(accounts: &[AccountInfo], data: &[u8]) -> ProgramResult {
+ // Parse args.
+ let args = TransferSolWithProgram::try_from_bytes(data)?;
+ let amount: u64 = u64::from_le_bytes(args.amount);
+
+ // Load accounts.
+ let [signer_info, receiver_info] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ signer_info.is_signer()?;
+
+ **signer_info.try_borrow_mut_lamports()? -= amount;
+ **receiver_info.try_borrow_mut_lamports()? += amount;
+
+ Ok(())
+}
diff --git a/basics/transfer-sol/steel/program/tests/test.rs b/basics/transfer-sol/steel/program/tests/test.rs
new file mode 100644
index 000000000..e5ec5ddfb
--- /dev/null
+++ b/basics/transfer-sol/steel/program/tests/test.rs
@@ -0,0 +1,72 @@
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{
+ native_token::LAMPORTS_PER_SOL, signature::Keypair, signer::Signer,
+ system_instruction::create_account, transaction::Transaction,
+};
+use transfer_sol_api::prelude::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "transfer_sol_program",
+ transfer_sol_api::ID,
+ processor!(transfer_sol_program::process_instruction),
+ );
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+
+ let transfer_amount = LAMPORTS_PER_SOL * 1;
+ let receiver = Keypair::new();
+ let receiver_1 = Keypair::new();
+ let receiver_2 = Keypair::new();
+
+ // Submit add transaction.
+ let ix = transfer_sol_with_cpi(payer.pubkey(), receiver.pubkey(), transfer_amount);
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // create two account for following test
+ let create_receiver_1_ix = create_account(
+ &payer.pubkey(),
+ &receiver_1.pubkey(),
+ 2 * LAMPORTS_PER_SOL,
+ 0,
+ &transfer_sol_api::ID,
+ );
+
+ let create_receiver_2_ix = create_account(
+ &payer.pubkey(),
+ &receiver_2.pubkey(),
+ 2 * LAMPORTS_PER_SOL,
+ 0,
+ &transfer_sol_api::ID,
+ );
+
+ let tx = Transaction::new_signed_with_payer(
+ &[create_receiver_1_ix, create_receiver_2_ix],
+ Some(&payer.pubkey()),
+ &[&payer, &receiver_1, &receiver_2],
+ blockhash,
+ );
+
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Submit add transaction
+ let ix = transfer_sol_with_program(receiver_1.pubkey(), receiver_2.pubkey(), transfer_amount);
+ let tx = Transaction::new_signed_with_payer(
+ &[ix],
+ Some(&payer.pubkey()),
+ &[&payer, &receiver_1],
+ blockhash,
+ );
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+}
diff --git a/basics/transfer-sol/steel/tests/instruction.ts b/basics/transfer-sol/steel/tests/instruction.ts
new file mode 100644
index 000000000..488e1d897
--- /dev/null
+++ b/basics/transfer-sol/steel/tests/instruction.ts
@@ -0,0 +1,74 @@
+import { Buffer } from 'node:buffer';
+import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+
+export enum InstructionType {
+ CpiTransfer = 0,
+ ProgramTransfer = 1,
+}
+
+export class TransferInstruction {
+ instruction: InstructionType;
+ amount: number;
+
+ constructor(props: { instruction: InstructionType; amount: number }) {
+ this.instruction = props.instruction;
+ this.amount = props.amount;
+ }
+
+ toBuffer() {
+ return Buffer.from(borsh.serialize(TransferInstructionSchema, this));
+ }
+
+ static fromBuffer(buffer: Buffer) {
+ return borsh.deserialize(TransferInstructionSchema, TransferInstruction, buffer);
+ }
+}
+
+export const TransferInstructionSchema = new Map([
+ [
+ TransferInstruction,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['amount', 'u64'],
+ ],
+ },
+ ],
+]);
+
+export function createTransferInstruction(
+ payerPubkey: PublicKey,
+ recipientPubkey: PublicKey,
+ programId: PublicKey,
+ instruction: InstructionType,
+ amount: number,
+ systemProgramId?: boolean,
+): TransactionInstruction {
+ const instructionObject = new TransferInstruction({
+ instruction,
+ amount,
+ });
+
+ const keys = [
+ { pubkey: payerPubkey, isSigner: true, isWritable: true },
+ { pubkey: recipientPubkey, isSigner: false, isWritable: true },
+ ];
+
+ if (systemProgramId) {
+ keys.push({
+ pubkey: SystemProgram.programId,
+ isSigner: false,
+ isWritable: false,
+ });
+ }
+
+ const ix = new TransactionInstruction({
+ keys: keys,
+ programId,
+ data: instructionObject.toBuffer(),
+ });
+
+ return ix;
+}
diff --git a/basics/transfer-sol/steel/tests/test.ts b/basics/transfer-sol/steel/tests/test.ts
new file mode 100644
index 000000000..62df83398
--- /dev/null
+++ b/basics/transfer-sol/steel/tests/test.ts
@@ -0,0 +1,96 @@
+import { describe, test } from 'node:test';
+import { Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction } from '@solana/web3.js';
+import { start } from 'solana-bankrun';
+import { InstructionType, createTransferInstruction } from './instruction.ts';
+
+describe('transfer-sol', async () => {
+ const PROGRAM_ID = new PublicKey('FNDnd3ZJptKromzx7h71o67AcR1emryyJPb9LjS8WPVw');
+ const context = await start([{ name: 'transfer_sol_program', programId: PROGRAM_ID }], []);
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ const transferAmount = 1 * LAMPORTS_PER_SOL;
+ const test1Recipient = Keypair.generate();
+ const test2Recipient1 = Keypair.generate();
+ const test2Recipient2 = Keypair.generate();
+
+ test('Transfer between accounts using the system program', async () => {
+ await getBalances(payer.publicKey, test1Recipient.publicKey, 'Beginning');
+
+ const ix = createTransferInstruction(payer.publicKey, test1Recipient.publicKey, PROGRAM_ID, InstructionType.CpiTransfer, transferAmount, true);
+
+ const tx = new Transaction();
+ const res = await client.getLatestBlockhash();
+
+ if (res) {
+ const [blockhash, _] = res;
+
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer);
+
+ await client.processTransaction(tx);
+
+ await getBalances(payer.publicKey, test1Recipient.publicKey, 'Resulting');
+ }
+ });
+
+ test('Create two accounts for the following test', async () => {
+ const ix = (pubkey: PublicKey) => {
+ return SystemProgram.createAccount({
+ fromPubkey: payer.publicKey,
+ newAccountPubkey: pubkey,
+ space: 0,
+ lamports: 2 * LAMPORTS_PER_SOL,
+ programId: PROGRAM_ID,
+ });
+ };
+
+ const tx = new Transaction();
+
+ const res = await client.getLatestBlockhash();
+
+ if (res) {
+ const [blockhash, _] = res;
+
+ tx.recentBlockhash = blockhash;
+ tx.add(ix(test2Recipient1.publicKey)).add(ix(test2Recipient2.publicKey)).sign(payer, test2Recipient1, test2Recipient2);
+
+ await client.processTransaction(tx);
+ }
+ });
+
+ test('Transfer between accounts using our program', async () => {
+ await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, 'Beginning');
+
+ const ix = createTransferInstruction(
+ test2Recipient1.publicKey,
+ test2Recipient2.publicKey,
+ PROGRAM_ID,
+ InstructionType.ProgramTransfer,
+ transferAmount,
+ );
+
+ const tx = new Transaction();
+ const res = await client.getLatestBlockhash();
+
+ if (res) {
+ const [blockhash, _] = res;
+
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, test2Recipient1);
+
+ await client.processTransaction(tx);
+
+ await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, 'Resulting');
+ }
+ });
+
+ async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) {
+ const payerBalance = await client.getBalance(payerPubkey);
+ const recipientBalance = await client.getBalance(recipientPubkey);
+
+ console.log(`${timeframe} balances:`);
+ console.log(` Payer: ${payerBalance}`);
+ console.log(` Recipient: ${recipientBalance}`);
+ }
+});
diff --git a/basics/transfer-sol/steel/tsconfig.json b/basics/transfer-sol/steel/tsconfig.json
new file mode 100644
index 000000000..cd5d2e3d0
--- /dev/null
+++ b/basics/transfer-sol/steel/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/biome.json b/biome.json
new file mode 100644
index 000000000..951cf7fb5
--- /dev/null
+++ b/biome.json
@@ -0,0 +1,58 @@
+{
+ "$schema": "https://biomejs.dev/schemas/1.8.1/schema.json",
+ "organizeImports": {
+ "enabled": true
+ },
+ "linter": {
+ "enabled": true,
+ "rules": {
+ "recommended": true,
+ "suspicious": {
+ "noExplicitAny": "off",
+ "noAssignInExpressions": "warn",
+ "noExportsInTest": "warn",
+ "noShadowRestrictedNames": "off"
+ },
+ "style": {
+ "noParameterAssign": "warn",
+ "useImportType": "off"
+ },
+ "complexity": {
+ "noForEach": "warn",
+ "noUselessCatch": "warn",
+ "noBannedTypes": "warn"
+ }
+ }
+ },
+ "formatter": {
+ "enabled": true,
+ "formatWithErrors": false,
+ "indentStyle": "space",
+ "indentWidth": 2,
+ "lineEnding": "lf",
+ "lineWidth": 150,
+ "attributePosition": "auto"
+ },
+ "javascript": {
+ "formatter": {
+ "jsxQuoteStyle": "double",
+ "quoteProperties": "asNeeded",
+ "trailingCommas": "all",
+ "semicolons": "always",
+ "arrowParentheses": "always",
+ "bracketSpacing": true,
+ "bracketSameLine": false,
+ "quoteStyle": "single",
+ "attributePosition": "auto"
+ }
+ },
+ "json": {
+ "formatter": {
+ "trailingCommas": "none"
+ }
+ },
+ "files": {
+ "ignore": ["node_modules"],
+ "include": ["**/*.ts", "**/*.js", "**/*.json", "**/*.mjs"]
+ }
+}
diff --git a/basics/account-data/solang/.gitignore b/compression/cnft-burn/anchor/.gitignore
similarity index 100%
rename from basics/account-data/solang/.gitignore
rename to compression/cnft-burn/anchor/.gitignore
diff --git a/basics/transfer-sol/solang/.prettierignore b/compression/cnft-burn/anchor/.prettierignore
similarity index 100%
rename from basics/transfer-sol/solang/.prettierignore
rename to compression/cnft-burn/anchor/.prettierignore
diff --git a/compression/cnft-burn/anchor/Anchor.toml b/compression/cnft-burn/anchor/Anchor.toml
new file mode 100644
index 000000000..2fc2e1511
--- /dev/null
+++ b/compression/cnft-burn/anchor/Anchor.toml
@@ -0,0 +1,18 @@
+[toolchain]
+
+[features]
+resolution = true
+skip-lint = false
+
+[programs.devnet]
+cnft_burn = "FcLCJkSvwQQTDfCde5LdC4DSZAqSyb2AWM9US3wF5Fp7"
+
+[registry]
+url = "https://api.apr.dev/"
+
+[provider]
+cluster = "Devnet"
+wallet = "~/.config/solana/id.json"
+
+[scripts]
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/cnft-burn.ts"
diff --git a/compression/cnft-burn/anchor/Cargo.toml b/compression/cnft-burn/anchor/Cargo.toml
new file mode 100644
index 000000000..f39770481
--- /dev/null
+++ b/compression/cnft-burn/anchor/Cargo.toml
@@ -0,0 +1,14 @@
+[workspace]
+members = [
+ "programs/*"
+]
+resolver = "2"
+
+[profile.release]
+overflow-checks = true
+lto = "fat"
+codegen-units = 1
+[profile.release.build-override]
+opt-level = 3
+incremental = false
+codegen-units = 1
diff --git a/compression/cnft-burn/anchor/README.md b/compression/cnft-burn/anchor/README.md
new file mode 100644
index 000000000..63a25af3d
--- /dev/null
+++ b/compression/cnft-burn/anchor/README.md
@@ -0,0 +1,26 @@
+# cnft-burn
+
+This repository contains the cnft-burn program, a Solana Anchor program that allows you to burn compressed NFTs (cNFTs) in your collection. The program interacts with the Metaplex Bubblegum program through CPI to burn cNFTs.
+
+## Components
+
+- programs: Contains the anchor program
+- tests: Contains the tests for the anchor program
+
+## Deployment
+
+The program is deployed on devnet at `FbeHkUEevbhKmdk5FE5orcTaJkCYn5drwZoZXaxQXXNn`. You can deploy it yourself by changing the respective values in lib.rs and Anchor.toml.
+
+## How to run
+
+1. Configure RPC path in cnft-burn.ts. Personal preference: Helius RPCs.
+2. run `anchor build` at the root of the project i.e cnft-burn in this case.
+3. run `anchor deploy` to deploy and test the program on your own cluster.
+4. run `anchor test` to run the tests.
+
+## Acknowledgements
+
+This Example program would not have been possible without the work of:
+
+- [Metaplex](https://github.com/metaplex-foundation/) for providing the Bubblegum program with ix builders.
+- [@nickfrosty](https://twitter.com/nickfrosty) for providing the sample code for fetching and creating cNFTs.
diff --git a/compression/cnft-burn/anchor/migrations/deploy.ts b/compression/cnft-burn/anchor/migrations/deploy.ts
new file mode 100644
index 000000000..64a1c3599
--- /dev/null
+++ b/compression/cnft-burn/anchor/migrations/deploy.ts
@@ -0,0 +1,12 @@
+// Migrations are an early feature. Currently, they're nothing more than this
+// single deploy script that's invoked from the CLI, injecting a provider
+// configured from the workspace's Anchor.toml.
+
+const anchor = require('@coral-xyz/anchor');
+
+module.exports = async (provider) => {
+ // Configure client to use the provider.
+ anchor.setProvider(provider);
+
+ // Add your deploy script here.
+};
diff --git a/compression/cnft-burn/anchor/package.json b/compression/cnft-burn/anchor/package.json
new file mode 100644
index 000000000..36ec9f5ac
--- /dev/null
+++ b/compression/cnft-burn/anchor/package.json
@@ -0,0 +1,26 @@
+{
+ "scripts": {
+ "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+ },
+ "dependencies": {
+ "@coral-xyz/anchor": "^0.30.0",
+ "@metaplex-foundation/js": "^0.19.4",
+ "@metaplex-foundation/mpl-bubblegum": "^0.7.0",
+ "@metaplex-foundation/mpl-token-metadata": "^2.12.0",
+ "@metaplex-foundation/umi": "^0.9.0",
+ "@solana/spl-account-compression": "^0.2.0",
+ "@solana/web3.js": "^1.89.0",
+ "axios": "^1.6.5"
+ },
+ "devDependencies": {
+ "@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"
+ }
+}
diff --git a/compression/cnft-burn/anchor/pnpm-lock.yaml b/compression/cnft-burn/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..a9d5bd59f
--- /dev/null
+++ b/compression/cnft-burn/anchor/pnpm-lock.yaml
@@ -0,0 +1,3731 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/js':
+ specifier: ^0.19.4
+ version: 0.19.5(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-bubblegum':
+ specifier: ^0.7.0
+ version: 0.7.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-token-metadata':
+ specifier: ^2.12.0
+ version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/umi':
+ specifier: ^0.9.0
+ version: 0.9.1
+ '@solana/spl-account-compression':
+ specifier: ^0.2.0
+ version: 0.2.1(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js':
+ specifier: ^1.89.0
+ version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ axios:
+ specifier: ^1.6.5
+ version: 1.7.2
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.24.6':
+ resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==}
+ engines: {node: '>=6.9.0'}
+
+ '@bundlr-network/client@0.8.9':
+ resolution: {integrity: sha512-SJ7BAt/KhONeFQ0+nbqrw2DUWrsev6y6cmlXt+3x7fPCkw7OJwudtxV/h2nBteZd65NXjqw8yzkmLiLfZ7CCRA==}
+ deprecated: Bundlr is now Irys - please switch to @irys/sdk - this package will remain compatible with Irys for the foreseeable future.
+ hasBin: true
+
+ '@coral-xyz/anchor@0.30.0':
+ resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@ethereumjs/rlp@4.0.1':
+ resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ '@ethereumjs/util@8.1.0':
+ resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==}
+ engines: {node: '>=14'}
+
+ '@ethersproject/abi@5.7.0':
+ resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==}
+
+ '@ethersproject/abstract-provider@5.7.0':
+ resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==}
+
+ '@ethersproject/abstract-signer@5.7.0':
+ resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==}
+
+ '@ethersproject/address@5.7.0':
+ resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==}
+
+ '@ethersproject/base64@5.7.0':
+ resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==}
+
+ '@ethersproject/basex@5.7.0':
+ resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==}
+
+ '@ethersproject/bignumber@5.7.0':
+ resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==}
+
+ '@ethersproject/bytes@5.7.0':
+ resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==}
+
+ '@ethersproject/constants@5.7.0':
+ resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==}
+
+ '@ethersproject/contracts@5.7.0':
+ resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==}
+
+ '@ethersproject/hash@5.7.0':
+ resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==}
+
+ '@ethersproject/hdnode@5.7.0':
+ resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==}
+
+ '@ethersproject/json-wallets@5.7.0':
+ resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==}
+
+ '@ethersproject/keccak256@5.7.0':
+ resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==}
+
+ '@ethersproject/logger@5.7.0':
+ resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==}
+
+ '@ethersproject/networks@5.7.1':
+ resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==}
+
+ '@ethersproject/pbkdf2@5.7.0':
+ resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==}
+
+ '@ethersproject/properties@5.7.0':
+ resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==}
+
+ '@ethersproject/providers@5.7.2':
+ resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==}
+
+ '@ethersproject/random@5.7.0':
+ resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==}
+
+ '@ethersproject/rlp@5.7.0':
+ resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==}
+
+ '@ethersproject/sha2@5.7.0':
+ resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==}
+
+ '@ethersproject/signing-key@5.7.0':
+ resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==}
+
+ '@ethersproject/solidity@5.7.0':
+ resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==}
+
+ '@ethersproject/strings@5.7.0':
+ resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==}
+
+ '@ethersproject/transactions@5.7.0':
+ resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==}
+
+ '@ethersproject/units@5.7.0':
+ resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==}
+
+ '@ethersproject/wallet@5.7.0':
+ resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==}
+
+ '@ethersproject/web@5.7.1':
+ resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==}
+
+ '@ethersproject/wordlists@5.7.0':
+ resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==}
+
+ '@metaplex-foundation/beet-solana@0.3.1':
+ resolution: {integrity: sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==}
+
+ '@metaplex-foundation/beet-solana@0.4.0':
+ resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==}
+
+ '@metaplex-foundation/beet-solana@0.4.1':
+ resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==}
+
+ '@metaplex-foundation/beet@0.4.0':
+ resolution: {integrity: sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==}
+
+ '@metaplex-foundation/beet@0.6.1':
+ resolution: {integrity: sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==}
+
+ '@metaplex-foundation/beet@0.7.1':
+ resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==}
+
+ '@metaplex-foundation/beet@0.7.2':
+ resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==}
+
+ '@metaplex-foundation/cusper@0.0.2':
+ resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==}
+
+ '@metaplex-foundation/js@0.19.5':
+ resolution: {integrity: sha512-OXGX0zr4rpr4vpFt6+tO+bEQ7yN5fqyKpAWYzxPb0yGM0Rj6JKlvj0Eaiymvwmm5XtLPK+98M8y9jxZiQEtsEA==}
+
+ '@metaplex-foundation/mpl-auction-house@2.5.1':
+ resolution: {integrity: sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==}
+
+ '@metaplex-foundation/mpl-bubblegum@0.6.2':
+ resolution: {integrity: sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==}
+
+ '@metaplex-foundation/mpl-bubblegum@0.7.0':
+ resolution: {integrity: sha512-HCo6q+nh8M3KRv9/aUaZcJo5/vPJEeZwPGRDWkqN7lUXoMIvhd83fZi7MB1rIg1gwpVHfHqim0A02LCYKisWFg==}
+
+ '@metaplex-foundation/mpl-candy-guard@0.3.2':
+ resolution: {integrity: sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==}
+
+ '@metaplex-foundation/mpl-candy-machine-core@0.1.2':
+ resolution: {integrity: sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==}
+
+ '@metaplex-foundation/mpl-candy-machine@5.1.0':
+ resolution: {integrity: sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0':
+ resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==}
+
+ '@metaplex-foundation/umi-options@0.8.9':
+ resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==}
+
+ '@metaplex-foundation/umi-public-keys@0.8.9':
+ resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==}
+
+ '@metaplex-foundation/umi-serializers-core@0.8.9':
+ resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==}
+
+ '@metaplex-foundation/umi-serializers-encodings@0.8.9':
+ resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==}
+
+ '@metaplex-foundation/umi-serializers-numbers@0.8.9':
+ resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==}
+
+ '@metaplex-foundation/umi-serializers@0.9.0':
+ resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==}
+
+ '@metaplex-foundation/umi@0.9.1':
+ resolution: {integrity: sha512-IhHoOvp4vfO/++YL+78+iVuLM53+FDwUOZDYgH6lx0jYXyQ27BeaieeR5i+q3A9dz4KxQo5Nzc5aCA1109QGCQ==}
+
+ '@noble/curves@1.3.0':
+ resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==}
+
+ '@noble/curves@1.4.0':
+ resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
+
+ '@noble/ed25519@1.7.3':
+ resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==}
+
+ '@noble/hashes@1.3.3':
+ resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==}
+ engines: {node: '>= 16'}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@randlabs/communication-bridge@1.0.1':
+ resolution: {integrity: sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==}
+
+ '@randlabs/myalgo-connect@1.4.2':
+ resolution: {integrity: sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==}
+
+ '@scure/base@1.1.6':
+ resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==}
+
+ '@scure/bip32@1.3.3':
+ resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==}
+
+ '@scure/bip39@1.2.2':
+ resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==}
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==}
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
+
+ '@solana/codecs-strings@2.0.0-preview.2':
+ resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+
+ '@solana/codecs@2.0.0-preview.2':
+ resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==}
+
+ '@solana/errors@2.0.0-preview.2':
+ resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
+ hasBin: true
+
+ '@solana/options@2.0.0-preview.2':
+ resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==}
+
+ '@solana/spl-account-compression@0.1.10':
+ resolution: {integrity: sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.50.1
+
+ '@solana/spl-account-compression@0.2.1':
+ resolution: {integrity: sha512-GIf/euXN/ZJMfiH3DNiIcolNBZ5pga+usGVxEAyt6Iucv0EXsbxefHCePqRr3ryldFpFm4mjJPz5sm+FzZuDnw==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token-metadata@0.1.4':
+ resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.1.8':
+ resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==}
+ engines: {node: '>= 10'}
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/spl-type-length-value@0.1.0':
+ resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+ engines: {node: '>=16'}
+
+ '@solana/wallet-adapter-base@0.9.23':
+ resolution: {integrity: sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.77.3
+
+ '@solana/wallet-standard-features@1.2.0':
+ resolution: {integrity: sha512-tUd9srDLkRpe1BYg7we+c4UhRQkq+XQWswsr/L1xfGmoRDF47BPSXf4zE7ZU2GRBGvxtGt7lwJVAufQyQYhxTQ==}
+ engines: {node: '>=16'}
+
+ '@solana/web3.js@1.91.8':
+ resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==}
+
+ '@supercharge/promise-pool@2.4.0':
+ resolution: {integrity: sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w==}
+ engines: {node: '>=8'}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@11.11.6':
+ resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.12':
+ resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ '@wallet-standard/base@1.0.1':
+ resolution: {integrity: sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w==}
+ engines: {node: '>=16'}
+
+ '@wallet-standard/features@1.0.3':
+ resolution: {integrity: sha512-m8475I6W5LTatTZuUz5JJNK42wFRgkJTB0I9tkruMwfqBF2UN2eomkYNVf9RbrsROelCRzSFmugqjKZBFaubsA==}
+ engines: {node: '>=16'}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ aes-js@3.0.0:
+ resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==}
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ algo-msgpack-with-bigint@2.1.1:
+ resolution: {integrity: sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==}
+ engines: {node: '>= 10'}
+
+ algosdk@1.24.1:
+ resolution: {integrity: sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==}
+ engines: {node: '>=14.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansicolors@0.3.2:
+ resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arbundles@0.6.23:
+ resolution: {integrity: sha512-+gr93F3fivN+6dhiImT6BQNaXz4oECPn2GYjCZjS2yEoq7hM78FRvVp6kQyjEdhnuBFQr/q4oS/nkjnQlHdj9Q==}
+
+ arconnect@0.4.2:
+ resolution: {integrity: sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ arweave-stream-tx@1.2.2:
+ resolution: {integrity: sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==}
+ peerDependencies:
+ arweave: ^1.10.0
+
+ arweave@1.15.1:
+ resolution: {integrity: sha512-rT7FOwqdudd5npqp4xOYdDT2035LtpcqePjwirh4wjRiEtVsz1FZkRiM2Yj+fOAwYzOm/hNG0GDOipDSaiEGGQ==}
+ engines: {node: '>=18'}
+
+ asn1.js@5.4.1:
+ resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
+
+ assert@2.1.0:
+ resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ async-retry@1.3.3:
+ resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ avsc@https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef:
+ resolution: {tarball: https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef}
+ version: 5.4.7
+ engines: {node: '>=0.11'}
+
+ axios@0.21.4:
+ resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
+
+ axios@0.25.0:
+ resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==}
+
+ axios@1.7.2:
+ resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base-x@4.0.0:
+ resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ base64url@3.0.1:
+ resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==}
+ engines: {node: '>=6.0.0'}
+
+ bech32@1.1.4:
+ resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bip39-light@1.0.7:
+ resolution: {integrity: sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==}
+
+ bip39@3.0.2:
+ resolution: {integrity: sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==}
+
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
+ bn.js@4.11.6:
+ resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==}
+
+ bn.js@4.12.0:
+ resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
+
+ bn.js@5.2.0:
+ resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.6.0:
+ resolution: {integrity: sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ brorand@1.1.0:
+ resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@5.0.0:
+ resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer-reverse@1.0.1:
+ resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ capability@0.2.5:
+ resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chardet@0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cipher-base@1.0.4:
+ resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
+
+ cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+
+ cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+
+ cli-width@3.0.0:
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+ engines: {node: '>= 10'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ clone@1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
+
+ create-hash@1.2.0:
+ resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
+
+ create-hmac@1.1.7:
+ resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
+
+ 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'}
+
+ crypto-js@3.3.0:
+ resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==}
+
+ csv-generate@4.4.1:
+ resolution: {integrity: sha512-O/einO0v4zPmXaOV+sYqGa02VkST4GP5GLpWBNHEouIU7pF3kpGf3D0kCCvX82ydIY4EKkOK+R8b1BYsRXravg==}
+
+ csv-parse@5.5.6:
+ resolution: {integrity: sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==}
+
+ csv-stringify@6.5.0:
+ resolution: {integrity: sha512-edlXFVKcUx7r8Vx5zQucsuMg4wb/xT6qyz+Sr1vnLrdXqlLD1+UKyWNyZ9zn6mUW1ewmGxrpVwAcChGF0HQ/2Q==}
+
+ csv@6.3.9:
+ resolution: {integrity: sha512-eiN+Qu8NwSLxZYia6WzB8xlX/rAQ/8EgK5A4dIF7Bz96mzcr5dW1jlcNmjG0QWySWKfPdCerH3RQ96ZqqsE8cA==}
+ engines: {node: '>= 0.1.90'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ depd@1.1.2:
+ resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
+ engines: {node: '>= 0.6'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ dot-case@3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+
+ dotenv@10.0.0:
+ resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==}
+ engines: {node: '>=10'}
+
+ elliptic@6.5.4:
+ resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
+
+ elliptic@6.5.5:
+ resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ error-polyfill@0.1.3:
+ resolution: {integrity: sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg==}
+
+ es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ ethereum-bloom-filters@1.1.0:
+ resolution: {integrity: sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==}
+
+ ethereum-cryptography@2.1.3:
+ resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==}
+
+ ethers@5.7.2:
+ resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==}
+
+ ethjs-unit@0.1.6:
+ resolution: {integrity: sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ exponential-backoff@3.1.1:
+ resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
+
+ external-editor@3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ figures@3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
+ form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hash-base@3.1.0:
+ resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
+ engines: {node: '>=4'}
+
+ hash.js@1.1.7:
+ resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ hi-base32@0.5.1:
+ resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==}
+
+ hmac-drbg@1.0.1:
+ resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
+
+ http-errors@1.8.1:
+ resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
+ engines: {node: '>= 0.6'}
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ inquirer@8.2.6:
+ resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
+ engines: {node: '>=12.0.0'}
+
+ is-arguments@1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-hex-prefixed@1.0.0:
+ resolution: {integrity: sha1-fY035q135dEnFIkTxXPggtd39VQ=}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ is-interactive@1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+
+ is-nan@1.3.2:
+ resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+ engines: {node: '>= 0.4'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.0:
+ resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-sha256@0.9.0:
+ resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==}
+
+ js-sha3@0.8.0:
+ resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==}
+
+ js-sha3@0.9.3:
+ resolution: {integrity: sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==}
+
+ js-sha512@0.8.0:
+ resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-bigint@1.0.0:
+ resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==}
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ keccak@3.0.4:
+ resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==}
+ engines: {node: '>=10.0.0'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.clonedeep@4.5.0:
+ resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
+
+ lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ md5.js@1.3.5:
+ resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
+
+ merkletreejs@0.2.32:
+ resolution: {integrity: sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ==}
+ engines: {node: '>= 7.6.0'}
+
+ micro-ftch@0.3.1:
+ resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@3.0.0:
+ resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+
+ minimalistic-crypto-utils@1.0.1:
+ resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ multistream@4.1.0:
+ resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==}
+
+ mustache@4.2.0:
+ resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
+ hasBin: true
+
+ mute-stream@0.0.8:
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ near-api-js@0.44.2:
+ resolution: {integrity: sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg==}
+
+ near-hd-key@1.2.1:
+ resolution: {integrity: sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==}
+
+ near-seed-phrase@0.2.0:
+ resolution: {integrity: sha512-NpmrnejpY1AdlRpDZ0schJQJtfBaoUheRfiYtQpcq9TkwPgqKZCRULV5L3hHmLc0ep7KRtikbPQ9R2ztN/3cyQ==}
+
+ no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+
+ node-addon-api@2.0.2:
+ resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ number-to-bn@1.7.0:
+ resolution: {integrity: sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ o3@1.0.3:
+ resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==}
+
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+
+ os-tmpdir@1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ pbkdf2@3.1.2:
+ resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
+ engines: {node: '>=0.12'}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+
+ retry@0.13.1:
+ resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+ engines: {node: '>= 4'}
+
+ ripemd160@2.0.2:
+ resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
+
+ rpc-websockets@7.11.0:
+ resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==}
+
+ run-async@2.4.1:
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
+
+ rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ scrypt-js@3.0.1:
+ resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==}
+
+ secp256k1@4.0.3:
+ resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==}
+ engines: {node: '>=10.0.0'}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sha.js@2.4.11:
+ resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
+ hasBin: true
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ snake-case@3.0.4:
+ resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ stream-transform@3.3.2:
+ resolution: {integrity: sha512-v64PUnPy9Qw94NGuaEMo+9RHQe4jTBYf+NkTtqkCgeuiNo8NlL0LtLR7fkKWNVFtp3RhIm5Dlxkgm5uz7TDimQ==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-hex-prefix@1.0.0:
+ resolution: {integrity: sha1-DF8VX+8RUTczd96du1iNoFUA428=}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ tmp-promise@3.0.3:
+ resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==}
+
+ tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+
+ tmp@0.2.3:
+ resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
+ engines: {node: '>=14.14'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ treeify@1.1.0:
+ resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==}
+ engines: {node: '>=0.6'}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ tweetnacl@1.0.3:
+ resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ typescript-collections@1.3.3:
+ resolution: {integrity: sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ u3@0.1.1:
+ resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==}
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ utf8@3.0.0:
+ resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ vlq@2.0.4:
+ resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==}
+
+ wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
+ web3-utils@1.10.4:
+ resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==}
+ engines: {node: '>=8.0.0'}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.4.6:
+ resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.24.6':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@bundlr-network/client@0.8.9(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@supercharge/promise-pool': 2.4.0
+ algosdk: 1.24.1
+ arbundles: 0.6.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10)
+ arweave: 1.15.1
+ async-retry: 1.3.3
+ axios: 0.25.0(debug@4.3.4)
+ base64url: 3.0.1
+ bignumber.js: 9.1.2
+ bs58: 4.0.1
+ commander: 8.3.0
+ csv: 6.3.9
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ inquirer: 8.2.6
+ js-sha256: 0.9.0
+ mime-types: 2.1.35
+ near-api-js: 0.44.2
+ near-seed-phrase: 0.2.0
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@noble/hashes': 1.4.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@ethereumjs/rlp@4.0.1': {}
+
+ '@ethereumjs/util@8.1.0':
+ dependencies:
+ '@ethereumjs/rlp': 4.0.1
+ ethereum-cryptography: 2.1.3
+ micro-ftch: 0.3.1
+
+ '@ethersproject/abi@5.7.0':
+ dependencies:
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@ethersproject/abstract-provider@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/web': 5.7.1
+
+ '@ethersproject/abstract-signer@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+
+ '@ethersproject/address@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+
+ '@ethersproject/base64@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+
+ '@ethersproject/basex@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/properties': 5.7.0
+
+ '@ethersproject/bignumber@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ bn.js: 5.2.1
+
+ '@ethersproject/bytes@5.7.0':
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/constants@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+
+ '@ethersproject/contracts@5.7.0':
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+
+ '@ethersproject/hash@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@ethersproject/hdnode@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/pbkdf2': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/wordlists': 5.7.0
+
+ '@ethersproject/json-wallets@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/hdnode': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/pbkdf2': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ aes-js: 3.0.0
+ scrypt-js: 3.0.1
+
+ '@ethersproject/keccak256@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ js-sha3: 0.8.0
+
+ '@ethersproject/logger@5.7.0': {}
+
+ '@ethersproject/networks@5.7.1':
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/pbkdf2@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+
+ '@ethersproject/properties@5.7.0':
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/web': 5.7.1
+ bech32: 1.1.4
+ ws: 7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@ethersproject/random@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/rlp@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/sha2@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ hash.js: 1.1.7
+
+ '@ethersproject/signing-key@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ bn.js: 5.2.1
+ elliptic: 6.5.4
+ hash.js: 1.1.7
+
+ '@ethersproject/solidity@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@ethersproject/strings@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/transactions@5.7.0':
+ dependencies:
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+
+ '@ethersproject/units@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/wallet@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/hdnode': 5.7.0
+ '@ethersproject/json-wallets': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/wordlists': 5.7.0
+
+ '@ethersproject/web@5.7.1':
+ dependencies:
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@ethersproject/wordlists@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@metaplex-foundation/beet-solana@0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet-solana@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet@0.4.0':
+ dependencies:
+ ansicolors: 0.3.2
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/beet@0.6.1':
+ dependencies:
+ ansicolors: 0.3.2
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/beet@0.7.1':
+ dependencies:
+ ansicolors: 0.3.2
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/beet@0.7.2':
+ dependencies:
+ ansicolors: 0.3.2
+ assert: 2.1.0
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/cusper@0.0.2': {}
+
+ '@metaplex-foundation/js@0.19.5(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@bundlr-network/client': 0.8.9(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/mpl-auction-house': 2.5.1(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-bubblegum': 0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-candy-guard': 0.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-candy-machine': 5.1.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-candy-machine-core': 0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@noble/ed25519': 1.7.3
+ '@noble/hashes': 1.4.0
+ '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bignumber.js: 9.1.2
+ bn.js: 5.2.1
+ bs58: 5.0.0
+ buffer: 6.0.3
+ debug: 4.3.4
+ eventemitter3: 4.0.7
+ lodash.clonedeep: 4.5.0
+ lodash.isequal: 4.5.0
+ merkletreejs: 0.2.32
+ mime: 3.0.0
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-auction-house@2.5.1(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.6.1
+ '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-bubblegum@0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ js-sha3: 0.8.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-bubblegum@0.7.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ js-sha3: 0.8.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-candy-guard@0.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.4.0
+ '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-candy-machine-core@0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.4.0
+ '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-candy-machine@5.1.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/umi-options@0.8.9': {}
+
+ '@metaplex-foundation/umi-public-keys@0.8.9':
+ dependencies:
+ '@metaplex-foundation/umi-serializers-encodings': 0.8.9
+
+ '@metaplex-foundation/umi-serializers-core@0.8.9': {}
+
+ '@metaplex-foundation/umi-serializers-encodings@0.8.9':
+ dependencies:
+ '@metaplex-foundation/umi-serializers-core': 0.8.9
+
+ '@metaplex-foundation/umi-serializers-numbers@0.8.9':
+ dependencies:
+ '@metaplex-foundation/umi-serializers-core': 0.8.9
+
+ '@metaplex-foundation/umi-serializers@0.9.0':
+ dependencies:
+ '@metaplex-foundation/umi-options': 0.8.9
+ '@metaplex-foundation/umi-public-keys': 0.8.9
+ '@metaplex-foundation/umi-serializers-core': 0.8.9
+ '@metaplex-foundation/umi-serializers-encodings': 0.8.9
+ '@metaplex-foundation/umi-serializers-numbers': 0.8.9
+
+ '@metaplex-foundation/umi@0.9.1':
+ dependencies:
+ '@metaplex-foundation/umi-options': 0.8.9
+ '@metaplex-foundation/umi-public-keys': 0.8.9
+ '@metaplex-foundation/umi-serializers': 0.9.0
+
+ '@noble/curves@1.3.0':
+ dependencies:
+ '@noble/hashes': 1.3.3
+
+ '@noble/curves@1.4.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/ed25519@1.7.3': {}
+
+ '@noble/hashes@1.3.3': {}
+
+ '@noble/hashes@1.4.0': {}
+
+ '@randlabs/communication-bridge@1.0.1': {}
+
+ '@randlabs/myalgo-connect@1.4.2':
+ dependencies:
+ '@randlabs/communication-bridge': 1.0.1
+
+ '@scure/base@1.1.6': {}
+
+ '@scure/bip32@1.3.3':
+ dependencies:
+ '@noble/curves': 1.3.0
+ '@noble/hashes': 1.3.3
+ '@scure/base': 1.1.6
+
+ '@scure/bip39@1.2.2':
+ dependencies:
+ '@noble/hashes': 1.3.3
+ '@scure/base': 1.1.6
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+ fastestsmallesttextencoderdecoder: 1.0.22
+
+ '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-data-structures': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/options': 2.0.0-preview.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-preview.2':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+
+ '@solana/options@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+
+ '@solana/spl-account-compression@0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ js-sha3: 0.8.0
+ typescript-collections: 1.3.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@solana/spl-account-compression@0.2.1(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ js-sha3: 0.9.3
+ typescript-collections: 1.3.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token@0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.6
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer: 6.0.3
+ buffer-layout: 1.2.2
+ dotenv: 10.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - utf-8-validate
+
+ '@solana/spl-type-length-value@0.1.0':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/wallet-standard-features': 1.2.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@wallet-standard/base': 1.0.1
+ '@wallet-standard/features': 1.0.3
+ eventemitter3: 4.0.7
+
+ '@solana/wallet-standard-features@1.2.0':
+ dependencies:
+ '@wallet-standard/base': 1.0.1
+ '@wallet-standard/features': 1.0.3
+
+ '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.6
+ '@noble/curves': 1.4.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 7.11.0
+ superstruct: 0.14.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@supercharge/promise-pool@2.4.0': {}
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.12
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@11.11.6': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.12':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ '@wallet-standard/base@1.0.1': {}
+
+ '@wallet-standard/features@1.0.3':
+ dependencies:
+ '@wallet-standard/base': 1.0.1
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ aes-js@3.0.0: {}
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ algo-msgpack-with-bigint@2.1.1: {}
+
+ algosdk@1.24.1:
+ dependencies:
+ algo-msgpack-with-bigint: 2.1.1
+ buffer: 6.0.3
+ cross-fetch: 3.1.8
+ hi-base32: 0.5.1
+ js-sha256: 0.9.0
+ js-sha3: 0.8.0
+ js-sha512: 0.8.0
+ json-bigint: 1.0.0
+ tweetnacl: 1.0.3
+ vlq: 2.0.4
+ transitivePeerDependencies:
+ - encoding
+
+ ansi-colors@4.1.1: {}
+
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansicolors@0.3.2: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arbundles@0.6.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10):
+ dependencies:
+ '@noble/ed25519': 1.7.3
+ '@randlabs/myalgo-connect': 1.4.2
+ '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ algosdk: 1.24.1
+ arweave: 1.15.1
+ arweave-stream-tx: 1.2.2(arweave@1.15.1)
+ avsc: https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef
+ axios: 0.21.4(debug@4.3.4)
+ base64url: 3.0.1
+ bs58: 4.0.1
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ keccak: 3.0.4
+ multistream: 4.1.0
+ process: 0.11.10
+ secp256k1: 4.0.3
+ tmp-promise: 3.0.3
+ transitivePeerDependencies:
+ - '@solana/web3.js'
+ - bufferutil
+ - debug
+ - encoding
+ - utf-8-validate
+
+ arconnect@0.4.2:
+ dependencies:
+ arweave: 1.15.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ arweave-stream-tx@1.2.2(arweave@1.15.1):
+ dependencies:
+ arweave: 1.15.1
+ exponential-backoff: 3.1.1
+
+ arweave@1.15.1:
+ dependencies:
+ arconnect: 0.4.2
+ asn1.js: 5.4.1
+ base64-js: 1.5.1
+ bignumber.js: 9.1.2
+
+ asn1.js@5.4.1:
+ dependencies:
+ bn.js: 4.12.0
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ safer-buffer: 2.1.2
+
+ assert@2.1.0:
+ dependencies:
+ call-bind: 1.0.7
+ is-nan: 1.3.2
+ object-is: 1.1.6
+ object.assign: 4.1.5
+ util: 0.12.5
+
+ assertion-error@1.1.0: {}
+
+ async-retry@1.3.3:
+ dependencies:
+ retry: 0.13.1
+
+ asynckit@0.4.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
+ avsc@https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef: {}
+
+ axios@0.21.4(debug@4.3.4):
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.4)
+ transitivePeerDependencies:
+ - debug
+
+ axios@0.25.0(debug@4.3.4):
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.4)
+ transitivePeerDependencies:
+ - debug
+
+ axios@1.7.2:
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.4)
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ base64url@3.0.1: {}
+
+ bech32@1.1.4: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bip39-light@1.0.7:
+ dependencies:
+ create-hash: 1.2.0
+ pbkdf2: 3.1.2
+
+ bip39@3.0.2:
+ dependencies:
+ '@types/node': 11.11.6
+ create-hash: 1.2.0
+ pbkdf2: 3.1.2
+ randombytes: 2.1.0
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ bn.js@4.11.6: {}
+
+ bn.js@4.12.0: {}
+
+ bn.js@5.2.0: {}
+
+ bn.js@5.2.1: {}
+
+ borsh@0.6.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ brorand@1.1.0: {}
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.0
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer-reverse@1.0.1: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ call-bind@1.0.7:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ camelcase@6.3.0: {}
+
+ capability@0.2.5: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ chardet@0.7.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cipher-base@1.0.4:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ cli-cursor@3.1.0:
+ dependencies:
+ restore-cursor: 3.1.0
+
+ cli-spinners@2.9.2: {}
+
+ cli-width@3.0.0: {}
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone@1.0.4: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ commander@8.3.0: {}
+
+ concat-map@0.0.1: {}
+
+ create-hash@1.2.0:
+ dependencies:
+ cipher-base: 1.0.4
+ inherits: 2.0.4
+ md5.js: 1.3.5
+ ripemd160: 2.0.2
+ sha.js: 2.4.11
+
+ create-hmac@1.1.7:
+ dependencies:
+ cipher-base: 1.0.4
+ create-hash: 1.2.0
+ inherits: 2.0.4
+ ripemd160: 2.0.2
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+
+ cross-fetch@3.1.8:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ crypto-hash@1.3.0: {}
+
+ crypto-js@3.3.0: {}
+
+ csv-generate@4.4.1: {}
+
+ csv-parse@5.5.6: {}
+
+ csv-stringify@6.5.0: {}
+
+ csv@6.3.9:
+ dependencies:
+ csv-generate: 4.4.1
+ csv-parse: 5.5.6
+ csv-stringify: 6.5.0
+ stream-transform: 3.3.2
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ defaults@1.0.4:
+ dependencies:
+ clone: 1.0.4
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delay@5.0.0: {}
+
+ delayed-stream@1.0.0: {}
+
+ depd@1.1.2: {}
+
+ depd@2.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ dot-case@3.0.4:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.6.2
+
+ dotenv@10.0.0: {}
+
+ elliptic@6.5.4:
+ dependencies:
+ bn.js: 4.12.0
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ elliptic@6.5.5:
+ dependencies:
+ bn.js: 4.12.0
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ emoji-regex@8.0.0: {}
+
+ error-polyfill@0.1.3:
+ dependencies:
+ capability: 0.2.5
+ o3: 1.0.3
+ u3: 0.1.1
+
+ es-define-property@1.0.0:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ ethereum-bloom-filters@1.1.0:
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ ethereum-cryptography@2.1.3:
+ dependencies:
+ '@noble/curves': 1.3.0
+ '@noble/hashes': 1.3.3
+ '@scure/bip32': 1.3.3
+ '@scure/bip39': 1.2.2
+
+ ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/hdnode': 5.7.0
+ '@ethersproject/json-wallets': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/pbkdf2': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ '@ethersproject/solidity': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/units': 5.7.0
+ '@ethersproject/wallet': 5.7.0
+ '@ethersproject/web': 5.7.1
+ '@ethersproject/wordlists': 5.7.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ ethjs-unit@0.1.6:
+ dependencies:
+ bn.js: 4.11.6
+ number-to-bn: 1.7.0
+
+ eventemitter3@4.0.7: {}
+
+ exponential-backoff@3.1.1: {}
+
+ external-editor@3.1.0:
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ figures@3.2.0:
+ dependencies:
+ escape-string-regexp: 1.0.5
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ follow-redirects@1.15.6(debug@4.3.4):
+ optionalDependencies:
+ debug: 4.3.4
+
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ form-data@4.0.0:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-intrinsic@1.2.4:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ gopd@1.0.1:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.0
+
+ has-proto@1.0.3: {}
+
+ has-symbols@1.0.3: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.0.3
+
+ hash-base@3.1.0:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ safe-buffer: 5.2.1
+
+ hash.js@1.1.7:
+ dependencies:
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ hi-base32@0.5.1: {}
+
+ hmac-drbg@1.0.1:
+ dependencies:
+ hash.js: 1.1.7
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ http-errors@1.8.1:
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 1.5.0
+ toidentifier: 1.0.1
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ inquirer@8.2.6:
+ dependencies:
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-width: 3.0.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 0.0.8
+ ora: 5.4.1
+ run-async: 2.4.1
+ rxjs: 7.8.1
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ through: 2.3.8
+ wrap-ansi: 6.2.0
+
+ is-arguments@1.1.1:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-callable@1.2.7: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.0.10:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-hex-prefixed@1.0.0: {}
+
+ is-interactive@1.0.0: {}
+
+ is-nan@1.3.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-typed-array@1.1.13:
+ dependencies:
+ which-typed-array: 1.1.15
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-sha256@0.9.0: {}
+
+ js-sha3@0.8.0: {}
+
+ js-sha3@0.9.3: {}
+
+ js-sha512@0.8.0: {}
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-bigint@1.0.0:
+ dependencies:
+ bignumber.js: 9.1.2
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ keccak@3.0.4:
+ dependencies:
+ node-addon-api: 2.0.2
+ node-gyp-build: 4.8.1
+ readable-stream: 3.6.2
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.clonedeep@4.5.0: {}
+
+ lodash.isequal@4.5.0: {}
+
+ lodash@4.17.21: {}
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.6.2
+
+ make-error@1.3.6: {}
+
+ md5.js@1.3.5:
+ dependencies:
+ hash-base: 3.1.0
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ merkletreejs@0.2.32:
+ dependencies:
+ bignumber.js: 9.1.2
+ buffer-reverse: 1.0.1
+ crypto-js: 3.3.0
+ treeify: 1.1.0
+ web3-utils: 1.10.4
+
+ micro-ftch@0.3.1: {}
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@3.0.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ minimalistic-assert@1.0.1: {}
+
+ minimalistic-crypto-utils@1.0.1: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ multistream@4.1.0:
+ dependencies:
+ once: 1.4.0
+ readable-stream: 3.6.2
+
+ mustache@4.2.0: {}
+
+ mute-stream@0.0.8: {}
+
+ nanoid@3.3.1: {}
+
+ near-api-js@0.44.2:
+ dependencies:
+ bn.js: 5.2.0
+ borsh: 0.6.0
+ bs58: 4.0.1
+ depd: 2.0.0
+ error-polyfill: 0.1.3
+ http-errors: 1.8.1
+ js-sha256: 0.9.0
+ mustache: 4.2.0
+ node-fetch: 2.7.0
+ text-encoding-utf-8: 1.0.2
+ tweetnacl: 1.0.3
+ transitivePeerDependencies:
+ - encoding
+
+ near-hd-key@1.2.1:
+ dependencies:
+ bip39: 3.0.2
+ create-hmac: 1.1.7
+ tweetnacl: 1.0.3
+
+ near-seed-phrase@0.2.0:
+ dependencies:
+ bip39-light: 1.0.7
+ bs58: 4.0.1
+ near-hd-key: 1.2.1
+ tweetnacl: 1.0.3
+
+ no-case@3.0.4:
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.6.2
+
+ node-addon-api@2.0.2: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.1: {}
+
+ normalize-path@3.0.0: {}
+
+ number-to-bn@1.7.0:
+ dependencies:
+ bn.js: 4.11.6
+ strip-hex-prefix: 1.0.0
+
+ o3@1.0.3:
+ dependencies:
+ capability: 0.2.5
+
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ ora@5.4.1:
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.2
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+
+ os-tmpdir@1.0.2: {}
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ pbkdf2@3.1.2:
+ dependencies:
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ ripemd160: 2.0.2
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+
+ picomatch@2.3.1: {}
+
+ possible-typed-array-names@1.0.0: {}
+
+ prettier@2.8.8: {}
+
+ process@0.11.10: {}
+
+ proxy-from-env@1.1.0: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ restore-cursor@3.1.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ retry@0.13.1: {}
+
+ ripemd160@2.0.2:
+ dependencies:
+ hash-base: 3.1.0
+ inherits: 2.0.4
+
+ rpc-websockets@7.11.0:
+ dependencies:
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ run-async@2.4.1: {}
+
+ rxjs@7.8.1:
+ dependencies:
+ tslib: 2.6.2
+
+ safe-buffer@5.2.1: {}
+
+ safer-buffer@2.1.2: {}
+
+ scrypt-js@3.0.1: {}
+
+ secp256k1@4.0.3:
+ dependencies:
+ elliptic: 6.5.5
+ node-addon-api: 2.0.2
+ node-gyp-build: 4.8.1
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+
+ setprototypeof@1.2.0: {}
+
+ sha.js@2.4.11:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ signal-exit@3.0.7: {}
+
+ snake-case@3.0.4:
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.6.2
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ statuses@1.5.0: {}
+
+ stream-transform@3.3.2: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-hex-prefix@1.0.0:
+ dependencies:
+ is-hex-prefixed: 1.0.0
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.14.2: {}
+
+ superstruct@0.15.5: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ tmp-promise@3.0.3:
+ dependencies:
+ tmp: 0.2.3
+
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+
+ tmp@0.2.3: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toidentifier@1.0.1: {}
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ treeify@1.1.0: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ tweetnacl@1.0.3: {}
+
+ type-detect@4.0.8: {}
+
+ type-fest@0.21.3: {}
+
+ typescript-collections@1.3.3: {}
+
+ typescript@4.9.5: {}
+
+ u3@0.1.1: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ utf8@3.0.0: {}
+
+ util-deprecate@1.0.2: {}
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.13
+ which-typed-array: 1.1.15
+
+ uuid@8.3.2: {}
+
+ vlq@2.0.4: {}
+
+ wcwidth@1.0.1:
+ dependencies:
+ defaults: 1.0.4
+
+ web3-utils@1.10.4:
+ dependencies:
+ '@ethereumjs/util': 8.1.0
+ bn.js: 5.2.1
+ ethereum-bloom-filters: 1.1.0
+ ethereum-cryptography: 2.1.3
+ ethjs-unit: 0.1.6
+ number-to-bn: 1.7.0
+ randombytes: 2.1.0
+ utf8: 3.0.0
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-typed-array@1.1.15:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@6.2.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/compression/cnft-burn/anchor/programs/cnft-burn/Cargo.toml b/compression/cnft-burn/anchor/programs/cnft-burn/Cargo.toml
new file mode 100644
index 000000000..37282a63b
--- /dev/null
+++ b/compression/cnft-burn/anchor/programs/cnft-burn/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "cnft-burn"
+version = "0.1.0"
+description = "Created with Anchor"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+name = "cnft_burn"
+
+[features]
+default = []
+cpi = ["no-entrypoint"]
+no-entrypoint = []
+no-idl = []
+no-log-ix-name = []
+idl-build = ["anchor-lang/idl-build"]
+
+[dependencies]
+anchor-lang = "0.31.1"
+mpl-bubblegum = "1.3.0"
+spl-account-compression = { version="0.3.0",features = ["no-entrypoint","cpi"] }
+ahash = "=0.8.7"
diff --git a/compression/cnft-burn/anchor/programs/cnft-burn/Xargo.toml b/compression/cnft-burn/anchor/programs/cnft-burn/Xargo.toml
new file mode 100644
index 000000000..475fb71ed
--- /dev/null
+++ b/compression/cnft-burn/anchor/programs/cnft-burn/Xargo.toml
@@ -0,0 +1,2 @@
+[target.bpfel-unknown-unknown.dependencies.std]
+features = []
diff --git a/compression/cnft-burn/anchor/programs/cnft-burn/src/lib.rs b/compression/cnft-burn/anchor/programs/cnft-burn/src/lib.rs
new file mode 100644
index 000000000..81bf97db5
--- /dev/null
+++ b/compression/cnft-burn/anchor/programs/cnft-burn/src/lib.rs
@@ -0,0 +1,86 @@
+use anchor_lang::prelude::*;
+
+declare_id!("FcLCJkSvwQQTDfCde5LdC4DSZAqSyb2AWM9US3wF5Fp7");
+
+#[derive(Clone)]
+pub struct SPLCompression;
+
+impl anchor_lang::Id for SPLCompression {
+ fn id() -> Pubkey {
+ spl_account_compression::id()
+ }
+}
+
+#[program]
+pub mod cnft_burn {
+ use super::*;
+
+ pub fn burn_cnft<'info>(
+ ctx: Context<'_, '_, '_, 'info, BurnCnft<'info>>,
+ root: [u8; 32],
+ data_hash: [u8; 32],
+ creator_hash: [u8; 32],
+ nonce: u64,
+ index: u32,
+ ) -> Result<()> {
+ let tree_config = ctx.accounts.tree_authority.to_account_info();
+ let leaf_owner = ctx.accounts.leaf_owner.to_account_info();
+ let merkle_tree = ctx.accounts.merkle_tree.to_account_info();
+ let log_wrapper = ctx.accounts.log_wrapper.to_account_info();
+ let compression_program = ctx.accounts.compression_program.to_account_info();
+ let system_program = ctx.accounts.system_program.to_account_info();
+
+ let cnft_burn_cpi = mpl_bubblegum::instructions::BurnCpi::new(
+ &ctx.accounts.bubblegum_program,
+ mpl_bubblegum::instructions::BurnCpiAccounts {
+ tree_config: &tree_config,
+ leaf_owner: (&leaf_owner, true),
+ leaf_delegate: (&leaf_owner, false),
+ merkle_tree: &merkle_tree,
+ log_wrapper: &log_wrapper,
+ compression_program: &compression_program,
+ system_program: &system_program,
+ },
+ mpl_bubblegum::instructions::BurnInstructionArgs {
+ root,
+ data_hash,
+ creator_hash,
+ nonce,
+ index,
+ },
+ );
+
+ cnft_burn_cpi.invoke_with_remaining_accounts(
+ ctx.remaining_accounts
+ .iter()
+ .map(|account| (account, false, false))
+ .collect::>()
+ .as_slice(),
+ )?;
+
+ Ok(())
+ }
+}
+
+#[derive(Accounts)]
+pub struct BurnCnft<'info> {
+ #[account(mut)]
+ pub leaf_owner: Signer<'info>,
+ #[account(mut)]
+ #[account(
+ seeds = [merkle_tree.key().as_ref()],
+ bump,
+ seeds::program = bubblegum_program.key()
+ )]
+ /// CHECK: This account is modified in the downstream program
+ pub tree_authority: UncheckedAccount<'info>,
+ #[account(mut)]
+ /// CHECK: This account is neither written to nor read from.
+ pub merkle_tree: UncheckedAccount<'info>,
+ /// CHECK: This account is neither written to nor read from.
+ pub log_wrapper: UncheckedAccount<'info>,
+ pub compression_program: Program<'info, SPLCompression>,
+ /// CHECK: This account is neither written to nor read from.
+ pub bubblegum_program: UncheckedAccount<'info>,
+ pub system_program: Program<'info, System>,
+}
diff --git a/compression/cnft-burn/anchor/tests/ReadApi/WrapperConnection.ts b/compression/cnft-burn/anchor/tests/ReadApi/WrapperConnection.ts
new file mode 100644
index 000000000..b990da31c
--- /dev/null
+++ b/compression/cnft-burn/anchor/tests/ReadApi/WrapperConnection.ts
@@ -0,0 +1,228 @@
+// local imports for the ReadApi types
+import type {
+ GetAssetProofRpcInput,
+ GetAssetProofRpcResponse,
+ GetAssetRpcInput,
+ GetAssetsByGroupRpcInput,
+ GetAssetsByOwnerRpcInput,
+ ReadApiAsset,
+ ReadApiAssetList,
+} from '@/ReadApi/types';
+import type { Metadata, Mint, NftOriginalEdition, SplTokenCurrency } from '@metaplex-foundation/js';
+// import from the `@metaplex-foundation/js`
+import { MetaplexError, Pda, amount, toBigNumber } from '@metaplex-foundation/js';
+import { type Commitment, Connection, type ConnectionConfig, PublicKey } from '@solana/web3.js';
+
+import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum';
+import { TokenStandard } from '@metaplex-foundation/mpl-token-metadata';
+import BN from 'bn.js';
+
+type JsonRpcParams = {
+ method: string;
+ id?: string;
+ params: ReadApiMethodParams;
+};
+
+type JsonRpcOutput = {
+ result: ReadApiJsonOutput;
+};
+
+/** @group Errors */
+export class ReadApiError extends MetaplexError {
+ readonly name: string = 'ReadApiError';
+ constructor(message: string, cause?: Error) {
+ super(message, 'rpc', undefined, cause);
+ }
+}
+
+/**
+ * Convert a ReadApi asset (e.g. compressed NFT) into an NftEdition
+ */
+export const toNftEditionFromReadApiAsset = (input: ReadApiAsset): NftOriginalEdition => {
+ return {
+ model: 'nftEdition',
+ isOriginal: true,
+ address: new PublicKey(input.id),
+ supply: toBigNumber(input.supply.print_current_supply),
+ maxSupply: toBigNumber(input.supply.print_max_supply),
+ };
+};
+
+/**
+ * Convert a ReadApi asset (e.g. compressed NFT) into an NFT mint
+ */
+export const toMintFromReadApiAsset = (input: ReadApiAsset): Mint => {
+ const currency: SplTokenCurrency = {
+ symbol: 'Token',
+ decimals: 0,
+ namespace: 'spl-token',
+ };
+
+ return {
+ model: 'mint',
+ address: new PublicKey(input.id),
+ mintAuthorityAddress: new PublicKey(input.id),
+ freezeAuthorityAddress: new PublicKey(input.id),
+ decimals: 0,
+ supply: amount(1, currency),
+ isWrappedSol: false,
+ currency,
+ };
+};
+
+/**
+ * Convert a ReadApi asset's data into standard Metaplex `Metadata`
+ */
+export const toMetadataFromReadApiAsset = (input: ReadApiAsset): Metadata => {
+ const updateAuthority = input.authorities?.find((authority) => authority.scopes.includes('full'));
+
+ const collection = input.grouping.find(({ group_key }) => group_key === 'collection');
+
+ return {
+ model: 'metadata',
+ /**
+ * We technically don't have a metadata address anymore.
+ * So we are using the asset's id as the address
+ */
+ address: Pda.find(BUBBLEGUM_PROGRAM_ID, [
+ Buffer.from('asset', 'utf-8'),
+ new PublicKey(input.compression.tree).toBuffer(),
+ Uint8Array.from(new BN(input.compression.leaf_id).toArray('le', 8)),
+ ]),
+ mintAddress: new PublicKey(input.id),
+ updateAuthorityAddress: new PublicKey(updateAuthority?.address),
+
+ name: input.content.metadata?.name ?? '',
+ symbol: input.content.metadata?.symbol ?? '',
+
+ json: input.content.metadata,
+ jsonLoaded: true,
+ uri: input.content.json_uri,
+ isMutable: input.mutable,
+
+ primarySaleHappened: input.royalty.primary_sale_happened,
+ sellerFeeBasisPoints: input.royalty.basis_points,
+ creators: input.creators,
+
+ editionNonce: input.supply.edition_nonce,
+ tokenStandard: TokenStandard.NonFungible,
+
+ collection: collection ? { address: new PublicKey(collection.group_value), verified: false } : null,
+
+ // Current regular `Metadata` does not currently have a `compression` value
+ // @ts-ignore
+ compression: input.compression,
+
+ // Read API doesn't return this info, yet
+ collectionDetails: null,
+ // Read API doesn't return this info, yet
+ uses: null,
+ // Read API doesn't return this info, yet
+ programmableConfig: null,
+ };
+};
+
+/**
+ * Wrapper class to add additional methods on top the standard Connection from `@solana/web3.js`
+ * Specifically, adding the RPC methods used by the Digital Asset Standards (DAS) ReadApi
+ * for state compression and compressed NFTs
+ */
+export class WrapperConnection extends Connection {
+ private callReadApi = async (
+ jsonRpcParams: JsonRpcParams,
+ ): Promise> => {
+ const response = await fetch(this.rpcEndpoint, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ jsonrpc: '2.0',
+ method: jsonRpcParams.method,
+ id: jsonRpcParams.id ?? 'rpd-op-123',
+ params: jsonRpcParams.params,
+ }),
+ });
+
+ return (await response.json()) as JsonRpcOutput;
+ };
+
+ // Asset id can be calculated via Bubblegum#getLeafAssetId
+ // It is a PDA with the following seeds: ["asset", tree, leafIndex]
+ async getAsset(assetId: PublicKey): Promise {
+ const { result: asset } = await this.callReadApi({
+ method: 'getAsset',
+ params: {
+ id: assetId.toBase58(),
+ },
+ });
+
+ if (!asset) throw new ReadApiError('No asset returned');
+
+ return asset;
+ }
+
+ // Asset id can be calculated via Bubblegum#getLeafAssetId
+ // It is a PDA with the following seeds: ["asset", tree, leafIndex]
+ async getAssetProof(assetId: PublicKey): Promise {
+ const { result: proof } = await this.callReadApi({
+ method: 'getAssetProof',
+ params: {
+ id: assetId.toBase58(),
+ },
+ });
+
+ if (!proof) throw new ReadApiError('No asset proof returned');
+
+ return proof;
+ }
+
+ //
+ async getAssetsByGroup({ groupKey, groupValue, page, limit, sortBy, before, after }: GetAssetsByGroupRpcInput): Promise {
+ // `page` cannot be supplied with `before` or `after`
+ if (typeof page === 'number' && (before || after)) throw new ReadApiError('Pagination Error. Only one pagination parameter supported per query.');
+
+ // a pagination method MUST be selected, but we are defaulting to using `page=0`
+
+ const { result } = await this.callReadApi({
+ method: 'getAssetsByGroup',
+ params: {
+ groupKey,
+ groupValue,
+ after: after ?? null,
+ before: before ?? null,
+ limit: limit ?? null,
+ page: page ?? 1,
+ sortBy: sortBy ?? null,
+ },
+ });
+
+ if (!result) throw new ReadApiError('No results returned');
+
+ return result;
+ }
+
+ //
+ async getAssetsByOwner({ ownerAddress, page, limit, sortBy, before, after }: GetAssetsByOwnerRpcInput): Promise {
+ // `page` cannot be supplied with `before` or `after`
+ if (typeof page === 'number' && (before || after)) throw new ReadApiError('Pagination Error. Only one pagination parameter supported per query.');
+
+ // a pagination method MUST be selected, but we are defaulting to using `page=0`
+
+ const { result } = await this.callReadApi({
+ method: 'getAssetsByOwner',
+ params: {
+ ownerAddress,
+ after: after ?? null,
+ before: before ?? null,
+ limit: limit ?? null,
+ page: page ?? 1,
+ sortBy: sortBy ?? null,
+ },
+ });
+
+ if (!result) throw new ReadApiError('No results returned');
+
+ return result;
+ }
+}
diff --git a/compression/cnft-burn/anchor/tests/ReadApi/types.ts b/compression/cnft-burn/anchor/tests/ReadApi/types.ts
new file mode 100644
index 000000000..a49e40fb0
--- /dev/null
+++ b/compression/cnft-burn/anchor/tests/ReadApi/types.ts
@@ -0,0 +1,175 @@
+/*
+ Types specific to the ReadApi
+*/
+
+import type { Metadata, Option } from '@metaplex-foundation/js';
+import type { ConcurrentMerkleTreeAccount } from '@solana/spl-account-compression';
+
+export type ReadApiAssetInterface =
+ | 'V1_NFT'
+ | 'V1_PRINT'
+ | 'LEGACY_NFT'
+ | 'V2_NFT'
+ | 'FungibleAsset'
+ | 'Custom'
+ | 'Identity'
+ | 'Executable'
+ | 'ProgrammableNFT';
+
+export type ReadApiPropGroupKey = 'collection';
+
+export type ReadApiPropSortBy = 'created' | 'updated' | 'recent_action';
+
+export type ReadApiPropSortDirection = 'asc' | 'desc';
+
+export type TransferNftCompressionParam = {
+ ownership?: ReadApiOwnershipMetadata;
+ data?: ReadApiCompressionMetadata;
+ assetProof?: GetAssetProofRpcResponse;
+ merkleTree?: ConcurrentMerkleTreeAccount;
+};
+
+export type ReadApiParamAssetSortBy = {
+ sortBy: ReadApiPropSortBy;
+ sortDirection: ReadApiPropSortDirection;
+};
+
+export type ReadApiAssetContent = {
+ json_uri: string;
+ metadata: Metadata['json'];
+};
+
+export type ReadApiCompressionMetadata = {
+ eligible: boolean;
+ compressed: boolean;
+ data_hash: string;
+ creator_hash: string;
+ asset_hash: string;
+ tree: string;
+ seq: number;
+ leaf_id: number;
+};
+
+export type ReadApiOwnershipMetadata = {
+ frozen: boolean;
+ delegated: boolean;
+ delegate: string | null;
+ owner: string;
+ ownership_model: 'single' | 'token';
+};
+
+export type ReadApiAssetSupplyMetadata = {
+ edition_nonce: number;
+ print_current_supply: number;
+ print_max_supply: number;
+};
+
+export type ReadApiAssetRoyaltyMetadata = {
+ primary_sale_happened: boolean;
+ basis_points: number;
+};
+
+export type ReadApiAssetGrouping = {
+ group_key: ReadApiPropGroupKey;
+ group_value: string;
+};
+
+export type ReadApiAuthorityScope = 'full';
+
+export type ReadApiAssetAuthority = {
+ address: string;
+ scopes: ReadApiAuthorityScope[];
+};
+
+export type GetAssetRpcInput = {
+ id: string;
+};
+
+export type GetAssetProofRpcInput = {
+ id: string;
+};
+
+export type GetAssetProofRpcResponse = {
+ root: string;
+ proof: string[];
+ node_index: number;
+ leaf: string;
+ tree_id: string;
+};
+
+export type GetAssetsByGroupRpcInput = {
+ groupKey: ReadApiPropGroupKey;
+ groupValue: string;
+ page?: Option;
+ limit?: Option;
+ /* assetId to search before */
+ before?: Option;
+ /* assetId to search after */
+ after?: Option;
+ sortBy?: Option;
+};
+
+export type GetAssetsByOwnerRpcInput = {
+ /**
+ * String of the owner's PublicKey address
+ */
+ ownerAddress: string;
+ page?: Option;
+ limit?: Option;
+ before?: Option;
+ after?: Option;
+ sortBy?: Option;
+};
+
+export type ReadApiAsset = {
+ /**
+ * The asset Id
+ */
+ id: string;
+ interface: ReadApiAssetInterface;
+ ownership: ReadApiOwnershipMetadata;
+ mutable: boolean;
+ authorities: Array;
+ content: ReadApiAssetContent;
+ royalty: ReadApiAssetRoyaltyMetadata;
+ supply: ReadApiAssetSupplyMetadata;
+ creators: Metadata['creators'];
+ grouping: Array;
+ compression: ReadApiCompressionMetadata;
+};
+
+export type ReadApiAssetList = {
+ total: number;
+ limit: number;
+
+ /**
+ * listing of individual assets, and their associated metadata
+ */
+ items: Array;
+
+ /**
+ * `page` is only provided when using page based pagination, as apposed
+ * to asset id before/after based pagination
+ */
+ page: Option;
+
+ /**
+ * asset Id searching before
+ */
+ before: Option;
+
+ /**
+ * asset Id searching after
+ */
+ after: Option;
+
+ /**
+ * listing of errors provided by the ReadApi RPC
+ */
+ errors: Option;
+};
+
+export type ReadApiRpcResponseError = {
+ error: string;
+ id: string;
+};
diff --git a/compression/cnft-burn/anchor/tests/cnft-burn.ts b/compression/cnft-burn/anchor/tests/cnft-burn.ts
new file mode 100644
index 000000000..2d43a3188
--- /dev/null
+++ b/compression/cnft-burn/anchor/tests/cnft-burn.ts
@@ -0,0 +1,69 @@
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum';
+import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression';
+import type { CnftBurn } from '../target/types/cnft_burn';
+import { createAndMint } from './createAndMint';
+import { getcNFTsFromCollection } from './fetchNFTsByCollection';
+import { getAsset, getAssetProof } from './readApi';
+import { decode, mapProof } from './utils';
+
+// Replace this with your custom RPC endpoint that supports cNFT indexing
+const RPC_PATH = 'https://api.devnet.solana.com/';
+
+describe('cnft-burn', () => {
+ // Configure the client to use the local cluster.
+ anchor.setProvider(anchor.AnchorProvider.env());
+
+ const program = anchor.workspace.CnftBurn as Program;
+ const provider = anchor.AnchorProvider.env();
+ const payerWallet = provider.wallet as anchor.Wallet;
+
+ let treeAddress: anchor.web3.PublicKey | undefined = undefined;
+ const MPL_BUBBLEGUM_PROGRAM_ID_KEY = new anchor.web3.PublicKey(BUBBLEGUM_PROGRAM_ID);
+
+ // this is the assetId of the cNft you want to burn
+ let assetId = '';
+
+ it('Should create the tree and mint a cnft', async () => {
+ const { tree, collection } = await createAndMint();
+ if (!tree.treeAddress) {
+ throw new Error('Tree address not found');
+ }
+ treeAddress = tree.treeAddress;
+
+ const fetchcNFTs = await getcNFTsFromCollection(collection.mint, payerWallet.publicKey.toString());
+ console.log('fetchcNFTs', fetchcNFTs);
+ assetId = fetchcNFTs[0];
+ });
+ it('Burn cNft!', async () => {
+ const asset = await getAsset(assetId);
+
+ const proof = await getAssetProof(assetId);
+ const proofPathAsAccounts = mapProof(proof);
+ const root = decode(proof.root);
+ const dataHash = decode(asset.compression.data_hash);
+ const creatorHash = decode(asset.compression.creator_hash);
+ const nonce = new anchor.BN(asset.compression.leaf_id);
+ const index = asset.compression.leaf_id;
+ const [treeAuthority, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([treeAddress.toBuffer()], MPL_BUBBLEGUM_PROGRAM_ID_KEY);
+ const tx = await program.methods
+ .burnCnft(root, dataHash, creatorHash, nonce, index)
+ .accounts({
+ merkleTree: treeAddress,
+ leafOwner: payerWallet.publicKey,
+ treeAuthority: treeAuthority,
+ bubblegumProgram: BUBBLEGUM_PROGRAM_ID,
+ compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
+ logWrapper: SPL_NOOP_PROGRAM_ID,
+ systemProgram: anchor.web3.SystemProgram.programId,
+ })
+ .remainingAccounts(proofPathAsAccounts)
+ .rpc({
+ skipPreflight: true,
+ });
+ console.log('Your transaction signature', tx);
+ // here is a sample transaction signature on devnet
+ // https://explorer.solana.com/tx/2MpeHi64pbWNY7BKBuhAp4yND5HdfQqNqkd8pu6F6meoSNUYRvxQgV5TC4w8BM8hUihB8G8TwBAaPRqS7pnN8Nu1?cluster=devnet
+ });
+});
diff --git a/compression/cnft-burn/anchor/tests/createAndMint.ts b/compression/cnft-burn/anchor/tests/createAndMint.ts
new file mode 100644
index 000000000..3ca701cd2
--- /dev/null
+++ b/compression/cnft-burn/anchor/tests/createAndMint.ts
@@ -0,0 +1,162 @@
+/**
+ Overall flow of this script
+ - load or create two keypairs (named `payer` and `testWallet`)
+ - create a new tree with enough space to mint all the nft's you want for the "collection"
+ - create a new NFT Collection on chain (using the usual Metaplex methods)
+ - mint a single compressed nft into the tree to the `payer`
+ - mint a single compressed nft into the tree to the `testWallet`
+ - display the overall cost to perform all these actions
+
+ ---
+ NOTE: this script is identical to the `scripts/verboseCreateAndMint.ts` file, except THIS file has
+ less console logging and explanation of what is occurring
+*/
+
+import { type MetadataArgs, TokenProgramVersion, TokenStandard } from '@metaplex-foundation/mpl-bubblegum';
+import { Keypair, LAMPORTS_PER_SOL, clusterApiUrl } from '@solana/web3.js';
+// import custom helpers to mint compressed NFTs
+import { createCollection, createTree, mintCompressedNFT } from './utils/compression';
+// import custom helpers for demos
+import { loadKeypairFromFile, numberFormatter } from './utils/helpers';
+
+import * as anchor from '@coral-xyz/anchor';
+import type { CreateMetadataAccountArgsV3 } from '@metaplex-foundation/mpl-token-metadata';
+import type { ValidDepthSizePair } from '@solana/spl-account-compression';
+// local import of the connection wrapper, to help with using the ReadApi
+import { WrapperConnection } from './ReadApi/WrapperConnection';
+import { RPC_PATH } from './cnft-burn';
+
+// define some reusable balance values for tracking
+let initBalance: number;
+let balance: number;
+
+export async function createAndMint() {
+ //////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////
+
+ // load it locally from the filesystem when available
+ anchor.setProvider(anchor.AnchorProvider.env());
+ const provider = anchor.AnchorProvider.env();
+ const payerWallet = provider.wallet as anchor.Wallet;
+ const payer = payerWallet.payer;
+
+ console.log('Payer address:', payer.publicKey.toBase58());
+
+ //////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////
+
+ // load the env variables and store the cluster RPC url
+ const CLUSTER_URL = RPC_PATH;
+
+ // create a new rpc connection, using the ReadApi wrapper
+ const connection = new WrapperConnection(CLUSTER_URL, 'confirmed');
+
+ // get the payer's starting balance (only used for demonstration purposes)
+ initBalance = await connection.getBalance(payer.publicKey);
+
+ //////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////
+
+ /*
+ Define our tree size parameters
+ */
+ const maxDepthSizePair: ValidDepthSizePair = {
+ // max=16,384 nodes
+ maxDepth: 14,
+ maxBufferSize: 64,
+ };
+ const canopyDepth = maxDepthSizePair.maxDepth - 5;
+
+ /*
+ Actually allocate the tree on chain
+ */
+
+ // define the address the tree will live at
+ const treeKeypair = Keypair.generate();
+
+ // create and send the transaction to create the tree on chain
+ const tree = await createTree(connection, payer, treeKeypair, maxDepthSizePair, canopyDepth);
+
+ /*
+ Create the actual NFT collection (using the normal Metaplex method)
+ (nothing special about compression here)
+ */
+
+ // define the metadata to be used for creating the NFT collection
+ const collectionMetadataV3: CreateMetadataAccountArgsV3 = {
+ data: {
+ name: 'Test Burn',
+ symbol: 'TB',
+ // specific json metadata for the collection
+ uri: 'https://supersweetcollection.notarealurl/collection.json',
+ sellerFeeBasisPoints: 100,
+ creators: [
+ {
+ address: payer.publicKey,
+ verified: false,
+ share: 100,
+ },
+ ],
+ collection: null,
+ uses: null,
+ },
+ isMutable: false,
+ collectionDetails: null,
+ };
+
+ // create a full token mint and initialize the collection (with the `payer` as the authority)
+ const collection = await createCollection(connection, payer, collectionMetadataV3);
+
+ /*
+ Mint a single compressed NFT
+ */
+
+ const compressedNFTMetadata: MetadataArgs = {
+ name: 'Pratik test',
+ symbol: collectionMetadataV3.data.symbol,
+ // specific json metadata for each NFT
+ uri: 'https://bafkreies5r7b5eszpq5dgnw2brhjtlw7xtdtmsmoniebqehf37nv5rxajy.ipfs.nftstorage.link/',
+ creators: [
+ {
+ address: payer.publicKey,
+ verified: false,
+ share: 100,
+ },
+ ],
+ editionNonce: 0,
+ uses: null,
+ collection: null,
+ primarySaleHappened: false,
+ sellerFeeBasisPoints: 0,
+ isMutable: false,
+ // these values are taken from the Bubblegum package
+ tokenProgramVersion: TokenProgramVersion.Original,
+ tokenStandard: TokenStandard.NonFungible,
+ };
+
+ // fully mint a single compressed NFT to the payer
+ console.log(`Minting a single compressed NFT to ${payer.publicKey.toBase58()}...`);
+
+ await mintCompressedNFT(
+ connection,
+ payer,
+ treeKeypair.publicKey,
+ collection.mint,
+ collection.metadataAccount,
+ collection.masterEditionAccount,
+ compressedNFTMetadata,
+ // mint to this specific wallet (in this case, the tree owner aka `payer`)
+ payer.publicKey,
+ );
+
+ //////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////
+
+ // fetch the payer's final balance
+ balance = await connection.getBalance(payer.publicKey);
+
+ console.log('===============================');
+ console.log('Total cost:', numberFormatter((initBalance - balance) / LAMPORTS_PER_SOL, true), 'SOL\n');
+
+ return { tree, collection };
+}
diff --git a/compression/cnft-burn/anchor/tests/fetchNFTsByCollection.ts b/compression/cnft-burn/anchor/tests/fetchNFTsByCollection.ts
new file mode 100644
index 000000000..66b9bb958
--- /dev/null
+++ b/compression/cnft-burn/anchor/tests/fetchNFTsByCollection.ts
@@ -0,0 +1,74 @@
+/**
+ * Demonstrate the use of a few of the Metaplex Read API methods,
+ * (needed to fetch compressed NFTs)
+ */
+
+// imports from other libraries
+import type { PublicKey } from '@solana/web3.js';
+// import custom helpers for demos
+import { printConsoleSeparator } from './utils/helpers';
+
+// local import of the connection wrapper, to help with using the ReadApi
+import { WrapperConnection } from './ReadApi/WrapperConnection';
+import { RPC_PATH } from './cnft-burn';
+
+export async function getcNFTsFromCollection(collectionMint: PublicKey, owner: string) {
+ // load the stored PublicKeys for ease of use
+ // let keys = loadPublicKeysFromFile();
+
+ // ensure the primary script was already run
+ // if (!keys?.collectionMint)
+ // return console.warn("No local keys were found, specifically `collectionMint`");
+
+ // convert the locally saved keys to PublicKeys
+ // const collectionMint: PublicKey = keys.collectionMint;
+
+ console.log('Collection mint:', collectionMint.toBase58());
+
+ //////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////
+
+ // load the env variables and store the cluster RPC url
+ const CLUSTER_URL = RPC_PATH;
+
+ // create a new rpc connection, using the ReadApi wrapper
+ const connection = new WrapperConnection(CLUSTER_URL);
+
+ printConsoleSeparator("Getting all assets by the 'collection' group...");
+
+ const assets = await connection
+ .getAssetsByGroup({
+ groupKey: 'collection',
+ groupValue: collectionMint.toBase58(),
+ sortBy: {
+ sortBy: 'recent_action',
+ sortDirection: 'asc',
+ },
+ })
+ .then((res) => {
+ console.log('Total assets returned:', res.total);
+
+ // loop over each of the asset items in the collection
+ const assetsIds = res.items?.map((asset) => {
+ // display a spacer between each of the assets
+ console.log('\n===============================================');
+
+ // print the entire asset record to the console
+ // console.log(asset);
+
+ // print some useful info
+ console.log('assetId:', asset.id);
+ console.log('ownership:', asset.ownership);
+ console.log('compression:', asset.compression);
+
+ if (asset.ownership?.owner === owner) {
+ console.log('assetId:', asset.id);
+ return asset.id;
+ }
+ });
+
+ return assetsIds;
+ });
+
+ return assets;
+}
diff --git a/compression/cnft-burn/anchor/tests/readApi.ts b/compression/cnft-burn/anchor/tests/readApi.ts
new file mode 100644
index 000000000..0ee382850
--- /dev/null
+++ b/compression/cnft-burn/anchor/tests/readApi.ts
@@ -0,0 +1,46 @@
+// I recommend using a WrappedConnection for production
+// as it supports more readAPI functionality
+// this is just a subset of functions for quick availabiity
+
+import axios from 'axios';
+import { RPC_PATH } from './cnft-burn';
+
+// you might want to change that to your custom RPC endpoint as this endpoint is not going to work as it does not support DAS
+
+export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise {
+ try {
+ const axiosInstance = axios.create({
+ baseURL: rpcUrl,
+ });
+ const response = await axiosInstance.post(rpcUrl, {
+ jsonrpc: '2.0',
+ method: 'getAsset',
+ id: 'rpd-op-123',
+ params: {
+ id: assetId,
+ },
+ });
+ return response.data.result;
+ } catch (error) {
+ console.error(error);
+ }
+}
+
+export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise {
+ try {
+ const axiosInstance = axios.create({
+ baseURL: rpcUrl,
+ });
+ const response = await axiosInstance.post(rpcUrl, {
+ jsonrpc: '2.0',
+ method: 'getAssetProof',
+ id: 'rpd-op-123',
+ params: {
+ id: assetId,
+ },
+ });
+ return response.data.result;
+ } catch (error) {
+ console.error(error);
+ }
+}
diff --git a/compression/cnft-burn/anchor/tests/utils.ts b/compression/cnft-burn/anchor/tests/utils.ts
new file mode 100644
index 000000000..45c4ed230
--- /dev/null
+++ b/compression/cnft-burn/anchor/tests/utils.ts
@@ -0,0 +1,38 @@
+import {
+ type AccountMeta,
+ Connection,
+ Keypair,
+ PublicKey,
+ Signer,
+ TransactionInstruction,
+ TransactionMessage,
+ VersionedTransaction,
+} from '@solana/web3.js';
+
+import * as bs58 from 'bs58';
+
+export function loadWalletKey(keypairFile: string): Keypair {
+ const fs = require('node:fs');
+ return Keypair.fromSecretKey(new Uint8Array(JSON.parse(fs.readFileSync(keypairFile).toString())));
+}
+
+export function decode(stuff: string) {
+ return bufferToArray(bs58.decode(stuff));
+}
+function bufferToArray(buffer: Buffer): number[] {
+ const nums: number[] = [];
+ for (let i = 0; i < buffer.length; i++) {
+ nums.push(buffer[i]);
+ }
+ return nums;
+}
+export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => {
+ if (!assetProof.proof || assetProof.proof.length === 0) {
+ throw new Error('Proof is empty');
+ }
+ return assetProof.proof.map((node) => ({
+ pubkey: new PublicKey(node),
+ isSigner: false,
+ isWritable: false,
+ }));
+};
diff --git a/compression/cnft-burn/anchor/tests/utils/compression.ts b/compression/cnft-burn/anchor/tests/utils/compression.ts
new file mode 100644
index 000000000..eb1dcfcd3
--- /dev/null
+++ b/compression/cnft-burn/anchor/tests/utils/compression.ts
@@ -0,0 +1,345 @@
+import {
+ PROGRAM_ID as BUBBLEGUM_PROGRAM_ID,
+ type MetadataArgs,
+ computeCreatorHash,
+ computeDataHash,
+ createCreateTreeInstruction,
+ createMintToCollectionV1Instruction,
+} from '@metaplex-foundation/mpl-bubblegum';
+import {
+ type CreateMetadataAccountArgsV3,
+ PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID,
+ createCreateMasterEditionV3Instruction,
+ createCreateMetadataAccountV3Instruction,
+ createSetCollectionSizeInstruction,
+} from '@metaplex-foundation/mpl-token-metadata';
+import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID, type ValidDepthSizePair, createAllocTreeIx } from '@solana/spl-account-compression';
+import { TOKEN_PROGRAM_ID, createAccount, createMint, mintTo } from '@solana/spl-token';
+import { type Connection, type Keypair, PublicKey, Transaction, type TransactionInstruction, sendAndConfirmTransaction } from '@solana/web3.js';
+
+// import local helper functions
+import { explorerURL, extractSignatureFromFailedTransaction } from './helpers';
+
+/*
+ Helper function to create a merkle tree on chain, including allocating
+ all the space required to store all the nodes
+*/
+export async function createTree(
+ connection: Connection,
+ payer: Keypair,
+ treeKeypair: Keypair,
+ maxDepthSizePair: ValidDepthSizePair,
+ canopyDepth = 0,
+) {
+ console.log('Creating a new Merkle tree...');
+ console.log('treeAddress:', treeKeypair.publicKey.toBase58());
+
+ // derive the tree's authority (PDA), owned by Bubblegum
+ const [treeAuthority, _bump] = PublicKey.findProgramAddressSync([treeKeypair.publicKey.toBuffer()], BUBBLEGUM_PROGRAM_ID);
+ console.log('treeAuthority:', treeAuthority.toBase58());
+
+ // allocate the tree's account on chain with the `space`
+ // NOTE: this will compute the space needed to store the tree on chain (and the lamports required to store it)
+ const allocTreeIx = await createAllocTreeIx(connection, treeKeypair.publicKey, payer.publicKey, maxDepthSizePair, canopyDepth);
+
+ // create the instruction to actually create the tree
+ const createTreeIx = createCreateTreeInstruction(
+ {
+ payer: payer.publicKey,
+ treeCreator: payer.publicKey,
+ treeAuthority,
+ merkleTree: treeKeypair.publicKey,
+ compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
+ // NOTE: this is used for some on chain logging
+ logWrapper: SPL_NOOP_PROGRAM_ID,
+ },
+ {
+ maxBufferSize: maxDepthSizePair.maxBufferSize,
+ maxDepth: maxDepthSizePair.maxDepth,
+ public: false,
+ },
+ BUBBLEGUM_PROGRAM_ID,
+ );
+
+ try {
+ // create and send the transaction to initialize the tree
+ const tx = new Transaction().add(allocTreeIx).add(createTreeIx);
+ tx.feePayer = payer.publicKey;
+
+ // send the transaction
+ const txSignature = await sendAndConfirmTransaction(
+ connection,
+ tx,
+ // ensuring the `treeKeypair` PDA and the `payer` are BOTH signers
+ [treeKeypair, payer],
+ {
+ commitment: 'confirmed',
+ skipPreflight: true,
+ },
+ );
+
+ console.log('\nMerkle tree created successfully!');
+ console.log(explorerURL({ txSignature }));
+
+ // return useful info
+ return { treeAuthority, treeAddress: treeKeypair.publicKey };
+ } catch (err: any) {
+ console.error('\nFailed to create merkle tree:', err);
+
+ // log a block explorer link for the failed transaction
+ await extractSignatureFromFailedTransaction(connection, err);
+
+ throw err;
+ }
+}
+
+/**
+ * Create an NFT collection on-chain, using the regular Metaplex standards
+ * with the `payer` as the authority
+ */
+export async function createCollection(connection: Connection, payer: Keypair, metadataV3: CreateMetadataAccountArgsV3) {
+ // create and initialize the SPL token mint
+ console.log("Creating the collection's mint...");
+ const mint = await createMint(
+ connection,
+ payer,
+ // mint authority
+ payer.publicKey,
+ // freeze authority
+ payer.publicKey,
+ // decimals - use `0` for NFTs since they are non-fungible
+ 0,
+ );
+ console.log('Mint address:', mint.toBase58());
+
+ // create the token account
+ console.log('Creating a token account...');
+ const tokenAccount = await createAccount(
+ connection,
+ payer,
+ mint,
+ payer.publicKey,
+ // undefined, undefined,
+ );
+ console.log('Token account:', tokenAccount.toBase58());
+
+ // mint 1 token ()
+ console.log('Minting 1 token for the collection...');
+ const mintSig = await mintTo(
+ connection,
+ payer,
+ mint,
+ tokenAccount,
+ payer,
+ // mint exactly 1 token
+ 1,
+ // no `multiSigners`
+ [],
+ undefined,
+ TOKEN_PROGRAM_ID,
+ );
+ // console.log(explorerURL({ txSignature: mintSig }));
+
+ // derive the PDA for the metadata account
+ const [metadataAccount, _bump] = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ );
+ console.log('Metadata account:', metadataAccount.toBase58());
+
+ // create an instruction to create the metadata account
+ const createMetadataIx = createCreateMetadataAccountV3Instruction(
+ {
+ metadata: metadataAccount,
+ mint: mint,
+ mintAuthority: payer.publicKey,
+ payer: payer.publicKey,
+ updateAuthority: payer.publicKey,
+ },
+ {
+ createMetadataAccountArgsV3: metadataV3,
+ },
+ );
+
+ // derive the PDA for the metadata account
+ const [masterEditionAccount, _bump2] = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer(), Buffer.from('edition', 'utf8')],
+ TOKEN_METADATA_PROGRAM_ID,
+ );
+ console.log('Master edition account:', masterEditionAccount.toBase58());
+
+ // create an instruction to create the metadata account
+ const createMasterEditionIx = createCreateMasterEditionV3Instruction(
+ {
+ edition: masterEditionAccount,
+ mint: mint,
+ mintAuthority: payer.publicKey,
+ payer: payer.publicKey,
+ updateAuthority: payer.publicKey,
+ metadata: metadataAccount,
+ },
+ {
+ createMasterEditionArgs: {
+ maxSupply: 0,
+ },
+ },
+ );
+
+ // create the collection size instruction
+ const collectionSizeIX = createSetCollectionSizeInstruction(
+ {
+ collectionMetadata: metadataAccount,
+ collectionAuthority: payer.publicKey,
+ collectionMint: mint,
+ },
+ {
+ setCollectionSizeArgs: { size: 50 },
+ },
+ );
+
+ try {
+ // construct the transaction with our instructions, making the `payer` the `feePayer`
+ const tx = new Transaction().add(createMetadataIx).add(createMasterEditionIx).add(collectionSizeIX);
+ tx.feePayer = payer.publicKey;
+
+ // send the transaction to the cluster
+ const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], {
+ commitment: 'confirmed',
+ skipPreflight: true,
+ });
+
+ console.log('\nCollection successfully created!');
+ console.log(explorerURL({ txSignature }));
+ } catch (err) {
+ console.error('\nFailed to create collection:', err);
+
+ // log a block explorer link for the failed transaction
+ await extractSignatureFromFailedTransaction(connection, err);
+
+ throw err;
+ }
+
+ // return all the accounts
+ return { mint, tokenAccount, metadataAccount, masterEditionAccount };
+}
+
+/**
+ * Mint a single compressed NFTs to any address
+ */
+export async function mintCompressedNFT(
+ connection: Connection,
+ payer: Keypair,
+ treeAddress: PublicKey,
+ collectionMint: PublicKey,
+ collectionMetadata: PublicKey,
+ collectionMasterEditionAccount: PublicKey,
+ compressedNFTMetadata: MetadataArgs,
+ receiverAddress?: PublicKey,
+) {
+ // derive the tree's authority (PDA), owned by Bubblegum
+ const [treeAuthority, _bump] = PublicKey.findProgramAddressSync([treeAddress.toBuffer()], BUBBLEGUM_PROGRAM_ID);
+
+ // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting
+ const [bubblegumSigner, _bump2] = PublicKey.findProgramAddressSync(
+ // `collection_cpi` is a custom prefix required by the Bubblegum program
+ [Buffer.from('collection_cpi', 'utf8')],
+ BUBBLEGUM_PROGRAM_ID,
+ );
+
+ // create an array of instruction, to mint multiple compressed NFTs at once
+ const mintIxs: TransactionInstruction[] = [];
+
+ /**
+ * correctly format the metadata args for the nft to mint
+ * ---
+ * note: minting an nft into a collection (via `createMintToCollectionV1Instruction`)
+ * will auto verify the collection. But, the `collection.verified` value inside the
+ * `metadataArgs` must be set to `false` in order for the instruction to succeed
+ */
+ const metadataArgs = Object.assign(compressedNFTMetadata, {
+ collection: { key: collectionMint, verified: false },
+ });
+
+ /**
+ * compute the data and creator hash for display in the console
+ *
+ * note: this is not required to do in order to mint new compressed nfts
+ * (since it is performed on chain via the Bubblegum program)
+ * this is only for demonstration
+ */
+ const computedDataHash = new PublicKey(computeDataHash(metadataArgs)).toBase58();
+ const computedCreatorHash = new PublicKey(computeCreatorHash(metadataArgs.creators)).toBase58();
+ console.log('computedDataHash:', computedDataHash);
+ console.log('computedCreatorHash:', computedCreatorHash);
+
+ /*
+ Add a single mint to collection instruction
+ ---
+ But you could all multiple in the same transaction, as long as your
+ transaction is still within the byte size limits
+ */
+ mintIxs.push(
+ createMintToCollectionV1Instruction(
+ {
+ payer: payer.publicKey,
+
+ merkleTree: treeAddress,
+ treeAuthority,
+ treeDelegate: payer.publicKey,
+
+ // set the receiver of the NFT
+ leafOwner: receiverAddress || payer.publicKey,
+ // set a delegated authority over this NFT
+ leafDelegate: payer.publicKey,
+
+ /*
+ You can set any delegate address at mint, otherwise should
+ normally be the same as `leafOwner`
+ NOTE: the delegate will be auto cleared upon NFT transfer
+ ---
+ in this case, we are setting the payer as the delegate
+ */
+
+ // collection details
+ collectionAuthority: payer.publicKey,
+ collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID,
+ collectionMint: collectionMint,
+ collectionMetadata: collectionMetadata,
+ editionAccount: collectionMasterEditionAccount,
+
+ // other accounts
+ compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
+ logWrapper: SPL_NOOP_PROGRAM_ID,
+ bubblegumSigner: bubblegumSigner,
+ tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
+ },
+ {
+ metadataArgs,
+ },
+ ),
+ );
+
+ try {
+ // construct the transaction with our instructions, making the `payer` the `feePayer`
+ const tx = new Transaction().add(...mintIxs);
+ tx.feePayer = payer.publicKey;
+
+ // send the transaction to the cluster
+ const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], {
+ commitment: 'confirmed',
+ skipPreflight: true,
+ });
+
+ console.log('\nSuccessfully minted the compressed NFT!');
+ console.log(explorerURL({ txSignature }));
+
+ return txSignature;
+ } catch (err) {
+ console.error('\nFailed to mint compressed NFT:', err);
+
+ // log a block explorer link for the failed transaction
+ await extractSignatureFromFailedTransaction(connection, err);
+
+ throw err;
+ }
+}
diff --git a/compression/cnft-burn/anchor/tests/utils/helpers.ts b/compression/cnft-burn/anchor/tests/utils/helpers.ts
new file mode 100644
index 000000000..ee291480c
--- /dev/null
+++ b/compression/cnft-burn/anchor/tests/utils/helpers.ts
@@ -0,0 +1,261 @@
+import fs from 'node:fs';
+import path from 'node:path';
+import { type Connection, Keypair, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
+
+// define some default locations
+const DEFAULT_KEY_DIR_NAME = '.local_keys';
+const DEFAULT_PUBLIC_KEY_FILE = 'keys.json';
+const DEFAULT_DEMO_DATA_FILE = 'demo.json';
+
+/*
+ Load locally stored PublicKey addresses
+ TODO: use the helpers library and delete this function
+*/
+export function loadPublicKeysFromFile(absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`) {
+ try {
+ if (!absPath) throw Error('No path provided');
+ if (!fs.existsSync(absPath)) throw Error('File does not exist.');
+
+ // load the public keys from the file
+ const data = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })) || {};
+
+ // convert all loaded keyed values into valid public keys
+ for (const [key, value] of Object.entries(data)) {
+ data[key] = new PublicKey(value as string) ?? '';
+ }
+
+ return data;
+ } catch (err) {
+ console.warn('Unable to load local file');
+ }
+ // always return an object
+ return {};
+}
+
+/*
+ Locally save a demo data to the filesystem for later retrieval
+*/
+export function saveDemoDataToFile(name: string, newData: any, absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_DEMO_DATA_FILE}`) {
+ try {
+ let data: object = {};
+
+ // fetch all the current values, when the storage file exists
+ if (fs.existsSync(absPath)) data = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })) || {};
+
+ data = { ...data, [name]: newData };
+
+ // actually save the data to the file
+ fs.writeFileSync(absPath, JSON.stringify(data), {
+ encoding: 'utf-8',
+ });
+
+ return data;
+ } catch (err) {
+ console.warn('Unable to save to file');
+ console.warn(err);
+ }
+
+ // always return an object
+ return {};
+}
+
+/*
+ Locally save a PublicKey addresses to the filesystem for later retrieval
+*/
+export function savePublicKeyToFile(name: string, publicKey: PublicKey, absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`) {
+ try {
+ // if (!absPath) throw Error("No path provided");
+ // if (!fs.existsSync(absPath)) throw Error("File does not exist.");
+
+ // fetch all the current values
+ let data: any = loadPublicKeysFromFile(absPath);
+
+ // convert all loaded keyed values from PublicKeys to strings
+ for (const [key, value] of Object.entries(data)) {
+ data[key as any] = (value as PublicKey).toBase58();
+ }
+ data = { ...data, [name]: publicKey.toBase58() };
+
+ // actually save the data to the file
+ fs.writeFileSync(absPath, JSON.stringify(data), {
+ encoding: 'utf-8',
+ });
+
+ // reload the keys for sanity
+ data = loadPublicKeysFromFile(absPath);
+
+ return data;
+ } catch (err) {
+ console.warn('Unable to save to file');
+ }
+ // always return an object
+ return {};
+}
+
+/*
+ Load a locally stored JSON keypair file and convert it to a valid Keypair
+*/
+export function loadKeypairFromFile(absPath: string) {
+ try {
+ if (!absPath) throw Error('No path provided');
+ if (!fs.existsSync(absPath)) throw Error('File does not exist.');
+
+ // load the keypair from the file
+ const keyfileBytes = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' }));
+ // parse the loaded secretKey into a valid keypair
+ const keypair = Keypair.fromSecretKey(new Uint8Array(keyfileBytes));
+ return keypair;
+ } catch (err) {
+ console.error('loadKeypairFromFile:', err);
+ throw err;
+ }
+}
+
+/*
+ Save a locally stored JSON keypair file for later importing
+ TODO: delete this function and use the helpers library
+*/
+export function saveKeypairToFile(keypair: Keypair, relativeFileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) {
+ const fileName = path.join(dirName, `${relativeFileName}.json`);
+
+ // create the `dirName` directory, if it does not exists
+ if (!fs.existsSync(`./${dirName}/`)) fs.mkdirSync(`./${dirName}/`);
+
+ // remove the current file, if it already exists
+ if (fs.existsSync(fileName)) fs.unlinkSync(fileName);
+
+ // write the `secretKey` value as a string
+ fs.writeFileSync(fileName, `[${keypair.secretKey.toString()}]`, {
+ encoding: 'utf-8',
+ });
+
+ return fileName;
+}
+
+/*
+ Attempt to load a keypair from the filesystem, or generate and save a new one
+*/
+export function loadOrGenerateKeypair(fileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) {
+ try {
+ // compute the path to locate the file
+ const searchPath = path.join(dirName, `${fileName}.json`);
+ let keypair = Keypair.generate();
+
+ // attempt to load the keypair from the file
+ if (fs.existsSync(searchPath)) keypair = loadKeypairFromFile(searchPath);
+ // when unable to locate the keypair, save the new one
+ else saveKeypairToFile(keypair, fileName, dirName);
+
+ return keypair;
+ } catch (err) {
+ console.error('loadOrGenerateKeypair:', err);
+ throw err;
+ }
+}
+
+/*
+ Compute the Solana explorer address for the various data
+*/
+export function explorerURL({
+ address,
+ txSignature,
+ cluster,
+}: {
+ address?: string;
+ txSignature?: string;
+ cluster?: 'devnet' | 'testnet' | 'mainnet' | 'mainnet-beta';
+}) {
+ let baseUrl: string;
+ //
+ if (address) baseUrl = `https://explorer.solana.com/address/${address}`;
+ else if (txSignature) baseUrl = `https://explorer.solana.com/tx/${txSignature}`;
+ else return '[unknown]';
+
+ // auto append the desired search params
+ const url = new URL(baseUrl);
+ url.searchParams.append('cluster', cluster || 'devnet');
+ return `${url.toString()}\n`;
+}
+
+/**
+ * Auto airdrop the given wallet of of a balance of < 0.5 SOL
+ */
+export async function airdropOnLowBalance(connection: Connection, keypair: Keypair, forceAirdrop = false) {
+ // get the current balance
+ const balance = await connection.getBalance(keypair.publicKey);
+
+ // define the low balance threshold before airdrop
+ const MIN_BALANCE_TO_AIRDROP = LAMPORTS_PER_SOL / 2; // current: 0.5 SOL
+
+ // check the balance of the two accounts, airdrop when low
+ if (forceAirdrop === true || balance < MIN_BALANCE_TO_AIRDROP) {
+ console.log(`Requesting airdrop of 1 SOL to ${keypair.publicKey.toBase58()}...`);
+ await connection.requestAirdrop(keypair.publicKey, LAMPORTS_PER_SOL).then((sig) => {
+ console.log('Tx signature:', sig);
+ // balance = balance + LAMPORTS_PER_SOL;
+ });
+
+ // fetch the new balance
+ // const newBalance = await connection.getBalance(keypair.publicKey);
+ // return newBalance;
+ }
+ // else console.log("Balance of:", balance / LAMPORTS_PER_SOL, "SOL");
+
+ return balance;
+}
+
+/*
+ Helper function to extract a transaction signature from a failed transaction's error message
+*/
+export async function extractSignatureFromFailedTransaction(connection: Connection, err: any, fetchLogs?: boolean) {
+ if (err?.signature) return err.signature;
+
+ // extract the failed transaction's signature
+ const failedSig = new RegExp(/^((.*)?Error: )?(Transaction|Signature) ([A-Z0-9]{32,}) /gim).exec(err?.message?.toString())?.[4];
+
+ // ensure a signature was found
+ if (failedSig) {
+ // when desired, attempt to fetch the program logs from the cluster
+ if (fetchLogs)
+ await connection
+ .getTransaction(failedSig, {
+ maxSupportedTransactionVersion: 0,
+ })
+ .then((tx) => {
+ console.log(`\n==== Transaction logs for ${failedSig} ====`);
+ console.log(explorerURL({ txSignature: failedSig }), '');
+ console.log(tx?.meta?.logMessages ?? 'No log messages provided by RPC');
+ console.log('==== END LOGS ====\n');
+ });
+ else {
+ console.log('\n========================================');
+ console.log(explorerURL({ txSignature: failedSig }));
+ console.log('========================================\n');
+ }
+ }
+
+ // always return the failed signature value
+ return failedSig;
+}
+
+/*
+ Standard number formatter
+*/
+export function numberFormatter(num: number, forceDecimals = false) {
+ // set the significant figures
+ const minimumFractionDigits = num < 1 || forceDecimals ? 10 : 2;
+
+ // do the formatting
+ return new Intl.NumberFormat(undefined, {
+ minimumFractionDigits,
+ }).format(num);
+}
+
+/*
+ Display a separator in the console, with our without a message
+*/
+export function printConsoleSeparator(message?: string) {
+ console.log('\n===============================================');
+ console.log('===============================================\n');
+ if (message) console.log(message);
+}
diff --git a/compression/cnft-burn/anchor/tsconfig.json b/compression/cnft-burn/anchor/tsconfig.json
new file mode 100644
index 000000000..cd5d2e3d0
--- /dev/null
+++ b/compression/cnft-burn/anchor/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/compression/cnft-solang/.gitignore b/compression/cnft-solang/.gitignore
deleted file mode 100644
index 8d401163f..000000000
--- a/compression/cnft-solang/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-
-.anchor
-.DS_Store
-target
-**/*.rs.bk
-node_modules
-test-ledger
-.yarn
diff --git a/compression/cnft-solang/Anchor.toml b/compression/cnft-solang/Anchor.toml
deleted file mode 100644
index 3f5080f88..000000000
--- a/compression/cnft-solang/Anchor.toml
+++ /dev/null
@@ -1,30 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.devnet]
-compressed_nft = "BhDH6TLEnf4dLq9hLn2gLwm5rJdj8Cbdc9ZrsjUpL7kB"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "devnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
-
-[test.validator]
-url = "https://api.mainnet-beta.solana.com/"
-
-[[test.validator.clone]]
-address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
-
-[[test.validator.clone]]
-address = "BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY"
-
-[[test.validator.clone]]
-address = "noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV"
-
-[[test.validator.clone]]
-address = "cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK"
\ No newline at end of file
diff --git a/compression/cnft-solang/app/.gitignore b/compression/cnft-solang/app/.gitignore
deleted file mode 100644
index eaaee160b..000000000
--- a/compression/cnft-solang/app/.gitignore
+++ /dev/null
@@ -1,37 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# local env files
-.env*.local
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
-
-package-lock.json
\ No newline at end of file
diff --git a/compression/cnft-solang/app/components/Confirmed.tsx b/compression/cnft-solang/app/components/Confirmed.tsx
deleted file mode 100644
index 4d4a2d74d..000000000
--- a/compression/cnft-solang/app/components/Confirmed.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { useEffect, useState } from "react"
-import { buildStyles, CircularProgressbar } from "react-circular-progressbar"
-import "react-circular-progressbar/dist/styles.css"
-
-const Confirmed = () => {
- const [percentage, setPercentage] = useState(0)
- const [text, setText] = useState("😋")
-
- useEffect(() => {
- const t1 = setTimeout(() => setPercentage(100), 100)
- const t2 = setTimeout(() => setText("✅"), 600)
-
- return () => {
- clearTimeout(t1)
- clearTimeout(t2)
- }
- }, [])
-
- return (
-
- )
-}
-
-export default Confirmed
diff --git a/compression/cnft-solang/app/components/QrCodeCnftMint.tsx b/compression/cnft-solang/app/components/QrCodeCnftMint.tsx
deleted file mode 100644
index dd24d976c..000000000
--- a/compression/cnft-solang/app/components/QrCodeCnftMint.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import { Button, Flex, VStack } from "@chakra-ui/react"
-import {
- createQR,
- encodeURL,
- findReference,
- FindReferenceError,
- TransactionRequestURLFields,
- ValidateTransferError,
-} from "@solana/pay"
-import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js"
-import { useEffect, useRef, useState } from "react"
-import Confirmed from "./Confirmed"
-
-interface Props {
- onClose: () => void
-}
-
-const QrModal = ({ onClose }: Props) => {
- const [confirmed, setConfirmed] = useState(false)
- const connection = new Connection(clusterApiUrl("devnet"))
- const qrRef = useRef(null)
- const [reference] = useState(Keypair.generate().publicKey)
-
- const [size, setSize] = useState(() =>
- typeof window === "undefined" ? 100 : Math.min(window.outerWidth - 10, 512)
- )
-
- useEffect(() => {
- const listener = () => setSize(Math.min(window.outerWidth - 10, 512))
- window.addEventListener("resize", listener)
- return () => window.removeEventListener("resize", listener)
- }, [])
-
- useEffect(() => {
- const { location } = window
- const params = new URLSearchParams()
- params.append("reference", reference.toString())
-
- const apiUrl = `${location.protocol}//${
- location.host
- }/api/mintCnft?${params.toString()}`
- const urlParams: TransactionRequestURLFields = {
- link: new URL(apiUrl),
- label: "Label",
- message: "Message",
- }
- const solanaUrl = encodeURL(urlParams)
- console.log(solanaUrl)
- const qr = createQR(solanaUrl, size, "white")
- if (qrRef.current) {
- qrRef.current.innerHTML = ""
- qr.append(qrRef.current)
- }
- }, [window, size, reference])
-
- useEffect(() => {
- const interval = setInterval(async () => {
- try {
- const signatureInfo = await findReference(connection, reference, {
- finality: "confirmed",
- })
- setConfirmed(true)
- } catch (e) {
- if (e instanceof FindReferenceError) return
- if (e instanceof ValidateTransferError) {
- console.error("Transaction is invalid", e)
- return
- }
- console.error("Unknown error", e)
- }
- }, 500)
- return () => {
- clearInterval(interval)
- setConfirmed(false)
- }
- }, [reference.toString()])
-
- return (
-
- {confirmed ? (
-
-
-
- ) : (
-
- )}
-
-
- )
-}
-
-export default QrModal
diff --git a/compression/cnft-solang/app/idl/compressed_nft.ts b/compression/cnft-solang/app/idl/compressed_nft.ts
deleted file mode 100644
index 9fe4786e4..000000000
--- a/compression/cnft-solang/app/idl/compressed_nft.ts
+++ /dev/null
@@ -1,175 +0,0 @@
-export type CompressedNft = {
- version: "0.3.1";
- name: "compressed_nft";
- instructions: [
- {
- name: "new";
- accounts: [
- {
- name: "dataAccount";
- isMut: true;
- isSigner: false;
- isOptional: false;
- },
- {
- name: "payer";
- isMut: true;
- isSigner: true;
- isOptional: false;
- },
- {
- name: "systemProgram";
- isMut: false;
- isSigner: false;
- isOptional: false;
- }
- ];
- args: [
- {
- name: "bump";
- type: {
- array: ["u8", 1];
- };
- }
- ];
- },
- {
- name: "mint";
- accounts: [
- {
- name: "dataAccount";
- isMut: true;
- isSigner: false;
- isOptional: false;
- },
- {
- name: "systemProgram";
- isMut: false;
- isSigner: false;
- isOptional: false;
- }
- ];
- args: [
- {
- name: "treeAuthority";
- type: "publicKey";
- },
- {
- name: "leafOwner";
- type: "publicKey";
- },
- {
- name: "leafDelegate";
- type: "publicKey";
- },
- {
- name: "merkleTree";
- type: "publicKey";
- },
- {
- name: "payer";
- type: "publicKey";
- },
- {
- name: "treeDelegate";
- type: "publicKey";
- },
- {
- name: "uri";
- type: "string";
- }
- ];
- }
- ];
- metadata: {
- address: "BhDH6TLEnf4dLq9hLn2gLwm5rJdj8Cbdc9ZrsjUpL7kB";
- };
-};
-
-export const IDL: CompressedNft = {
- version: "0.3.1",
- name: "compressed_nft",
- instructions: [
- {
- name: "new",
- accounts: [
- {
- name: "dataAccount",
- isMut: true,
- isSigner: false,
- isOptional: false,
- },
- {
- name: "payer",
- isMut: true,
- isSigner: true,
- isOptional: false,
- },
- {
- name: "systemProgram",
- isMut: false,
- isSigner: false,
- isOptional: false,
- },
- ],
- args: [
- {
- name: "bump",
- type: {
- array: ["u8", 1],
- },
- },
- ],
- },
- {
- name: "mint",
- accounts: [
- {
- name: "dataAccount",
- isMut: true,
- isSigner: false,
- isOptional: false,
- },
- {
- name: "systemProgram",
- isMut: false,
- isSigner: false,
- isOptional: false,
- },
- ],
- args: [
- {
- name: "treeAuthority",
- type: "publicKey",
- },
- {
- name: "leafOwner",
- type: "publicKey",
- },
- {
- name: "leafDelegate",
- type: "publicKey",
- },
- {
- name: "merkleTree",
- type: "publicKey",
- },
- {
- name: "payer",
- type: "publicKey",
- },
- {
- name: "treeDelegate",
- type: "publicKey",
- },
- {
- name: "uri",
- type: "string",
- },
- ],
- },
- ],
- metadata: {
- address: "BhDH6TLEnf4dLq9hLn2gLwm5rJdj8Cbdc9ZrsjUpL7kB",
- },
-};
diff --git a/compression/cnft-solang/app/next.config.js b/compression/cnft-solang/app/next.config.js
deleted file mode 100644
index a843cbee0..000000000
--- a/compression/cnft-solang/app/next.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/** @type {import('next').NextConfig} */
-const nextConfig = {
- reactStrictMode: true,
-}
-
-module.exports = nextConfig
diff --git a/compression/cnft-solang/app/package.json b/compression/cnft-solang/app/package.json
deleted file mode 100644
index b08b2090e..000000000
--- a/compression/cnft-solang/app/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "wallet-adapter-chakraui-nextjs",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start",
- "lint": "next lint"
- },
- "dependencies": {
- "@chakra-ui/next-js": "^2.1.3",
- "@chakra-ui/react": "^2.6.1",
- "@emotion/react": "^11.11.0",
- "@emotion/styled": "^11.11.0",
- "@metaplex-foundation/mpl-bubblegum": "^0.7.0",
- "@solana/pay": "^0.2.5",
- "@solana/spl-account-compression": "^0.1.8",
- "@solana/wallet-adapter-base": "^0.9.22",
- "@solana/wallet-adapter-react": "^0.15.32",
- "@solana/wallet-adapter-react-ui": "^0.9.31",
- "@solana/wallet-adapter-wallets": "^0.19.16",
- "@solana/web3.js": "^1.77.1",
- "@types/node": "20.2.5",
- "@types/react": "18.2.7",
- "@types/react-dom": "18.2.4",
- "eslint": "8.41.0",
- "eslint-config-next": "13.4.4",
- "framer-motion": "^10.12.16",
- "next": "13.4.4",
- "react": "18.2.0",
- "react-circular-progressbar": "^2.1.0",
- "react-dom": "18.2.0",
- "typescript": "5.0.4"
- }
-}
diff --git a/compression/cnft-solang/app/pages/_app.tsx b/compression/cnft-solang/app/pages/_app.tsx
deleted file mode 100644
index 7ed4d84de..000000000
--- a/compression/cnft-solang/app/pages/_app.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { ChakraProvider } from "@chakra-ui/react"
-import WalletContextProvider from "../contexts/WalletContextProvider"
-import type { AppProps } from "next/app"
-
-export default function App({ Component, pageProps }: AppProps) {
- return (
-
-
-
-
-
- )
-}
diff --git a/compression/cnft-solang/app/pages/api/mintCnft.ts b/compression/cnft-solang/app/pages/api/mintCnft.ts
deleted file mode 100644
index b5d4e450b..000000000
--- a/compression/cnft-solang/app/pages/api/mintCnft.ts
+++ /dev/null
@@ -1,145 +0,0 @@
-import { NextApiRequest, NextApiResponse } from "next"
-import { PublicKey, SystemProgram, Transaction } from "@solana/web3.js"
-import {
- SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- SPL_NOOP_PROGRAM_ID,
-} from "@solana/spl-account-compression"
-import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum"
-import { program, connection, treeAddress } from "@/utils/setup"
-import { uris } from "@/utils/uri"
-
-function get(res: NextApiResponse) {
- res.status(200).json({
- label: "My Store",
- icon: "https://solana.com/src/img/branding/solanaLogoMark.svg",
- })
-}
-
-async function post(req: NextApiRequest, res: NextApiResponse) {
- const { account } = req.body
- const { reference } = req.query
-
- if (!account || !reference) {
- res.status(400).json({
- error: "Required data missing. Account or reference not provided.",
- })
- return
- }
-
- try {
- const transaction = await buildTransaction(
- new PublicKey(account),
- new PublicKey(reference)
- )
- res.status(200).json({
- transaction,
- message: "Please approve the transaction to mint your NFT!",
- })
- } catch (error) {
- console.error(error)
- res.status(500).json({ error: "error creating transaction" })
- return
- }
-}
-
-async function buildTransaction(account: PublicKey, reference: PublicKey) {
- // Required solang dataAccount, even though we're not using it.
- const [dataAccount] = PublicKey.findProgramAddressSync(
- [Buffer.from("seed")],
- program.programId
- )
-
- // tree authority
- const [treeAuthority] = PublicKey.findProgramAddressSync(
- [treeAddress.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- )
-
- // Randomly select a uri.
- const randomUri = uris[Math.floor(Math.random() * uris.length)]
-
- // Initialize the dataAccount.
- const instruction = await program.methods
- .mint(
- treeAuthority, // treeAuthority
- account, // leafOwner
- account, // leafDelegate
- treeAddress, // merkleTree
- account, // payer
- account, // treeDelegate, public tree (no delegate check, just require signer)
- randomUri // uri
- )
- .accounts({ dataAccount: dataAccount })
- .remainingAccounts([
- {
- pubkey: account,
- isWritable: true,
- isSigner: true,
- },
- {
- pubkey: treeAuthority,
- isWritable: true,
- isSigner: false,
- },
- {
- pubkey: treeAddress,
- isWritable: true,
- isSigner: false,
- },
- {
- pubkey: SPL_NOOP_PROGRAM_ID,
- isWritable: false,
- isSigner: false,
- },
- {
- pubkey: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- isWritable: false,
- isSigner: false,
- },
- {
- pubkey: BUBBLEGUM_PROGRAM_ID,
- isWritable: false,
- isSigner: false,
- },
- {
- pubkey: SystemProgram.programId,
- isWritable: false,
- isSigner: false,
- },
- ])
- .instruction()
-
- // Add the reference account to the instruction
- // Used in client to find the transaction once sent
- instruction.keys.push({
- pubkey: reference,
- isSigner: false,
- isWritable: false,
- })
-
- const latestBlockhash = await connection.getLatestBlockhash()
-
- // create new Transaction and add instruction
- const transaction = new Transaction({
- feePayer: account,
- blockhash: latestBlockhash.blockhash,
- lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,
- }).add(instruction)
-
- return transaction
- .serialize({ requireAllSignatures: false })
- .toString("base64")
-}
-
-export default async function handler(
- req: NextApiRequest,
- res: NextApiResponse
-) {
- if (req.method === "GET") {
- return get(res)
- } else if (req.method === "POST") {
- return await post(req, res)
- } else {
- return res.status(405).json({ error: "Method not allowed" })
- }
-}
diff --git a/compression/cnft-solang/app/pages/index.tsx b/compression/cnft-solang/app/pages/index.tsx
deleted file mode 100644
index 6359d4358..000000000
--- a/compression/cnft-solang/app/pages/index.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import {
- Box,
- Button,
- Flex,
- Spacer,
- VStack,
- useDisclosure,
-} from "@chakra-ui/react"
-import WalletMultiButton from "@/components/WalletMultiButton"
-import QrModal from "@/components/QrCodeCnftMint"
-export default function Home() {
- const { isOpen, onOpen, onClose } = useDisclosure()
- return (
-
-
-
-
-
-
-
- {isOpen && }
-
-
- )
-}
diff --git a/compression/cnft-solang/app/public/favicon.ico b/compression/cnft-solang/app/public/favicon.ico
deleted file mode 100644
index 718d6fea4..000000000
Binary files a/compression/cnft-solang/app/public/favicon.ico and /dev/null differ
diff --git a/compression/cnft-solang/app/utils/setup.ts b/compression/cnft-solang/app/utils/setup.ts
deleted file mode 100644
index 2d56cfcce..000000000
--- a/compression/cnft-solang/app/utils/setup.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Program, Idl } from "@coral-xyz/anchor";
-import { IDL, CompressedNft } from "../idl/compressed_nft";
-import { clusterApiUrl, Connection, PublicKey } from "@solana/web3.js";
-
-export const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
-
-const programId = IDL.metadata.address;
-
-export const program = new Program(IDL as Idl, programId, {
- connection,
-}) as unknown as Program;
-
-export const treeAddress = new PublicKey(
- "FYwZ4rMtexsHBTx2aCnQRVg51K5WXZJ1n3SYacXFvado"
-);
diff --git a/compression/cnft-solang/app/utils/uri.ts b/compression/cnft-solang/app/utils/uri.ts
deleted file mode 100644
index 784a64846..000000000
--- a/compression/cnft-solang/app/utils/uri.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export const uris = [
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/40_183_132/40_183_132.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/12_217_47/12_217_47.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/255_68_196/255_68_196.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/156_61_27/156_61_27.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/32_150_152/32_150_152.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/78_96_197/78_96_197.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/38_47_11/38_47_11.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/190_85_238/190_85_238.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/69_46_192/69_46_192.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/142_17_9/142_17_9.json",
-]
diff --git a/compression/cnft-solang/migrations/deploy.ts b/compression/cnft-solang/migrations/deploy.ts
deleted file mode 100644
index 82fb175fa..000000000
--- a/compression/cnft-solang/migrations/deploy.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-// Migrations are an early feature. Currently, they're nothing more than this
-// single deploy script that's invoked from the CLI, injecting a provider
-// configured from the workspace's Anchor.toml.
-
-const anchor = require("@coral-xyz/anchor");
-
-module.exports = async function (provider) {
- // Configure client to use the provider.
- anchor.setProvider(provider);
-
- // Add your deploy script here.
-};
diff --git a/compression/cnft-solang/package.json b/compression/cnft-solang/package.json
deleted file mode 100644
index aeb0fc69d..000000000
--- a/compression/cnft-solang/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0",
- "@metaplex-foundation/mpl-bubblegum": "^0.7.0",
- "@solana/spl-account-compression": "^0.1.8"
- },
- "devDependencies": {
- "@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"
- }
-}
diff --git a/compression/cnft-solang/solidity/compressed-nft.sol b/compression/cnft-solang/solidity/compressed-nft.sol
deleted file mode 100644
index 50abb5f48..000000000
--- a/compression/cnft-solang/solidity/compressed-nft.sol
+++ /dev/null
@@ -1,144 +0,0 @@
-
-import "solana";
-
-@program_id("BhDH6TLEnf4dLq9hLn2gLwm5rJdj8Cbdc9ZrsjUpL7kB")
-contract compressed_nft {
-
- @payer(payer) // payer address
- @seed("seed") // hardcoded seed
- constructor(
- @bump bytes1 bump // bump seed for pda address
- ) {
- // Creating a dataAccount for the program, which is required by Solang
- // However, this account is not used in the program
- }
-
- // Mint a compressed NFT to an existing merkle tree, via a cross-program invocation to the Bubblegum program
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/lib.rs#L922
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/lib.rs#L67
- function mint(
- address tree_authority, // authority of the merkle tree
- address leaf_owner, // owner of the new compressed NFT
- address leaf_delegate, // delegate of the new compressed NFT (can be the same as leaf_owner)
- address merkle_tree, // address of the merkle tree
- address payer, // payer
- address tree_delegate, // delegate of the merkle tree
- string uri // uri of the new compressed NFT (metadata)
- ) public {
- print("Minting Compressed NFT");
-
- // Create a creator array with a single creator
- Creator[] memory creators = new Creator[](1);
- // Set the creator to the payer
- creators[0] = Creator({
- creatorAddress: payer,
- verified: false,
- share: 100
- });
-
- // Create the metadata args, representing the metadata of the new compressed NFT
- // Solidity does not support optional arguments,
- // So we have to explicitly declare if the optional arguments are present or not
- // If not present, we comment them out, otherwise the transaction will fail with a invalid instruction data error
- MetadataArgs memory args = MetadataArgs({
- name: "RGB",
- symbol: "RGB",
- uri: uri,
- sellerFeeBasisPoints: 0,
- primarySaleHappened: false,
- isMutable: true,
- editionNoncePresent: false,
- // editionNonce: 0,
- tokenStandardPresent: true,
- tokenStandard: TokenStandard.NonFungible,
- collectionPresent: false,
- // collection: Collection({
- // verified: false,
- // key: address(0)
- // }),
- usesPresent: false,
- // uses: Uses({
- // useMethod: UseMethod.Burn,
- // remaining: 0,
- // total: 0
- // }),
- tokenProgramVersion: TokenProgramVersion.Original,
- creators: creators
- });
-
- AccountMeta[9] metas = [
- AccountMeta({pubkey: tree_authority, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: leaf_owner, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: leaf_delegate, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: merkle_tree, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: payer, is_writable: true, is_signer: true}),
- AccountMeta({pubkey: tree_delegate, is_writable: true, is_signer: true}),
- AccountMeta({pubkey: address"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV", is_writable: false, is_signer: false}),
- AccountMeta({pubkey: address"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK", is_writable: false, is_signer: false}),
- AccountMeta({pubkey: address"11111111111111111111111111111111", is_writable: false, is_signer: false})
- ];
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/js/src/generated/instructions/mintV1.ts#L64
- bytes8 discriminator = 0x9162c076b8937668;
- bytes instructionData = abi.encode(discriminator, args);
-
- // Invoking the Bubblegum program
- address'BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY'.call{accounts: metas}(instructionData);
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L81
- struct MetadataArgs {
- string name;
- string symbol;
- string uri;
- uint16 sellerFeeBasisPoints;
- bool primarySaleHappened;
- bool isMutable;
- bool editionNoncePresent;
- // uint8 editionNonce;
- bool tokenStandardPresent;
- TokenStandard tokenStandard;
- bool collectionPresent;
- // Collection collection;
- bool usesPresent;
- // Uses uses;
- TokenProgramVersion tokenProgramVersion;
- Creator[] creators;
- }
-
- enum TokenStandard {
- NonFungible,
- FungibleAsset,
- Fungible,
- NonFungibleEdition
- }
-
- enum TokenProgramVersion {
- Original,
- Token2022
- }
-
- struct Creator {
- address creatorAddress;
- bool verified;
- uint8 share;
- }
-
- struct Collection {
- bool verified;
- address key;
- }
-
- struct Uses {
- UseMethod useMethod;
- uint64 remaining;
- uint64 total;
- }
-
- enum UseMethod {
- Burn,
- Multiple,
- Single
- }
-
-}
diff --git a/compression/cnft-solang/tests/compressed-nft.ts b/compression/cnft-solang/tests/compressed-nft.ts
deleted file mode 100644
index 2f18be41a..000000000
--- a/compression/cnft-solang/tests/compressed-nft.ts
+++ /dev/null
@@ -1,188 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program, Wallet } from "@coral-xyz/anchor";
-import { CompressedNft } from "../target/types/compressed_nft";
-import {
- PublicKey,
- SystemProgram,
- Transaction,
- Keypair,
- sendAndConfirmTransaction,
-} from "@solana/web3.js";
-import {
- SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- ValidDepthSizePair,
- SPL_NOOP_PROGRAM_ID,
- createAllocTreeIx,
-} from "@solana/spl-account-compression";
-import {
- PROGRAM_ID as BUBBLEGUM_PROGRAM_ID,
- createCreateTreeInstruction,
-} from "@metaplex-foundation/mpl-bubblegum";
-import { uris } from "../utils/uri";
-
-describe("compressed-nft", () => {
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- const wallet = provider.wallet as Wallet;
- const connection = provider.connection;
-
- const program = anchor.workspace.CompressedNft as Program;
-
- // Generate a new keypair for the merkle tree.
- const treeKeypair = Keypair.generate();
-
- // Derive the PDA that will be the tree authority.
- // This is required by the bubblegum program.
- const [treeAuthority] = PublicKey.findProgramAddressSync(
- [treeKeypair.publicKey.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
-
- // Derive the PDA that will be used to initialize the dataAccount.
- // Required by Solang even though we're not using it.
- const [dataAccount, bump] = PublicKey.findProgramAddressSync(
- [Buffer.from("seed")],
- program.programId
- );
-
- // Create a merkle tree account.
- before(async () => {
- // Maximum depth and buffer size for the merkle tree.
- // 2^maxDepth determines the maximum number of leaves that can be stored in the tree.
- // maxBufferSize determines maximum concurrent updates that can be made within one slot.
- const maxDepthSizePair: ValidDepthSizePair = {
- maxDepth: 14,
- maxBufferSize: 64,
- };
-
- // Depth of the canopy (how much of the tree is stored on-chain)
- const canopyDepth = 0;
-
- // Instruction to create an account with enough space to store the merkle tree.
- const allocTreeIx = await createAllocTreeIx(
- connection,
- treeKeypair.publicKey,
- wallet.publicKey,
- maxDepthSizePair,
- canopyDepth
- );
-
- // Instruction to initialize the merkle tree account with the bubblegum program.
- const createTreeIx = createCreateTreeInstruction(
- {
- treeAuthority,
- merkleTree: treeKeypair.publicKey,
- payer: wallet.publicKey,
- treeCreator: wallet.publicKey,
- logWrapper: SPL_NOOP_PROGRAM_ID,
- compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- },
- {
- maxBufferSize: maxDepthSizePair.maxBufferSize,
- maxDepth: maxDepthSizePair.maxDepth,
- public: true, // creating a "public" tree, so anyone can mint cnfts to it
- },
- BUBBLEGUM_PROGRAM_ID
- );
-
- try {
- const tx = new Transaction().add(allocTreeIx, createTreeIx);
- tx.feePayer = wallet.publicKey;
-
- const txSignature = await sendAndConfirmTransaction(
- connection,
- tx,
- [treeKeypair, wallet.payer],
- {
- commitment: "confirmed",
- skipPreflight: true,
- }
- );
-
- console.log(
- `https://explorer.solana.com/tx/${txSignature}?cluster=devnet`
- );
-
- console.log("Tree Address:", treeKeypair.publicKey.toBase58());
- } catch (err: any) {
- console.error("\nFailed to create merkle tree:", err);
- throw err;
- }
-
- console.log("\n");
- });
-
- it("Is initialized!", async () => {
- // Initialize the dataAccount.
- const tx = await program.methods
- .new([bump])
- .accounts({ dataAccount: dataAccount })
- .rpc();
- console.log("Your transaction signature", tx);
- });
-
- it("Mint Compressed NFT", async () => {
- // Mint a compressed nft to random receiver.
- const receiver = Keypair.generate().publicKey;
-
- // Use a random uri (off-chain metadata) from the list for the test.
- const randomUri = uris[Math.floor(Math.random() * uris.length)];
-
- const tx = await program.methods
- .mint(
- treeAuthority, // treeAuthority
- receiver, // leafOwner
- receiver, // leafDelegate
- treeKeypair.publicKey, // merkleTree
- wallet.publicKey, // payer
- wallet.publicKey, // treeDelegate
- randomUri // uri
- )
- .accounts({ dataAccount: dataAccount }) // dataAccount required by Solang even though its unused.
- .remainingAccounts([
- {
- pubkey: wallet.publicKey, // payer (and tree delegate in this example)
- isWritable: true,
- isSigner: true,
- },
- {
- pubkey: receiver, // new leaf owner
- isWritable: false,
- isSigner: false,
- },
- {
- pubkey: treeAuthority, // tree authority
- isWritable: true,
- isSigner: false,
- },
- {
- pubkey: treeKeypair.publicKey, // tree account address
- isWritable: true,
- isSigner: false,
- },
- {
- pubkey: SPL_NOOP_PROGRAM_ID,
- isWritable: false,
- isSigner: false,
- },
- {
- pubkey: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- isWritable: false,
- isSigner: false,
- },
- {
- pubkey: BUBBLEGUM_PROGRAM_ID,
- isWritable: false,
- isSigner: false,
- },
- {
- pubkey: SystemProgram.programId,
- isWritable: false,
- isSigner: false,
- },
- ])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
- });
-});
diff --git a/compression/cnft-solang/tsconfig.json b/compression/cnft-solang/tsconfig.json
deleted file mode 100644
index 558b83e5e..000000000
--- a/compression/cnft-solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
- }
-
\ No newline at end of file
diff --git a/compression/cnft-solang/utils/uri.ts b/compression/cnft-solang/utils/uri.ts
deleted file mode 100644
index 784a64846..000000000
--- a/compression/cnft-solang/utils/uri.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export const uris = [
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/40_183_132/40_183_132.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/12_217_47/12_217_47.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/255_68_196/255_68_196.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/156_61_27/156_61_27.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/32_150_152/32_150_152.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/78_96_197/78_96_197.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/38_47_11/38_47_11.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/190_85_238/190_85_238.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/69_46_192/69_46_192.json",
- "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/142_17_9/142_17_9.json",
-]
diff --git a/compression/cnft-vault/anchor/Anchor.toml b/compression/cnft-vault/anchor/Anchor.toml
index 7d4d71c6a..d52ad2b4c 100644
--- a/compression/cnft-vault/anchor/Anchor.toml
+++ b/compression/cnft-vault/anchor/Anchor.toml
@@ -12,4 +12,4 @@ cluster = "Devnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/compression/cnft-vault/anchor/Cargo.toml b/compression/cnft-vault/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/compression/cnft-vault/anchor/Cargo.toml
+++ b/compression/cnft-vault/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/compression/cnft-vault/anchor/package.json b/compression/cnft-vault/anchor/package.json
index fd19b2ee7..5349c0e41 100644
--- a/compression/cnft-vault/anchor/package.json
+++ b/compression/cnft-vault/anchor/package.json
@@ -4,7 +4,7 @@
"lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
},
"dependencies": {
- "@coral-xyz/anchor": "^0.28.0",
+ "@coral-xyz/anchor": "^0.30.0",
"@metaplex-foundation/mpl-bubblegum": "^0.6.2",
"@solana/spl-account-compression": "^0.1.8",
"axios": "^1.4.0"
diff --git a/compression/cnft-vault/anchor/pnpm-lock.yaml b/compression/cnft-vault/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..5c4f1d8b6
--- /dev/null
+++ b/compression/cnft-vault/anchor/pnpm-lock.yaml
@@ -0,0 +1,1993 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-bubblegum':
+ specifier: ^0.6.2
+ version: 0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/spl-account-compression':
+ specifier: ^0.1.8
+ version: 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ axios:
+ specifier: ^1.4.0
+ version: 1.7.2
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.24.6':
+ resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==}
+ engines: {node: '>=6.9.0'}
+
+ '@coral-xyz/anchor@0.30.0':
+ resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@metaplex-foundation/beet-solana@0.4.0':
+ resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==}
+
+ '@metaplex-foundation/beet-solana@0.4.1':
+ resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==}
+
+ '@metaplex-foundation/beet@0.7.1':
+ resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==}
+
+ '@metaplex-foundation/beet@0.7.2':
+ resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==}
+
+ '@metaplex-foundation/cusper@0.0.2':
+ resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==}
+
+ '@metaplex-foundation/mpl-bubblegum@0.6.2':
+ resolution: {integrity: sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0':
+ resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==}
+
+ '@noble/curves@1.4.0':
+ resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==}
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==}
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
+
+ '@solana/codecs-strings@2.0.0-preview.2':
+ resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+
+ '@solana/codecs@2.0.0-preview.2':
+ resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==}
+
+ '@solana/errors@2.0.0-preview.2':
+ resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
+ hasBin: true
+
+ '@solana/options@2.0.0-preview.2':
+ resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==}
+
+ '@solana/spl-account-compression@0.1.10':
+ resolution: {integrity: sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.50.1
+
+ '@solana/spl-token-metadata@0.1.4':
+ resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.1.8':
+ resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==}
+ engines: {node: '>= 10'}
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/spl-type-length-value@0.1.0':
+ resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+ engines: {node: '>=16'}
+
+ '@solana/web3.js@1.91.8':
+ resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.12':
+ resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansicolors@0.3.2:
+ resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assert@2.1.0:
+ resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ axios@1.7.2:
+ resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base-x@4.0.0:
+ resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@5.0.0:
+ resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ dot-case@3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+
+ dotenv@10.0.0:
+ resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==}
+ engines: {node: '>=10'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
+ form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-arguments@1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-nan@1.3.2:
+ resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+ engines: {node: '>= 0.4'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.0:
+ resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-sha3@0.8.0:
+ resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@7.11.0:
+ resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ snake-case@3.0.4:
+ resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript-collections@1.3.3:
+ resolution: {integrity: sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.24.6':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@noble/hashes': 1.4.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@metaplex-foundation/beet-solana@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet@0.7.1':
+ dependencies:
+ ansicolors: 0.3.2
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/beet@0.7.2':
+ dependencies:
+ ansicolors: 0.3.2
+ assert: 2.1.0
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/cusper@0.0.2': {}
+
+ '@metaplex-foundation/mpl-bubblegum@0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ js-sha3: 0.8.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@noble/curves@1.4.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+ fastestsmallesttextencoderdecoder: 1.0.22
+
+ '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-data-structures': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/options': 2.0.0-preview.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-preview.2':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+
+ '@solana/options@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+
+ '@solana/spl-account-compression@0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ js-sha3: 0.8.0
+ typescript-collections: 1.3.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token@0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.6
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer: 6.0.3
+ buffer-layout: 1.2.2
+ dotenv: 10.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - utf-8-validate
+
+ '@solana/spl-type-length-value@0.1.0':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.6
+ '@noble/curves': 1.4.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 7.11.0
+ superstruct: 0.14.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.12
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.12':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansicolors@0.3.2: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assert@2.1.0:
+ dependencies:
+ call-bind: 1.0.7
+ is-nan: 1.3.2
+ object-is: 1.1.6
+ object.assign: 4.1.5
+ util: 0.12.5
+
+ assertion-error@1.1.0: {}
+
+ asynckit@0.4.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
+ axios@1.7.2:
+ dependencies:
+ follow-redirects: 1.15.6
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.0
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ call-bind@1.0.7:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delay@5.0.0: {}
+
+ delayed-stream@1.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ dot-case@3.0.4:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.6.2
+
+ dotenv@10.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es-define-property@1.0.0:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ follow-redirects@1.15.6: {}
+
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ form-data@4.0.0:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-intrinsic@1.2.4:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ gopd@1.0.1:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.0
+
+ has-proto@1.0.3: {}
+
+ has-symbols@1.0.3: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.0.3
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-arguments@1.1.1:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-callable@1.2.7: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.0.10:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-nan@1.3.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-typed-array@1.1.13:
+ dependencies:
+ which-typed-array: 1.1.15
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-sha3@0.8.0: {}
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.6.2
+
+ make-error@1.3.6: {}
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ possible-typed-array-names@1.0.0: {}
+
+ prettier@2.8.8: {}
+
+ proxy-from-env@1.1.0: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@7.11.0:
+ dependencies:
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+
+ snake-case@3.0.4:
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.6.2
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.14.2: {}
+
+ superstruct@0.15.5: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript-collections@1.3.3: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.13
+ which-typed-array: 1.1.15
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-typed-array@1.1.15:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/compression/cnft-vault/anchor/programs/cnft-vault/Cargo.toml b/compression/cnft-vault/anchor/programs/cnft-vault/Cargo.toml
index efda79cf7..6a8b5211c 100644
--- a/compression/cnft-vault/anchor/programs/cnft-vault/Cargo.toml
+++ b/compression/cnft-vault/anchor/programs/cnft-vault/Cargo.toml
@@ -19,4 +19,4 @@ default = []
anchor-lang = "0.26.0"
solana-program = "1.14"
spl-account-compression = { version="0.1.8", features = ["cpi"] }
-mpl-bubblegum = { version = "0.7.0", features = ["no-entrypoint", "cpi"] }
+mpl-bubblegum = { version = "0.7.0", features = ["no-entrypoint", "cpi"] }
\ No newline at end of file
diff --git a/compression/cnft-vault/anchor/tests/readAPI.ts b/compression/cnft-vault/anchor/tests/readAPI.ts
index 1c5bfef59..070203f17 100644
--- a/compression/cnft-vault/anchor/tests/readAPI.ts
+++ b/compression/cnft-vault/anchor/tests/readAPI.ts
@@ -1,48 +1,46 @@
-// I recommend using a WrappedConnection for production
-// as it supports more readAPI functionality
-// this is just a subset of functions for quick availabiity
-
-import axios from "axios";
-
- // you might want to change that to your custom RPC
-const RPC_PATH = "https://rpc-devnet.aws.metaplex.com/";
-
-export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise {
- try {
- const axiosInstance = axios.create({
- baseURL: rpcUrl,
- });
- const response = await axiosInstance.post(rpcUrl, {
- jsonrpc: "2.0",
- method: "getAsset",
- id: "rpd-op-123",
- params: {
- id: assetId
- },
- });
- return response.data.result;
- } catch (error) {
- console.error(error);
- }
-}
-
-
-export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise {
- try {
-
- const axiosInstance = axios.create({
- baseURL: rpcUrl,
- });
- const response = await axiosInstance.post(rpcUrl, {
- jsonrpc: "2.0",
- method: "getAssetProof",
- id: "rpd-op-123",
- params: {
- id: assetId
- },
- });
- return response.data.result;
- } catch (error) {
- console.error(error);
- }
-}
\ No newline at end of file
+// I recommend using a WrappedConnection for production
+// as it supports more readAPI functionality
+// this is just a subset of functions for quick availabiity
+
+import axios from 'axios';
+
+// you might want to change that to your custom RPC
+const RPC_PATH = 'https://rpc-devnet.aws.metaplex.com/';
+
+export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise {
+ try {
+ const axiosInstance = axios.create({
+ baseURL: rpcUrl,
+ });
+ const response = await axiosInstance.post(rpcUrl, {
+ jsonrpc: '2.0',
+ method: 'getAsset',
+ id: 'rpd-op-123',
+ params: {
+ id: assetId,
+ },
+ });
+ return response.data.result;
+ } catch (error) {
+ console.error(error);
+ }
+}
+
+export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise {
+ try {
+ const axiosInstance = axios.create({
+ baseURL: rpcUrl,
+ });
+ const response = await axiosInstance.post(rpcUrl, {
+ jsonrpc: '2.0',
+ method: 'getAssetProof',
+ id: 'rpd-op-123',
+ params: {
+ id: assetId,
+ },
+ });
+ return response.data.result;
+ } catch (error) {
+ console.error(error);
+ }
+}
diff --git a/compression/cnft-vault/anchor/tests/scripts/constants.ts b/compression/cnft-vault/anchor/tests/scripts/constants.ts
index 4cbdbed1f..1cb9b9660 100644
--- a/compression/cnft-vault/anchor/tests/scripts/constants.ts
+++ b/compression/cnft-vault/anchor/tests/scripts/constants.ts
@@ -1,15 +1,11 @@
-import * as anchor from "@coral-xyz/anchor";
-import { CnftVault } from "../../target/types/cnft_vault";
-import { loadWalletKey } from "../utils";
-import { IDL } from "../../target/types/cnft_vault";
+import * as anchor from '@coral-xyz/anchor';
+import type { CnftVault } from '../../target/types/cnft_vault';
+import { IDL } from '../../target/types/cnft_vault';
+import { loadWalletKey } from '../utils';
-export const connection = new anchor.web3.Connection(
- "https://api.devnet.solana.com/"
-);
-export const keypair = loadWalletKey("~/.config/solana/id.json");
+export const connection = new anchor.web3.Connection('https://api.devnet.solana.com/');
+export const keypair = loadWalletKey('~/.config/solana/id.json');
export const wallet = new anchor.Wallet(keypair);
export const provider = new anchor.AnchorProvider(connection, wallet, {});
-export const programID = new anchor.web3.PublicKey(
- "CNftyK7T8udPwYRzZUMWzbh79rKrz9a5GwV2wv7iEHpk"
-);
+export const programID = new anchor.web3.PublicKey('CNftyK7T8udPwYRzZUMWzbh79rKrz9a5GwV2wv7iEHpk');
export const program = new anchor.Program(IDL, programID, provider);
diff --git a/compression/cnft-vault/anchor/tests/scripts/withdraw.ts b/compression/cnft-vault/anchor/tests/scripts/withdraw.ts
index 3dbe63ce4..389db2d23 100644
--- a/compression/cnft-vault/anchor/tests/scripts/withdraw.ts
+++ b/compression/cnft-vault/anchor/tests/scripts/withdraw.ts
@@ -1,34 +1,21 @@
-import * as anchor from "@coral-xyz/anchor";
-import { decode, mapProof } from "../utils";
-import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum";
-import {
- SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- SPL_NOOP_PROGRAM_ID,
-} from "@solana/spl-account-compression";
-import { getAsset, getAssetProof } from "../readAPI";
+import * as anchor from '@coral-xyz/anchor';
+import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum';
+import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression';
+import { getAsset, getAssetProof } from '../readAPI';
+import { decode, mapProof } from '../utils';
-import { program, programID } from "./constants";
+import { program, programID } from './constants';
async function main() {
- const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync(
- [Buffer.from("cNFT-vault", "utf8")],
- programID
- );
+ const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('cNFT-vault', 'utf8')], programID);
- const tree = new anchor.web3.PublicKey(
- "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B"
- );
+ const tree = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B');
- const receiver = new anchor.web3.PublicKey(
- "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM"
- );
+ const receiver = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM');
- const [treeAuthority, _bump2] = anchor.web3.PublicKey.findProgramAddressSync(
- [tree.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
+ const [treeAuthority, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree.toBuffer()], BUBBLEGUM_PROGRAM_ID);
- const assetId = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd";
+ const assetId = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd';
const asset = await getAsset(assetId);
// console.log(res)
diff --git a/compression/cnft-vault/anchor/tests/scripts/withdrawTwo.ts b/compression/cnft-vault/anchor/tests/scripts/withdrawTwo.ts
index d2b250038..089a31dad 100644
--- a/compression/cnft-vault/anchor/tests/scripts/withdrawTwo.ts
+++ b/compression/cnft-vault/anchor/tests/scripts/withdrawTwo.ts
@@ -1,48 +1,28 @@
-import * as anchor from "@coral-xyz/anchor";
-import { decode, mapProof } from "../utils";
-import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum";
-import {
- SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- SPL_NOOP_PROGRAM_ID,
-} from "@solana/spl-account-compression";
-import { getAsset, getAssetProof } from "../readAPI";
-import { AccountMeta } from "@solana/web3.js";
+import * as anchor from '@coral-xyz/anchor';
+import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum';
+import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression';
+import type { AccountMeta } from '@solana/web3.js';
+import { getAsset, getAssetProof } from '../readAPI';
+import { decode, mapProof } from '../utils';
-import { program, programID } from "./constants";
+import { program, programID } from './constants';
async function main() {
// TODO change all of these to your values
- const assetId1 = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd";
- const assetId2 = "14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg"; //"D2CoMLCRfsfv1EAiNbaBHfoU1Sqf1964KXLGxEfyUwWo";
+ const assetId1 = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd';
+ const assetId2 = '14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg'; //"D2CoMLCRfsfv1EAiNbaBHfoU1Sqf1964KXLGxEfyUwWo";
- const tree1 = new anchor.web3.PublicKey(
- "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B"
- );
- const tree2 = new anchor.web3.PublicKey(
- "Feywkti8LLBLfxhSGmYgzUBqpq89qehfB1SMTYV1zCu"
- );
+ const tree1 = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B');
+ const tree2 = new anchor.web3.PublicKey('Feywkti8LLBLfxhSGmYgzUBqpq89qehfB1SMTYV1zCu');
- const receiver1 = new anchor.web3.PublicKey(
- "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM"
- );
- const receiver2 = new anchor.web3.PublicKey(
- "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM"
- );
+ const receiver1 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM');
+ const receiver2 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM');
// ---
- const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync(
- [Buffer.from("cNFT-vault", "utf8")],
- programID
- );
+ const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('cNFT-vault', 'utf8')], programID);
- const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync(
- [tree1.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
- const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync(
- [tree2.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
+ const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree1.toBuffer()], BUBBLEGUM_PROGRAM_ID);
+ const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync([tree2.toBuffer()], BUBBLEGUM_PROGRAM_ID);
const asset1 = await getAsset(assetId1);
const asset2 = await getAsset(assetId2);
@@ -55,10 +35,7 @@ async function main() {
const ixData1 = getInstructionData(asset1, proof1);
const ixData2 = getInstructionData(asset2, proof2);
- const remainingAccounts: AccountMeta[] = [
- ...proofPathAsAccounts1,
- ...proofPathAsAccounts2,
- ];
+ const remainingAccounts: AccountMeta[] = [...proofPathAsAccounts1, ...proofPathAsAccounts2];
const tx = await program.methods
.withdrawTwoCnfts(...ixData1, ...ixData2)
@@ -80,10 +57,7 @@ async function main() {
console.log(tx);
}
-function getInstructionData(
- asset: any,
- proof: any
-): [number[], number[], number[], anchor.BN, number, number] {
+function getInstructionData(asset: any, proof: any): [number[], number[], number[], anchor.BN, number, number] {
const root = decode(proof.root);
const dataHash = decode(asset.compression.data_hash);
const creatorHash = decode(asset.compression.creator_hash);
diff --git a/compression/cnft-vault/anchor/tests/scripts/withdrawWithLookup.ts b/compression/cnft-vault/anchor/tests/scripts/withdrawWithLookup.ts
index a82821509..373b5d0a6 100644
--- a/compression/cnft-vault/anchor/tests/scripts/withdrawWithLookup.ts
+++ b/compression/cnft-vault/anchor/tests/scripts/withdrawWithLookup.ts
@@ -1,196 +1,164 @@
-import * as anchor from "@coral-xyz/anchor";
-import { decode, mapProof } from "../utils";
-import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum";
-import {
- SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- SPL_NOOP_PROGRAM_ID,
-} from "@solana/spl-account-compression";
-import { getAsset, getAssetProof } from "../readAPI";
-import {
- AccountMeta,
- AddressLookupTableProgram,
- PublicKey,
- SystemProgram,
- Transaction,
- TransactionMessage,
- VersionedTransaction,
- sendAndConfirmTransaction,
-} from "@solana/web3.js";
-
-import { connection, keypair, program, programID } from "./constants";
-
-async function main() {
- // TODO change all of these to your values
- const assetId1 = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd";
- const assetId2 = "14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg"; //"D2CoMLCRfsfv1EAiNbaBHfoU1Sqf1964KXLGxEfyUwWo";
-
- const tree1 = new anchor.web3.PublicKey(
- "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B"
- );
- const tree2 = new anchor.web3.PublicKey(
- "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B"
- );
-
- const receiver1 = new anchor.web3.PublicKey(
- "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM"
- );
- const receiver2 = new anchor.web3.PublicKey(
- "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM"
- );
- // ---
-
- const lookupTable = await createLookupTable();
-
- const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync(
- [Buffer.from("cNFT-vault", "utf8")],
- programID
- );
-
- const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync(
- [tree1.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
- const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync(
- [tree2.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
-
- const asset1 = await getAsset(assetId1);
- const asset2 = await getAsset(assetId2);
-
- const proof1 = await getAssetProof(assetId1);
- const proofPathAsAccounts1 = mapProof(proof1);
- const proof2 = await getAssetProof(assetId2);
- const proofPathAsAccounts2 = mapProof(proof2);
-
- const ixData1 = getInstructionData(asset1, proof1);
- const ixData2 = getInstructionData(asset2, proof2);
-
- const remainingAccounts: AccountMeta[] = [
- ...proofPathAsAccounts1,
- ...proofPathAsAccounts2,
- ];
-
- const ix = await program.methods
- .withdrawTwoCnfts(...ixData1, ...ixData2)
- .accounts({
- leafOwner: vaultPDA,
- merkleTree1: tree1,
- newLeafOwner1: receiver1,
- treeAuthority1: treeAuthority1,
- merkleTree2: tree2,
- newLeafOwner2: receiver2,
- treeAuthority2: treeAuthority2,
- bubblegumProgram: BUBBLEGUM_PROGRAM_ID,
- compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- logWrapper: SPL_NOOP_PROGRAM_ID,
- systemProgram: anchor.web3.SystemProgram.programId,
- })
- .remainingAccounts(remainingAccounts)
- .instruction();
-
- await extendLookupTable(
- lookupTable,
- proofPathAsAccounts1.map((acc) => acc.pubkey)
- );
- await extendLookupTable(
- lookupTable,
- proofPathAsAccounts2.map((acc) => acc.pubkey)
- );
-
- const lookupTableAccount = await connection
- .getAddressLookupTable(lookupTable)
- .then((res) => res.value);
-
- if (!lookupTableAccount) {
- console.log("could not fetch ATL!");
- return;
- }
-
- await new Promise((_) => setTimeout(_, 30000));
-
- const messageV0 = new TransactionMessage({
- payerKey: keypair.publicKey,
- recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
- instructions: [ix],
- }).compileToV0Message([lookupTableAccount]);
-
- const transactionV0 = new VersionedTransaction(messageV0);
- transactionV0.sign([keypair]);
-
- const txid = await connection.sendTransaction(transactionV0);
- console.log(txid);
-}
-
-function getInstructionData(
- asset: any,
- proof: any
-): [number[], number[], number[], anchor.BN, number, number] {
- const root = decode(proof.root);
- const dataHash = decode(asset.compression.data_hash);
- const creatorHash = decode(asset.compression.creator_hash);
- const nonce = new anchor.BN(asset.compression.leaf_id);
- const index = asset.compression.leaf_id;
- const proofLength = proof.proof.length;
- return [root, dataHash, creatorHash, nonce, index, proofLength];
-}
-
-main();
-
-async function extendLookupTable(
- lookupTableAddress: PublicKey,
- proofHashes: PublicKey[]
-) {
- const extendInstruction = AddressLookupTableProgram.extendLookupTable({
- payer: keypair.publicKey,
- authority: keypair.publicKey,
- lookupTable: lookupTableAddress,
- addresses: [...proofHashes],
- });
-
- const tx = new Transaction();
- tx.add(extendInstruction);
-
- const sx = await sendAndConfirmTransaction(connection, tx, [keypair], {
- commitment: "finalized",
- });
- console.log(sx);
- console.log("ALT extended!");
-}
-
-async function createLookupTable(): Promise {
- const slot = await connection.getSlot();
-
- const [lookupTableInst, lookupTableAddress] =
- AddressLookupTableProgram.createLookupTable({
- authority: keypair.publicKey,
- payer: keypair.publicKey,
- recentSlot: slot,
- });
- console.log(lookupTableAddress.toBase58());
-
- const extendInstruction = AddressLookupTableProgram.extendLookupTable({
- payer: keypair.publicKey,
- authority: keypair.publicKey,
- lookupTable: lookupTableAddress,
- addresses: [
- programID,
- SystemProgram.programId,
- BUBBLEGUM_PROGRAM_ID,
- SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- SPL_NOOP_PROGRAM_ID,
- // you could add more addresses here, like merkle trees, leaf owners etc.
- ],
- });
-
- const tx = new Transaction();
- tx.add(lookupTableInst).add(extendInstruction);
-
- const sx = await sendAndConfirmTransaction(connection, tx, [keypair], {
- commitment: "finalized",
- });
- console.log(sx);
- console.log("ALT created");
-
- return lookupTableAddress;
-}
+import * as anchor from '@coral-xyz/anchor';
+import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum';
+import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression';
+import {
+ type AccountMeta,
+ AddressLookupTableProgram,
+ type PublicKey,
+ SystemProgram,
+ Transaction,
+ TransactionMessage,
+ VersionedTransaction,
+ sendAndConfirmTransaction,
+} from '@solana/web3.js';
+import { getAsset, getAssetProof } from '../readAPI';
+import { decode, mapProof } from '../utils';
+
+import { connection, keypair, program, programID } from './constants';
+
+async function main() {
+ // TODO change all of these to your values
+ const assetId1 = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd';
+ const assetId2 = '14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg'; //"D2CoMLCRfsfv1EAiNbaBHfoU1Sqf1964KXLGxEfyUwWo";
+
+ const tree1 = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B');
+ const tree2 = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B');
+
+ const receiver1 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM');
+ const receiver2 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM');
+ // ---
+
+ const lookupTable = await createLookupTable();
+
+ const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('cNFT-vault', 'utf8')], programID);
+
+ const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree1.toBuffer()], BUBBLEGUM_PROGRAM_ID);
+ const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync([tree2.toBuffer()], BUBBLEGUM_PROGRAM_ID);
+
+ const asset1 = await getAsset(assetId1);
+ const asset2 = await getAsset(assetId2);
+
+ const proof1 = await getAssetProof(assetId1);
+ const proofPathAsAccounts1 = mapProof(proof1);
+ const proof2 = await getAssetProof(assetId2);
+ const proofPathAsAccounts2 = mapProof(proof2);
+
+ const ixData1 = getInstructionData(asset1, proof1);
+ const ixData2 = getInstructionData(asset2, proof2);
+
+ const remainingAccounts: AccountMeta[] = [...proofPathAsAccounts1, ...proofPathAsAccounts2];
+
+ const ix = await program.methods
+ .withdrawTwoCnfts(...ixData1, ...ixData2)
+ .accounts({
+ leafOwner: vaultPDA,
+ merkleTree1: tree1,
+ newLeafOwner1: receiver1,
+ treeAuthority1: treeAuthority1,
+ merkleTree2: tree2,
+ newLeafOwner2: receiver2,
+ treeAuthority2: treeAuthority2,
+ bubblegumProgram: BUBBLEGUM_PROGRAM_ID,
+ compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
+ logWrapper: SPL_NOOP_PROGRAM_ID,
+ systemProgram: anchor.web3.SystemProgram.programId,
+ })
+ .remainingAccounts(remainingAccounts)
+ .instruction();
+
+ await extendLookupTable(
+ lookupTable,
+ proofPathAsAccounts1.map((acc) => acc.pubkey),
+ );
+ await extendLookupTable(
+ lookupTable,
+ proofPathAsAccounts2.map((acc) => acc.pubkey),
+ );
+
+ const lookupTableAccount = await connection.getAddressLookupTable(lookupTable).then((res) => res.value);
+
+ if (!lookupTableAccount) {
+ console.log('could not fetch ATL!');
+ return;
+ }
+
+ await new Promise((_) => setTimeout(_, 30000));
+
+ const messageV0 = new TransactionMessage({
+ payerKey: keypair.publicKey,
+ recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
+ instructions: [ix],
+ }).compileToV0Message([lookupTableAccount]);
+
+ const transactionV0 = new VersionedTransaction(messageV0);
+ transactionV0.sign([keypair]);
+
+ const txid = await connection.sendTransaction(transactionV0);
+ console.log(txid);
+}
+
+function getInstructionData(asset: any, proof: any): [number[], number[], number[], anchor.BN, number, number] {
+ const root = decode(proof.root);
+ const dataHash = decode(asset.compression.data_hash);
+ const creatorHash = decode(asset.compression.creator_hash);
+ const nonce = new anchor.BN(asset.compression.leaf_id);
+ const index = asset.compression.leaf_id;
+ const proofLength = proof.proof.length;
+ return [root, dataHash, creatorHash, nonce, index, proofLength];
+}
+
+main();
+
+async function extendLookupTable(lookupTableAddress: PublicKey, proofHashes: PublicKey[]) {
+ const extendInstruction = AddressLookupTableProgram.extendLookupTable({
+ payer: keypair.publicKey,
+ authority: keypair.publicKey,
+ lookupTable: lookupTableAddress,
+ addresses: [...proofHashes],
+ });
+
+ const tx = new Transaction();
+ tx.add(extendInstruction);
+
+ const sx = await sendAndConfirmTransaction(connection, tx, [keypair], {
+ commitment: 'finalized',
+ });
+ console.log(sx);
+ console.log('ALT extended!');
+}
+
+async function createLookupTable(): Promise {
+ const slot = await connection.getSlot();
+
+ const [lookupTableInst, lookupTableAddress] = AddressLookupTableProgram.createLookupTable({
+ authority: keypair.publicKey,
+ payer: keypair.publicKey,
+ recentSlot: slot,
+ });
+ console.log(lookupTableAddress.toBase58());
+
+ const extendInstruction = AddressLookupTableProgram.extendLookupTable({
+ payer: keypair.publicKey,
+ authority: keypair.publicKey,
+ lookupTable: lookupTableAddress,
+ addresses: [
+ programID,
+ SystemProgram.programId,
+ BUBBLEGUM_PROGRAM_ID,
+ SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
+ SPL_NOOP_PROGRAM_ID,
+ // you could add more addresses here, like merkle trees, leaf owners etc.
+ ],
+ });
+
+ const tx = new Transaction();
+ tx.add(lookupTableInst).add(extendInstruction);
+
+ const sx = await sendAndConfirmTransaction(connection, tx, [keypair], {
+ commitment: 'finalized',
+ });
+ console.log(sx);
+ console.log('ALT created');
+
+ return lookupTableAddress;
+}
diff --git a/compression/cnft-vault/anchor/tests/tests.ts b/compression/cnft-vault/anchor/tests/tests.ts
index f4b591f8d..8e39911dc 100644
--- a/compression/cnft-vault/anchor/tests/tests.ts
+++ b/compression/cnft-vault/anchor/tests/tests.ts
@@ -1,43 +1,31 @@
-import * as anchor from "@coral-xyz/anchor";
-import { loadWalletKey, decode, mapProof } from "./utils";
-import { IDL, CnftVault } from "../target/types/cnft_vault";
-import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum";
-import {
- SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- SPL_NOOP_PROGRAM_ID,
-} from "@solana/spl-account-compression";
-import { getAsset, getAssetProof } from "./readAPI";
-import { AccountMeta } from "@solana/web3.js";
-
-describe("cNFT Vault", () => {
+import * as anchor from '@coral-xyz/anchor';
+import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum';
+import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression';
+import type { AccountMeta } from '@solana/web3.js';
+import { type CnftVault, IDL } from '../target/types/cnft_vault';
+import { getAsset, getAssetProof } from './readAPI';
+import { decode, loadWalletKey, mapProof } from './utils';
+
+describe('cNFT Vault', () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const payer = provider.wallet as anchor.Wallet;
const program = anchor.workspace.CnftVault as anchor.Program;
- const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync(
- [Buffer.from("cNFT-vault", "utf8")],
- program.programId
- );
- console.log("Vault address: " + vaultPDA.toBase58());
+ const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('cNFT-vault', 'utf8')], program.programId);
+ console.log(`Vault address: ${vaultPDA.toBase58()}`);
- it("Withdraw a cNFT!", async () => {
+ it('Withdraw a cNFT!', async () => {
// we expect the cNFT to already be in the vault
// you can send it there (to vaultPDA) using any regular wallet
// the cNFT has the following asset id
- const assetId = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd"; // TODO
+ const assetId = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd'; // TODO
// and is compressed in the following tree
- const tree = new anchor.web3.PublicKey(
- "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B"
- ); // TODO
+ const tree = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B'); // TODO
const receiver = payer.publicKey; // you can define any pubkey as the receiver here
- const [treeAuthority, _bump2] =
- anchor.web3.PublicKey.findProgramAddressSync(
- [tree.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
+ const [treeAuthority, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree.toBuffer()], BUBBLEGUM_PROGRAM_ID);
const asset = await getAsset(assetId);
@@ -65,40 +53,24 @@ describe("cNFT Vault", () => {
.remainingAccounts(proofPathAsAccounts)
.rpc();
- console.log("Success!");
+ console.log('Success!');
console.log(` Tx Signature: ${sx}`);
});
- it("Withdraw two cNFTs!", async () => {
+ it('Withdraw two cNFTs!', async () => {
// TODO change all of these to your values
- const assetId1 = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd";
- const assetId2 = "14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg";
-
- const tree1 = new anchor.web3.PublicKey(
- "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B"
- );
- const tree2 = new anchor.web3.PublicKey(
- "Feywkti8LLBLfxhSGmYgzUBqpq89qehfB1SMTYV1zCu"
- );
-
- const receiver1 = new anchor.web3.PublicKey(
- "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM"
- );
- const receiver2 = new anchor.web3.PublicKey(
- "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM"
- );
+ const assetId1 = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd';
+ const assetId2 = '14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg';
+
+ const tree1 = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B');
+ const tree2 = new anchor.web3.PublicKey('Feywkti8LLBLfxhSGmYgzUBqpq89qehfB1SMTYV1zCu');
+
+ const receiver1 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM');
+ const receiver2 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM');
// ---
- const [treeAuthority1, _bump2] =
- anchor.web3.PublicKey.findProgramAddressSync(
- [tree1.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
- const [treeAuthority2, _bump3] =
- anchor.web3.PublicKey.findProgramAddressSync(
- [tree2.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
+ const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree1.toBuffer()], BUBBLEGUM_PROGRAM_ID);
+ const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync([tree2.toBuffer()], BUBBLEGUM_PROGRAM_ID);
const asset1 = await getAsset(assetId1);
const asset2 = await getAsset(assetId2);
@@ -111,10 +83,7 @@ describe("cNFT Vault", () => {
const ixData1 = getInstructionData(asset1, proof1);
const ixData2 = getInstructionData(asset2, proof2);
- const remainingAccounts: AccountMeta[] = [
- ...proofPathAsAccounts1,
- ...proofPathAsAccounts2,
- ];
+ const remainingAccounts: AccountMeta[] = [...proofPathAsAccounts1, ...proofPathAsAccounts2];
const sx = await program.methods
.withdrawTwoCnfts(...ixData1, ...ixData2)
@@ -133,15 +102,12 @@ describe("cNFT Vault", () => {
})
.remainingAccounts(remainingAccounts)
.rpc();
- console.log("Success!");
+ console.log('Success!');
console.log(` Tx Signature: ${sx}`);
});
});
-function getInstructionData(
- asset: any,
- proof: any
-): [number[], number[], number[], anchor.BN, number, number] {
+function getInstructionData(asset: any, proof: any): [number[], number[], number[], anchor.BN, number, number] {
const root = decode(proof.root);
const dataHash = decode(asset.compression.data_hash);
const creatorHash = decode(asset.compression.creator_hash);
diff --git a/compression/cnft-vault/anchor/tests/utils.ts b/compression/cnft-vault/anchor/tests/utils.ts
index bb371855e..45c4ed230 100644
--- a/compression/cnft-vault/anchor/tests/utils.ts
+++ b/compression/cnft-vault/anchor/tests/utils.ts
@@ -1,31 +1,38 @@
-import { Connection, Keypair, PublicKey, Signer, TransactionInstruction, TransactionMessage, VersionedTransaction, AccountMeta } from "@solana/web3.js";
-
-import * as bs58 from "bs58";
-
-export function loadWalletKey(keypairFile: string): Keypair {
- const fs = require("fs")
- return Keypair.fromSecretKey(
- new Uint8Array(JSON.parse(fs.readFileSync(keypairFile).toString())),
- );
-}
-
-export function decode(stuff: string) {
- return bufferToArray(bs58.decode(stuff))
-}
-function bufferToArray(buffer: Buffer): number[] {
- const nums: number[] = [];
- for (let i = 0; i < buffer.length; i++) {
- nums.push(buffer[i]);
- }
- return nums;
-}
-export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => {
- if (!assetProof.proof || assetProof.proof.length === 0) {
- throw new Error("Proof is empty");
- }
- return assetProof.proof.map((node) => ({
- pubkey: new PublicKey(node),
- isSigner: false,
- isWritable: false,
- }));
-};
\ No newline at end of file
+import {
+ type AccountMeta,
+ Connection,
+ Keypair,
+ PublicKey,
+ Signer,
+ TransactionInstruction,
+ TransactionMessage,
+ VersionedTransaction,
+} from '@solana/web3.js';
+
+import * as bs58 from 'bs58';
+
+export function loadWalletKey(keypairFile: string): Keypair {
+ const fs = require('node:fs');
+ return Keypair.fromSecretKey(new Uint8Array(JSON.parse(fs.readFileSync(keypairFile).toString())));
+}
+
+export function decode(stuff: string) {
+ return bufferToArray(bs58.decode(stuff));
+}
+function bufferToArray(buffer: Buffer): number[] {
+ const nums: number[] = [];
+ for (let i = 0; i < buffer.length; i++) {
+ nums.push(buffer[i]);
+ }
+ return nums;
+}
+export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => {
+ if (!assetProof.proof || assetProof.proof.length === 0) {
+ throw new Error('Proof is empty');
+ }
+ return assetProof.proof.map((node) => ({
+ pubkey: new PublicKey(node),
+ isSigner: false,
+ isWritable: false,
+ }));
+};
diff --git a/compression/cnft-vault/anchor/tsconfig.json b/compression/cnft-vault/anchor/tsconfig.json
index d8c8d75f9..cd5d2e3d0 100644
--- a/compression/cnft-vault/anchor/tsconfig.json
+++ b/compression/cnft-vault/anchor/tsconfig.json
@@ -1,17 +1,10 @@
{
"compilerOptions": {
- "types": [
- "mocha",
- "chai"
- ],
- "typeRoots": [
- "./node_modules/@types"
- ],
- "lib": [
- "es2015"
- ],
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
"module": "commonjs",
"target": "es6",
"esModuleInterop": true
}
-}
\ No newline at end of file
+}
diff --git a/compression/cutils/Anchor.toml b/compression/cutils/Anchor.toml
deleted file mode 100644
index 026b94bce..000000000
--- a/compression/cutils/Anchor.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.devnet]
-cutils = "burZc1SfqbrAP35XG63YZZ82C9Zd22QUwhCXoEUZWNF"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "devnet"
-wallet = "~/.config/solana/test.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/compression/cutils/Cargo.toml b/compression/cutils/Cargo.toml
deleted file mode 100644
index a60de986d..000000000
--- a/compression/cutils/Cargo.toml
+++ /dev/null
@@ -1,4 +0,0 @@
-[workspace]
-members = [
- "programs/*"
-]
diff --git a/compression/cutils/.gitignore b/compression/cutils/anchor/.gitignore
similarity index 100%
rename from compression/cutils/.gitignore
rename to compression/cutils/anchor/.gitignore
diff --git a/compression/cutils/anchor/Anchor.toml b/compression/cutils/anchor/Anchor.toml
new file mode 100644
index 000000000..b9839d2b7
--- /dev/null
+++ b/compression/cutils/anchor/Anchor.toml
@@ -0,0 +1,15 @@
+[features]
+seeds = false
+skip-lint = false
+[programs.devnet]
+cutils = "burZc1SfqbrAP35XG63YZZ82C9Zd22QUwhCXoEUZWNF"
+
+[registry]
+url = "https://api.apr.dev/"
+
+[provider]
+cluster = "devnet"
+wallet = "~/.config/solana/test.json"
+
+[scripts]
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
diff --git a/compression/cutils/anchor/Cargo.toml b/compression/cutils/anchor/Cargo.toml
new file mode 100644
index 000000000..946f3922e
--- /dev/null
+++ b/compression/cutils/anchor/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [
+ "programs/*"
+]
+resolver = "2"
diff --git a/compression/cutils/README.md b/compression/cutils/anchor/README.md
similarity index 100%
rename from compression/cutils/README.md
rename to compression/cutils/anchor/README.md
diff --git a/compression/cutils/anchor/package.json b/compression/cutils/anchor/package.json
new file mode 100644
index 000000000..9a2b55c88
--- /dev/null
+++ b/compression/cutils/anchor/package.json
@@ -0,0 +1,26 @@
+{
+ "scripts": {
+ "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+ },
+ "dependencies": {
+ "@coral-xyz/anchor": "^0.27.0",
+ "@metaplex-foundation/js": "^0.19.4",
+ "@metaplex-foundation/mpl-bubblegum": "^0.7.0",
+ "@solana/spl-account-compression": "^0.1.8",
+ "@solana/spl-token": "^0.3.8",
+ "@solana/web3.js": "^1.77.3",
+ "axios": "^1.4.0"
+ },
+ "devDependencies": {
+ "@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",
+ "ts-node": "^10.9.1",
+ "typescript": "^4.3.5"
+ }
+}
diff --git a/compression/cutils/anchor/pnpm-lock.yaml b/compression/cutils/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..ff5554dd9
--- /dev/null
+++ b/compression/cutils/anchor/pnpm-lock.yaml
@@ -0,0 +1,3775 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.27.0
+ version: 0.27.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/js':
+ specifier: ^0.19.4
+ version: 0.19.5(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-bubblegum':
+ specifier: ^0.7.0
+ version: 0.7.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/spl-account-compression':
+ specifier: ^0.1.8
+ version: 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.3.8
+ version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js':
+ specifier: ^1.77.3
+ version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ axios:
+ specifier: ^1.4.0
+ version: 1.7.2
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ ts-node:
+ specifier: ^10.9.1
+ version: 10.9.2(@types/node@20.12.12)(typescript@4.9.5)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.24.6':
+ resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==}
+ engines: {node: '>=6.9.0'}
+
+ '@bundlr-network/client@0.8.9':
+ resolution: {integrity: sha512-SJ7BAt/KhONeFQ0+nbqrw2DUWrsev6y6cmlXt+3x7fPCkw7OJwudtxV/h2nBteZd65NXjqw8yzkmLiLfZ7CCRA==}
+ deprecated: Bundlr is now Irys - please switch to @irys/sdk - this package will remain compatible with Irys for the foreseeable future.
+ hasBin: true
+
+ '@coral-xyz/anchor@0.27.0':
+ resolution: {integrity: sha512-+P/vPdORawvg3A9Wj02iquxb4T0C5m4P6aZBVYysKl4Amk+r6aMPZkUhilBkD6E4Nuxnoajv3CFykUfkGE0n5g==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.27.0':
+ resolution: {integrity: sha512-tJKzhLukghTWPLy+n8K8iJKgBq1yLT/AxaNd10yJrX8mI56ao5+OFAKAqW/h0i79KCvb4BK0VGO5ECmmolFz9A==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
+ '@ethereumjs/rlp@4.0.1':
+ resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ '@ethereumjs/util@8.1.0':
+ resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==}
+ engines: {node: '>=14'}
+
+ '@ethersproject/abi@5.7.0':
+ resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==}
+
+ '@ethersproject/abstract-provider@5.7.0':
+ resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==}
+
+ '@ethersproject/abstract-signer@5.7.0':
+ resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==}
+
+ '@ethersproject/address@5.7.0':
+ resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==}
+
+ '@ethersproject/base64@5.7.0':
+ resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==}
+
+ '@ethersproject/basex@5.7.0':
+ resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==}
+
+ '@ethersproject/bignumber@5.7.0':
+ resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==}
+
+ '@ethersproject/bytes@5.7.0':
+ resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==}
+
+ '@ethersproject/constants@5.7.0':
+ resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==}
+
+ '@ethersproject/contracts@5.7.0':
+ resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==}
+
+ '@ethersproject/hash@5.7.0':
+ resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==}
+
+ '@ethersproject/hdnode@5.7.0':
+ resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==}
+
+ '@ethersproject/json-wallets@5.7.0':
+ resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==}
+
+ '@ethersproject/keccak256@5.7.0':
+ resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==}
+
+ '@ethersproject/logger@5.7.0':
+ resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==}
+
+ '@ethersproject/networks@5.7.1':
+ resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==}
+
+ '@ethersproject/pbkdf2@5.7.0':
+ resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==}
+
+ '@ethersproject/properties@5.7.0':
+ resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==}
+
+ '@ethersproject/providers@5.7.2':
+ resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==}
+
+ '@ethersproject/random@5.7.0':
+ resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==}
+
+ '@ethersproject/rlp@5.7.0':
+ resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==}
+
+ '@ethersproject/sha2@5.7.0':
+ resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==}
+
+ '@ethersproject/signing-key@5.7.0':
+ resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==}
+
+ '@ethersproject/solidity@5.7.0':
+ resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==}
+
+ '@ethersproject/strings@5.7.0':
+ resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==}
+
+ '@ethersproject/transactions@5.7.0':
+ resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==}
+
+ '@ethersproject/units@5.7.0':
+ resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==}
+
+ '@ethersproject/wallet@5.7.0':
+ resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==}
+
+ '@ethersproject/web@5.7.1':
+ resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==}
+
+ '@ethersproject/wordlists@5.7.0':
+ resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.4.15':
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
+ '@metaplex-foundation/beet-solana@0.3.1':
+ resolution: {integrity: sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==}
+
+ '@metaplex-foundation/beet-solana@0.4.0':
+ resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==}
+
+ '@metaplex-foundation/beet-solana@0.4.1':
+ resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==}
+
+ '@metaplex-foundation/beet@0.4.0':
+ resolution: {integrity: sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==}
+
+ '@metaplex-foundation/beet@0.6.1':
+ resolution: {integrity: sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==}
+
+ '@metaplex-foundation/beet@0.7.1':
+ resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==}
+
+ '@metaplex-foundation/beet@0.7.2':
+ resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==}
+
+ '@metaplex-foundation/cusper@0.0.2':
+ resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==}
+
+ '@metaplex-foundation/js@0.19.5':
+ resolution: {integrity: sha512-OXGX0zr4rpr4vpFt6+tO+bEQ7yN5fqyKpAWYzxPb0yGM0Rj6JKlvj0Eaiymvwmm5XtLPK+98M8y9jxZiQEtsEA==}
+
+ '@metaplex-foundation/mpl-auction-house@2.5.1':
+ resolution: {integrity: sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==}
+
+ '@metaplex-foundation/mpl-bubblegum@0.6.2':
+ resolution: {integrity: sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==}
+
+ '@metaplex-foundation/mpl-bubblegum@0.7.0':
+ resolution: {integrity: sha512-HCo6q+nh8M3KRv9/aUaZcJo5/vPJEeZwPGRDWkqN7lUXoMIvhd83fZi7MB1rIg1gwpVHfHqim0A02LCYKisWFg==}
+
+ '@metaplex-foundation/mpl-candy-guard@0.3.2':
+ resolution: {integrity: sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==}
+
+ '@metaplex-foundation/mpl-candy-machine-core@0.1.2':
+ resolution: {integrity: sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==}
+
+ '@metaplex-foundation/mpl-candy-machine@5.1.0':
+ resolution: {integrity: sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0':
+ resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==}
+
+ '@noble/curves@1.3.0':
+ resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==}
+
+ '@noble/curves@1.4.0':
+ resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
+
+ '@noble/ed25519@1.7.3':
+ resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==}
+
+ '@noble/hashes@1.3.3':
+ resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==}
+ engines: {node: '>= 16'}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@randlabs/communication-bridge@1.0.1':
+ resolution: {integrity: sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==}
+
+ '@randlabs/myalgo-connect@1.4.2':
+ resolution: {integrity: sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==}
+
+ '@scure/base@1.1.6':
+ resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==}
+
+ '@scure/bip32@1.3.3':
+ resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==}
+
+ '@scure/bip39@1.2.2':
+ resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==}
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==}
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
+
+ '@solana/codecs-strings@2.0.0-preview.2':
+ resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+
+ '@solana/codecs@2.0.0-preview.2':
+ resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==}
+
+ '@solana/errors@2.0.0-preview.2':
+ resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
+ hasBin: true
+
+ '@solana/options@2.0.0-preview.2':
+ resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==}
+
+ '@solana/spl-account-compression@0.1.10':
+ resolution: {integrity: sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.50.1
+
+ '@solana/spl-token-metadata@0.1.4':
+ resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.1.8':
+ resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==}
+ engines: {node: '>= 10'}
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/spl-type-length-value@0.1.0':
+ resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+ engines: {node: '>=16'}
+
+ '@solana/wallet-adapter-base@0.9.23':
+ resolution: {integrity: sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.77.3
+
+ '@solana/wallet-standard-features@1.2.0':
+ resolution: {integrity: sha512-tUd9srDLkRpe1BYg7we+c4UhRQkq+XQWswsr/L1xfGmoRDF47BPSXf4zE7ZU2GRBGvxtGt7lwJVAufQyQYhxTQ==}
+ engines: {node: '>=16'}
+
+ '@solana/web3.js@1.91.8':
+ resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==}
+
+ '@supercharge/promise-pool@2.4.0':
+ resolution: {integrity: sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w==}
+ engines: {node: '>=8'}
+
+ '@tsconfig/node10@1.0.11':
+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@11.11.6':
+ resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.12':
+ resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ '@wallet-standard/base@1.0.1':
+ resolution: {integrity: sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w==}
+ engines: {node: '>=16'}
+
+ '@wallet-standard/features@1.0.3':
+ resolution: {integrity: sha512-m8475I6W5LTatTZuUz5JJNK42wFRgkJTB0I9tkruMwfqBF2UN2eomkYNVf9RbrsROelCRzSFmugqjKZBFaubsA==}
+ engines: {node: '>=16'}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ acorn-walk@8.3.2:
+ resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.11.3:
+ resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ aes-js@3.0.0:
+ resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==}
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ algo-msgpack-with-bigint@2.1.1:
+ resolution: {integrity: sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==}
+ engines: {node: '>= 10'}
+
+ algosdk@1.24.1:
+ resolution: {integrity: sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==}
+ engines: {node: '>=14.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansicolors@0.3.2:
+ resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arbundles@0.6.23:
+ resolution: {integrity: sha512-+gr93F3fivN+6dhiImT6BQNaXz4oECPn2GYjCZjS2yEoq7hM78FRvVp6kQyjEdhnuBFQr/q4oS/nkjnQlHdj9Q==}
+
+ arconnect@0.4.2:
+ resolution: {integrity: sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==}
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ arweave-stream-tx@1.2.2:
+ resolution: {integrity: sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==}
+ peerDependencies:
+ arweave: ^1.10.0
+
+ arweave@1.15.1:
+ resolution: {integrity: sha512-rT7FOwqdudd5npqp4xOYdDT2035LtpcqePjwirh4wjRiEtVsz1FZkRiM2Yj+fOAwYzOm/hNG0GDOipDSaiEGGQ==}
+ engines: {node: '>=18'}
+
+ asn1.js@5.4.1:
+ resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
+
+ assert@2.1.0:
+ resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ async-retry@1.3.3:
+ resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ avsc@https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef:
+ resolution: {tarball: https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef}
+ version: 5.4.7
+ engines: {node: '>=0.11'}
+
+ axios@0.21.4:
+ resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
+
+ axios@0.25.0:
+ resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==}
+
+ axios@1.7.2:
+ resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base-x@4.0.0:
+ resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ base64url@3.0.1:
+ resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==}
+ engines: {node: '>=6.0.0'}
+
+ bech32@1.1.4:
+ resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bip39-light@1.0.7:
+ resolution: {integrity: sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==}
+
+ bip39@3.0.2:
+ resolution: {integrity: sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==}
+
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
+ bn.js@4.11.6:
+ resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==}
+
+ bn.js@4.12.0:
+ resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
+
+ bn.js@5.2.0:
+ resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.6.0:
+ resolution: {integrity: sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ brorand@1.1.0:
+ resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@5.0.0:
+ resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer-reverse@1.0.1:
+ resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ capability@0.2.5:
+ resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chardet@0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cipher-base@1.0.4:
+ resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
+
+ cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+
+ cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+
+ cli-width@3.0.0:
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+ engines: {node: '>= 10'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ clone@1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
+
+ create-hash@1.2.0:
+ resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
+
+ create-hmac@1.1.7:
+ resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
+
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
+ 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'}
+
+ crypto-js@3.3.0:
+ resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==}
+
+ csv-generate@4.4.1:
+ resolution: {integrity: sha512-O/einO0v4zPmXaOV+sYqGa02VkST4GP5GLpWBNHEouIU7pF3kpGf3D0kCCvX82ydIY4EKkOK+R8b1BYsRXravg==}
+
+ csv-parse@5.5.6:
+ resolution: {integrity: sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==}
+
+ csv-stringify@6.5.0:
+ resolution: {integrity: sha512-edlXFVKcUx7r8Vx5zQucsuMg4wb/xT6qyz+Sr1vnLrdXqlLD1+UKyWNyZ9zn6mUW1ewmGxrpVwAcChGF0HQ/2Q==}
+
+ csv@6.3.9:
+ resolution: {integrity: sha512-eiN+Qu8NwSLxZYia6WzB8xlX/rAQ/8EgK5A4dIF7Bz96mzcr5dW1jlcNmjG0QWySWKfPdCerH3RQ96ZqqsE8cA==}
+ engines: {node: '>= 0.1.90'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ depd@1.1.2:
+ resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
+ engines: {node: '>= 0.6'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ dot-case@3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+
+ dotenv@10.0.0:
+ resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==}
+ engines: {node: '>=10'}
+
+ elliptic@6.5.4:
+ resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
+
+ elliptic@6.5.5:
+ resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ error-polyfill@0.1.3:
+ resolution: {integrity: sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg==}
+
+ es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ ethereum-bloom-filters@1.1.0:
+ resolution: {integrity: sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==}
+
+ ethereum-cryptography@2.1.3:
+ resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==}
+
+ ethers@5.7.2:
+ resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==}
+
+ ethjs-unit@0.1.6:
+ resolution: {integrity: sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ exponential-backoff@3.1.1:
+ resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
+
+ external-editor@3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ figures@3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
+ form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hash-base@3.1.0:
+ resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
+ engines: {node: '>=4'}
+
+ hash.js@1.1.7:
+ resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ hi-base32@0.5.1:
+ resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==}
+
+ hmac-drbg@1.0.1:
+ resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
+
+ http-errors@1.8.1:
+ resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
+ engines: {node: '>= 0.6'}
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ inquirer@8.2.6:
+ resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
+ engines: {node: '>=12.0.0'}
+
+ is-arguments@1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-hex-prefixed@1.0.0:
+ resolution: {integrity: sha1-fY035q135dEnFIkTxXPggtd39VQ=}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ is-interactive@1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+
+ is-nan@1.3.2:
+ resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+ engines: {node: '>= 0.4'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.0:
+ resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-sha256@0.9.0:
+ resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==}
+
+ js-sha3@0.8.0:
+ resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==}
+
+ js-sha512@0.8.0:
+ resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-bigint@1.0.0:
+ resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==}
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ keccak@3.0.4:
+ resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==}
+ engines: {node: '>=10.0.0'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.clonedeep@4.5.0:
+ resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
+
+ lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ md5.js@1.3.5:
+ resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
+
+ merkletreejs@0.2.32:
+ resolution: {integrity: sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ==}
+ engines: {node: '>= 7.6.0'}
+
+ micro-ftch@0.3.1:
+ resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@3.0.0:
+ resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+
+ minimalistic-crypto-utils@1.0.1:
+ resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ multistream@4.1.0:
+ resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==}
+
+ mustache@4.2.0:
+ resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
+ hasBin: true
+
+ mute-stream@0.0.8:
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ near-api-js@0.44.2:
+ resolution: {integrity: sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg==}
+
+ near-hd-key@1.2.1:
+ resolution: {integrity: sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==}
+
+ near-seed-phrase@0.2.0:
+ resolution: {integrity: sha512-NpmrnejpY1AdlRpDZ0schJQJtfBaoUheRfiYtQpcq9TkwPgqKZCRULV5L3hHmLc0ep7KRtikbPQ9R2ztN/3cyQ==}
+
+ no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+
+ node-addon-api@2.0.2:
+ resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ number-to-bn@1.7.0:
+ resolution: {integrity: sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ o3@1.0.3:
+ resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==}
+
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+
+ os-tmpdir@1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ pbkdf2@3.1.2:
+ resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
+ engines: {node: '>=0.12'}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+
+ retry@0.13.1:
+ resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+ engines: {node: '>= 4'}
+
+ ripemd160@2.0.2:
+ resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
+
+ rpc-websockets@7.11.0:
+ resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==}
+
+ run-async@2.4.1:
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
+
+ rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ scrypt-js@3.0.1:
+ resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==}
+
+ secp256k1@4.0.3:
+ resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==}
+ engines: {node: '>=10.0.0'}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sha.js@2.4.11:
+ resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
+ hasBin: true
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ snake-case@3.0.4:
+ resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ stream-transform@3.3.2:
+ resolution: {integrity: sha512-v64PUnPy9Qw94NGuaEMo+9RHQe4jTBYf+NkTtqkCgeuiNo8NlL0LtLR7fkKWNVFtp3RhIm5Dlxkgm5uz7TDimQ==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-hex-prefix@1.0.0:
+ resolution: {integrity: sha1-DF8VX+8RUTczd96du1iNoFUA428=}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ tmp-promise@3.0.3:
+ resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==}
+
+ tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+
+ tmp@0.2.3:
+ resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
+ engines: {node: '>=14.14'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ treeify@1.1.0:
+ resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==}
+ engines: {node: '>=0.6'}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ tweetnacl@1.0.3:
+ resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ typescript-collections@1.3.3:
+ resolution: {integrity: sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ u3@0.1.1:
+ resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==}
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ utf8@3.0.0:
+ resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ vlq@2.0.4:
+ resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==}
+
+ wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
+ web3-utils@1.10.4:
+ resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==}
+ engines: {node: '>=8.0.0'}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.4.6:
+ resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.24.6':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@bundlr-network/client@0.8.9(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@supercharge/promise-pool': 2.4.0
+ algosdk: 1.24.1
+ arbundles: 0.6.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10)
+ arweave: 1.15.1
+ async-retry: 1.3.3
+ axios: 0.25.0(debug@4.3.4)
+ base64url: 3.0.1
+ bignumber.js: 9.1.2
+ bs58: 4.0.1
+ commander: 8.3.0
+ csv: 6.3.9
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ inquirer: 8.2.6
+ js-sha256: 0.9.0
+ mime-types: 2.1.35
+ near-api-js: 0.44.2
+ near-seed-phrase: 0.2.0
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/anchor@0.27.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/borsh': 0.27.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ base64-js: 1.5.1
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ js-sha256: 0.9.0
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.27.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@ethereumjs/rlp@4.0.1': {}
+
+ '@ethereumjs/util@8.1.0':
+ dependencies:
+ '@ethereumjs/rlp': 4.0.1
+ ethereum-cryptography: 2.1.3
+ micro-ftch: 0.3.1
+
+ '@ethersproject/abi@5.7.0':
+ dependencies:
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@ethersproject/abstract-provider@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/web': 5.7.1
+
+ '@ethersproject/abstract-signer@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+
+ '@ethersproject/address@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+
+ '@ethersproject/base64@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+
+ '@ethersproject/basex@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/properties': 5.7.0
+
+ '@ethersproject/bignumber@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ bn.js: 5.2.1
+
+ '@ethersproject/bytes@5.7.0':
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/constants@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+
+ '@ethersproject/contracts@5.7.0':
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+
+ '@ethersproject/hash@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@ethersproject/hdnode@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/pbkdf2': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/wordlists': 5.7.0
+
+ '@ethersproject/json-wallets@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/hdnode': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/pbkdf2': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ aes-js: 3.0.0
+ scrypt-js: 3.0.1
+
+ '@ethersproject/keccak256@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ js-sha3: 0.8.0
+
+ '@ethersproject/logger@5.7.0': {}
+
+ '@ethersproject/networks@5.7.1':
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/pbkdf2@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+
+ '@ethersproject/properties@5.7.0':
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/web': 5.7.1
+ bech32: 1.1.4
+ ws: 7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@ethersproject/random@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/rlp@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/sha2@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ hash.js: 1.1.7
+
+ '@ethersproject/signing-key@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ bn.js: 5.2.1
+ elliptic: 6.5.4
+ hash.js: 1.1.7
+
+ '@ethersproject/solidity@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@ethersproject/strings@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/transactions@5.7.0':
+ dependencies:
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+
+ '@ethersproject/units@5.7.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+
+ '@ethersproject/wallet@5.7.0':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/hdnode': 5.7.0
+ '@ethersproject/json-wallets': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/wordlists': 5.7.0
+
+ '@ethersproject/web@5.7.1':
+ dependencies:
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@ethersproject/wordlists@5.7.0':
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.4.15': {}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ '@metaplex-foundation/beet-solana@0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet-solana@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet@0.4.0':
+ dependencies:
+ ansicolors: 0.3.2
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/beet@0.6.1':
+ dependencies:
+ ansicolors: 0.3.2
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/beet@0.7.1':
+ dependencies:
+ ansicolors: 0.3.2
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/beet@0.7.2':
+ dependencies:
+ ansicolors: 0.3.2
+ assert: 2.1.0
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/cusper@0.0.2': {}
+
+ '@metaplex-foundation/js@0.19.5(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@bundlr-network/client': 0.8.9(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/mpl-auction-house': 2.5.1(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-bubblegum': 0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-candy-guard': 0.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-candy-machine': 5.1.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-candy-machine-core': 0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@noble/ed25519': 1.7.3
+ '@noble/hashes': 1.4.0
+ '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bignumber.js: 9.1.2
+ bn.js: 5.2.1
+ bs58: 5.0.0
+ buffer: 6.0.3
+ debug: 4.3.4
+ eventemitter3: 4.0.7
+ lodash.clonedeep: 4.5.0
+ lodash.isequal: 4.5.0
+ merkletreejs: 0.2.32
+ mime: 3.0.0
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-auction-house@2.5.1(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.6.1
+ '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-bubblegum@0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ js-sha3: 0.8.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-bubblegum@0.7.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ js-sha3: 0.8.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-candy-guard@0.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.4.0
+ '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-candy-machine-core@0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.4.0
+ '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-candy-machine@5.1.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.1
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@noble/curves@1.3.0':
+ dependencies:
+ '@noble/hashes': 1.3.3
+
+ '@noble/curves@1.4.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/ed25519@1.7.3': {}
+
+ '@noble/hashes@1.3.3': {}
+
+ '@noble/hashes@1.4.0': {}
+
+ '@randlabs/communication-bridge@1.0.1': {}
+
+ '@randlabs/myalgo-connect@1.4.2':
+ dependencies:
+ '@randlabs/communication-bridge': 1.0.1
+
+ '@scure/base@1.1.6': {}
+
+ '@scure/bip32@1.3.3':
+ dependencies:
+ '@noble/curves': 1.3.0
+ '@noble/hashes': 1.3.3
+ '@scure/base': 1.1.6
+
+ '@scure/bip39@1.2.2':
+ dependencies:
+ '@noble/hashes': 1.3.3
+ '@scure/base': 1.1.6
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+ fastestsmallesttextencoderdecoder: 1.0.22
+
+ '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-data-structures': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/options': 2.0.0-preview.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-preview.2':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+
+ '@solana/options@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+
+ '@solana/spl-account-compression@0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ js-sha3: 0.8.0
+ typescript-collections: 1.3.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token@0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.6
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer: 6.0.3
+ buffer-layout: 1.2.2
+ dotenv: 10.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - utf-8-validate
+
+ '@solana/spl-type-length-value@0.1.0':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/wallet-standard-features': 1.2.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@wallet-standard/base': 1.0.1
+ '@wallet-standard/features': 1.0.3
+ eventemitter3: 4.0.7
+
+ '@solana/wallet-standard-features@1.2.0':
+ dependencies:
+ '@wallet-standard/base': 1.0.1
+ '@wallet-standard/features': 1.0.3
+
+ '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.6
+ '@noble/curves': 1.4.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 7.11.0
+ superstruct: 0.14.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@supercharge/promise-pool@2.4.0': {}
+
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.12
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@11.11.6': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.12':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ '@wallet-standard/base@1.0.1': {}
+
+ '@wallet-standard/features@1.0.3':
+ dependencies:
+ '@wallet-standard/base': 1.0.1
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ acorn-walk@8.3.2: {}
+
+ acorn@8.11.3: {}
+
+ aes-js@3.0.0: {}
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ algo-msgpack-with-bigint@2.1.1: {}
+
+ algosdk@1.24.1:
+ dependencies:
+ algo-msgpack-with-bigint: 2.1.1
+ buffer: 6.0.3
+ cross-fetch: 3.1.8
+ hi-base32: 0.5.1
+ js-sha256: 0.9.0
+ js-sha3: 0.8.0
+ js-sha512: 0.8.0
+ json-bigint: 1.0.0
+ tweetnacl: 1.0.3
+ vlq: 2.0.4
+ transitivePeerDependencies:
+ - encoding
+
+ ansi-colors@4.1.1: {}
+
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansicolors@0.3.2: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arbundles@0.6.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10):
+ dependencies:
+ '@noble/ed25519': 1.7.3
+ '@randlabs/myalgo-connect': 1.4.2
+ '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ algosdk: 1.24.1
+ arweave: 1.15.1
+ arweave-stream-tx: 1.2.2(arweave@1.15.1)
+ avsc: https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef
+ axios: 0.21.4(debug@4.3.4)
+ base64url: 3.0.1
+ bs58: 4.0.1
+ ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ keccak: 3.0.4
+ multistream: 4.1.0
+ process: 0.11.10
+ secp256k1: 4.0.3
+ tmp-promise: 3.0.3
+ transitivePeerDependencies:
+ - '@solana/web3.js'
+ - bufferutil
+ - debug
+ - encoding
+ - utf-8-validate
+
+ arconnect@0.4.2:
+ dependencies:
+ arweave: 1.15.1
+
+ arg@4.1.3: {}
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ arweave-stream-tx@1.2.2(arweave@1.15.1):
+ dependencies:
+ arweave: 1.15.1
+ exponential-backoff: 3.1.1
+
+ arweave@1.15.1:
+ dependencies:
+ arconnect: 0.4.2
+ asn1.js: 5.4.1
+ base64-js: 1.5.1
+ bignumber.js: 9.1.2
+
+ asn1.js@5.4.1:
+ dependencies:
+ bn.js: 4.12.0
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ safer-buffer: 2.1.2
+
+ assert@2.1.0:
+ dependencies:
+ call-bind: 1.0.7
+ is-nan: 1.3.2
+ object-is: 1.1.6
+ object.assign: 4.1.5
+ util: 0.12.5
+
+ assertion-error@1.1.0: {}
+
+ async-retry@1.3.3:
+ dependencies:
+ retry: 0.13.1
+
+ asynckit@0.4.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
+ avsc@https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef: {}
+
+ axios@0.21.4(debug@4.3.4):
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.4)
+ transitivePeerDependencies:
+ - debug
+
+ axios@0.25.0(debug@4.3.4):
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.4)
+ transitivePeerDependencies:
+ - debug
+
+ axios@1.7.2:
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.4)
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ base64url@3.0.1: {}
+
+ bech32@1.1.4: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bip39-light@1.0.7:
+ dependencies:
+ create-hash: 1.2.0
+ pbkdf2: 3.1.2
+
+ bip39@3.0.2:
+ dependencies:
+ '@types/node': 11.11.6
+ create-hash: 1.2.0
+ pbkdf2: 3.1.2
+ randombytes: 2.1.0
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ bn.js@4.11.6: {}
+
+ bn.js@4.12.0: {}
+
+ bn.js@5.2.0: {}
+
+ bn.js@5.2.1: {}
+
+ borsh@0.6.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ brorand@1.1.0: {}
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.0
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer-reverse@1.0.1: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ call-bind@1.0.7:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ camelcase@6.3.0: {}
+
+ capability@0.2.5: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ chardet@0.7.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cipher-base@1.0.4:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ cli-cursor@3.1.0:
+ dependencies:
+ restore-cursor: 3.1.0
+
+ cli-spinners@2.9.2: {}
+
+ cli-width@3.0.0: {}
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone@1.0.4: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ commander@8.3.0: {}
+
+ concat-map@0.0.1: {}
+
+ create-hash@1.2.0:
+ dependencies:
+ cipher-base: 1.0.4
+ inherits: 2.0.4
+ md5.js: 1.3.5
+ ripemd160: 2.0.2
+ sha.js: 2.4.11
+
+ create-hmac@1.1.7:
+ dependencies:
+ cipher-base: 1.0.4
+ create-hash: 1.2.0
+ inherits: 2.0.4
+ ripemd160: 2.0.2
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+
+ create-require@1.1.1: {}
+
+ cross-fetch@3.1.8:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ crypto-hash@1.3.0: {}
+
+ crypto-js@3.3.0: {}
+
+ csv-generate@4.4.1: {}
+
+ csv-parse@5.5.6: {}
+
+ csv-stringify@6.5.0: {}
+
+ csv@6.3.9:
+ dependencies:
+ csv-generate: 4.4.1
+ csv-parse: 5.5.6
+ csv-stringify: 6.5.0
+ stream-transform: 3.3.2
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ defaults@1.0.4:
+ dependencies:
+ clone: 1.0.4
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delay@5.0.0: {}
+
+ delayed-stream@1.0.0: {}
+
+ depd@1.1.2: {}
+
+ depd@2.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@4.0.2: {}
+
+ diff@5.0.0: {}
+
+ dot-case@3.0.4:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.6.2
+
+ dotenv@10.0.0: {}
+
+ elliptic@6.5.4:
+ dependencies:
+ bn.js: 4.12.0
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ elliptic@6.5.5:
+ dependencies:
+ bn.js: 4.12.0
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ emoji-regex@8.0.0: {}
+
+ error-polyfill@0.1.3:
+ dependencies:
+ capability: 0.2.5
+ o3: 1.0.3
+ u3: 0.1.1
+
+ es-define-property@1.0.0:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ ethereum-bloom-filters@1.1.0:
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ ethereum-cryptography@2.1.3:
+ dependencies:
+ '@noble/curves': 1.3.0
+ '@noble/hashes': 1.3.3
+ '@scure/bip32': 1.3.3
+ '@scure/bip39': 1.2.2
+
+ ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/hdnode': 5.7.0
+ '@ethersproject/json-wallets': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/pbkdf2': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ '@ethersproject/solidity': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/units': 5.7.0
+ '@ethersproject/wallet': 5.7.0
+ '@ethersproject/web': 5.7.1
+ '@ethersproject/wordlists': 5.7.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ ethjs-unit@0.1.6:
+ dependencies:
+ bn.js: 4.11.6
+ number-to-bn: 1.7.0
+
+ eventemitter3@4.0.7: {}
+
+ exponential-backoff@3.1.1: {}
+
+ external-editor@3.1.0:
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ figures@3.2.0:
+ dependencies:
+ escape-string-regexp: 1.0.5
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ follow-redirects@1.15.6(debug@4.3.4):
+ optionalDependencies:
+ debug: 4.3.4
+
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ form-data@4.0.0:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-intrinsic@1.2.4:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ gopd@1.0.1:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.0
+
+ has-proto@1.0.3: {}
+
+ has-symbols@1.0.3: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.0.3
+
+ hash-base@3.1.0:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ safe-buffer: 5.2.1
+
+ hash.js@1.1.7:
+ dependencies:
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ hi-base32@0.5.1: {}
+
+ hmac-drbg@1.0.1:
+ dependencies:
+ hash.js: 1.1.7
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ http-errors@1.8.1:
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 1.5.0
+ toidentifier: 1.0.1
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ inquirer@8.2.6:
+ dependencies:
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-width: 3.0.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 0.0.8
+ ora: 5.4.1
+ run-async: 2.4.1
+ rxjs: 7.8.1
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ through: 2.3.8
+ wrap-ansi: 6.2.0
+
+ is-arguments@1.1.1:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-callable@1.2.7: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.0.10:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-hex-prefixed@1.0.0: {}
+
+ is-interactive@1.0.0: {}
+
+ is-nan@1.3.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-typed-array@1.1.13:
+ dependencies:
+ which-typed-array: 1.1.15
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-sha256@0.9.0: {}
+
+ js-sha3@0.8.0: {}
+
+ js-sha512@0.8.0: {}
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-bigint@1.0.0:
+ dependencies:
+ bignumber.js: 9.1.2
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ keccak@3.0.4:
+ dependencies:
+ node-addon-api: 2.0.2
+ node-gyp-build: 4.8.1
+ readable-stream: 3.6.2
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.clonedeep@4.5.0: {}
+
+ lodash.isequal@4.5.0: {}
+
+ lodash@4.17.21: {}
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.6.2
+
+ make-error@1.3.6: {}
+
+ md5.js@1.3.5:
+ dependencies:
+ hash-base: 3.1.0
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ merkletreejs@0.2.32:
+ dependencies:
+ bignumber.js: 9.1.2
+ buffer-reverse: 1.0.1
+ crypto-js: 3.3.0
+ treeify: 1.1.0
+ web3-utils: 1.10.4
+
+ micro-ftch@0.3.1: {}
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@3.0.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ minimalistic-assert@1.0.1: {}
+
+ minimalistic-crypto-utils@1.0.1: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ multistream@4.1.0:
+ dependencies:
+ once: 1.4.0
+ readable-stream: 3.6.2
+
+ mustache@4.2.0: {}
+
+ mute-stream@0.0.8: {}
+
+ nanoid@3.3.1: {}
+
+ near-api-js@0.44.2:
+ dependencies:
+ bn.js: 5.2.0
+ borsh: 0.6.0
+ bs58: 4.0.1
+ depd: 2.0.0
+ error-polyfill: 0.1.3
+ http-errors: 1.8.1
+ js-sha256: 0.9.0
+ mustache: 4.2.0
+ node-fetch: 2.7.0
+ text-encoding-utf-8: 1.0.2
+ tweetnacl: 1.0.3
+ transitivePeerDependencies:
+ - encoding
+
+ near-hd-key@1.2.1:
+ dependencies:
+ bip39: 3.0.2
+ create-hmac: 1.1.7
+ tweetnacl: 1.0.3
+
+ near-seed-phrase@0.2.0:
+ dependencies:
+ bip39-light: 1.0.7
+ bs58: 4.0.1
+ near-hd-key: 1.2.1
+ tweetnacl: 1.0.3
+
+ no-case@3.0.4:
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.6.2
+
+ node-addon-api@2.0.2: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.1: {}
+
+ normalize-path@3.0.0: {}
+
+ number-to-bn@1.7.0:
+ dependencies:
+ bn.js: 4.11.6
+ strip-hex-prefix: 1.0.0
+
+ o3@1.0.3:
+ dependencies:
+ capability: 0.2.5
+
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ ora@5.4.1:
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.2
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+
+ os-tmpdir@1.0.2: {}
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ pbkdf2@3.1.2:
+ dependencies:
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ ripemd160: 2.0.2
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+
+ picomatch@2.3.1: {}
+
+ possible-typed-array-names@1.0.0: {}
+
+ prettier@2.8.8: {}
+
+ process@0.11.10: {}
+
+ proxy-from-env@1.1.0: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ restore-cursor@3.1.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ retry@0.13.1: {}
+
+ ripemd160@2.0.2:
+ dependencies:
+ hash-base: 3.1.0
+ inherits: 2.0.4
+
+ rpc-websockets@7.11.0:
+ dependencies:
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ run-async@2.4.1: {}
+
+ rxjs@7.8.1:
+ dependencies:
+ tslib: 2.6.2
+
+ safe-buffer@5.2.1: {}
+
+ safer-buffer@2.1.2: {}
+
+ scrypt-js@3.0.1: {}
+
+ secp256k1@4.0.3:
+ dependencies:
+ elliptic: 6.5.5
+ node-addon-api: 2.0.2
+ node-gyp-build: 4.8.1
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+
+ setprototypeof@1.2.0: {}
+
+ sha.js@2.4.11:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ signal-exit@3.0.7: {}
+
+ snake-case@3.0.4:
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.6.2
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ statuses@1.5.0: {}
+
+ stream-transform@3.3.2: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-hex-prefix@1.0.0:
+ dependencies:
+ is-hex-prefixed: 1.0.0
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.14.2: {}
+
+ superstruct@0.15.5: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ tmp-promise@3.0.3:
+ dependencies:
+ tmp: 0.2.3
+
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+
+ tmp@0.2.3: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toidentifier@1.0.1: {}
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ treeify@1.1.0: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@10.9.2(@types/node@20.12.12)(typescript@4.9.5):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 20.12.12
+ acorn: 8.11.3
+ acorn-walk: 8.3.2
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 4.9.5
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ tweetnacl@1.0.3: {}
+
+ type-detect@4.0.8: {}
+
+ type-fest@0.21.3: {}
+
+ typescript-collections@1.3.3: {}
+
+ typescript@4.9.5: {}
+
+ u3@0.1.1: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ utf8@3.0.0: {}
+
+ util-deprecate@1.0.2: {}
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.13
+ which-typed-array: 1.1.15
+
+ uuid@8.3.2: {}
+
+ v8-compile-cache-lib@3.0.1: {}
+
+ vlq@2.0.4: {}
+
+ wcwidth@1.0.1:
+ dependencies:
+ defaults: 1.0.4
+
+ web3-utils@1.10.4:
+ dependencies:
+ '@ethereumjs/util': 8.1.0
+ bn.js: 5.2.1
+ ethereum-bloom-filters: 1.1.0
+ ethereum-cryptography: 2.1.3
+ ethjs-unit: 0.1.6
+ number-to-bn: 1.7.0
+ randombytes: 2.1.0
+ utf8: 3.0.0
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-typed-array@1.1.15:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@6.2.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yn@3.1.1: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/compression/cutils/anchor/programs/cutils/Cargo.toml b/compression/cutils/anchor/programs/cutils/Cargo.toml
new file mode 100644
index 000000000..59de93b61
--- /dev/null
+++ b/compression/cutils/anchor/programs/cutils/Cargo.toml
@@ -0,0 +1,27 @@
+[package]
+name = "cutils"
+version = "0.1.0"
+description = "Created with Anchor"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+name = "cutils"
+
+[features]
+no-entrypoint = []
+no-idl = []
+no-log-ix-name = []
+cpi = ["no-entrypoint"]
+default = []
+
+[dependencies]
+anchor-lang = "0.26.0"
+solana-program = "1.14.18"
+spl-account-compression = { version="0.1.8", features = ["cpi"] }
+mpl-bubblegum = { version = "0.7.0", features = ["no-entrypoint", "cpi"] }
+
+# Added due to anchor and solana-cli wonkyness as of late
+getrandom = { version = "0.2.10", features = ["custom"] }
+winnow = "=0.4.1"
+toml_datetime = "=0.6.1"
\ No newline at end of file
diff --git a/compression/cutils/anchor/programs/cutils/Xargo.toml b/compression/cutils/anchor/programs/cutils/Xargo.toml
new file mode 100644
index 000000000..475fb71ed
--- /dev/null
+++ b/compression/cutils/anchor/programs/cutils/Xargo.toml
@@ -0,0 +1,2 @@
+[target.bpfel-unknown-unknown.dependencies.std]
+features = []
diff --git a/compression/cutils/programs/cutils/src/actions/mint.rs b/compression/cutils/anchor/programs/cutils/src/actions/mint.rs
similarity index 100%
rename from compression/cutils/programs/cutils/src/actions/mint.rs
rename to compression/cutils/anchor/programs/cutils/src/actions/mint.rs
diff --git a/compression/cutils/programs/cutils/src/actions/mod.rs b/compression/cutils/anchor/programs/cutils/src/actions/mod.rs
similarity index 100%
rename from compression/cutils/programs/cutils/src/actions/mod.rs
rename to compression/cutils/anchor/programs/cutils/src/actions/mod.rs
diff --git a/compression/cutils/programs/cutils/src/actions/verify.rs b/compression/cutils/anchor/programs/cutils/src/actions/verify.rs
similarity index 100%
rename from compression/cutils/programs/cutils/src/actions/verify.rs
rename to compression/cutils/anchor/programs/cutils/src/actions/verify.rs
diff --git a/compression/cutils/programs/cutils/src/lib.rs b/compression/cutils/anchor/programs/cutils/src/lib.rs
similarity index 100%
rename from compression/cutils/programs/cutils/src/lib.rs
rename to compression/cutils/anchor/programs/cutils/src/lib.rs
diff --git a/compression/cutils/programs/cutils/src/state/data.rs b/compression/cutils/anchor/programs/cutils/src/state/data.rs
similarity index 100%
rename from compression/cutils/programs/cutils/src/state/data.rs
rename to compression/cutils/anchor/programs/cutils/src/state/data.rs
diff --git a/compression/cutils/programs/cutils/src/state/mod.rs b/compression/cutils/anchor/programs/cutils/src/state/mod.rs
similarity index 100%
rename from compression/cutils/programs/cutils/src/state/mod.rs
rename to compression/cutils/anchor/programs/cutils/src/state/mod.rs
diff --git a/compression/cutils/anchor/tests/setup.ts b/compression/cutils/anchor/tests/setup.ts
new file mode 100644
index 000000000..00c4463bd
--- /dev/null
+++ b/compression/cutils/anchor/tests/setup.ts
@@ -0,0 +1,57 @@
+import type { CreateMetadataAccountArgsV3 } from '@metaplex-foundation/mpl-token-metadata';
+import type { ValidDepthSizePair } from '@solana/spl-account-compression';
+import { Connection, Keypair } from '@solana/web3.js';
+import { createCollection, createTree } from './utils/compression';
+import { loadOrGenerateKeypair, savePublicKeyToFile } from './utils/helpers';
+
+async function setup() {
+ const rpc = 'https://api.devnet.solana.com/';
+ const connection = new Connection(rpc, 'confirmed');
+
+ // Collection auth and treeCreator
+ const payer = loadOrGenerateKeypair('payer');
+
+ // Airdrop
+ await connection.requestAirdrop(payer.publicKey, 1 * 10 ** 9);
+ console.log('Payer address:', payer.publicKey.toBase58());
+
+ const treeKeypair = Keypair.generate();
+ const maxDepthSizePair: ValidDepthSizePair = {
+ maxDepth: 14,
+ maxBufferSize: 64,
+ };
+ const canopyDepth = maxDepthSizePair.maxDepth - 5;
+ const tree = await createTree(connection, payer, treeKeypair, maxDepthSizePair, canopyDepth);
+
+ // locally save the addresses for demo
+ savePublicKeyToFile('treeAddress', tree.treeAddress);
+
+ const collectionMetadataV3: CreateMetadataAccountArgsV3 = {
+ data: {
+ name: 'Super Sweet NFT Collection',
+ symbol: 'SSNC',
+ // specific json metadata for the collection
+ uri: 'https://supersweetcollection.notarealurl/collection.json',
+ sellerFeeBasisPoints: 100,
+ creators: [
+ {
+ address: payer.publicKey,
+ verified: false,
+ share: 100,
+ },
+ ],
+ collection: null,
+ uses: null,
+ },
+ isMutable: false,
+ collectionDetails: null,
+ };
+
+ // create a full token mint and initialize the collection (with the `payer` as the authority)
+ const collection = await createCollection(connection, payer, collectionMetadataV3);
+
+ // locally save the addresses for the demo
+ savePublicKeyToFile('collectionMint', collection.mint);
+}
+
+// setup()
diff --git a/compression/cutils/anchor/tests/tests.ts b/compression/cutils/anchor/tests/tests.ts
new file mode 100644
index 000000000..266af270e
--- /dev/null
+++ b/compression/cutils/anchor/tests/tests.ts
@@ -0,0 +1,79 @@
+import * as anchor from '@coral-xyz/anchor';
+import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum/dist/src/generated';
+import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression';
+import type { Cutils } from '../target/types/cutils';
+import { loadOrGenerateKeypair, loadPublicKeysFromFile } from './utils/helpers';
+import { getAsset, getAssetProof } from './utils/readAPI';
+import { decode, getAccounts, mapProof } from './utils/utils';
+
+describe('cutils', () => {
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+
+ const program = anchor.workspace.Cutils as anchor.Program;
+
+ // NFT metadata pointer
+ // TODO change
+ const uri = 'https://arweave.net/nVRvZDaOk5YAdr4ZBEeMjOVhynuv8P3vywvuN5sYSPo';
+
+ const payer = loadOrGenerateKeypair('payer');
+
+ // cNFT receiver
+ const testWallet = loadOrGenerateKeypair('testWallet');
+
+ const { collectionMint, treeAddress } = loadPublicKeysFromFile();
+
+ it('Mint!', async () => {
+ const tx = await program.methods
+ .mint({ uri })
+ .accounts({
+ payer: payer.publicKey,
+ leafOwner: testWallet.publicKey,
+ leafDelegate: testWallet.publicKey, //verify
+ treeDelegate: payer.publicKey,
+ collectionAuthority: payer.publicKey,
+ collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID,
+ ...getAccounts(collectionMint, treeAddress),
+ })
+ .transaction();
+
+ const sx = await program.provider.sendAndConfirm(tx, [payer], {
+ skipPreflight: true,
+ });
+ console.log(` Tx Signature: ${sx}`);
+ });
+
+ // it("Verify", async () => {
+ // // TODO: replace assetId
+ // const assetId = "HUBMRAcYpow1ZUojdSMuvhcbNuCuRSAPWnXWjjYrpAVQ";
+ //
+ // const asset = await getAsset(assetId);
+ // const proof = await getAssetProof(assetId);
+ // const proofPathAsAccounts = mapProof(proof);
+ // const root = decode(proof.root);
+ // const dataHash = decode(asset.compression.data_hash);
+ // const creatorHash = decode(asset.compression.creator_hash);
+ // const nonce = new anchor.BN(asset.compression.leaf_id);
+ // const index = asset.compression.leaf_id;
+ //
+ // const tx = await program.methods
+ // .verify({
+ // root, dataHash, creatorHash, nonce, index
+ // })
+ // .accounts({
+ // leafOwner: testWallet.publicKey,
+ // leafDelegate: testWallet.publicKey,
+ // merkleTree: treeAddress,
+ // compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
+ // })
+ // .remainingAccounts(proofPathAsAccounts)
+ // .transaction();
+ //
+ // const sx = await program.provider.sendAndConfirm(tx, [testWallet], {skipPreflight: true});
+ //
+ // // This fails due to incorrect owner
+ // // const sx = await program.provider.sendAndConfirm(tx, [payer], {skipPreflight: true});
+ //
+ // console.log(` Tx Signature: ${sx}`);
+ // });
+});
diff --git a/compression/cutils/anchor/tests/utils/compression.ts b/compression/cutils/anchor/tests/utils/compression.ts
new file mode 100644
index 000000000..7b1947363
--- /dev/null
+++ b/compression/cutils/anchor/tests/utils/compression.ts
@@ -0,0 +1,346 @@
+import {
+ PROGRAM_ID as BUBBLEGUM_PROGRAM_ID,
+ type MetadataArgs,
+ computeCreatorHash,
+ computeDataHash,
+ createCreateTreeInstruction,
+ createMintToCollectionV1Instruction,
+} from '@metaplex-foundation/mpl-bubblegum';
+import {
+ type CreateMetadataAccountArgsV3,
+ PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID,
+ createCreateMasterEditionV3Instruction,
+ createCreateMetadataAccountV3Instruction,
+ createSetCollectionSizeInstruction,
+} from '@metaplex-foundation/mpl-token-metadata';
+import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID, type ValidDepthSizePair, createAllocTreeIx } from '@solana/spl-account-compression';
+import { TOKEN_PROGRAM_ID, createAccount, createMint, mintTo } from '@solana/spl-token';
+import { type Connection, type Keypair, PublicKey, Transaction, type TransactionInstruction, sendAndConfirmTransaction } from '@solana/web3.js';
+
+// import local helper functions
+import { explorerURL, extractSignatureFromFailedTransaction } from './helpers';
+
+/*
+ Helper function to create a merkle tree on chain, including allocating
+ all the space required to store all the nodes
+*/
+export async function createTree(
+ connection: Connection,
+ payer: Keypair,
+ treeKeypair: Keypair,
+ maxDepthSizePair: ValidDepthSizePair,
+ canopyDepth = 0,
+) {
+ console.log('Creating a new Merkle tree...');
+ console.log('treeAddress:', treeKeypair.publicKey.toBase58());
+
+ // derive the tree's authority (PDA), owned by Bubblegum
+ const [treeAuthority, _bump] = PublicKey.findProgramAddressSync([treeKeypair.publicKey.toBuffer()], BUBBLEGUM_PROGRAM_ID);
+ console.log('treeAuthority:', treeAuthority.toBase58());
+
+ // allocate the tree's account on chain with the `space`
+ // NOTE: this will compute the space needed to store the tree on chain (and the lamports required to store it)
+ const allocTreeIx = await createAllocTreeIx(connection, treeKeypair.publicKey, payer.publicKey, maxDepthSizePair, canopyDepth);
+
+ // create the instruction to actually create the tree
+ const createTreeIx = createCreateTreeInstruction(
+ {
+ payer: payer.publicKey,
+ treeCreator: payer.publicKey,
+ treeAuthority,
+ merkleTree: treeKeypair.publicKey,
+ compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
+ // NOTE: this is used for some on chain logging
+ logWrapper: SPL_NOOP_PROGRAM_ID,
+ },
+ {
+ maxBufferSize: maxDepthSizePair.maxBufferSize,
+ maxDepth: maxDepthSizePair.maxDepth,
+ public: false,
+ },
+ BUBBLEGUM_PROGRAM_ID,
+ );
+
+ try {
+ // create and send the transaction to initialize the tree
+ const tx = new Transaction().add(allocTreeIx).add(createTreeIx);
+ tx.feePayer = payer.publicKey;
+ console.log('tx');
+
+ // send the transaction
+ const txSignature = await sendAndConfirmTransaction(
+ connection,
+ tx,
+ // ensuring the `treeKeypair` PDA and the `payer` are BOTH signers
+ [treeKeypair, payer],
+ {
+ commitment: 'confirmed',
+ skipPreflight: true,
+ },
+ );
+
+ console.log('\nMerkle tree created successfully!');
+ console.log(explorerURL({ txSignature }));
+
+ // return useful info
+ return { treeAuthority, treeAddress: treeKeypair.publicKey };
+ } catch (err: any) {
+ console.error('\nFailed to create merkle tree:', err);
+
+ // log a block explorer link for the failed transaction
+ await extractSignatureFromFailedTransaction(connection, err);
+
+ throw err;
+ }
+}
+
+/**
+ * Create an NFT collection on-chain, using the regular Metaplex standards
+ * with the `payer` as the authority
+ */
+export async function createCollection(connection: Connection, payer: Keypair, metadataV3: CreateMetadataAccountArgsV3) {
+ // create and initialize the SPL token mint
+ console.log("Creating the collection's mint...");
+ const mint = await createMint(
+ connection,
+ payer,
+ // mint authority
+ payer.publicKey,
+ // freeze authority
+ payer.publicKey,
+ // decimals - use `0` for NFTs since they are non-fungible
+ 0,
+ );
+ console.log('Mint address:', mint.toBase58());
+
+ // create the token account
+ console.log('Creating a token account...');
+ const tokenAccount = await createAccount(
+ connection,
+ payer,
+ mint,
+ payer.publicKey,
+ // undefined, undefined,
+ );
+ console.log('Token account:', tokenAccount.toBase58());
+
+ // mint 1 token ()
+ console.log('Minting 1 token for the collection...');
+ const mintSig = await mintTo(
+ connection,
+ payer,
+ mint,
+ tokenAccount,
+ payer,
+ // mint exactly 1 token
+ 1,
+ // no `multiSigners`
+ [],
+ undefined,
+ TOKEN_PROGRAM_ID,
+ );
+ // console.log(explorerURL({ txSignature: mintSig }));
+
+ // derive the PDA for the metadata account
+ const [metadataAccount, _bump] = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ );
+ console.log('Metadata account:', metadataAccount.toBase58());
+
+ // create an instruction to create the metadata account
+ const createMetadataIx = createCreateMetadataAccountV3Instruction(
+ {
+ metadata: metadataAccount,
+ mint: mint,
+ mintAuthority: payer.publicKey,
+ payer: payer.publicKey,
+ updateAuthority: payer.publicKey,
+ },
+ {
+ createMetadataAccountArgsV3: metadataV3,
+ },
+ );
+
+ // derive the PDA for the metadata account
+ const [masterEditionAccount, _bump2] = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer(), Buffer.from('edition', 'utf8')],
+ TOKEN_METADATA_PROGRAM_ID,
+ );
+ console.log('Master edition account:', masterEditionAccount.toBase58());
+
+ // create an instruction to create the metadata account
+ const createMasterEditionIx = createCreateMasterEditionV3Instruction(
+ {
+ edition: masterEditionAccount,
+ mint: mint,
+ mintAuthority: payer.publicKey,
+ payer: payer.publicKey,
+ updateAuthority: payer.publicKey,
+ metadata: metadataAccount,
+ },
+ {
+ createMasterEditionArgs: {
+ maxSupply: 0,
+ },
+ },
+ );
+
+ // create the collection size instruction
+ const collectionSizeIX = createSetCollectionSizeInstruction(
+ {
+ collectionMetadata: metadataAccount,
+ collectionAuthority: payer.publicKey,
+ collectionMint: mint,
+ },
+ {
+ setCollectionSizeArgs: { size: 50 },
+ },
+ );
+
+ try {
+ // construct the transaction with our instructions, making the `payer` the `feePayer`
+ const tx = new Transaction().add(createMetadataIx).add(createMasterEditionIx).add(collectionSizeIX);
+ tx.feePayer = payer.publicKey;
+
+ // send the transaction to the cluster
+ const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], {
+ commitment: 'confirmed',
+ skipPreflight: true,
+ });
+
+ console.log('\nCollection successfully created!');
+ console.log(explorerURL({ txSignature }));
+ } catch (err) {
+ console.error('\nFailed to create collection:', err);
+
+ // log a block explorer link for the failed transaction
+ await extractSignatureFromFailedTransaction(connection, err);
+
+ throw err;
+ }
+
+ // return all the accounts
+ return { mint, tokenAccount, metadataAccount, masterEditionAccount };
+}
+
+/**
+ * Mint a single compressed NFTs to any address
+ */
+export async function mintCompressedNFT(
+ connection: Connection,
+ payer: Keypair,
+ treeAddress: PublicKey,
+ collectionMint: PublicKey,
+ collectionMetadata: PublicKey,
+ collectionMasterEditionAccount: PublicKey,
+ compressedNFTMetadata: MetadataArgs,
+ receiverAddress?: PublicKey,
+) {
+ // derive the tree's authority (PDA), owned by Bubblegum
+ const [treeAuthority, _bump] = PublicKey.findProgramAddressSync([treeAddress.toBuffer()], BUBBLEGUM_PROGRAM_ID);
+
+ // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting
+ const [bubblegumSigner, _bump2] = PublicKey.findProgramAddressSync(
+ // `collection_cpi` is a custom prefix required by the Bubblegum program
+ [Buffer.from('collection_cpi', 'utf8')],
+ BUBBLEGUM_PROGRAM_ID,
+ );
+
+ // create an array of instruction, to mint multiple compressed NFTs at once
+ const mintIxs: TransactionInstruction[] = [];
+
+ /**
+ * correctly format the metadata args for the nft to mint
+ * ---
+ * note: minting an nft into a collection (via `createMintToCollectionV1Instruction`)
+ * will auto verify the collection. But, the `collection.verified` value inside the
+ * `metadataArgs` must be set to `false` in order for the instruction to succeed
+ */
+ const metadataArgs = Object.assign(compressedNFTMetadata, {
+ collection: { key: collectionMint, verified: false },
+ });
+
+ /**
+ * compute the data and creator hash for display in the console
+ *
+ * note: this is not required to do in order to mint new compressed nfts
+ * (since it is performed on chain via the Bubblegum program)
+ * this is only for demonstration
+ */
+ const computedDataHash = new PublicKey(computeDataHash(metadataArgs)).toBase58();
+ const computedCreatorHash = new PublicKey(computeCreatorHash(metadataArgs.creators)).toBase58();
+ console.log('computedDataHash:', computedDataHash);
+ console.log('computedCreatorHash:', computedCreatorHash);
+
+ /*
+ Add a single mint to collection instruction
+ ---
+ But you could all multiple in the same transaction, as long as your
+ transaction is still within the byte size limits
+ */
+ mintIxs.push(
+ createMintToCollectionV1Instruction(
+ {
+ payer: payer.publicKey,
+
+ merkleTree: treeAddress,
+ treeAuthority,
+ treeDelegate: payer.publicKey,
+
+ // set the receiver of the NFT
+ leafOwner: receiverAddress || payer.publicKey,
+ // set a delegated authority over this NFT
+ leafDelegate: payer.publicKey,
+
+ /*
+ You can set any delegate address at mint, otherwise should
+ normally be the same as `leafOwner`
+ NOTE: the delegate will be auto cleared upon NFT transfer
+ ---
+ in this case, we are setting the payer as the delegate
+ */
+
+ // collection details
+ collectionAuthority: payer.publicKey,
+ collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID,
+ collectionMint: collectionMint,
+ collectionMetadata: collectionMetadata,
+ editionAccount: collectionMasterEditionAccount,
+
+ // other accounts
+ compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
+ logWrapper: SPL_NOOP_PROGRAM_ID,
+ bubblegumSigner: bubblegumSigner,
+ tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
+ },
+ {
+ metadataArgs,
+ },
+ ),
+ );
+
+ try {
+ // construct the transaction with our instructions, making the `payer` the `feePayer`
+ const tx = new Transaction().add(...mintIxs);
+ tx.feePayer = payer.publicKey;
+
+ // send the transaction to the cluster
+ const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], {
+ commitment: 'confirmed',
+ skipPreflight: true,
+ });
+
+ console.log('\nSuccessfully minted the compressed NFT!');
+ console.log(explorerURL({ txSignature }));
+
+ return txSignature;
+ } catch (err) {
+ console.error('\nFailed to mint compressed NFT:', err);
+
+ // log a block explorer link for the failed transaction
+ await extractSignatureFromFailedTransaction(connection, err);
+
+ throw err;
+ }
+}
diff --git a/compression/cutils/anchor/tests/utils/helpers.ts b/compression/cutils/anchor/tests/utils/helpers.ts
new file mode 100644
index 000000000..75ea37208
--- /dev/null
+++ b/compression/cutils/anchor/tests/utils/helpers.ts
@@ -0,0 +1,260 @@
+import fs from 'node:fs';
+import path from 'node:path';
+import { type Connection, Keypair, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
+
+// define some default locations
+const DEFAULT_KEY_DIR_NAME = '.local_keys';
+const DEFAULT_PUBLIC_KEY_FILE = 'keys.json';
+const DEFAULT_DEMO_DATA_FILE = 'demo.json';
+
+/*
+ Load locally stored PublicKey addresses
+*/
+export function loadPublicKeysFromFile(absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`) {
+ try {
+ if (!absPath) throw Error('No path provided');
+ if (!fs.existsSync(absPath)) throw Error('File does not exist.');
+
+ // load the public keys from the file
+ const data = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })) || {};
+
+ // convert all loaded keyed values into valid public keys
+ for (const [key, value] of Object.entries(data)) {
+ data[key] = new PublicKey(value as string) ?? '';
+ }
+
+ return data;
+ } catch (err) {
+ // console.warn("Unable to load local file");
+ }
+ // always return an object
+ return {};
+}
+
+/*
+ Locally save a demo data to the filesystem for later retrieval
+*/
+export function saveDemoDataToFile(name: string, newData: any, absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_DEMO_DATA_FILE}`) {
+ try {
+ let data: object = {};
+
+ // fetch all the current values, when the storage file exists
+ if (fs.existsSync(absPath)) data = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })) || {};
+
+ data = { ...data, [name]: newData };
+
+ // actually save the data to the file
+ fs.writeFileSync(absPath, JSON.stringify(data), {
+ encoding: 'utf-8',
+ });
+
+ return data;
+ } catch (err) {
+ console.warn('Unable to save to file');
+ // console.warn(err);
+ }
+
+ // always return an object
+ return {};
+}
+
+/*
+ Locally save a PublicKey addresses to the filesystem for later retrieval
+*/
+export function savePublicKeyToFile(name: string, publicKey: PublicKey, absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`) {
+ try {
+ // if (!absPath) throw Error("No path provided");
+ // if (!fs.existsSync(absPath)) throw Error("File does not exist.");
+
+ // fetch all the current values
+ let data: any = loadPublicKeysFromFile(absPath);
+
+ // convert all loaded keyed values from PublicKeys to strings
+ for (const [key, value] of Object.entries(data)) {
+ data[key as any] = (value as PublicKey).toBase58();
+ }
+ data = { ...data, [name]: publicKey.toBase58() };
+
+ // actually save the data to the file
+ fs.writeFileSync(absPath, JSON.stringify(data), {
+ encoding: 'utf-8',
+ });
+
+ // reload the keys for sanity
+ data = loadPublicKeysFromFile(absPath);
+
+ return data;
+ } catch (err) {
+ console.warn('Unable to save to file');
+ }
+ // always return an object
+ return {};
+}
+
+/*
+ Load a locally stored JSON keypair file and convert it to a valid Keypair
+*/
+export function loadKeypairFromFile(absPath: string) {
+ try {
+ if (!absPath) throw Error('No path provided');
+ if (!fs.existsSync(absPath)) throw Error('File does not exist.');
+
+ // load the keypair from the file
+ const keyfileBytes = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' }));
+ // parse the loaded secretKey into a valid keypair
+ const keypair = Keypair.fromSecretKey(new Uint8Array(keyfileBytes));
+ return keypair;
+ } catch (err) {
+ console.error('loadKeypairFromFile:', err);
+ throw err;
+ }
+}
+
+/*
+ Save a locally stored JSON keypair file for later importing
+ TODO: delete this function and use the helpers library
+*/
+export function saveKeypairToFile(keypair: Keypair, relativeFileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) {
+ const fileName = path.join(dirName, `${relativeFileName}.json`);
+
+ // create the `dirName` directory, if it does not exists
+ if (!fs.existsSync(`./${dirName}/`)) fs.mkdirSync(`./${dirName}/`);
+
+ // remove the current file, if it already exists
+ if (fs.existsSync(fileName)) fs.unlinkSync(fileName);
+
+ // write the `secretKey` value as a string
+ fs.writeFileSync(fileName, `[${keypair.secretKey.toString()}]`, {
+ encoding: 'utf-8',
+ });
+
+ return fileName;
+}
+
+/*
+ Attempt to load a keypair from the filesystem, or generate and save a new one
+*/
+export function loadOrGenerateKeypair(fileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) {
+ try {
+ // compute the path to locate the file
+ const searchPath = path.join(dirName, `${fileName}.json`);
+ let keypair = Keypair.generate();
+
+ // attempt to load the keypair from the file
+ if (fs.existsSync(searchPath)) keypair = loadKeypairFromFile(searchPath);
+ // when unable to locate the keypair, save the new one
+ else saveKeypairToFile(keypair, fileName, dirName);
+
+ return keypair;
+ } catch (err) {
+ console.error('loadOrGenerateKeypair:', err);
+ throw err;
+ }
+}
+
+/*
+ Compute the Solana explorer address for the various data
+*/
+export function explorerURL({
+ address,
+ txSignature,
+ cluster,
+}: {
+ address?: string;
+ txSignature?: string;
+ cluster?: 'devnet' | 'testnet' | 'mainnet' | 'mainnet-beta';
+}) {
+ let baseUrl: string;
+ //
+ if (address) baseUrl = `https://explorer.solana.com/address/${address}`;
+ else if (txSignature) baseUrl = `https://explorer.solana.com/tx/${txSignature}`;
+ else return '[unknown]';
+
+ // auto append the desired search params
+ const url = new URL(baseUrl);
+ url.searchParams.append('cluster', cluster || 'devnet');
+ return `${url.toString()}\n`;
+}
+
+/**
+ * Auto airdrop the given wallet of of a balance of < 0.5 SOL
+ */
+export async function airdropOnLowBalance(connection: Connection, keypair: Keypair, forceAirdrop = false) {
+ // get the current balance
+ const balance = await connection.getBalance(keypair.publicKey);
+
+ // define the low balance threshold before airdrop
+ const MIN_BALANCE_TO_AIRDROP = LAMPORTS_PER_SOL / 2; // current: 0.5 SOL
+
+ // check the balance of the two accounts, airdrop when low
+ if (forceAirdrop === true || balance < MIN_BALANCE_TO_AIRDROP) {
+ console.log(`Requesting airdrop of 1 SOL to ${keypair.publicKey.toBase58()}...`);
+ await connection.requestAirdrop(keypair.publicKey, LAMPORTS_PER_SOL).then((sig) => {
+ console.log('Tx signature:', sig);
+ // balance = balance + LAMPORTS_PER_SOL;
+ });
+
+ // fetch the new balance
+ // const newBalance = await connection.getBalance(keypair.publicKey);
+ // return newBalance;
+ }
+ // else console.log("Balance of:", balance / LAMPORTS_PER_SOL, "SOL");
+
+ return balance;
+}
+
+/*
+ Helper function to extract a transaction signature from a failed transaction's error message
+*/
+export async function extractSignatureFromFailedTransaction(connection: Connection, err: any, fetchLogs?: boolean) {
+ if (err?.signature) return err.signature;
+
+ // extract the failed transaction's signature
+ const failedSig = new RegExp(/^((.*)?Error: )?(Transaction|Signature) ([A-Z0-9]{32,}) /gim).exec(err?.message?.toString())?.[4];
+
+ // ensure a signature was found
+ if (failedSig) {
+ // when desired, attempt to fetch the program logs from the cluster
+ if (fetchLogs)
+ await connection
+ .getTransaction(failedSig, {
+ maxSupportedTransactionVersion: 0,
+ })
+ .then((tx) => {
+ console.log(`\n==== Transaction logs for ${failedSig} ====`);
+ console.log(explorerURL({ txSignature: failedSig }), '');
+ console.log(tx?.meta?.logMessages ?? 'No log messages provided by RPC');
+ console.log('==== END LOGS ====\n');
+ });
+ else {
+ console.log('\n========================================');
+ console.log(explorerURL({ txSignature: failedSig }));
+ console.log('========================================\n');
+ }
+ }
+
+ // always return the failed signature value
+ return failedSig;
+}
+
+/*
+ Standard number formatter
+*/
+export function numberFormatter(num: number, forceDecimals = false) {
+ // set the significant figures
+ const minimumFractionDigits = num < 1 || forceDecimals ? 10 : 2;
+
+ // do the formatting
+ return new Intl.NumberFormat(undefined, {
+ minimumFractionDigits,
+ }).format(num);
+}
+
+/*
+ Display a separator in the console, with our without a message
+*/
+export function printConsoleSeparator(message?: string) {
+ console.log('\n===============================================');
+ console.log('===============================================\n');
+ if (message) console.log(message);
+}
diff --git a/compression/cutils/anchor/tests/utils/readAPI.ts b/compression/cutils/anchor/tests/utils/readAPI.ts
new file mode 100644
index 000000000..3562d91c6
--- /dev/null
+++ b/compression/cutils/anchor/tests/utils/readAPI.ts
@@ -0,0 +1,46 @@
+// I recommend using a WrappedConnection for production
+// as it supports more readAPI functionality
+// this is just a subset of functions for quick availabiity
+
+import axios from 'axios';
+
+//TODO insert
+const RPC_PATH = '';
+
+export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise {
+ try {
+ const axiosInstance = axios.create({
+ baseURL: rpcUrl,
+ });
+ const response = await axiosInstance.post(rpcUrl, {
+ jsonrpc: '2.0',
+ method: 'getAsset',
+ id: 'rpd-op-123',
+ params: {
+ id: assetId,
+ },
+ });
+ return response.data.result;
+ } catch (error) {
+ console.error(error);
+ }
+}
+
+export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise {
+ try {
+ const axiosInstance = axios.create({
+ baseURL: rpcUrl,
+ });
+ const response = await axiosInstance.post(rpcUrl, {
+ jsonrpc: '2.0',
+ method: 'getAssetProof',
+ id: 'rpd-op-123',
+ params: {
+ id: assetId,
+ },
+ });
+ return response.data.result;
+ } catch (error) {
+ console.error(error);
+ }
+}
diff --git a/compression/cutils/anchor/tests/utils/utils.ts b/compression/cutils/anchor/tests/utils/utils.ts
new file mode 100644
index 000000000..74206b75e
--- /dev/null
+++ b/compression/cutils/anchor/tests/utils/utils.ts
@@ -0,0 +1,65 @@
+import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum/dist/src/generated';
+import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata/dist/src/generated';
+import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression';
+import { type AccountMeta, PublicKey, SystemProgram } from '@solana/web3.js';
+import * as bs58 from 'bs58';
+
+export function decode(stuff: string) {
+ return bufferToArray(bs58.decode(stuff));
+}
+function bufferToArray(buffer: Buffer): number[] {
+ const nums: number[] = [];
+ for (let i = 0; i < buffer.length; i++) {
+ nums.push(buffer[i]);
+ }
+ return nums;
+}
+export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => {
+ if (!assetProof.proof || assetProof.proof.length === 0) {
+ throw new Error('Proof is empty');
+ }
+ return assetProof.proof.map((node) => ({
+ pubkey: new PublicKey(node),
+ isSigner: false,
+ isWritable: false,
+ }));
+};
+
+export function getAccounts(collectionMint: PublicKey, tree: PublicKey) {
+ // treeAuth
+ const [treeAuthority] = PublicKey.findProgramAddressSync([tree.toBuffer()], BUBBLEGUM_PROGRAM_ID);
+
+ // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting
+ const [bubblegumSigner] = PublicKey.findProgramAddressSync(
+ // `collection_cpi` is a custom prefix required by the Bubblegum program
+ [Buffer.from('collection_cpi', 'utf8')],
+ BUBBLEGUM_PROGRAM_ID,
+ );
+
+ // collection metadata account
+ const [metadataAccount] = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), collectionMint.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ );
+
+ // collection master edition
+ const [masterEditionAccount] = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), collectionMint.toBuffer(), Buffer.from('edition', 'utf8')],
+ TOKEN_METADATA_PROGRAM_ID,
+ );
+
+ return {
+ treeAuthority,
+ collectionMint,
+ collectionMetadata: metadataAccount,
+ editionAccount: masterEditionAccount,
+ merkleTree: tree,
+
+ bubblegumSigner,
+ logWrapper: SPL_NOOP_PROGRAM_ID,
+ compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
+ tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
+ bubblegumProgram: BUBBLEGUM_PROGRAM_ID,
+ systemProgram: SystemProgram.programId,
+ };
+}
diff --git a/compression/cutils/anchor/tsconfig.json b/compression/cutils/anchor/tsconfig.json
new file mode 100644
index 000000000..7fe94dda0
--- /dev/null
+++ b/compression/cutils/anchor/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "module": "commonjs",
+ "target": "esnext",
+ "esModuleInterop": true
+ }
+}
diff --git a/compression/cutils/package.json b/compression/cutils/package.json
deleted file mode 100644
index 5b1ce7fdc..000000000
--- a/compression/cutils/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.27.0",
- "@metaplex-foundation/js": "^0.19.4",
- "@metaplex-foundation/mpl-bubblegum": "^0.7.0",
- "@solana/spl-account-compression": "^0.1.8",
- "@solana/spl-token": "^0.3.8",
- "@solana/web3.js": "^1.77.3",
- "axios": "^1.4.0"
- },
- "devDependencies": {
- "@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",
- "ts-node": "^10.9.1",
- "typescript": "^4.3.5"
- }
-}
diff --git a/compression/cutils/programs/cutils/Cargo.toml b/compression/cutils/programs/cutils/Cargo.toml
deleted file mode 100644
index 9f3003dba..000000000
--- a/compression/cutils/programs/cutils/Cargo.toml
+++ /dev/null
@@ -1,27 +0,0 @@
-[package]
-name = "cutils"
-version = "0.1.0"
-description = "Created with Anchor"
-edition = "2021"
-
-[lib]
-crate-type = ["cdylib", "lib"]
-name = "cutils"
-
-[features]
-no-entrypoint = []
-no-idl = []
-no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
-
-[dependencies]
-anchor-lang = "0.26.0"
-solana-program = "1.14.18"
-spl-account-compression = { version="0.1.8", features = ["cpi"] }
-mpl-bubblegum = { version = "0.7.0", features = ["no-entrypoint", "cpi"] }
-
-# Added due to anchor and solana-cli wonkyness as of late
-getrandom = { version = "0.2.10", features = ["custom"] }
-winnow = "=0.4.1"
-toml_datetime = "=0.6.1"
diff --git a/compression/cutils/tests/setup.ts b/compression/cutils/tests/setup.ts
deleted file mode 100644
index 7f1540905..000000000
--- a/compression/cutils/tests/setup.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import {loadOrGenerateKeypair, savePublicKeyToFile} from "./utils/helpers";
-import {Connection, Keypair} from "@solana/web3.js";
-import {ValidDepthSizePair} from "@solana/spl-account-compression";
-import {createCollection, createTree} from "./utils/compression";
-import {CreateMetadataAccountArgsV3} from "@metaplex-foundation/mpl-token-metadata";
-
-async function setup() {
- const rpc = "https://api.devnet.solana.com/"
- const connection = new Connection(rpc, "confirmed")
-
- // Collection auth and treeCreator
- const payer = loadOrGenerateKeypair("payer");
-
- // Airdrop
- await connection.requestAirdrop(payer.publicKey, 1 * 10**9);
- console.log("Payer address:", payer.publicKey.toBase58());
-
- const treeKeypair = Keypair.generate();
- const maxDepthSizePair: ValidDepthSizePair = {
- maxDepth: 14,
- maxBufferSize: 64,
- };
- const canopyDepth = maxDepthSizePair.maxDepth - 5;
- const tree = await createTree(connection, payer, treeKeypair, maxDepthSizePair, canopyDepth);
-
- // locally save the addresses for demo
- savePublicKeyToFile("treeAddress", tree.treeAddress);
-
- const collectionMetadataV3: CreateMetadataAccountArgsV3 = {
- data: {
- name: "Super Sweet NFT Collection",
- symbol: "SSNC",
- // specific json metadata for the collection
- uri: "https://supersweetcollection.notarealurl/collection.json",
- sellerFeeBasisPoints: 100,
- creators: [
- {
- address: payer.publicKey,
- verified: false,
- share: 100,
- },
- ],
- collection: null,
- uses: null,
- },
- isMutable: false,
- collectionDetails: null,
- };
-
- // create a full token mint and initialize the collection (with the `payer` as the authority)
- const collection = await createCollection(connection, payer, collectionMetadataV3);
-
- // locally save the addresses for the demo
- savePublicKeyToFile("collectionMint", collection.mint);
-}
-
-// setup()
\ No newline at end of file
diff --git a/compression/cutils/tests/tests.ts b/compression/cutils/tests/tests.ts
deleted file mode 100644
index 4a62ed0a4..000000000
--- a/compression/cutils/tests/tests.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import {decode, getAccounts, mapProof} from "./utils/utils";
-import {SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID} from "@solana/spl-account-compression";
-import {getAsset, getAssetProof} from "./utils/readAPI";
-import {Cutils} from "../target/types/cutils";
-import {loadOrGenerateKeypair, loadPublicKeysFromFile} from "./utils/helpers";
-import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum/dist/src/generated";
-
-describe("cutils", () => {
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- const program = anchor.workspace.Cutils as anchor.Program;
-
- // NFT metadata pointer
- // TODO change
- const uri = "https://arweave.net/nVRvZDaOk5YAdr4ZBEeMjOVhynuv8P3vywvuN5sYSPo"
-
- const payer = loadOrGenerateKeypair("payer");
-
- // cNFT receiver
- const testWallet = loadOrGenerateKeypair("testWallet")
-
- const {collectionMint, treeAddress} = loadPublicKeysFromFile()
-
- it("Mint!", async () => {
- const tx = await program.methods.mint({uri})
- .accounts({
- payer: payer.publicKey,
- leafOwner: testWallet.publicKey,
- leafDelegate: testWallet.publicKey, //verify
- treeDelegate: payer.publicKey,
- collectionAuthority: payer.publicKey,
- collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID,
- ...getAccounts(collectionMint, treeAddress)
- })
- .transaction()
-
- const sx = await program.provider.sendAndConfirm(tx, [payer], {skipPreflight: true});
- console.log(` Tx Signature: ${sx}`);
- });
-
-
- // it("Verify", async () => {
- // // TODO: replace assetId
- // const assetId = "HUBMRAcYpow1ZUojdSMuvhcbNuCuRSAPWnXWjjYrpAVQ";
- //
- // const asset = await getAsset(assetId);
- // const proof = await getAssetProof(assetId);
- // const proofPathAsAccounts = mapProof(proof);
- // const root = decode(proof.root);
- // const dataHash = decode(asset.compression.data_hash);
- // const creatorHash = decode(asset.compression.creator_hash);
- // const nonce = new anchor.BN(asset.compression.leaf_id);
- // const index = asset.compression.leaf_id;
- //
- // const tx = await program.methods
- // .verify({
- // root, dataHash, creatorHash, nonce, index
- // })
- // .accounts({
- // leafOwner: testWallet.publicKey,
- // leafDelegate: testWallet.publicKey,
- // merkleTree: treeAddress,
- // compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- // })
- // .remainingAccounts(proofPathAsAccounts)
- // .transaction();
- //
- // const sx = await program.provider.sendAndConfirm(tx, [testWallet], {skipPreflight: true});
- //
- // // This fails due to incorrect owner
- // // const sx = await program.provider.sendAndConfirm(tx, [payer], {skipPreflight: true});
- //
- // console.log(` Tx Signature: ${sx}`);
- // });
-});
\ No newline at end of file
diff --git a/compression/cutils/tests/utils/compression.ts b/compression/cutils/tests/utils/compression.ts
deleted file mode 100644
index 5a9e9d683..000000000
--- a/compression/cutils/tests/utils/compression.ts
+++ /dev/null
@@ -1,382 +0,0 @@
-import {
- Keypair,
- PublicKey,
- Connection,
- Transaction,
- sendAndConfirmTransaction,
- TransactionInstruction,
-} from "@solana/web3.js";
-import { createAccount, createMint, mintTo, TOKEN_PROGRAM_ID } from "@solana/spl-token";
-import {
- SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- createAllocTreeIx,
- ValidDepthSizePair,
- SPL_NOOP_PROGRAM_ID,
-} from "@solana/spl-account-compression";
-import {
- PROGRAM_ID as BUBBLEGUM_PROGRAM_ID,
- MetadataArgs,
- computeCreatorHash,
- computeDataHash,
- createCreateTreeInstruction,
- createMintToCollectionV1Instruction,
-} from "@metaplex-foundation/mpl-bubblegum";
-import {
- PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID,
- CreateMetadataAccountArgsV3,
- createCreateMetadataAccountV3Instruction,
- createCreateMasterEditionV3Instruction,
- createSetCollectionSizeInstruction,
-} from "@metaplex-foundation/mpl-token-metadata";
-
-// import local helper functions
-import { explorerURL, extractSignatureFromFailedTransaction } from "./helpers";
-
-/*
- Helper function to create a merkle tree on chain, including allocating
- all the space required to store all the nodes
-*/
-export async function createTree(
- connection: Connection,
- payer: Keypair,
- treeKeypair: Keypair,
- maxDepthSizePair: ValidDepthSizePair,
- canopyDepth: number = 0,
-) {
- console.log("Creating a new Merkle tree...");
- console.log("treeAddress:", treeKeypair.publicKey.toBase58());
-
- // derive the tree's authority (PDA), owned by Bubblegum
- const [treeAuthority, _bump] = PublicKey.findProgramAddressSync(
- [treeKeypair.publicKey.toBuffer()],
- BUBBLEGUM_PROGRAM_ID,
- );
- console.log("treeAuthority:", treeAuthority.toBase58());
-
- // allocate the tree's account on chain with the `space`
- // NOTE: this will compute the space needed to store the tree on chain (and the lamports required to store it)
- const allocTreeIx = await createAllocTreeIx(
- connection,
- treeKeypair.publicKey,
- payer.publicKey,
- maxDepthSizePair,
- canopyDepth,
- );
-
- // create the instruction to actually create the tree
- const createTreeIx = createCreateTreeInstruction(
- {
- payer: payer.publicKey,
- treeCreator: payer.publicKey,
- treeAuthority,
- merkleTree: treeKeypair.publicKey,
- compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- // NOTE: this is used for some on chain logging
- logWrapper: SPL_NOOP_PROGRAM_ID,
- },
- {
- maxBufferSize: maxDepthSizePair.maxBufferSize,
- maxDepth: maxDepthSizePair.maxDepth,
- public: false,
- },
- BUBBLEGUM_PROGRAM_ID,
- );
-
- try {
- // create and send the transaction to initialize the tree
- const tx = new Transaction().add(allocTreeIx).add(createTreeIx);
- tx.feePayer = payer.publicKey;
- console.log("tx")
-
- // send the transaction
- const txSignature = await sendAndConfirmTransaction(
- connection,
- tx,
- // ensuring the `treeKeypair` PDA and the `payer` are BOTH signers
- [treeKeypair, payer],
- {
- commitment: "confirmed",
- skipPreflight: true,
- },
- );
-
- console.log("\nMerkle tree created successfully!");
- console.log(explorerURL({ txSignature }));
-
- // return useful info
- return { treeAuthority, treeAddress: treeKeypair.publicKey };
- } catch (err: any) {
- console.error("\nFailed to create merkle tree:", err);
-
- // log a block explorer link for the failed transaction
- await extractSignatureFromFailedTransaction(connection, err);
-
- throw err;
- }
-}
-
-/**
- * Create an NFT collection on-chain, using the regular Metaplex standards
- * with the `payer` as the authority
- */
-export async function createCollection(
- connection: Connection,
- payer: Keypair,
- metadataV3: CreateMetadataAccountArgsV3,
-) {
- // create and initialize the SPL token mint
- console.log("Creating the collection's mint...");
- const mint = await createMint(
- connection,
- payer,
- // mint authority
- payer.publicKey,
- // freeze authority
- payer.publicKey,
- // decimals - use `0` for NFTs since they are non-fungible
- 0,
- );
- console.log("Mint address:", mint.toBase58());
-
- // create the token account
- console.log("Creating a token account...");
- const tokenAccount = await createAccount(
- connection,
- payer,
- mint,
- payer.publicKey,
- // undefined, undefined,
- );
- console.log("Token account:", tokenAccount.toBase58());
-
- // mint 1 token ()
- console.log("Minting 1 token for the collection...");
- const mintSig = await mintTo(
- connection,
- payer,
- mint,
- tokenAccount,
- payer,
- // mint exactly 1 token
- 1,
- // no `multiSigners`
- [],
- undefined,
- TOKEN_PROGRAM_ID,
- );
- // console.log(explorerURL({ txSignature: mintSig }));
-
- // derive the PDA for the metadata account
- const [metadataAccount, _bump] = PublicKey.findProgramAddressSync(
- [Buffer.from("metadata", "utf8"), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()],
- TOKEN_METADATA_PROGRAM_ID,
- );
- console.log("Metadata account:", metadataAccount.toBase58());
-
- // create an instruction to create the metadata account
- const createMetadataIx = createCreateMetadataAccountV3Instruction(
- {
- metadata: metadataAccount,
- mint: mint,
- mintAuthority: payer.publicKey,
- payer: payer.publicKey,
- updateAuthority: payer.publicKey,
- },
- {
- createMetadataAccountArgsV3: metadataV3,
- },
- );
-
- // derive the PDA for the metadata account
- const [masterEditionAccount, _bump2] = PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata", "utf8"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mint.toBuffer(),
- Buffer.from("edition", "utf8"),
- ],
- TOKEN_METADATA_PROGRAM_ID,
- );
- console.log("Master edition account:", masterEditionAccount.toBase58());
-
- // create an instruction to create the metadata account
- const createMasterEditionIx = createCreateMasterEditionV3Instruction(
- {
- edition: masterEditionAccount,
- mint: mint,
- mintAuthority: payer.publicKey,
- payer: payer.publicKey,
- updateAuthority: payer.publicKey,
- metadata: metadataAccount,
- },
- {
- createMasterEditionArgs: {
- maxSupply: 0,
- },
- },
- );
-
- // create the collection size instruction
- const collectionSizeIX = createSetCollectionSizeInstruction(
- {
- collectionMetadata: metadataAccount,
- collectionAuthority: payer.publicKey,
- collectionMint: mint,
- },
- {
- setCollectionSizeArgs: { size: 50 },
- },
- );
-
- try {
- // construct the transaction with our instructions, making the `payer` the `feePayer`
- const tx = new Transaction()
- .add(createMetadataIx)
- .add(createMasterEditionIx)
- .add(collectionSizeIX);
- tx.feePayer = payer.publicKey;
-
- // send the transaction to the cluster
- const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], {
- commitment: "confirmed",
- skipPreflight: true,
- });
-
- console.log("\nCollection successfully created!");
- console.log(explorerURL({ txSignature }));
- } catch (err) {
- console.error("\nFailed to create collection:", err);
-
- // log a block explorer link for the failed transaction
- await extractSignatureFromFailedTransaction(connection, err);
-
- throw err;
- }
-
- // return all the accounts
- return { mint, tokenAccount, metadataAccount, masterEditionAccount };
-}
-
-/**
- * Mint a single compressed NFTs to any address
- */
-export async function mintCompressedNFT(
- connection: Connection,
- payer: Keypair,
- treeAddress: PublicKey,
- collectionMint: PublicKey,
- collectionMetadata: PublicKey,
- collectionMasterEditionAccount: PublicKey,
- compressedNFTMetadata: MetadataArgs,
- receiverAddress?: PublicKey,
-) {
- // derive the tree's authority (PDA), owned by Bubblegum
- const [treeAuthority, _bump] = PublicKey.findProgramAddressSync(
- [treeAddress.toBuffer()],
- BUBBLEGUM_PROGRAM_ID,
- );
-
- // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting
- const [bubblegumSigner, _bump2] = PublicKey.findProgramAddressSync(
- // `collection_cpi` is a custom prefix required by the Bubblegum program
- [Buffer.from("collection_cpi", "utf8")],
- BUBBLEGUM_PROGRAM_ID,
- );
-
- // create an array of instruction, to mint multiple compressed NFTs at once
- const mintIxs: TransactionInstruction[] = [];
-
- /**
- * correctly format the metadata args for the nft to mint
- * ---
- * note: minting an nft into a collection (via `createMintToCollectionV1Instruction`)
- * will auto verify the collection. But, the `collection.verified` value inside the
- * `metadataArgs` must be set to `false` in order for the instruction to succeed
- */
- const metadataArgs = Object.assign(compressedNFTMetadata, {
- collection: { key: collectionMint, verified: false },
- });
-
- /**
- * compute the data and creator hash for display in the console
- *
- * note: this is not required to do in order to mint new compressed nfts
- * (since it is performed on chain via the Bubblegum program)
- * this is only for demonstration
- */
- const computedDataHash = new PublicKey(computeDataHash(metadataArgs)).toBase58();
- const computedCreatorHash = new PublicKey(computeCreatorHash(metadataArgs.creators)).toBase58();
- console.log("computedDataHash:", computedDataHash);
- console.log("computedCreatorHash:", computedCreatorHash);
-
- /*
- Add a single mint to collection instruction
- ---
- But you could all multiple in the same transaction, as long as your
- transaction is still within the byte size limits
- */
- mintIxs.push(
- createMintToCollectionV1Instruction(
- {
- payer: payer.publicKey,
-
- merkleTree: treeAddress,
- treeAuthority,
- treeDelegate: payer.publicKey,
-
- // set the receiver of the NFT
- leafOwner: receiverAddress || payer.publicKey,
- // set a delegated authority over this NFT
- leafDelegate: payer.publicKey,
-
- /*
- You can set any delegate address at mint, otherwise should
- normally be the same as `leafOwner`
- NOTE: the delegate will be auto cleared upon NFT transfer
- ---
- in this case, we are setting the payer as the delegate
- */
-
- // collection details
- collectionAuthority: payer.publicKey,
- collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID,
- collectionMint: collectionMint,
- collectionMetadata: collectionMetadata,
- editionAccount: collectionMasterEditionAccount,
-
- // other accounts
- compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- logWrapper: SPL_NOOP_PROGRAM_ID,
- bubblegumSigner: bubblegumSigner,
- tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
- },
- {
- metadataArgs,
- },
- ),
- );
-
- try {
- // construct the transaction with our instructions, making the `payer` the `feePayer`
- const tx = new Transaction().add(...mintIxs);
- tx.feePayer = payer.publicKey;
-
- // send the transaction to the cluster
- const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], {
- commitment: "confirmed",
- skipPreflight: true,
- });
-
- console.log("\nSuccessfully minted the compressed NFT!");
- console.log(explorerURL({ txSignature }));
-
- return txSignature;
- } catch (err) {
- console.error("\nFailed to mint compressed NFT:", err);
-
- // log a block explorer link for the failed transaction
- await extractSignatureFromFailedTransaction(connection, err);
-
- throw err;
- }
-}
diff --git a/compression/cutils/tests/utils/helpers.ts b/compression/cutils/tests/utils/helpers.ts
deleted file mode 100644
index 99e4acbf5..000000000
--- a/compression/cutils/tests/utils/helpers.ts
+++ /dev/null
@@ -1,284 +0,0 @@
-import fs from "fs";
-import path from "path";
-import { Connection, Keypair, LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
-
-// define some default locations
-const DEFAULT_KEY_DIR_NAME = ".local_keys";
-const DEFAULT_PUBLIC_KEY_FILE = "keys.json";
-const DEFAULT_DEMO_DATA_FILE = "demo.json";
-
-/*
- Load locally stored PublicKey addresses
-*/
-export function loadPublicKeysFromFile(
- absPath: string = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`,
-) {
- try {
- if (!absPath) throw Error("No path provided");
- if (!fs.existsSync(absPath)) throw Error("File does not exist.");
-
- // load the public keys from the file
- const data = JSON.parse(fs.readFileSync(absPath, { encoding: "utf-8" })) || {};
-
- // convert all loaded keyed values into valid public keys
- for (const [key, value] of Object.entries(data)) {
- data[key] = new PublicKey(value as string) ?? "";
- }
-
- return data;
- } catch (err) {
- // console.warn("Unable to load local file");
- }
- // always return an object
- return {};
-}
-
-/*
- Locally save a demo data to the filesystem for later retrieval
-*/
-export function saveDemoDataToFile(
- name: string,
- newData: any,
- absPath: string = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_DEMO_DATA_FILE}`,
-) {
- try {
- let data: object = {};
-
- // fetch all the current values, when the storage file exists
- if (fs.existsSync(absPath))
- data = JSON.parse(fs.readFileSync(absPath, { encoding: "utf-8" })) || {};
-
- data = { ...data, [name]: newData };
-
- // actually save the data to the file
- fs.writeFileSync(absPath, JSON.stringify(data), {
- encoding: "utf-8",
- });
-
- return data;
- } catch (err) {
- console.warn("Unable to save to file");
- // console.warn(err);
- }
-
- // always return an object
- return {};
-}
-
-/*
- Locally save a PublicKey addresses to the filesystem for later retrieval
-*/
-export function savePublicKeyToFile(
- name: string,
- publicKey: PublicKey,
- absPath: string = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`,
-) {
- try {
- // if (!absPath) throw Error("No path provided");
- // if (!fs.existsSync(absPath)) throw Error("File does not exist.");
-
- // fetch all the current values
- let data: any = loadPublicKeysFromFile(absPath);
-
- // convert all loaded keyed values from PublicKeys to strings
- for (const [key, value] of Object.entries(data)) {
- data[key as any] = (value as PublicKey).toBase58();
- }
- data = { ...data, [name]: publicKey.toBase58() };
-
- // actually save the data to the file
- fs.writeFileSync(absPath, JSON.stringify(data), {
- encoding: "utf-8",
- });
-
- // reload the keys for sanity
- data = loadPublicKeysFromFile(absPath);
-
- return data;
- } catch (err) {
- console.warn("Unable to save to file");
- }
- // always return an object
- return {};
-}
-
-/*
- Load a locally stored JSON keypair file and convert it to a valid Keypair
-*/
-export function loadKeypairFromFile(absPath: string) {
- try {
- if (!absPath) throw Error("No path provided");
- if (!fs.existsSync(absPath)) throw Error("File does not exist.");
-
- // load the keypair from the file
- const keyfileBytes = JSON.parse(fs.readFileSync(absPath, { encoding: "utf-8" }));
- // parse the loaded secretKey into a valid keypair
- const keypair = Keypair.fromSecretKey(new Uint8Array(keyfileBytes));
- return keypair;
- } catch (err) {
- // return false;
- throw err;
- }
-}
-
-/*
- Save a locally stored JSON keypair file for later importing
-*/
-export function saveKeypairToFile(
- keypair: Keypair,
- fileName: string,
- dirName: string = DEFAULT_KEY_DIR_NAME,
-) {
- fileName = path.join(dirName, `${fileName}.json`);
-
- // create the `dirName` directory, if it does not exists
- if (!fs.existsSync(`./${dirName}/`)) fs.mkdirSync(`./${dirName}/`);
-
- // remove the current file, if it already exists
- if (fs.existsSync(fileName)) fs.unlinkSync(fileName);
-
- // write the `secretKey` value as a string
- fs.writeFileSync(fileName, `[${keypair.secretKey.toString()}]`, {
- encoding: "utf-8",
- });
-
- return fileName;
-}
-
-/*
- Attempt to load a keypair from the filesystem, or generate and save a new one
-*/
-export function loadOrGenerateKeypair(fileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) {
- try {
- // compute the path to locate the file
- const searchPath = path.join(dirName, `${fileName}.json`);
- let keypair = Keypair.generate();
-
- // attempt to load the keypair from the file
- if (fs.existsSync(searchPath)) keypair = loadKeypairFromFile(searchPath);
- // when unable to locate the keypair, save the new one
- else saveKeypairToFile(keypair, fileName, dirName);
-
- return keypair;
- } catch (err) {
- console.error("loadOrGenerateKeypair:", err);
- throw err;
- }
-}
-
-/*
- Compute the Solana explorer address for the various data
-*/
-export function explorerURL({
- address,
- txSignature,
- cluster,
- }: {
- address?: string;
- txSignature?: string;
- cluster?: "devnet" | "testnet" | "mainnet" | "mainnet-beta";
-}) {
- let baseUrl: string;
- //
- if (address) baseUrl = `https://explorer.solana.com/address/${address}`;
- else if (txSignature) baseUrl = `https://explorer.solana.com/tx/${txSignature}`;
- else return "[unknown]";
-
- // auto append the desired search params
- const url = new URL(baseUrl);
- url.searchParams.append("cluster", cluster || "devnet");
- return url.toString() + "\n";
-}
-
-/**
- * Auto airdrop the given wallet of of a balance of < 0.5 SOL
- */
-export async function airdropOnLowBalance(
- connection: Connection,
- keypair: Keypair,
- forceAirdrop: boolean = false,
-) {
- // get the current balance
- let balance = await connection.getBalance(keypair.publicKey);
-
- // define the low balance threshold before airdrop
- const MIN_BALANCE_TO_AIRDROP = LAMPORTS_PER_SOL / 2; // current: 0.5 SOL
-
- // check the balance of the two accounts, airdrop when low
- if (forceAirdrop === true || balance < MIN_BALANCE_TO_AIRDROP) {
- console.log(`Requesting airdrop of 1 SOL to ${keypair.publicKey.toBase58()}...`);
- await connection.requestAirdrop(keypair.publicKey, LAMPORTS_PER_SOL).then(sig => {
- console.log("Tx signature:", sig);
- // balance = balance + LAMPORTS_PER_SOL;
- });
-
- // fetch the new balance
- // const newBalance = await connection.getBalance(keypair.publicKey);
- // return newBalance;
- }
- // else console.log("Balance of:", balance / LAMPORTS_PER_SOL, "SOL");
-
- return balance;
-}
-
-/*
- Helper function to extract a transaction signature from a failed transaction's error message
-*/
-export async function extractSignatureFromFailedTransaction(
- connection: Connection,
- err: any,
- fetchLogs?: boolean,
-) {
- if (err?.signature) return err.signature;
-
- // extract the failed transaction's signature
- const failedSig = new RegExp(/^((.*)?Error: )?(Transaction|Signature) ([A-Z0-9]{32,}) /gim).exec(
- err?.message?.toString(),
- )?.[4];
-
- // ensure a signature was found
- if (failedSig) {
- // when desired, attempt to fetch the program logs from the cluster
- if (fetchLogs)
- await connection
- .getTransaction(failedSig, {
- maxSupportedTransactionVersion: 0,
- })
- .then(tx => {
- console.log(`\n==== Transaction logs for ${failedSig} ====`);
- console.log(explorerURL({ txSignature: failedSig }), "");
- console.log(tx?.meta?.logMessages ?? "No log messages provided by RPC");
- console.log(`==== END LOGS ====\n`);
- });
- else {
- console.log("\n========================================");
- console.log(explorerURL({ txSignature: failedSig }));
- console.log("========================================\n");
- }
- }
-
- // always return the failed signature value
- return failedSig;
-}
-
-/*
- Standard number formatter
-*/
-export function numberFormatter(num: number, forceDecimals = false) {
- // set the significant figures
- const minimumFractionDigits = num < 1 || forceDecimals ? 10 : 2;
-
- // do the formatting
- return new Intl.NumberFormat(undefined, {
- minimumFractionDigits,
- }).format(num);
-}
-
-/*
- Display a separator in the console, with our without a message
-*/
-export function printConsoleSeparator(message?: string) {
- console.log("\n===============================================");
- console.log("===============================================\n");
- if (message) console.log(message);
-}
diff --git a/compression/cutils/tests/utils/readAPI.ts b/compression/cutils/tests/utils/readAPI.ts
deleted file mode 100644
index de9d6f7a4..000000000
--- a/compression/cutils/tests/utils/readAPI.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-// I recommend using a WrappedConnection for production
-// as it supports more readAPI functionality
-// this is just a subset of functions for quick availabiity
-
-import axios from "axios";
-
-//TODO insert
-const RPC_PATH = "";
-
-export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise {
- try {
- const axiosInstance = axios.create({
- baseURL: rpcUrl,
- });
- const response = await axiosInstance.post(rpcUrl, {
- jsonrpc: "2.0",
- method: "getAsset",
- id: "rpd-op-123",
- params: {
- id: assetId
- },
- });
- return response.data.result;
- } catch (error) {
- console.error(error);
- }
-}
-
-
-export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise {
- try {
-
- const axiosInstance = axios.create({
- baseURL: rpcUrl,
- });
- const response = await axiosInstance.post(rpcUrl, {
- jsonrpc: "2.0",
- method: "getAssetProof",
- id: "rpd-op-123",
- params: {
- id: assetId
- },
- });
- return response.data.result;
- } catch (error) {
- console.error(error);
- }
-}
\ No newline at end of file
diff --git a/compression/cutils/tests/utils/utils.ts b/compression/cutils/tests/utils/utils.ts
deleted file mode 100644
index 13cc7d2ce..000000000
--- a/compression/cutils/tests/utils/utils.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import {AccountMeta, PublicKey, SystemProgram} from "@solana/web3.js";
-import {PROGRAM_ID as BUBBLEGUM_PROGRAM_ID} from "@metaplex-foundation/mpl-bubblegum/dist/src/generated";
-import {PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID} from "@metaplex-foundation/mpl-token-metadata/dist/src/generated";
-import * as bs58 from "bs58";
-import {SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID} from "@solana/spl-account-compression";
-
-export function decode(stuff: string) {
- return bufferToArray(bs58.decode(stuff))
-}
-function bufferToArray(buffer: Buffer): number[] {
- const nums: number[] = [];
- for (let i = 0; i < buffer.length; i++) {
- nums.push(buffer[i]);
- }
- return nums;
-}
-export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => {
- if (!assetProof.proof || assetProof.proof.length === 0) {
- throw new Error("Proof is empty");
- }
- return assetProof.proof.map((node) => ({
- pubkey: new PublicKey(node),
- isSigner: false,
- isWritable: false,
- }));
-};
-
-export function getAccounts(collectionMint: PublicKey, tree: PublicKey) {
- // treeAuth
- const [treeAuthority] = PublicKey.findProgramAddressSync(
- [tree.toBuffer()],
- BUBBLEGUM_PROGRAM_ID
- );
-
- // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting
- const [bubblegumSigner] = PublicKey.findProgramAddressSync(
- // `collection_cpi` is a custom prefix required by the Bubblegum program
- [Buffer.from("collection_cpi", "utf8")],
- BUBBLEGUM_PROGRAM_ID
- );
-
- // collection metadata account
- const [metadataAccount] = PublicKey.findProgramAddressSync(
- [Buffer.from("metadata", "utf8"), TOKEN_METADATA_PROGRAM_ID.toBuffer(), collectionMint.toBuffer()],
- TOKEN_METADATA_PROGRAM_ID
- );
-
- // collection master edition
- const [masterEditionAccount] = PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata", "utf8"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- collectionMint.toBuffer(),
- Buffer.from("edition", "utf8"),
- ],
- TOKEN_METADATA_PROGRAM_ID
- );
-
- return {
- treeAuthority,
- collectionMint,
- collectionMetadata: metadataAccount,
- editionAccount: masterEditionAccount,
- merkleTree: tree,
-
- bubblegumSigner,
- logWrapper: SPL_NOOP_PROGRAM_ID,
- compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
- tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
- bubblegumProgram: BUBBLEGUM_PROGRAM_ID,
- systemProgram: SystemProgram.programId,
- };
-}
\ No newline at end of file
diff --git a/compression/cutils/tsconfig.json b/compression/cutils/tsconfig.json
deleted file mode 100644
index cfa5e7660..000000000
--- a/compression/cutils/tsconfig.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "compilerOptions": {
- "types": [
- "mocha",
- "chai"
- ],
- "typeRoots": [
- "./node_modules/@types"
- ],
- "module": "commonjs",
- "target": "esnext",
- "esModuleInterop": true,
- }
-}
\ No newline at end of file
diff --git a/oracles/pyth/anchor/.gitignore b/oracles/pyth/anchor/.gitignore
index d243ecc13..152e6d3ed 100644
--- a/oracles/pyth/anchor/.gitignore
+++ b/oracles/pyth/anchor/.gitignore
@@ -1,7 +1,5 @@
-
.anchor
.DS_Store
target
**/*.rs.bk
-node_modules
test-ledger
diff --git a/oracles/pyth/anchor/Anchor.toml b/oracles/pyth/anchor/Anchor.toml
index 35e554526..647df9653 100644
--- a/oracles/pyth/anchor/Anchor.toml
+++ b/oracles/pyth/anchor/Anchor.toml
@@ -1,21 +1,15 @@
+[toolchain]
+
[features]
-seeds = false
+resolution = true
skip-lint = false
+
[programs.localnet]
-pythexample = "F6mNuN1xoPdRaZcUX3Xviq7x1EFtoBXygpFggCLd62eU"
+pythexample = "GUkjQmrLPFXXNK1bFLKt8XQi6g3TjxcHVspbjDoHvMG2"
[registry]
url = "https://api.apr.dev/"
[provider]
cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
-
-[test.validator]
-url = "https://api.mainnet-beta.solana.com/"
-
-[[test.validator.clone]]
-address = "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG"
+wallet = "~/.config/solana/id.json"
\ No newline at end of file
diff --git a/oracles/pyth/anchor/Cargo.toml b/oracles/pyth/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/oracles/pyth/anchor/Cargo.toml
+++ b/oracles/pyth/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/oracles/pyth/anchor/migrations/deploy.ts b/oracles/pyth/anchor/migrations/deploy.ts
deleted file mode 100644
index 82fb175fa..000000000
--- a/oracles/pyth/anchor/migrations/deploy.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-// Migrations are an early feature. Currently, they're nothing more than this
-// single deploy script that's invoked from the CLI, injecting a provider
-// configured from the workspace's Anchor.toml.
-
-const anchor = require("@coral-xyz/anchor");
-
-module.exports = async function (provider) {
- // Configure client to use the provider.
- anchor.setProvider(provider);
-
- // Add your deploy script here.
-};
diff --git a/oracles/pyth/anchor/package.json b/oracles/pyth/anchor/package.json
deleted file mode 100644
index 4de1ab3c2..000000000
--- a/oracles/pyth/anchor/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.27.0"
- },
- "devDependencies": {
- "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"
- }
-}
diff --git a/oracles/pyth/anchor/programs/pythexample/Cargo.toml b/oracles/pyth/anchor/programs/pythexample/Cargo.toml
index fdb48140e..4068c8c60 100644
--- a/oracles/pyth/anchor/programs/pythexample/Cargo.toml
+++ b/oracles/pyth/anchor/programs/pythexample/Cargo.toml
@@ -9,13 +9,13 @@ crate-type = ["cdylib", "lib"]
name = "pythexample"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
-pyth-sdk-solana = "0.8.0"
-pyth-sdk = "0.8.0"
+anchor-lang = "0.31.1"
+pyth-solana-receiver-sdk = "0.3.2"
\ No newline at end of file
diff --git a/oracles/pyth/anchor/programs/pythexample/src/error.rs b/oracles/pyth/anchor/programs/pythexample/src/error.rs
deleted file mode 100644
index a8a45b8a0..000000000
--- a/oracles/pyth/anchor/programs/pythexample/src/error.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-use anchor_lang::prelude::*;
-
-#[error_code]
-pub enum ErrorCode {
- #[msg("Could not load price account")]
- PythError,
- #[msg("Failed to serialize price account")]
- TryToSerializePriceAccount,
- #[msg("Invalid argument provided")]
- InvalidArgument,
-}
diff --git a/oracles/pyth/anchor/programs/pythexample/src/lib.rs b/oracles/pyth/anchor/programs/pythexample/src/lib.rs
index 08ade159e..8b1e2c56d 100644
--- a/oracles/pyth/anchor/programs/pythexample/src/lib.rs
+++ b/oracles/pyth/anchor/programs/pythexample/src/lib.rs
@@ -1,45 +1,24 @@
-#![allow(clippy::result_large_err)]
-
+use pyth_solana_receiver_sdk::price_update::PriceUpdateV2;
use anchor_lang::prelude::*;
-pub mod state;
-use state::PriceFeed;
-
-pub mod error;
-use error::ErrorCode;
-declare_id!("F6mNuN1xoPdRaZcUX3Xviq7x1EFtoBXygpFggCLd62eU");
+declare_id!("GUkjQmrLPFXXNK1bFLKt8XQi6g3TjxcHVspbjDoHvMG2");
#[program]
-pub mod pythexample {
+pub mod anchor_test {
use super::*;
- pub fn read_price(ctx: Context) -> Result<()> {
- let price_feed = &ctx.accounts.price_feed;
- let clock = &ctx.accounts.clock;
- // Get the current timestamp
- let timestamp: i64 = clock.unix_timestamp;
- // Load the price from the price feed. Here, the price can be no older than 500 seconds.
- let price: pyth_sdk::Price = price_feed
- .get_price_no_older_than(timestamp, 30)
- .ok_or(ErrorCode::PythError)?;
-
- let confidence_interval: u64 = price.conf;
-
- let asset_price_full: i64 = price.price;
-
- let asset_exponent: i32 = price.expo;
-
- let asset_price = asset_price_full as f64 * 10f64.powi(asset_exponent);
-
- msg!("Price: {}", asset_price);
- msg!("Confidence interval: {}", confidence_interval);
+ pub fn read_price(ctx: Context) -> Result<()> {
+ let price_update = &ctx.accounts.price_update;
+ msg!("Price feed id: {:?}", price_update.price_message.feed_id);
+ msg!("Price: {:?}", price_update.price_message.price);
+ msg!("Confidence: {:?}", price_update.price_message.conf);
+ msg!("Exponent: {:?}", price_update.price_message.exponent);
+ msg!("Publish Time: {:?}", price_update.price_message.publish_time);
Ok(())
}
}
#[derive(Accounts)]
-pub struct Pyth<'info> {
- pub price_feed: Account<'info, PriceFeed>,
- pub system_program: Program<'info, System>,
- pub clock: Sysvar<'info, Clock>,
+pub struct ReadPrice<'info> {
+ pub price_update: Account<'info, PriceUpdateV2>,
}
diff --git a/oracles/pyth/anchor/programs/pythexample/src/state.rs b/oracles/pyth/anchor/programs/pythexample/src/state.rs
deleted file mode 100644
index 9f0cb2647..000000000
--- a/oracles/pyth/anchor/programs/pythexample/src/state.rs
+++ /dev/null
@@ -1,43 +0,0 @@
-// This file is the pyth default implementation for using PriceAccount in your Anchor context.
-use anchor_lang::prelude::*;
-use pyth_sdk_solana::state::load_price_account;
-use std::ops::Deref;
-use std::str::FromStr;
-
-// import the error code from the error.rs file
-use crate::error::ErrorCode;
-
-#[derive(Clone)]
-pub struct PriceFeed(pyth_sdk::PriceFeed);
-
-impl anchor_lang::Owner for PriceFeed {
- fn owner() -> Pubkey {
- // The mainnet Pyth program ID
- let oracle_addr = "FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH";
- Pubkey::from_str(oracle_addr).unwrap()
- }
-}
-
-impl anchor_lang::AccountDeserialize for PriceFeed {
- fn try_deserialize_unchecked(data: &mut &[u8]) -> Result {
- let account = load_price_account(data).map_err(|_x| error!(ErrorCode::PythError))?;
- let zeros: [u8; 32] = [0; 32];
- let dummy_key = Pubkey::new_from_array(zeros);
- let feed = account.to_price_feed(&dummy_key);
- Ok(PriceFeed(feed))
- }
-}
-
-impl anchor_lang::AccountSerialize for PriceFeed {
- fn try_serialize(&self, _writer: &mut W) -> std::result::Result<(), Error> {
- Err(error!(ErrorCode::TryToSerializePriceAccount))
- }
-}
-
-impl Deref for PriceFeed {
- type Target = pyth_sdk::PriceFeed;
-
- fn deref(&self) -> &Self::Target {
- &self.0
- }
-}
diff --git a/oracles/pyth/anchor/tests/pythexample.ts b/oracles/pyth/anchor/tests/pythexample.ts
deleted file mode 100644
index e7c7a38e8..000000000
--- a/oracles/pyth/anchor/tests/pythexample.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { Pythexample } from "../target/types/pythexample";
-
-describe("pythexample", () => {
- // Configure the client to use the local cluster.
- anchor.setProvider(anchor.AnchorProvider.env());
-
- const program = anchor.workspace.Pythexample as Program;
-
- const PYTH_FEED_ID = new anchor.web3.PublicKey(
- "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG"
- );
-
- it("Check SOL_USD Price", async () => {
- const tx = await program.methods
- .readPrice()
- .accounts({
- priceFeed: PYTH_FEED_ID,
- systemProgram: anchor.web3.SystemProgram.programId,
- clock: anchor.web3.SYSVAR_CLOCK_PUBKEY,
- })
- .rpc();
-
- console.log(
- "Your transaction signature, find the price in the program logs",
- tx
- );
- });
-});
diff --git a/oracles/pyth/anchor/tsconfig.json b/oracles/pyth/anchor/tsconfig.json
deleted file mode 100644
index 558b83e5e..000000000
--- a/oracles/pyth/anchor/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
- }
-
\ No newline at end of file
diff --git a/oracles/pyth/seahorse/Anchor.toml b/oracles/pyth/seahorse/Anchor.toml
index 297555b1e..db640af03 100644
--- a/oracles/pyth/seahorse/Anchor.toml
+++ b/oracles/pyth/seahorse/Anchor.toml
@@ -12,7 +12,7 @@ cluster = "Localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
[test.validator]
url = "https://api.mainnet-beta.solana.com/"
diff --git a/oracles/pyth/seahorse/Cargo.toml b/oracles/pyth/seahorse/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/oracles/pyth/seahorse/Cargo.toml
+++ b/oracles/pyth/seahorse/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/oracles/pyth/seahorse/migrations/deploy.ts b/oracles/pyth/seahorse/migrations/deploy.ts
index 82fb175fa..64a1c3599 100644
--- a/oracles/pyth/seahorse/migrations/deploy.ts
+++ b/oracles/pyth/seahorse/migrations/deploy.ts
@@ -2,9 +2,9 @@
// single deploy script that's invoked from the CLI, injecting a provider
// configured from the workspace's Anchor.toml.
-const anchor = require("@coral-xyz/anchor");
+const anchor = require('@coral-xyz/anchor');
-module.exports = async function (provider) {
+module.exports = async (provider) => {
// Configure client to use the provider.
anchor.setProvider(provider);
diff --git a/oracles/pyth/seahorse/package.json b/oracles/pyth/seahorse/package.json
index 4de1ab3c2..b5355136b 100644
--- a/oracles/pyth/seahorse/package.json
+++ b/oracles/pyth/seahorse/package.json
@@ -1,19 +1,19 @@
{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.27.0"
- },
- "devDependencies": {
- "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"
- }
+ "scripts": {
+ "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+ },
+ "dependencies": {
+ "@coral-xyz/anchor": "^0.27.0"
+ },
+ "devDependencies": {
+ "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"
+ }
}
diff --git a/oracles/pyth/seahorse/programs/seahorse/Cargo.toml b/oracles/pyth/seahorse/programs/seahorse/Cargo.toml
index 5873d408e..add3a2554 100644
--- a/oracles/pyth/seahorse/programs/seahorse/Cargo.toml
+++ b/oracles/pyth/seahorse/programs/seahorse/Cargo.toml
@@ -9,11 +9,12 @@ crate-type = ["cdylib", "lib"]
name = "seahorse"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
[dependencies]
anchor-lang = "0.27.0"
diff --git a/oracles/pyth/seahorse/tests/seahorse.ts b/oracles/pyth/seahorse/tests/seahorse.ts
index 2f1ce953a..ebb71e7fe 100644
--- a/oracles/pyth/seahorse/tests/seahorse.ts
+++ b/oracles/pyth/seahorse/tests/seahorse.ts
@@ -1,18 +1,16 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { Seahorse } from "../target/types/seahorse";
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import type { Seahorse } from '../target/types/seahorse';
-describe("seahorse", () => {
+describe('seahorse', () => {
// Configure the client to use the local cluster.
anchor.setProvider(anchor.AnchorProvider.env());
const program = anchor.workspace.Seahorse as Program;
- const PYTH_PRICE_ACCOUNT = new anchor.web3.PublicKey(
- "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG"
- );
+ const PYTH_PRICE_ACCOUNT = new anchor.web3.PublicKey('H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG');
- it("Is initialized!", async () => {
+ it('Is initialized!', async () => {
// Add your test here.
const tx = await program.methods
.getPythPrice()
@@ -20,6 +18,6 @@ describe("seahorse", () => {
pythPriceAccount: PYTH_PRICE_ACCOUNT,
})
.rpc();
- console.log("Your transaction signature", tx);
+ console.log('Your transaction signature', tx);
});
});
diff --git a/oracles/pyth/seahorse/tsconfig.json b/oracles/pyth/seahorse/tsconfig.json
index 558b83e5e..cd5d2e3d0 100644
--- a/oracles/pyth/seahorse/tsconfig.json
+++ b/oracles/pyth/seahorse/tsconfig.json
@@ -1,11 +1,10 @@
{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
- }
-
\ No newline at end of file
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 000000000..38f2bf014
--- /dev/null
+++ b/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "program-examples",
+ "version": "1.0.0",
+ "description": "### :crab: Rust. :snake: Python. :link: All onchain.",
+ "scripts": {
+ "sync-package-json": "ts-node scripts/sync-package-json.ts",
+ "format:fix": "pnpx @biomejs/biome format --write ./",
+ "lint:fix": "pnpx @biomejs/biome lint --write ./",
+ "lint": "pnpx @biomejs/biome lint ./",
+ "fix": "pnpx @biomejs/biome check --write ./",
+ "check": "pnpx @biomejs/biome check ./",
+ "prepare": "husky"
+ },
+ "lint-staged": {
+ "*": ["biome check --apply --no-errors-on-unmatched --files-ignore-unknown=true"]
+ },
+ "keywords": [],
+ "author": "Solana Foundation",
+ "license": "MIT",
+ "devDependencies": {
+ "@biomejs/biome": "1.8.1",
+ "@types/node": "^20.9.0",
+ "husky": "^9.0.11",
+ "picocolors": "^1.0.0",
+ "ts-node": "^10.9.1",
+ "typescript": "^5.2.2"
+ },
+ "dependencies": {
+ "@coral-xyz/anchor": "^0.30.1",
+ "@solana/web3.js": "^1.95.2",
+ "anchor-bankrun": "^0.4.0",
+ "chai": "^5.1.1",
+ "solana-bankrun": "^0.3.0"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 000000000..967bde6c0
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,950 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.1
+ version: 0.30.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)
+ anchor-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(@coral-xyz/anchor@0.30.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: ^5.1.1
+ version: 5.1.1
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@biomejs/biome':
+ specifier: 1.8.1
+ version: 1.8.1
+ '@types/node':
+ specifier: ^20.9.0
+ version: 20.14.2
+ husky:
+ specifier: ^9.0.11
+ version: 9.0.11
+ picocolors:
+ specifier: ^1.0.0
+ version: 1.0.1
+ ts-node:
+ specifier: ^10.9.1
+ version: 10.9.2(@types/node@20.14.2)(typescript@5.4.5)
+ typescript:
+ specifier: ^5.2.2
+ version: 5.4.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==}
+ engines: {node: '>=6.9.0'}
+
+ '@biomejs/biome@1.8.1':
+ resolution: {integrity: sha512-fQXGfvq6DIXem12dGQCM2tNF+vsNHH1qs3C7WeOu75Pd0trduoTmoO7G4ntLJ2qDs5wuw981H+cxQhi1uHnAtA==}
+ engines: {node: '>=14.21.3'}
+ hasBin: true
+
+ '@biomejs/cli-darwin-arm64@1.8.1':
+ resolution: {integrity: sha512-XLiB7Uu6GALIOBWzQ2aMD0ru4Ly5/qSeQF7kk3AabzJ/kwsEWSe33iVySBP/SS2qv25cgqNiLksjGcw2bHT3mw==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@biomejs/cli-darwin-x64@1.8.1':
+ resolution: {integrity: sha512-uMTSxVLMfqkBVqyc25hSn83jBbp+wtWjzM/pHFlKXt3htJuw7FErVGW0nmQ9Sxa9vJ7GcqoltLMl28VQRIMYzg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@biomejs/cli-linux-arm64-musl@1.8.1':
+ resolution: {integrity: sha512-UQ8Wc01J0wQL+5AYOc7qkJn20B4PZmQL1KrmDZh7ot0DvD6aX4+8mmfd/dG5b6Zjo/44QvCKcvkFGCMRYuhWZA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@biomejs/cli-linux-arm64@1.8.1':
+ resolution: {integrity: sha512-3SzZRuC/9Oi2P2IBNPsEj0KXxSXUEYRR2kfRF/Ve8QAfGgrt4qnwuWd6QQKKN5R+oYH691qjm+cXBKEcrP1v/Q==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@biomejs/cli-linux-x64-musl@1.8.1':
+ resolution: {integrity: sha512-fYbP/kNu/rtZ4kKzWVocIdqZOtBSUEg9qUhZaao3dy3CRzafR6u6KDtBeSCnt47O+iLnks1eOR1TUxzr5+QuqA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+
+ '@biomejs/cli-linux-x64@1.8.1':
+ resolution: {integrity: sha512-AeBycVdNrTzsyYKEOtR2R0Ph0hCD0sCshcp2aOnfGP0hCZbtFg09D0SdKLbyzKntisY41HxKVrydYiaApp+2uw==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+
+ '@biomejs/cli-win32-arm64@1.8.1':
+ resolution: {integrity: sha512-6tEd1H/iFKpgpE3OIB7oNgW5XkjiVMzMRPL8zYoZ036YfuJ5nMYm9eB9H/y81+8Z76vL48fiYzMPotJwukGPqQ==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@biomejs/cli-win32-x64@1.8.1':
+ resolution: {integrity: sha512-g2H31jJzYmS4jkvl6TiyEjEX+Nv79a5km/xn+5DARTp5MBFzC9gwceusSSB2AkJKqZzY131AiACAWjKrVt5Ijw==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [win32]
+
+ '@coral-xyz/anchor-errors@0.30.1':
+ resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==}
+ engines: {node: '>=10'}
+
+ '@coral-xyz/anchor@0.30.1':
+ resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.30.1':
+ resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.4.15':
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.12':
+ resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}
+
+ '@tsconfig/node10@1.0.11':
+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.14.2':
+ resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ acorn-walk@8.3.2:
+ resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.11.3:
+ resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@5.1.1:
+ resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==}
+ engines: {node: '>=12'}
+
+ check-error@2.1.1:
+ resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
+ engines: {node: '>= 16'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
+ 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'}
+
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
+ dot-case@3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ husky@9.0.11:
+ resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ loupe@3.1.1:
+ resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==}
+
+ lower-case@2.0.2:
+ resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ pathval@2.0.0:
+ resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
+ engines: {node: '>= 14.16'}
+
+ picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
+ tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+
+ typescript@5.4.5:
+ resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@biomejs/biome@1.8.1':
+ optionalDependencies:
+ '@biomejs/cli-darwin-arm64': 1.8.1
+ '@biomejs/cli-darwin-x64': 1.8.1
+ '@biomejs/cli-linux-arm64': 1.8.1
+ '@biomejs/cli-linux-arm64-musl': 1.8.1
+ '@biomejs/cli-linux-x64': 1.8.1
+ '@biomejs/cli-linux-x64-musl': 1.8.1
+ '@biomejs/cli-win32-arm64': 1.8.1
+ '@biomejs/cli-win32-x64': 1.8.1
+
+ '@biomejs/cli-darwin-arm64@1.8.1':
+ optional: true
+
+ '@biomejs/cli-darwin-x64@1.8.1':
+ optional: true
+
+ '@biomejs/cli-linux-arm64-musl@1.8.1':
+ optional: true
+
+ '@biomejs/cli-linux-arm64@1.8.1':
+ optional: true
+
+ '@biomejs/cli-linux-x64-musl@1.8.1':
+ optional: true
+
+ '@biomejs/cli-linux-x64@1.8.1':
+ optional: true
+
+ '@biomejs/cli-win32-arm64@1.8.1':
+ optional: true
+
+ '@biomejs/cli-win32-x64@1.8.1':
+ optional: true
+
+ '@coral-xyz/anchor-errors@0.30.1': {}
+
+ '@coral-xyz/anchor@0.30.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/anchor-errors': 0.30.1
+ '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@noble/hashes': 1.4.0
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.30.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
+ buffer-layout: 1.2.2
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.4.15': {}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.12':
+ dependencies:
+ tslib: 2.6.3
+
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.14.2':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 20.14.2
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ acorn-walk@8.3.2: {}
+
+ acorn@8.11.3: {}
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.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.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)
+
+ arg@4.1.3: {}
+
+ assertion-error@2.0.1: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@5.1.1:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.1
+ deep-eql: 5.0.2
+ loupe: 3.1.1
+ pathval: 2.0.0
+
+ check-error@2.1.1: {}
+
+ commander@2.20.3: {}
+
+ create-require@1.1.1: {}
+
+ cross-fetch@3.1.8:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ crypto-hash@1.3.0: {}
+
+ deep-eql@5.0.2: {}
+
+ delay@5.0.0: {}
+
+ diff@4.0.2: {}
+
+ dot-case@3.0.4:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.6.3
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ get-func-name@2.0.2: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ husky@9.0.11: {}
+
+ ieee754@1.2.1: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ json-stringify-safe@5.0.1: {}
+
+ jsonparse@1.3.1: {}
+
+ loupe@3.1.1:
+ dependencies:
+ get-func-name: 2.0.2
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.6.3
+
+ make-error@1.3.6: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ pako@2.1.0: {}
+
+ pathval@2.0.0: {}
+
+ picocolors@1.0.1: {}
+
+ regenerator-runtime@0.14.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.12
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ snake-case@3.0.4:
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.6.3
+
+ solana-bankrun-darwin-arm64@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 20.14.2
+ acorn: 8.11.3
+ acorn-walk: 8.3.2
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.4.5
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
+ tslib@2.6.3: {}
+
+ typescript@5.4.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ v8-compile-cache-lib@3.0.1: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ yn@3.1.1: {}
diff --git a/scripts/lib/change-package-version.ts b/scripts/lib/change-package-version.ts
new file mode 100644
index 000000000..0e8dab176
--- /dev/null
+++ b/scripts/lib/change-package-version.ts
@@ -0,0 +1,14 @@
+import { readFileSync } from 'node:fs';
+
+export function changePackageVersion(file: string, pkgName: string, pkgVersion: string): [boolean, string] {
+ const content = JSON.parse(readFileSync(file).toString('utf-8'));
+ if (content.dependencies?.[pkgName] && content.dependencies[pkgName] !== pkgVersion) {
+ content.dependencies[pkgName] = pkgVersion;
+ return [true, content];
+ }
+ if (content.devDependencies?.[pkgName] && content.devDependencies[pkgName] !== pkgVersion) {
+ content.devDependencies[pkgName] = pkgVersion;
+ return [true, content];
+ }
+ return [false, content];
+}
diff --git a/scripts/lib/command-check.ts b/scripts/lib/command-check.ts
new file mode 100644
index 000000000..50806fd95
--- /dev/null
+++ b/scripts/lib/command-check.ts
@@ -0,0 +1,42 @@
+import { basename } from 'node:path';
+import * as p from 'picocolors';
+import { getDepsCount } from './get-deps-count';
+import { getRecursiveFileList } from './get-recursive-file-list';
+
+export function commandCheck(path = '.') {
+ const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json');
+ const depsCounter = getDepsCount(files);
+
+ const single: string[] = [];
+ const multiple: string[] = [];
+
+ Object.keys(depsCounter)
+ .sort()
+ .map((pkg) => {
+ const versions = depsCounter[pkg];
+ const versionMap = Object.keys(versions).sort();
+ const versionsLength = versionMap.length;
+
+ if (versionsLength === 1) {
+ const count = versions[versionMap[0]].length;
+ single.push(`${p.green('✔')} ${pkg}@${versionMap[0]} (${count})`);
+ return;
+ }
+
+ const versionCount: { version: string; count: number }[] = [];
+ for (const version of versionMap) {
+ versionCount.push({ version, count: versions[version].length });
+ }
+ versionCount.sort((a, b) => b.count - a.count);
+
+ multiple.push(`${p.yellow('⚠')} ${pkg} has ${versionsLength} versions:`);
+
+ for (const { count, version } of versionCount) {
+ multiple.push(` - ${p.bold(version)} (${count})`);
+ }
+ });
+
+ for (const string of [...single.sort(), ...multiple]) {
+ console.log(string);
+ }
+}
diff --git a/scripts/lib/command-help.ts b/scripts/lib/command-help.ts
new file mode 100644
index 000000000..dfbe8021f
--- /dev/null
+++ b/scripts/lib/command-help.ts
@@ -0,0 +1,26 @@
+export function commandHelp() {
+ console.log('Usage: yarn sync-package-json [options]');
+ console.log('');
+ console.log('Commands:');
+ console.log(' check Check package.json files');
+ console.log(' help Show this help');
+ console.log(' list List package.json files');
+ console.log(' set [ver] Set specific version in package.json files');
+ console.log(' update Update all versions in package.json files');
+ console.log('');
+ console.log('Arguments:');
+ console.log(' path Path to directory');
+ console.log('');
+ console.log('Examples:');
+ console.log(' yarn sync-package-json check');
+ console.log(' yarn sync-package-json check basics');
+ console.log(' yarn sync-package-json list');
+ console.log(' yarn sync-package-json list basics');
+ console.log(' yarn sync-package-json help');
+ console.log(' yarn sync-package-json set @coral-xyz/anchor@0.29.0');
+ console.log(' yarn sync-package-json set @coral-xyz/anchor@0.29.0 basics');
+ console.log(' yarn sync-package-json update');
+ console.log(' yarn sync-package-json update basics');
+ console.log(' yarn sync-package-json update . @solana/web3.js @solana/spl-token');
+ process.exit(0);
+}
diff --git a/scripts/lib/command-list.ts b/scripts/lib/command-list.ts
new file mode 100644
index 000000000..a127c1a73
--- /dev/null
+++ b/scripts/lib/command-list.ts
@@ -0,0 +1,9 @@
+import { basename } from 'node:path';
+import { getRecursiveFileList } from './get-recursive-file-list';
+
+export function commandList(path: string) {
+ const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json');
+ for (const file of files) {
+ console.log(file);
+ }
+}
diff --git a/scripts/lib/command-set.ts b/scripts/lib/command-set.ts
new file mode 100644
index 000000000..33d5be755
--- /dev/null
+++ b/scripts/lib/command-set.ts
@@ -0,0 +1,43 @@
+import { writeFileSync } from 'node:fs';
+import { basename } from 'node:path';
+import { changePackageVersion } from './change-package-version';
+import { getRecursiveFileList } from './get-recursive-file-list';
+
+export function commandSet(version: string, path = '.') {
+ if (!version) {
+ console.error('Version is required');
+ process.exit(1);
+ }
+ if (
+ !version
+ // Strip first character if it's a `@`
+ .replace(/^@/, '')
+ .includes('@')
+ ) {
+ console.error(`Invalid package version: ${version}. Provide package with version, e.g. @solana/web3.js@1.0.0`);
+ process.exit(1);
+ }
+ // Take anything after the second `@` as the version, the rest is the package name
+ const [pkg, ...rest] = version.split('@').reverse();
+ const pkgName = rest.reverse().join('@');
+
+ // Make sure pkgVersions has a ^ prefix, if not add it
+ const pkgVersion = pkg.startsWith('^') ? pkg : `^${pkg}`;
+
+ console.log(`Setting package ${pkgName} to ${pkgVersion} in ${path}`);
+
+ const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json');
+ let count = 0;
+ for (const file of files) {
+ const [changed, content] = changePackageVersion(file, pkgName, pkgVersion);
+ if (changed) {
+ writeFileSync(file, `${JSON.stringify(content, null, 2)}\n`);
+ count++;
+ }
+ }
+ if (count === 0) {
+ console.log('No files updated');
+ } else {
+ console.log(`Updated ${count} files`);
+ }
+}
diff --git a/scripts/lib/command-update.ts b/scripts/lib/command-update.ts
new file mode 100644
index 000000000..360d75dd9
--- /dev/null
+++ b/scripts/lib/command-update.ts
@@ -0,0 +1,45 @@
+import { execSync } from 'node:child_process';
+import { writeFileSync } from 'node:fs';
+import { basename } from 'node:path';
+import * as p from 'picocolors';
+import { changePackageVersion } from './change-package-version';
+
+import { getDepsCount } from './get-deps-count';
+import { getRecursiveFileList } from './get-recursive-file-list';
+
+export function commandUpdate(path = '.', packageNames: string[] = []) {
+ const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json');
+ const depsCounter = getDepsCount(files);
+ const pkgNames = Object.keys(depsCounter).sort();
+ if (packageNames.length > 0) {
+ console.log(`Updating ${packageNames.join(', ')} in ${files.length} files`);
+ }
+
+ let total = 0;
+ for (const pkgName of pkgNames.filter((pkgName) => packageNames.length === 0 || packageNames.includes(pkgName))) {
+ // Get latest version from npm
+ const npmVersion = execSync(`npm view ${pkgName} version`).toString().trim();
+
+ let count = 0;
+ for (const file of files) {
+ const [changed, content] = changePackageVersion(file, pkgName, `^${npmVersion}`);
+ if (changed) {
+ writeFileSync(file, `${JSON.stringify(content, null, 2)}\n`);
+ count++;
+ }
+ }
+ total += count;
+
+ if (count === 0) {
+ console.log(p.dim(`Package ${pkgName} is up to date ${npmVersion}`));
+ continue;
+ }
+ console.log(p.green(` -> Updated ${count} files with ${pkgName} ${npmVersion}`));
+ }
+
+ if (total === 0) {
+ console.log('No files updated');
+ } else {
+ console.log(`Updated ${total} files`);
+ }
+}
diff --git a/scripts/lib/get-deps-count.ts b/scripts/lib/get-deps-count.ts
new file mode 100644
index 000000000..434752091
--- /dev/null
+++ b/scripts/lib/get-deps-count.ts
@@ -0,0 +1,32 @@
+import { readFileSync } from 'node:fs';
+
+export function getDepsCount(files: string[] = []): Record> {
+ const map: Record = {};
+ const depsCounter: Record> = {};
+
+ for (const file of files) {
+ const content = JSON.parse(readFileSync(file).toString('utf-8'));
+ map[file] = content;
+
+ const deps = content.dependencies ?? {};
+ const devDeps = content.devDependencies ?? {};
+
+ const merged = { ...deps, ...devDeps };
+
+ Object.keys(merged)
+ .sort()
+ .map((pkg) => {
+ const pkgVersion = merged[pkg];
+ if (!depsCounter[pkg]) {
+ depsCounter[pkg] = { [pkgVersion]: [file] };
+ return;
+ }
+ if (!depsCounter[pkg][pkgVersion]) {
+ depsCounter[pkg][pkgVersion] = [file];
+ return;
+ }
+ depsCounter[pkg][pkgVersion] = [...depsCounter[pkg][pkgVersion], file];
+ });
+ }
+ return depsCounter;
+}
diff --git a/scripts/lib/get-recursive-file-list.ts b/scripts/lib/get-recursive-file-list.ts
new file mode 100644
index 000000000..8c65fbea1
--- /dev/null
+++ b/scripts/lib/get-recursive-file-list.ts
@@ -0,0 +1,28 @@
+// Point method at path and return a list of all the files in the directory recursively
+import { readdirSync, statSync } from 'node:fs';
+
+export function getRecursiveFileList(path: string): string[] {
+ const ignore = ['.git', '.github', '.idea', '.next', '.vercel', '.vscode', 'coverage', 'dist', 'node_modules'];
+ const files: string[] = [];
+
+ const items = readdirSync(path);
+
+ for (const item of items) {
+ if (!ignore.includes(item)) {
+ // Check out if it's a directory or a file
+ const isDir = statSync(`${path}/${item}`).isDirectory();
+ if (isDir) {
+ // If it's a directory, recursively call the method
+ files.push(...getRecursiveFileList(`${path}/${item}`));
+ } else {
+ // If it's a file, add it to the array of files
+ files.push(`${path}/${item}`);
+ }
+ }
+ }
+
+ return files.filter((file) => {
+ // Remove package.json from the root directory
+ return path === '.' ? file !== './package.json' : true;
+ });
+}
diff --git a/scripts/lib/index.ts b/scripts/lib/index.ts
new file mode 100644
index 000000000..37dfbc8cf
--- /dev/null
+++ b/scripts/lib/index.ts
@@ -0,0 +1,5 @@
+export * from './command-check';
+export * from './command-help';
+export * from './command-list';
+export * from './command-set';
+export * from './command-update';
diff --git a/scripts/sync-package-json.ts b/scripts/sync-package-json.ts
new file mode 100644
index 000000000..1ecec29bd
--- /dev/null
+++ b/scripts/sync-package-json.ts
@@ -0,0 +1,21 @@
+import { commandCheck, commandHelp, commandList, commandSet, commandUpdate } from './lib';
+
+const params: string[] = process.argv.slice(3);
+
+switch (process.argv[2]) {
+ case 'check':
+ commandCheck(params[0]);
+ break;
+ case 'list':
+ commandList(params[0]);
+ break;
+ case 'set':
+ commandSet(params[0], params[1]);
+ break;
+ case 'update':
+ commandUpdate(params[0], params.slice(1));
+ break;
+ default:
+ commandHelp();
+ break;
+}
diff --git a/tokens/.assets/nft.json b/tokens/.assets/nft.json
index 9cb416d7f..71e17c5c2 100644
--- a/tokens/.assets/nft.json
+++ b/tokens/.assets/nft.json
@@ -1,6 +1,6 @@
{
- "name": "Homer NFT",
- "symbol": "HOMR",
- "description": "An NFT of Homer Simpson",
- "image": "https://static.onecms.io/wp-content/uploads/sites/6/2018/08/simp_homersingle08_f_hires2-2000.jpg"
-}
\ No newline at end of file
+ "name": "Homer NFT",
+ "symbol": "HOMR",
+ "description": "An NFT of Homer Simpson",
+ "image": "https://static.onecms.io/wp-content/uploads/sites/6/2018/08/simp_homersingle08_f_hires2-2000.jpg"
+}
diff --git a/tokens/.assets/spl-token.json b/tokens/.assets/spl-token.json
index 4b13eb292..ad3c6f2b5 100644
--- a/tokens/.assets/spl-token.json
+++ b/tokens/.assets/spl-token.json
@@ -1,6 +1,6 @@
{
- "name": "Solana Gold",
- "symbol": "GOLDSOL",
- "description": "A gold Solana SPL token :)",
- "image": "https://w7.pngwing.com/pngs/153/594/png-transparent-solana-coin-sign-icon-shiny-golden-symmetric-geometrical-design.png"
-}
\ No newline at end of file
+ "name": "Solana Gold",
+ "symbol": "GOLDSOL",
+ "description": "A gold Solana SPL token :)",
+ "image": "https://w7.pngwing.com/pngs/153/594/png-transparent-solana-coin-sign-icon-shiny-golden-symmetric-geometrical-design.png"
+}
diff --git a/tokens/create-token/anchor/Anchor.toml b/tokens/create-token/anchor/Anchor.toml
index 797014709..a6670f65b 100644
--- a/tokens/create-token/anchor/Anchor.toml
+++ b/tokens/create-token/anchor/Anchor.toml
@@ -1,9 +1,11 @@
+[toolchain]
+
[features]
-seeds = false
+resolution = true
skip-lint = false
[programs.localnet]
-create_token = "2B6MrsKB2pVq6W6tY8dJLcnSd3Uv1KE7yRaboBjdQoEX"
+create_token = "GwvQ53QTu1xz3XXYfG5m5jEqwhMBvVBudPS8TUuFYnhT"
[registry]
url = "https://api.apr.dev/"
@@ -13,11 +15,12 @@ cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
[test]
startup_wait = 5000
shutdown_wait = 2000
+upgradeable = false
[test.validator]
bind_address = "0.0.0.0"
diff --git a/tokens/create-token/anchor/Cargo.toml b/tokens/create-token/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/tokens/create-token/anchor/Cargo.toml
+++ b/tokens/create-token/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/tokens/create-token/anchor/package.json b/tokens/create-token/anchor/package.json
index ecebce439..172bb6995 100644
--- a/tokens/create-token/anchor/package.json
+++ b/tokens/create-token/anchor/package.json
@@ -1,15 +1,20 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.1-beta.2",
- "@metaplex-foundation/mpl-token-metadata": "^2.5.2"
+ "@coral-xyz/anchor": "^0.30.0"
+ },
+ "scripts": {
+ "postinstall": "zx prepare.mjs"
},
"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"
+ "typescript": "^4.3.5",
+ "zx": "^8.1.4"
}
}
diff --git a/tokens/create-token/anchor/pnpm-lock.yaml b/tokens/create-token/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..45b703bdc
--- /dev/null
+++ b/tokens/create-token/anchor/pnpm-lock.yaml
@@ -0,0 +1,1451 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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.91.8(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
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+ zx:
+ specifier: ^8.1.4
+ version: 8.1.4
+
+packages:
+
+ '@babel/runtime@7.24.5':
+ resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==}
+ engines: {node: '>=6.9.0'}
+
+ '@coral-xyz/anchor@0.30.0':
+ resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.0':
+ resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/web3.js@1.91.8':
+ resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.0:
+ resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@7.11.0:
+ resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zx@8.1.4:
+ resolution: {integrity: sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==}
+ engines: {node: '>= 12.17.0'}
+ hasBin: true
+
+snapshots:
+
+ '@babel/runtime@7.24.5':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@noble/hashes': 1.4.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.5
+ '@noble/curves': 1.4.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 7.11.0
+ superstruct: 0.14.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 20.12.11
+ optional: true
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 20.12.11
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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.91.8(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)
+ '@solana/web3.js': 1.91.8(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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@7.11.0:
+ dependencies:
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.14.2: {}
+
+ superstruct@0.15.5: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
+
+ zx@8.1.4:
+ optionalDependencies:
+ '@types/fs-extra': 11.0.4
+ '@types/node': 20.12.11
diff --git a/tokens/create-token/anchor/prepare.mjs b/tokens/create-token/anchor/prepare.mjs
new file mode 100644
index 000000000..7c5ec464b
--- /dev/null
+++ b/tokens/create-token/anchor/prepare.mjs
@@ -0,0 +1,34 @@
+#!/usr/bin/env zx
+
+import { mkdir, rm } from 'node:fs/promises';
+import { join } from 'node:path';
+import { $ } from 'zx';
+
+const programs = [
+ {
+ id: 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',
+ name: 'token_metadata.so',
+ },
+];
+
+const outputDir = 'tests/fixtures';
+const overwrite = true;
+
+try {
+ for (const program of programs) {
+ const { id, name } = program;
+ const outputFile = join(outputDir, name);
+ await $`solana config set -um`;
+
+ try {
+ await mkdir(outputDir, { recursive: true });
+ if (overwrite) await rm(outputFile, { force: true });
+ await $`solana program dump ${id} ${outputFile}`;
+ console.log(`Program ${id} dumped to ${outputFile}`);
+ } catch (error) {
+ console.error(`Error dumping ${id}: ${error.message}`);
+ }
+ }
+} catch (error) {
+ console.error(`Error preparing programs: ${error.message}`);
+}
diff --git a/tokens/create-token/anchor/programs/create-token/Cargo.toml b/tokens/create-token/anchor/programs/create-token/Cargo.toml
index 6acaf6a87..62f846a9d 100644
--- a/tokens/create-token/anchor/programs/create-token/Cargo.toml
+++ b/tokens/create-token/anchor/programs/create-token/Cargo.toml
@@ -9,13 +9,13 @@ crate-type = ["cdylib", "lib"]
name = "create_token"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
[dependencies]
-anchor-lang = "0.28.0"
-anchor-spl = { version = "0.28.0", features = ["metadata"] }
-mpl-token-metadata = { version = "1.13.1", features = ["no-entrypoint"] }
+anchor-lang = "0.31.1"
+anchor-spl = { version = "0.31.0", features = ["metadata"] }
diff --git a/tokens/create-token/anchor/programs/create-token/src/lib.rs b/tokens/create-token/anchor/programs/create-token/src/lib.rs
index 52343e2ca..e424668a7 100644
--- a/tokens/create-token/anchor/programs/create-token/src/lib.rs
+++ b/tokens/create-token/anchor/programs/create-token/src/lib.rs
@@ -3,13 +3,15 @@
use {
anchor_lang::prelude::*,
anchor_spl::{
- metadata::{create_metadata_accounts_v3, CreateMetadataAccountsV3, Metadata},
+ metadata::{
+ create_metadata_accounts_v3, mpl_token_metadata::types::DataV2,
+ CreateMetadataAccountsV3, Metadata,
+ },
token::{Mint, Token},
},
- mpl_token_metadata::{pda::find_metadata_account, state::DataV2},
};
-declare_id!("2B6MrsKB2pVq6W6tY8dJLcnSd3Uv1KE7yRaboBjdQoEX");
+declare_id!("GwvQ53QTu1xz3XXYfG5m5jEqwhMBvVBudPS8TUuFYnhT");
#[program]
pub mod create_token {
@@ -17,10 +19,10 @@ pub mod create_token {
pub fn create_token_mint(
ctx: Context,
+ _token_decimals: u8,
token_name: String,
token_symbol: String,
token_uri: String,
- _token_decimals: u8,
) -> Result<()> {
msg!("Creating metadata account...");
msg!(
@@ -69,10 +71,12 @@ pub struct CreateTokenMint<'info> {
#[account(mut)]
pub payer: Signer<'info>,
- /// CHECK: Address validated using constraint
+ /// CHECK: Validate address by deriving pda
#[account(
mut,
- address=find_metadata_account(&mint_account.key()).0
+ seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref()],
+ bump,
+ seeds::program = token_metadata_program.key(),
)]
pub metadata_account: UncheckedAccount<'info>,
// Create new mint account
diff --git a/tokens/create-token/anchor/tests/bankrun.test.ts b/tokens/create-token/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..dd9fbcb23
--- /dev/null
+++ b/tokens/create-token/anchor/tests/bankrun.test.ts
@@ -0,0 +1,69 @@
+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 { CreateToken } from '../target/types/create_token';
+
+const IDL = require('../target/idl/create_token.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+const METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
+
+describe('Bankrun example', async () => {
+ const context = await startAnchor(
+ '',
+ [
+ { name: 'create_token', programId: PROGRAM_ID },
+ { name: 'token_metadata', programId: METADATA_PROGRAM_ID },
+ ],
+ [],
+ );
+ const provider = new BankrunProvider(context);
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ const metadata = {
+ name: 'Solana Gold',
+ symbol: 'GOLDSOL',
+ uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json',
+ };
+
+ it('Create an SPL Token!', async () => {
+ // Generate new keypair to use as address for mint account.
+ const mintKeypair = new Keypair();
+
+ // SPL Token default = 9 decimals
+ const transactionSignature = await program.methods
+ .createTokenMint(9, metadata.name, metadata.symbol, metadata.uri)
+ .accounts({
+ payer: payer.publicKey,
+ mintAccount: mintKeypair.publicKey,
+ })
+ .signers([mintKeypair])
+ .rpc();
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ console.log(` Transaction Signature: ${transactionSignature}`);
+ });
+
+ it('Create an NFT!', async () => {
+ // Generate new keypair to use as address for mint account.
+ const mintKeypair = new Keypair();
+
+ // NFT default = 0 decimals
+ const transactionSignature = await program.methods
+ .createTokenMint(0, metadata.name, metadata.symbol, metadata.uri)
+ .accounts({
+ payer: payer.publicKey,
+ mintAccount: mintKeypair.publicKey,
+ })
+ .signers([mintKeypair])
+ .rpc();
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ console.log(` Transaction Signature: ${transactionSignature}`);
+ });
+});
diff --git a/tokens/create-token/anchor/tests/test.ts b/tokens/create-token/anchor/tests/test.ts
index d55279536..4a4333dd3 100644
--- a/tokens/create-token/anchor/tests/test.ts
+++ b/tokens/create-token/anchor/tests/test.ts
@@ -1,90 +1,53 @@
-import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
-import * as anchor from "@coral-xyz/anchor";
-import { TOKEN_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token";
-import { CreateToken } from "../target/types/create_token";
-import {
- PublicKey,
- Keypair,
- SYSVAR_RENT_PUBKEY,
- SystemProgram,
-} from "@solana/web3.js";
+import * as anchor from '@coral-xyz/anchor';
+import { Keypair } from '@solana/web3.js';
+import type { CreateToken } from '../target/types/create_token';
-describe("Create Tokens", () => {
+describe('Create Tokens', () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const payer = provider.wallet as anchor.Wallet;
const program = anchor.workspace.CreateToken as anchor.Program;
const metadata = {
- name: "Solana Gold",
- symbol: "GOLDSOL",
- uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json",
+ name: 'Solana Gold',
+ symbol: 'GOLDSOL',
+ uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json',
};
- it("Create an SPL Token!", async () => {
+ it('Create an SPL Token!', async () => {
// Generate new keypair to use as address for mint account.
const mintKeypair = new Keypair();
- // Derive the PDA of the metadata account for the mint.
- const [metadataAddress] = PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- );
-
// SPL Token default = 9 decimals
const transactionSignature = await program.methods
- .createTokenMint(metadata.name, metadata.symbol, metadata.uri, 9)
+ .createTokenMint(9, metadata.name, metadata.symbol, metadata.uri)
.accounts({
payer: payer.publicKey,
- metadataAccount: metadataAddress,
mintAccount: mintKeypair.publicKey,
- rent: SYSVAR_RENT_PUBKEY,
- systemProgram: SystemProgram.programId,
- tokenProgram: TOKEN_PROGRAM_ID,
- tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
})
.signers([mintKeypair])
.rpc();
- console.log("Success!");
+ console.log('Success!');
console.log(` Mint Address: ${mintKeypair.publicKey}`);
console.log(` Transaction Signature: ${transactionSignature}`);
});
- it("Create an NFT!", async () => {
+ it('Create an NFT!', async () => {
// Generate new keypair to use as address for mint account.
const mintKeypair = new Keypair();
- // Derive the PDA of the metadata account for the mint.
- const [metadataAddress] = PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- );
-
// NFT default = 0 decimals
const transactionSignature = await program.methods
- .createTokenMint(metadata.name, metadata.symbol, metadata.uri, 0)
+ .createTokenMint(0, metadata.name, metadata.symbol, metadata.uri)
.accounts({
payer: payer.publicKey,
- metadataAccount: metadataAddress,
mintAccount: mintKeypair.publicKey,
- rent: SYSVAR_RENT_PUBKEY,
- systemProgram: SystemProgram.programId,
- tokenProgram: TOKEN_PROGRAM_ID,
- tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
})
.signers([mintKeypair])
.rpc();
- console.log("Success!");
+ console.log('Success!');
console.log(` Mint Address: ${mintKeypair.publicKey}`);
console.log(` Transaction Signature: ${transactionSignature}`);
});
diff --git a/tokens/create-token/native/cicd.sh b/tokens/create-token/native/cicd.sh
index 3ec707cb8..8a16e0387 100644
--- a/tokens/create-token/native/cicd.sh
+++ b/tokens/create-token/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml
-solana program deploy ./program/target/deploy/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml
+solana program deploy ./program/target/deploy/program.so
diff --git a/tokens/create-token/native/package.json b/tokens/create-token/native/package.json
index 3adfa05b1..e7e2e909a 100644
--- a/tokens/create-token/native/package.json
+++ b/tokens/create-token/native/package.json
@@ -1,6 +1,9 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/hello_solana_program.so"
},
"dependencies": {
"@metaplex-foundation/mpl-token-metadata": "^2.5.2",
diff --git a/tokens/create-token/native/program/Cargo.toml b/tokens/create-token/native/program/Cargo.toml
index 91e2212a8..eec560b22 100644
--- a/tokens/create-token/native/program/Cargo.toml
+++ b/tokens/create-token/native/program/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
borsh = "0.9.3"
borsh-derive = "0.9.1"
-solana-program = "1.16.10"
+solana-program = "2.0"
spl-token = { version = "4.0.0", features = [ "no-entrypoint" ] }
spl-associated-token-account = { version = "2.0.0", features = [ "no-entrypoint" ] }
mpl-token-metadata = { version = "1.11", features = [ "no-entrypoint" ] }
diff --git a/tokens/create-token/native/tests/test.ts b/tokens/create-token/native/tests/test.ts
index b152a3675..e842cab2b 100644
--- a/tokens/create-token/native/tests/test.ts
+++ b/tokens/create-token/native/tests/test.ts
@@ -1,159 +1,139 @@
-import {
- PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID
-} from '@metaplex-foundation/mpl-token-metadata';
+import { Buffer } from 'node:buffer';
+import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata';
+import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
import {
- Connection,
- Keypair,
- PublicKey,
- SystemProgram,
- SYSVAR_RENT_PUBKEY,
- TransactionInstruction,
- Transaction,
- sendAndConfirmTransaction,
+ Connection,
+ Keypair,
+ PublicKey,
+ SYSVAR_RENT_PUBKEY,
+ SystemProgram,
+ Transaction,
+ TransactionInstruction,
+ sendAndConfirmTransaction,
} from '@solana/web3.js';
-import {
- TOKEN_PROGRAM_ID,
-} from '@solana/spl-token';
-import * as borsh from "borsh";
-import { Buffer } from "buffer";
-
+import * as borsh from 'borsh';
function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
+ return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8'))));
+}
class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
-};
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+}
class CreateTokenArgs extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this));
- }
-};
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this));
+ }
+}
const CreateTokenArgsSchema = new Map([
- [
- CreateTokenArgs, {
- kind: 'struct',
- fields: [
- ['token_title', 'string'],
- ['token_symbol', 'string'],
- ['token_uri', 'string'],
- ['token_decimals', 'u8'],
- ]
- }
- ]
+ [
+ CreateTokenArgs,
+ {
+ kind: 'struct',
+ fields: [
+ ['token_title', 'string'],
+ ['token_symbol', 'string'],
+ ['token_uri', 'string'],
+ ['token_decimals', 'u8'],
+ ],
+ },
+ ],
]);
+describe('Create Tokens!', async () => {
+ // const connection = new Connection(`http://localhost:8899`, 'confirmed');
+ const connection = new Connection('https://api.devnet.solana.com/', 'confirmed');
+ const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`);
+ const program = createKeypairFromFile('./program/target/deploy/program-keypair.json');
+
+ it('Create an SPL Token!', async () => {
+ const mintKeypair: Keypair = Keypair.generate();
+
+ const metadataAddress = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+
+ // SPL Token default = 9 decimals
+ //
+ const instructionData = new CreateTokenArgs({
+ token_title: 'Solana Gold',
+ token_symbol: 'GOLDSOL',
+ token_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json',
+ token_decimals: 9,
+ });
-describe("Create Tokens!", async () => {
-
- // const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const connection = new Connection(`https://api.devnet.solana.com/`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/deploy/program-keypair.json');
-
- it("Create an SPL Token!", async () => {
-
- const mintKeypair: Keypair = Keypair.generate();
-
- const metadataAddress = (PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- ))[0];
-
- // SPL Token default = 9 decimals
- //
- const instructionData = new CreateTokenArgs({
- token_title: "Solana Gold",
- token_symbol: "GOLDSOL",
- token_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json",
- token_decimals: 9,
- });
-
- let ix = new TransactionInstruction({
- keys: [
- { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
- { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
- { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
- { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
- { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
- { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
- { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
- { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program
- ],
- programId: program.publicKey,
- data: instructionData.toBuffer(),
- });
-
- const sx = await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, mintKeypair]
- );
-
- console.log("Success!");
- console.log(` Mint Address: ${mintKeypair.publicKey}`);
- console.log(` Tx Signature: ${sx}`);
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
+ { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
+ { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
+ {
+ pubkey: TOKEN_METADATA_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ }, // Token metadata program
+ ],
+ programId: program.publicKey,
+ data: instructionData.toBuffer(),
});
- it("Create an NFT!", async () => {
-
- const mintKeypair: Keypair = Keypair.generate();
-
- const metadataAddress = (PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- ))[0];
-
- // NFT default = 0 decimals
- //
- const instructionData = new CreateTokenArgs({
- token_title: "Homer NFT",
- token_symbol: "HOMR",
- token_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json",
- token_decimals: 9,
- });
-
- let ix = new TransactionInstruction({
- keys: [
- { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
- { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
- { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
- { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
- { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
- { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
- { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
- { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program
- ],
- programId: program.publicKey,
- data: instructionData.toBuffer(),
- });
-
- const sx = await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, mintKeypair]
- );
-
- console.log("Success!");
- console.log(` Mint Address: ${mintKeypair.publicKey}`);
- console.log(` Tx Signature: ${sx}`);
+ const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, mintKeypair]);
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ console.log(` Tx Signature: ${sx}`);
+ });
+
+ it('Create an NFT!', async () => {
+ const mintKeypair: Keypair = Keypair.generate();
+
+ const metadataAddress = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+
+ // NFT default = 0 decimals
+ //
+ const instructionData = new CreateTokenArgs({
+ token_title: 'Homer NFT',
+ token_symbol: 'HOMR',
+ token_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json',
+ token_decimals: 9,
+ });
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
+ { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
+ { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
+ {
+ pubkey: TOKEN_METADATA_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ }, // Token metadata program
+ ],
+ programId: program.publicKey,
+ data: instructionData.toBuffer(),
});
+
+ const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, mintKeypair]);
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ console.log(` Tx Signature: ${sx}`);
});
-
\ No newline at end of file
+});
diff --git a/tokens/create-token/native/tsconfig.json b/tokens/create-token/native/tsconfig.json
index b7d51edac..cd5d2e3d0 100644
--- a/tokens/create-token/native/tsconfig.json
+++ b/tokens/create-token/native/tsconfig.json
@@ -5,6 +5,6 @@
"lib": ["es2015"],
"module": "commonjs",
"target": "es6",
- "esModuleInterop": true,
+ "esModuleInterop": true
}
}
diff --git a/tokens/create-token/solang/.gitignore b/tokens/create-token/solang/.gitignore
deleted file mode 100644
index 8d401163f..000000000
--- a/tokens/create-token/solang/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-
-.anchor
-.DS_Store
-target
-**/*.rs.bk
-node_modules
-test-ledger
-.yarn
diff --git a/tokens/create-token/solang/Anchor.toml b/tokens/create-token/solang/Anchor.toml
deleted file mode 100644
index 00be357be..000000000
--- a/tokens/create-token/solang/Anchor.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-create_token = "8eZPhSaXfHqbcrfskVThtCG68kq8MfVHqmtm6wYf4TLb"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
-
-[test.validator]
-url = "https://api.mainnet-beta.solana.com/"
-
-[[test.validator.clone]]
-address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
\ No newline at end of file
diff --git a/tokens/create-token/solang/libraries/mpl_metadata.sol b/tokens/create-token/solang/libraries/mpl_metadata.sol
deleted file mode 100644
index 7b030a3a7..000000000
--- a/tokens/create-token/solang/libraries/mpl_metadata.sol
+++ /dev/null
@@ -1,134 +0,0 @@
-import 'solana';
-
-// Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/instruction/metadata.rs#L449
-// Solidity does not support Rust Option<> type, so we need to handle it manually
-// Requires creating a struct for each combination of Option<> types
-// If bool for Option<> type is false, comment out the corresponding struct field otherwise instruction fails with "invalid account data"
-// TODO: figure out better way to handle Option<> types
-library MplMetadata {
- address constant metadataProgramId = address"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s";
- address constant systemAddress = address"11111111111111111111111111111111";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/instruction/metadata.rs#L31
- struct CreateMetadataAccountArgsV3 {
- DataV2 data;
- bool isMutable;
- bool collectionDetailsPresent; // To handle Rust Option<> in Solidity
- // CollectionDetails collectionDetails;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/state/data.rs#L22
- struct DataV2 {
- string name;
- string symbol;
- string uri;
- uint16 sellerFeeBasisPoints;
- bool creatorsPresent; // To handle Rust Option<> in Solidity
- // Creator[] creators;
- bool collectionPresent; // To handle Rust Option<> in Solidity
- // Collection collection;
- bool usesPresent; // To handle Rust Option<> in Solidity
- // Uses uses;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L10
- struct Creator {
- address creatorAddress;
- bool verified;
- uint8 share;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L66
- struct Collection {
- bool verified;
- address key;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/state/collection.rs#L57
- struct CollectionDetails {
- CollectionDetailsType detailType;
- uint64 size;
- }
- enum CollectionDetailsType {
- V1
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L43
- struct Uses {
- UseMethod useMethod;
- uint64 remaining;
- uint64 total;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L35
- enum UseMethod {
- Burn,
- Multiple,
- Single
- }
-
- function create_metadata_account(
- address metadata,
- address mint,
- address mintAuthority,
- address payer,
- address updateAuthority,
- string name,
- string symbol,
- string uri
- ) public {
- // // Example of how to add a Creator[] array to the DataV2 struct
- // Creator[] memory creators = new Creator[](1);
- // creators[0] = Creator({
- // creatorAddress: payer,
- // verified: false,
- // share: 100
- // });
-
- DataV2 data = DataV2({
- name: name,
- symbol: symbol,
- uri: uri,
- sellerFeeBasisPoints: 0,
- creatorsPresent: false,
- // creators: creators,
- collectionPresent: false,
- // collection: Collection({
- // verified: false,
- // key: address(0)
- // }),
- usesPresent: false
- // uses: Uses({
- // useMethod: UseMethod.Burn,
- // remaining: 0,
- // total: 0
- // })
- });
-
- CreateMetadataAccountArgsV3 args = CreateMetadataAccountArgsV3({
- data: data,
- isMutable: true,
- collectionDetailsPresent: false
- // collectionDetails: CollectionDetails({
- // detailType: CollectionDetailsType.V1,
- // size: 0
- // })
- });
-
- AccountMeta[7] metas = [
- AccountMeta({pubkey: metadata, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: mintAuthority, is_writable: false, is_signer: true}),
- AccountMeta({pubkey: payer, is_writable: true, is_signer: true}),
- AccountMeta({pubkey: updateAuthority, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: systemAddress, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: rentAddress, is_writable: false, is_signer: false})
- ];
-
- bytes1 discriminator = 33;
- bytes instructionData = abi.encode(discriminator, args);
-
- metadataProgramId.call{accounts: metas}(instructionData);
- }
-}
diff --git a/tokens/create-token/solang/libraries/spl_token.sol b/tokens/create-token/solang/libraries/spl_token.sol
deleted file mode 100644
index 9316305af..000000000
--- a/tokens/create-token/solang/libraries/spl_token.sol
+++ /dev/null
@@ -1,387 +0,0 @@
-import 'solana';
-import 'system_instruction.sol';
-
-library SplToken {
- address constant tokenProgramId = address"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
- address constant associatedTokenProgramId = address"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
- enum TokenInstruction {
- InitializeMint, // 0
- InitializeAccount, // 1
- InitializeMultisig, // 2
- Transfer, // 3
- Approve, // 4
- Revoke, // 5
- SetAuthority, // 6
- MintTo, // 7
- Burn, // 8
- CloseAccount, // 9
- FreezeAccount, // 10
- ThawAccount, // 11
- TransferChecked, // 12
- ApproveChecked, // 13
- MintToChecked, // 14
- BurnChecked, // 15
- InitializeAccount2, // 16
- SyncNative, // 17
- InitializeAccount3, // 18
- InitializeMultisig2, // 19
- InitializeMint2, // 20
- GetAccountDataSize, // 21
- InitializeImmutableOwner, // 22
- AmountToUiAmount, // 23
- UiAmountToAmount, // 24
- InitializeMintCloseAuthority, // 25
- TransferFeeExtension, // 26
- ConfidentialTransferExtension, // 27
- DefaultAccountStateExtension, // 28
- Reallocate, // 29
- MemoTransferExtension, // 30
- CreateNativeMint // 31
- }
-
- /// Initialize a new token account.
- ///
- /// @param tokenAccount the public key of the token account to initialize
- /// @param mint the public key of the mint account for this new token account
- /// @param owner the public key of the owner of this new token account
- function initialize_account(address tokenAccount, address mint, address owner) internal{
- bytes instr = new bytes(1);
-
- instr[0] = uint8(TokenInstruction.InitializeAccount);
- AccountMeta[4] metas = [
- AccountMeta({pubkey: tokenAccount, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: rentAddress, is_writable: false, is_signer: false})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Initialize a new associated token account.
- ///
- /// @param payer the public key of the payer to create the associated token account
- /// @param tokenAccount the public key of the token account to initialize
- /// @param mint the public key of the mint account for this new token account
- /// @param owner the public key of the owner of this new token account
- function create_associated_token_account(address payer, address tokenAccount, address mint, address owner) internal {
- AccountMeta[6] metas = [
- AccountMeta({pubkey: payer, is_writable: true, is_signer: true}),
- AccountMeta({pubkey: tokenAccount, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: SystemInstruction.systemAddress, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: SplToken.tokenProgramId, is_writable: false, is_signer: false})
- ];
-
- bytes instructionData = abi.encode((0));
- associatedTokenProgramId.call{accounts: metas}(instructionData);
- }
-
- // Initialize mint instruction data
- struct InitializeMintInstruction {
- uint8 instruction;
- uint8 decimals;
- address mintAuthority;
- uint8 freezeAuthorityOption;
- address freezeAuthority;
- }
-
- /// Initialize a new mint account.
- ///
- /// @param mint the public key of the mint account to initialize
- /// @param mintAuthority the public key of the mint authority
- /// @param freezeAuthority the public key of the freeze authority
- /// @param decimals the decimals of the mint
- function initialize_mint(address mint, address mintAuthority, address freezeAuthority, uint8 decimals) internal {
- InitializeMintInstruction instr = InitializeMintInstruction({
- instruction: 20,
- decimals: decimals,
- mintAuthority: mintAuthority,
- freezeAuthorityOption: 1,
- freezeAuthority: freezeAuthority
- });
-
- AccountMeta[1] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Create and initialize a new mint account in one instruction
- ///
- /// @param payer the public key of the account paying to create the mint account
- /// @param mint the public key of the mint account to initialize
- /// @param mintAuthority the public key of the mint authority
- /// @param freezeAuthority the public key of the freeze authority
- /// @param decimals the decimals of the mint
- function create_mint(address payer, address mint, address mintAuthority, address freezeAuthority, uint8 decimals) internal {
- // Invoke System Program to create a new account for the mint account
- // Program owner is set to the Token program
- SystemInstruction.create_account(
- payer, // lamports sent from this account (payer)
- mint, // lamports sent to this account (account to be created)
- 1461600, // lamport amount (minimum lamports for mint account)
- 82, // space required for the account (mint account)
- SplToken.tokenProgramId // new program owner
- );
-
- InitializeMintInstruction instr = InitializeMintInstruction({
- instruction: 20,
- decimals: decimals,
- mintAuthority: mintAuthority,
- freezeAuthorityOption: 1,
- freezeAuthority: freezeAuthority
- });
-
- AccountMeta[1] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Mint new tokens. The transaction should be signed by the mint authority keypair
- ///
- /// @param mint the account of the mint
- /// @param account the token account where the minted tokens should go
- /// @param authority the public key of the mint authority
- /// @param amount the amount of tokens to mint
- function mint_to(address mint, address account, address authority, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.MintTo);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: authority, is_writable: true, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Transfer @amount token from @from to @to. The transaction should be signed by the owner
- /// keypair of the from account.
- ///
- /// @param from the account to transfer tokens from
- /// @param to the account to transfer tokens to
- /// @param owner the publickey of the from account owner keypair
- /// @param amount the amount to transfer
- function transfer(address from, address to, address owner, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.Transfer);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: to, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: true, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Burn @amount tokens in account. This transaction should be signed by the owner.
- ///
- /// @param account the acount for which tokens should be burned
- /// @param mint the mint for this token
- /// @param owner the publickey of the account owner keypair
- /// @param amount the amount to transfer
- function burn(address account, address mint, address owner, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.Burn);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: true, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Approve an amount to a delegate. This transaction should be signed by the owner
- ///
- /// @param account the account for which a delegate should be approved
- /// @param delegate the delegate publickey
- /// @param owner the publickey of the account owner keypair
- /// @param amount the amount to approve
- function approve(address account, address delegate, address owner, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.Approve);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: delegate, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Revoke a previously approved delegate. This transaction should be signed by the owner. After
- /// this transaction, no delgate is approved for any amount.
- ///
- /// @param account the account for which a delegate should be approved
- /// @param owner the publickey of the account owner keypair
- function revoke(address account, address owner) internal {
- bytes instr = new bytes(1);
-
- instr[0] = uint8(TokenInstruction.Revoke);
-
- AccountMeta[2] metas = [
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Get the total supply for the mint, i.e. the total amount in circulation
- /// @param mint the mint for this token
- function total_supply(address mint) internal view returns (uint64) {
- AccountInfo account = get_account_info(mint);
-
- return account.data.readUint64LE(36);
- }
-
- /// Get the balance for an account.
- ///
- /// @param account the account for which we want to know a balance
- function get_balance(address account) internal view returns (uint64) {
- AccountInfo ai = get_account_info(account);
-
- return ai.data.readUint64LE(64);
- }
-
- /// Get the account info for an account. This walks the transaction account infos
- /// and find the account info, or the transaction fails.
- ///
- /// @param account the account for which we want to have the acount info.
- function get_account_info(address account) internal view returns (AccountInfo) {
- for (uint64 i = 0; i < tx.accounts.length; i++) {
- AccountInfo ai = tx.accounts[i];
- if (ai.key == account) {
- return ai;
- }
- }
-
- revert("account missing");
- }
-
- /// This enum represents the state of a token account
- enum AccountState {
- Uninitialized,
- Initialized,
- Frozen
- }
-
- /// This struct is the return of 'get_token_account_data'
- struct TokenAccountData {
- address mintAccount;
- address owner;
- uint64 balance;
- bool delegate_present;
- address delegate;
- AccountState state;
- bool is_native_present;
- uint64 is_native;
- uint64 delegated_amount;
- bool close_authority_present;
- address close_authority;
- }
-
- /// Fetch the owner, mint account and balance for an associated token account.
- ///
- /// @param tokenAccount The token account
- /// @return struct TokenAccountData
- function get_token_account_data(address tokenAccount) public view returns (TokenAccountData) {
- AccountInfo ai = get_account_info(tokenAccount);
-
- TokenAccountData data = TokenAccountData(
- {
- mintAccount: ai.data.readAddress(0),
- owner: ai.data.readAddress(32),
- balance: ai.data.readUint64LE(64),
- delegate_present: ai.data.readUint32LE(72) > 0,
- delegate: ai.data.readAddress(76),
- state: AccountState(ai.data[108]),
- is_native_present: ai.data.readUint32LE(109) > 0,
- is_native: ai.data.readUint64LE(113),
- delegated_amount: ai.data.readUint64LE(121),
- close_authority_present: ai.data.readUint32LE(129) > 10,
- close_authority: ai.data.readAddress(133)
- }
- );
-
- return data;
- }
-
- // This struct is the return of 'get_mint_account_data'
- struct MintAccountData {
- bool authority_present;
- address mint_authority;
- uint64 supply;
- uint8 decimals;
- bool is_initialized;
- bool freeze_authority_present;
- address freeze_authority;
- }
-
- /// Retrieve the information saved in a mint account
- ///
- /// @param mintAccount the account whose information we want to retrive
- /// @return the MintAccountData struct
- function get_mint_account_data(address mintAccount) public view returns (MintAccountData) {
- AccountInfo ai = get_account_info(mintAccount);
-
- uint32 authority_present = ai.data.readUint32LE(0);
- uint32 freeze_authority_present = ai.data.readUint32LE(46);
- MintAccountData data = MintAccountData( {
- authority_present: authority_present > 0,
- mint_authority: ai.data.readAddress(4),
- supply: ai.data.readUint64LE(36),
- decimals: uint8(ai.data[44]),
- is_initialized: ai.data[45] > 0,
- freeze_authority_present: freeze_authority_present > 0,
- freeze_authority: ai.data.readAddress(50)
- });
-
- return data;
- }
-
- // A mint account has an authority, whose type is one of the members of this struct.
- enum AuthorityType {
- MintTokens,
- FreezeAccount,
- AccountOwner,
- CloseAccount
- }
-
- /// Remove the mint authority from a mint account
- ///
- /// @param mintAccount the public key for the mint account
- /// @param mintAuthority the public for the mint authority
- function remove_mint_authority(address mintAccount, address mintAuthority) public {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: mintAccount, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: mintAuthority, is_signer: true, is_writable: false})
- ];
-
- bytes data = new bytes(9);
- data[0] = uint8(TokenInstruction.SetAuthority);
- data[1] = uint8(AuthorityType.MintTokens);
- data[3] = 0;
-
- tokenProgramId.call{accounts: metas}(data);
- }
-}
diff --git a/tokens/create-token/solang/libraries/system_instruction.sol b/tokens/create-token/solang/libraries/system_instruction.sol
deleted file mode 100644
index 0ba370c8c..000000000
--- a/tokens/create-token/solang/libraries/system_instruction.sol
+++ /dev/null
@@ -1,300 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-// Disclaimer: This library provides a bridge for Solidity to interact with Solana's system instructions. Although it is production ready,
-// it has not been audited for security, so use it at your own risk.
-
-import 'solana';
-
-library SystemInstruction {
- address constant systemAddress = address"11111111111111111111111111111111";
- address constant recentBlockHashes = address"SysvarRecentB1ockHashes11111111111111111111";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
- uint64 constant state_size = 80;
-
- enum Instruction {
- CreateAccount,
- Assign,
- Transfer,
- CreateAccountWithSeed,
- AdvanceNounceAccount,
- WithdrawNonceAccount,
- InitializeNonceAccount,
- AuthorizeNonceAccount,
- Allocate,
- AllocateWithSeed,
- AssignWithSeed,
- TransferWithSeed,
- UpgradeNonceAccount // This is not available on Solana v1.9.15
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to public key for the account to be created
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account(address from, address to, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.CreateAccount), lamports, space, owner);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to the public key for the account to be created. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'to' address using the seed
- /// @param seed the string utilized to created the 'to' public key
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account_with_seed(address from, address to, address base, string seed, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- uint32 buffer_size = 92 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.CreateAccountWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- uint32 offset = seed.length + 44;
- bincode.writeUint64LE(lamports, offset);
- offset += 8;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Assign account to a program (owner)
- ///
- /// @param pubkey the public key for the account whose owner is going to be reassigned
- /// @param owner the public key for the new account owner
- function assign(address pubkey, address owner) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pubkey, is_signer: true, is_writable: true})
- ];
- bytes bincode = abi.encode(uint32(Instruction.Assign), owner);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Assign account to a program (owner) based on a seed
- ///
- /// @param addr the public key for the account whose owner is going to be reassigned. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to created the 'addr' public key
- /// @param owner the public key for the new program owner
- function assign_with_seed(address addr, address base, string seed, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
-
- uint32 buffer_size = 76 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.AssignWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- bincode.writeAddress(owner, 44 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports between accounts
- ///
- /// @param from public key for the funding account
- /// @param to public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer(address from, address to, uint64 lamports) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Transfer), lamports);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports from a derived address
- ///
- /// @param from_pubkey The funding account public key. It should match create_with_seed(from_base, seed, from_owner)
- /// @param from_base the base address that derived the 'from_pubkey' key using the seed
- /// @param seed the string utilized to create the 'from_pubkey' public key
- /// @param from_owner owner to use to derive the funding account address
- /// @param to_pubkey the public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer_with_seed(address from_pubkey, address from_base, string seed, address from_owner, address to_pubkey, uint64 lamports) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: from_base, is_signer: true, is_writable: false}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true})
- ];
-
- uint32 buffer_size = seed.length + 52;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.TransferWithSeed), 0);
- bincode.writeUint64LE(lamports, 4);
- bincode.writeUint64LE(seed.length, 12);
- bincode.writeString(seed, 20);
- bincode.writeAddress(from_owner, 20 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Allocate space in a (possibly new) account without funding
- ///
- /// @param pub_key account for which to allocate space
- /// @param space number of bytes of memory to allocate
- function allocate(address pub_key, uint64 space) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pub_key, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Allocate), space);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Allocate space for an assign an account at an address derived from a base public key and a seed
- ///
- /// @param addr account for which to allocate space. It should match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param space number of bytes of memory to allocate
- /// @param owner owner to use to derive the 'addr' account address
- function allocate_with_seed(address addr, address base, string seed, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = new bytes(seed.length + 84);
- bincode.writeUint32LE(uint32(Instruction.AllocateWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(seed.length, 36);
- bincode.writeString(seed, 44);
- uint32 offset = 44 + seed.length;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new nonce account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the account to be created. The public key must match create_with_seed(base, seed, systemAddress)
- /// @param base the base address that derived the 'nonce' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account_with_seed(address from, address nonce, address base, string seed, address authority, uint64 lamports) internal {
- create_account_with_seed(from, nonce, base, seed, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the nonce account to be created
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account(address from, address nonce, address authority, uint64 lamports) internal {
- create_account(from, nonce, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Consumes a stored nonce, replacing it with a successor
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the publick key for the entity authorized to execute instructins on the account
- function advance_nonce_account(address nonce_pubkey, address authorized_pubkey) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AdvanceNounceAccount));
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Withdraw funds from a nonce account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param to_pubkey the recipient account
- /// @param lamports the number of lamports to withdraw
- function withdraw_nonce_account(address nonce_pubkey, address authorized_pubkey, address to_pubkey, uint64 lamports) internal {
- AccountMeta[5] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.WithdrawNonceAccount), lamports);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Change the entity authorized to execute nonce instructions on the account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param new_authority
- function authorize_nonce_account(address nonce_pubkey, address authorized_pubkey, address new_authority) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AuthorizeNonceAccount), new_authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// One-time idempotent upgrade of legacy nonce version in order to bump them out of chain domain.
- ///
- /// @param nonce the public key for the nonce account
- // This is not available on Solana v1.9.15
- function upgrade_nonce_account(address nonce) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.UpgradeNonceAccount));
- systemAddress.call{accounts: meta}(bincode);
- }
-}
diff --git a/tokens/create-token/solang/package.json b/tokens/create-token/solang/package.json
deleted file mode 100644
index 6b59ef465..000000000
--- a/tokens/create-token/solang/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0",
- "@metaplex-foundation/js": "^0.19.4",
- "@project-serum/anchor": "^0.26.0"
- },
- "devDependencies": {
- "@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"
- }
-}
diff --git a/tokens/create-token/solang/solidity/create-token.sol b/tokens/create-token/solang/solidity/create-token.sol
deleted file mode 100644
index 8352e7e69..000000000
--- a/tokens/create-token/solang/solidity/create-token.sol
+++ /dev/null
@@ -1,47 +0,0 @@
-
-import "../libraries/spl_token.sol";
-import "../libraries/mpl_metadata.sol";
-
-@program_id("8eZPhSaXfHqbcrfskVThtCG68kq8MfVHqmtm6wYf4TLb")
-contract create_token {
-
- // Creating a dataAccount is required by Solang
- // The account is unused in this example
- @payer(payer) // payer account
- constructor() {}
-
- function createTokenMint(
- address payer, // payer account
- address mint, // mint account to be created
- address mintAuthority, // mint authority for the mint account
- address freezeAuthority, // freeze authority for the mint account
- address metadata, // metadata account to be created
- uint8 decimals, // decimals for the mint account
- string name, // name for the metadata account
- string symbol, // symbol for the metadata account
- string uri // uri for the metadata account
- ) public {
- // Invoke System Program to create a new account for the mint account and,
- // Invoke Token Program to initialize the mint account
- // Set mint authority, freeze authority, and decimals for the mint account
- SplToken.create_mint(
- payer, // payer account
- mint, // mint account
- mintAuthority, // mint authority
- freezeAuthority, // freeze authority
- decimals // decimals
- );
-
- // Invoke Metadata Program to create a new account for the metadata account
- MplMetadata.create_metadata_account(
- metadata, // metadata account
- mint, // mint account
- mintAuthority, // mint authority
- payer, // payer
- payer, // update authority (of the metadata account)
- name, // name
- symbol, // symbol
- uri // uri (off-chain metadata json)
- );
- }
-}
diff --git a/tokens/create-token/solang/tests/create-token.ts b/tokens/create-token/solang/tests/create-token.ts
deleted file mode 100644
index 7d2ff4085..000000000
--- a/tokens/create-token/solang/tests/create-token.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { CreateToken } from "../target/types/create_token";
-import { Metaplex } from "@metaplex-foundation/js";
-import { SYSVAR_RENT_PUBKEY, SystemProgram, PublicKey } from "@solana/web3.js";
-
-describe("create-token", () => {
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
- const program = anchor.workspace.CreateToken as Program;
-
- // Generate new keypair to use as data account
- const dataAccount = anchor.web3.Keypair.generate();
- const wallet = provider.wallet;
- const connection = provider.connection;
-
- // Metadata for the token
- const tokenTitle = "Solana Gold";
- const tokenSymbol = "GOLDSOL";
- const tokenUri =
- "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json";
-
- it("Is initialized!", async () => {
- // Initialize data account for the program, which is required by Solang
- const tx = await program.methods
- .new()
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([dataAccount])
- .rpc();
- console.log("Your transaction signature", tx);
- });
-
- it("Create an SPL Token!", async () => {
- // Generate a new keypair for the mint
- const mintKeypair = anchor.web3.Keypair.generate();
-
- // Get the metadata address for the mint
- const metaplex = Metaplex.make(connection);
- const metadataAddress = await metaplex
- .nfts()
- .pdas()
- .metadata({ mint: mintKeypair.publicKey });
-
- const tx = await program.methods
- .createTokenMint(
- wallet.publicKey, // payer
- mintKeypair.publicKey, // mint
- wallet.publicKey, // freeze authority
- wallet.publicKey, // mint authority
- metadataAddress, // metadata address
- 9, // decimals for the mint
- tokenTitle, // token name
- tokenSymbol, // token symbol
- tokenUri // token uri (off-chain metadata)
- )
- .accounts({ dataAccount: dataAccount.publicKey })
- .remainingAccounts([
- {
- pubkey: wallet.publicKey,
- isWritable: true,
- isSigner: true,
- },
- { pubkey: mintKeypair.publicKey, isWritable: true, isSigner: true },
- {
- pubkey: new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"), // Metadata program id
- isWritable: false,
- isSigner: false,
- },
- { pubkey: metadataAddress, isWritable: true, isSigner: false },
- { pubkey: SystemProgram.programId, isWritable: false, isSigner: false },
- { pubkey: SYSVAR_RENT_PUBKEY, isWritable: false, isSigner: false },
- ])
- .signers([mintKeypair])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
- });
-
- it("Create an NFT!", async () => {
- // Generate a new keypair for the mint
- const mintKeypair = anchor.web3.Keypair.generate();
-
- // Get the metadata address for the mint
- const metaplex = Metaplex.make(connection);
- const metadataAddress = await metaplex
- .nfts()
- .pdas()
- .metadata({ mint: mintKeypair.publicKey });
-
- const tx = await program.methods
- .createTokenMint(
- wallet.publicKey,
- mintKeypair.publicKey,
- wallet.publicKey,
- wallet.publicKey,
- metadataAddress,
- 0, // decimals for the mint, 0 for NFTs "non-fungible"
- tokenTitle,
- tokenSymbol,
- tokenUri
- )
- .accounts({ dataAccount: dataAccount.publicKey })
- .remainingAccounts([
- {
- pubkey: wallet.publicKey,
- isWritable: true,
- isSigner: true,
- },
- { pubkey: mintKeypair.publicKey, isWritable: true, isSigner: true },
- {
- pubkey: new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"), // Metadata program id
- isWritable: false,
- isSigner: false,
- },
- { pubkey: metadataAddress, isWritable: true, isSigner: false },
- { pubkey: SystemProgram.programId, isWritable: false, isSigner: false },
- { pubkey: SYSVAR_RENT_PUBKEY, isWritable: false, isSigner: false },
- ])
- .signers([mintKeypair])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
- });
-});
diff --git a/tokens/create-token/solang/tsconfig.json b/tokens/create-token/solang/tsconfig.json
deleted file mode 100644
index 5436e66f2..000000000
--- a/tokens/create-token/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
-}
-
\ No newline at end of file
diff --git a/tokens/create-token/steel/Cargo.toml b/tokens/create-token/steel/Cargo.toml
new file mode 100644
index 000000000..7c33548c6
--- /dev/null
+++ b/tokens/create-token/steel/Cargo.toml
@@ -0,0 +1,24 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+steel-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = "3.0"
+thiserror = "1.0"
+mpl-token-metadata = { version = "5.1.0", features = ["no-entrypoint"] }
+spl-token = { version = "7.0.0", features = ["no-entrypoint"] }
+
diff --git a/tokens/create-token/steel/README.md b/tokens/create-token/steel/README.md
new file mode 100644
index 000000000..921043238
--- /dev/null
+++ b/tokens/create-token/steel/README.md
@@ -0,0 +1,32 @@
+# Steel
+
+**Steel** is a ...
+
+## API
+
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Event`](api/src/event.rs) – Custom program events.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+
+- [`Create-Token`](program/src/create_token.rs) – Create Token ...
+
+## State
+
+- [`Token`](api/src/state/token.rs) – Token ...
+
+## Get started
+
+Compile your program:
+
+```sh
+steel build
+```
+
+Run unit and integration tests:
+
+```sh
+steel test
+```
diff --git a/tokens/create-token/steel/api/Cargo.toml b/tokens/create-token/steel/api/Cargo.toml
new file mode 100644
index 000000000..11e99b96c
--- /dev/null
+++ b/tokens/create-token/steel/api/Cargo.toml
@@ -0,0 +1,20 @@
+[package]
+name = "steel-api"
+description = "API for interacting with the Steel program"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[dependencies]
+bytemuck.workspace = true
+mpl-token-metadata = "5.1.0"
+num_enum.workspace = true
+solana-program.workspace = true
+spl-token.workspace = true
+steel.workspace = true
+thiserror.workspace = true
diff --git a/tokens/create-token/steel/api/src/consts.rs b/tokens/create-token/steel/api/src/consts.rs
new file mode 100644
index 000000000..453b624f8
--- /dev/null
+++ b/tokens/create-token/steel/api/src/consts.rs
@@ -0,0 +1,2 @@
+/// Seed of the token metadata account PDA.
+pub const METADATA: &[u8] = b"metadata";
diff --git a/tokens/create-token/steel/api/src/error.rs b/tokens/create-token/steel/api/src/error.rs
new file mode 100644
index 000000000..96e84da4d
--- /dev/null
+++ b/tokens/create-token/steel/api/src/error.rs
@@ -0,0 +1,10 @@
+use steel::*;
+
+#[derive(Debug, Error, Clone, Copy, PartialEq, Eq, IntoPrimitive)]
+#[repr(u32)]
+pub enum SteelError {
+ #[error("This is a dummy error")]
+ Dummy = 0,
+}
+
+error!(SteelError);
diff --git a/tokens/create-token/steel/api/src/instruction.rs b/tokens/create-token/steel/api/src/instruction.rs
new file mode 100644
index 000000000..168bbe8db
--- /dev/null
+++ b/tokens/create-token/steel/api/src/instruction.rs
@@ -0,0 +1,18 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum TokenInstruction {
+ CreateToken = 0,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct CreateToken {
+ pub name: [u8; 32],
+ pub symbol: [u8; 8],
+ pub uri: [u8; 128],
+ pub decimals: u8,
+}
+
+instruction!(TokenInstruction, CreateToken);
diff --git a/tokens/create-token/steel/api/src/lib.rs b/tokens/create-token/steel/api/src/lib.rs
new file mode 100644
index 000000000..25c5c8be6
--- /dev/null
+++ b/tokens/create-token/steel/api/src/lib.rs
@@ -0,0 +1,16 @@
+pub mod consts;
+pub mod error;
+pub mod instruction;
+pub mod sdk;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::error::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/tokens/create-token/steel/api/src/sdk.rs b/tokens/create-token/steel/api/src/sdk.rs
new file mode 100644
index 000000000..729701196
--- /dev/null
+++ b/tokens/create-token/steel/api/src/sdk.rs
@@ -0,0 +1,39 @@
+use crate::prelude::*;
+use steel::*;
+
+pub fn create_token(
+ signer: Pubkey,
+ mint: Pubkey,
+ name: [u8; 32],
+ symbol: [u8; 8],
+ uri: [u8; 128],
+ decimals: u8,
+) -> Instruction {
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(signer, true),
+ AccountMeta::new(mint, true),
+ AccountMeta::new(metadata_pda(mint).0, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ AccountMeta::new_readonly(spl_token::ID, false),
+ AccountMeta::new_readonly(mpl_token_metadata::ID, false),
+ AccountMeta::new_readonly(sysvar::rent::ID, false),
+ ],
+ data: CreateToken {
+ name,
+ symbol,
+ uri,
+ decimals,
+ }
+ .to_bytes(),
+ }
+}
+
+// Fetch PDA of a metadata account.
+pub fn metadata_pda(mint: Pubkey) -> (Pubkey, u8) {
+ Pubkey::find_program_address(
+ &[METADATA, mpl_token_metadata::ID.as_ref(), mint.as_ref()],
+ &mpl_token_metadata::ID,
+ )
+}
diff --git a/tokens/create-token/steel/cicd.sh b/tokens/create-token/steel/cicd.sh
new file mode 100644
index 000000000..3d91ab427
--- /dev/null
+++ b/tokens/create-token/steel/cicd.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This script is for quick building & deploying of the program.
+# It also serves as a reference for the commands used for building & deploying Solana programs.
+# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
+
+cargo build-sbf --manifest-path=./program/Cargo.toml
+solana program deploy ./program/target/deploy/program.so
\ No newline at end of file
diff --git a/tokens/create-token/steel/package.json b/tokens/create-token/steel/package.json
new file mode 100644
index 000000000..0646336b5
--- /dev/null
+++ b/tokens/create-token/steel/package.json
@@ -0,0 +1,28 @@
+{
+ "scripts": {
+ "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/bankrun.test.ts",
+ "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/create_token_program.so",
+ "postinstall": "zx prepare.mjs"
+ },
+ "dependencies": {
+ "@metaplex-foundation/mpl-token-metadata": "^2.5.2",
+ "@solana/spl-token": "^0.3.7",
+ "@solana/web3.js": "^1.73.0",
+ "borsh": "^0.7.0",
+ "buffer": "^6.0.3",
+ "fs": "^0.0.1-security"
+ },
+ "devDependencies": {
+ "@types/bn.js": "^5.1.0",
+ "@types/chai": "^4.3.1",
+ "@types/mocha": "^9.1.1",
+ "chai": "^4.3.4",
+ "mocha": "^9.0.3",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^4.3.5",
+ "solana-bankrun": "^0.4.0",
+ "zx": "^8.1.4"
+ }
+}
diff --git a/tokens/create-token/steel/pnpm-lock.yaml b/tokens/create-token/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..23a80d868
--- /dev/null
+++ b/tokens/create-token/steel/pnpm-lock.yaml
@@ -0,0 +1,1915 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@metaplex-foundation/mpl-token-metadata':
+ specifier: ^2.5.2
+ version: 2.13.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.3.7
+ version: 0.3.11(@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/web3.js':
+ specifier: ^1.73.0
+ version: 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ borsh:
+ specifier: ^0.7.0
+ version: 0.7.0
+ buffer:
+ specifier: ^6.0.3
+ version: 6.0.3
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.1.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+ zx:
+ specifier: ^8.1.4
+ version: 8.4.1
+
+packages:
+
+ '@babel/runtime@7.27.0':
+ resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@metaplex-foundation/beet-solana@0.4.1':
+ resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==}
+
+ '@metaplex-foundation/beet@0.7.2':
+ resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==}
+
+ '@metaplex-foundation/cusper@0.0.2':
+ resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0':
+ resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==}
+
+ '@noble/curves@1.8.1':
+ resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.7.1':
+ resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-rc.1':
+ resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-data-structures@2.0.0-rc.1':
+ resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.0.0-rc.1':
+ resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-strings@2.0.0-rc.1':
+ resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+ typescript: '>=5'
+
+ '@solana/codecs@2.0.0-rc.1':
+ resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.0.0-rc.1':
+ resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/options@2.0.0-rc.1':
+ resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/spl-token-metadata@0.1.6':
+ resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/web3.js@1.98.0':
+ resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==}
+
+ '@swc/helpers@0.5.15':
+ resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.13.13':
+ resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.0':
+ resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansicolors@0.3.2:
+ resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assert@2.1.0:
+ resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base-x@4.0.1:
+ resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@5.0.0:
+ resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.4.0:
+ resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
+ engines: {node: '>= 0.4'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.1.0:
+ resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-nan@1.3.2:
+ resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.3:
+ resolution: {integrity: sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.1.0:
+ resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-typed-array@1.1.19:
+ resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.1:
+ resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zx@8.4.1:
+ resolution: {integrity: sha512-1Cb+Tfwt/daKV6wckBeDbB6h3IMauqj9KWp+EcbYzi9doeJeIHCktxp/yWspXOXRdoUzBCQSKoUgm3g8r9fz5A==}
+ engines: {node: '>= 12.17.0'}
+ hasBin: true
+
+snapshots:
+
+ '@babel/runtime@7.27.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet@0.7.2':
+ dependencies:
+ ansicolors: 0.3.2
+ assert: 2.1.0
+ bn.js: 5.2.1
+ debug: 4.4.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/cusper@0.0.2': {}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ debug: 4.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ '@noble/curves@1.8.1':
+ dependencies:
+ '@noble/hashes': 1.7.1
+
+ '@noble/hashes@1.7.1': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ fastestsmallesttextencoderdecoder: 1.0.22
+ typescript: 4.9.5
+
+ '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 12.1.0
+ typescript: 4.9.5
+
+ '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - typescript
+ - utf-8-validate
+
+ '@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@noble/curves': 1.8.1
+ '@noble/hashes': 1.7.1
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.6.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.15':
+ dependencies:
+ tslib: 2.8.1
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.13.13
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.13.13':
+ dependencies:
+ undici-types: 6.20.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.0':
+ dependencies:
+ '@types/node': 22.13.13
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansicolors@0.3.2: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assert@2.1.0:
+ dependencies:
+ call-bind: 1.0.8
+ is-nan: 1.3.2
+ object-is: 1.1.6
+ object.assign: 4.1.7
+ util: 0.12.5
+
+ assertion-error@1.1.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.1: {}
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.1
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ debug@4.4.0:
+ dependencies:
+ ms: 2.1.3
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ emoji-regex@8.0.0: {}
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ gopd@1.2.0: {}
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-arguments@1.2.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-callable@1.2.7: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-nan@1.3.2:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.19
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ jayson@4.1.3(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ math-intrinsics@1.1.0: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.7:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ possible-typed-array-names@1.1.0: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.15
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.0
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.1.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.1: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.20.0: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.2.0
+ is-generator-function: 1.1.0
+ is-typed-array: 1.1.15
+ which-typed-array: 1.1.19
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-typed-array@1.1.19:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
+
+ zx@8.4.1: {}
diff --git a/tokens/create-token/steel/pnpm.lock.yaml b/tokens/create-token/steel/pnpm.lock.yaml
new file mode 100644
index 000000000..60694fac6
--- /dev/null
+++ b/tokens/create-token/steel/pnpm.lock.yaml
@@ -0,0 +1,2520 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+ .:
+ dependencies:
+ '@metaplex-foundation/mpl-token-metadata':
+ specifier: ^2.5.2
+ version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.3.7
+ version: 0.3.11(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/web3.js':
+ specifier: ^1.73.0
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ borsh:
+ specifier: ^0.7.0
+ version: 0.7.0
+ buffer:
+ specifier: ^6.0.3
+ version: 6.0.3
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+ zx:
+ specifier: ^8.1.4
+ version: 8.1.9
+
+packages:
+ '@babel/runtime@7.26.0':
+ resolution:
+ {
+ integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==,
+ }
+ engines: { node: '>=6.9.0' }
+
+ '@metaplex-foundation/beet-solana@0.4.1':
+ resolution:
+ {
+ integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==,
+ }
+
+ '@metaplex-foundation/beet@0.7.2':
+ resolution:
+ {
+ integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==,
+ }
+
+ '@metaplex-foundation/cusper@0.0.2':
+ resolution:
+ {
+ integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==,
+ }
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0':
+ resolution:
+ {
+ integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==,
+ }
+
+ '@noble/curves@1.6.0':
+ resolution:
+ {
+ integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==,
+ }
+ engines: { node: ^14.21.3 || >=16 }
+
+ '@noble/hashes@1.5.0':
+ resolution:
+ {
+ integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==,
+ }
+ engines: { node: ^14.21.3 || >=16 }
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution:
+ {
+ integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==,
+ }
+ engines: { node: '>= 10' }
+
+ '@solana/buffer-layout@4.0.1':
+ resolution:
+ {
+ integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==,
+ }
+ engines: { node: '>=5.10' }
+
+ '@solana/codecs-core@2.0.0-rc.1':
+ resolution:
+ {
+ integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==,
+ }
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-data-structures@2.0.0-rc.1':
+ resolution:
+ {
+ integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==,
+ }
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.0.0-rc.1':
+ resolution:
+ {
+ integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==,
+ }
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-strings@2.0.0-rc.1':
+ resolution:
+ {
+ integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==,
+ }
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+ typescript: '>=5'
+
+ '@solana/codecs@2.0.0-rc.1':
+ resolution:
+ {
+ integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==,
+ }
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.0.0-rc.1':
+ resolution:
+ {
+ integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==,
+ }
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/options@2.0.0-rc.1':
+ resolution:
+ {
+ integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==,
+ }
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/spl-token-metadata@0.1.6':
+ resolution:
+ {
+ integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==,
+ }
+ engines: { node: '>=16' }
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/spl-token@0.3.11':
+ resolution:
+ {
+ integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==,
+ }
+ engines: { node: '>=16' }
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/web3.js@1.95.4':
+ resolution:
+ {
+ integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==,
+ }
+
+ '@swc/helpers@0.5.13':
+ resolution:
+ {
+ integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==,
+ }
+
+ '@types/bn.js@5.1.6':
+ resolution:
+ {
+ integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==,
+ }
+
+ '@types/chai@4.3.20':
+ resolution:
+ {
+ integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==,
+ }
+
+ '@types/connect@3.4.38':
+ resolution:
+ {
+ integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==,
+ }
+
+ '@types/fs-extra@11.0.4':
+ resolution:
+ {
+ integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==,
+ }
+
+ '@types/json5@0.0.29':
+ resolution:
+ {
+ integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==,
+ }
+
+ '@types/jsonfile@6.1.4':
+ resolution:
+ {
+ integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==,
+ }
+
+ '@types/mocha@9.1.1':
+ resolution:
+ {
+ integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==,
+ }
+
+ '@types/node@12.20.55':
+ resolution:
+ {
+ integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==,
+ }
+
+ '@types/node@22.8.4':
+ resolution:
+ {
+ integrity: sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==,
+ }
+
+ '@types/uuid@8.3.4':
+ resolution:
+ {
+ integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==,
+ }
+
+ '@types/ws@7.4.7':
+ resolution:
+ {
+ integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==,
+ }
+
+ '@types/ws@8.5.12':
+ resolution:
+ {
+ integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==,
+ }
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution:
+ {
+ integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==,
+ }
+
+ JSONStream@1.3.5:
+ resolution:
+ {
+ integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==,
+ }
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution:
+ {
+ integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==,
+ }
+ engines: { node: '>= 8.0.0' }
+
+ ansi-colors@4.1.1:
+ resolution:
+ {
+ integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==,
+ }
+ engines: { node: '>=6' }
+
+ ansi-regex@5.0.1:
+ resolution:
+ {
+ integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==,
+ }
+ engines: { node: '>=8' }
+
+ ansi-styles@4.3.0:
+ resolution:
+ {
+ integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==,
+ }
+ engines: { node: '>=8' }
+
+ ansicolors@0.3.2:
+ resolution:
+ {
+ integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==,
+ }
+
+ anymatch@3.1.3:
+ resolution:
+ {
+ integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==,
+ }
+ engines: { node: '>= 8' }
+
+ argparse@2.0.1:
+ resolution:
+ {
+ integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==,
+ }
+
+ arrify@1.0.1:
+ resolution:
+ {
+ integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==,
+ }
+ engines: { node: '>=0.10.0' }
+
+ assert@2.1.0:
+ resolution:
+ {
+ integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==,
+ }
+
+ assertion-error@1.1.0:
+ resolution:
+ {
+ integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==,
+ }
+
+ available-typed-arrays@1.0.7:
+ resolution:
+ {
+ integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==,
+ }
+ engines: { node: '>= 0.4' }
+
+ balanced-match@1.0.2:
+ resolution:
+ {
+ integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==,
+ }
+
+ base-x@3.0.10:
+ resolution:
+ {
+ integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==,
+ }
+
+ base-x@4.0.0:
+ resolution:
+ {
+ integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==,
+ }
+
+ base64-js@1.5.1:
+ resolution:
+ {
+ integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==,
+ }
+
+ bigint-buffer@1.1.5:
+ resolution:
+ {
+ integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==,
+ }
+ engines: { node: '>= 10.0.0' }
+
+ bignumber.js@9.1.2:
+ resolution:
+ {
+ integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==,
+ }
+
+ binary-extensions@2.3.0:
+ resolution:
+ {
+ integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==,
+ }
+ engines: { node: '>=8' }
+
+ bindings@1.5.0:
+ resolution:
+ {
+ integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==,
+ }
+
+ bn.js@5.2.1:
+ resolution:
+ {
+ integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==,
+ }
+
+ borsh@0.7.0:
+ resolution:
+ {
+ integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==,
+ }
+
+ brace-expansion@1.1.11:
+ resolution:
+ {
+ integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==,
+ }
+
+ braces@3.0.3:
+ resolution:
+ {
+ integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==,
+ }
+ engines: { node: '>=8' }
+
+ browser-stdout@1.3.1:
+ resolution:
+ {
+ integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==,
+ }
+
+ bs58@4.0.1:
+ resolution:
+ {
+ integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==,
+ }
+
+ bs58@5.0.0:
+ resolution:
+ {
+ integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==,
+ }
+
+ buffer-from@1.1.2:
+ resolution:
+ {
+ integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==,
+ }
+
+ buffer@6.0.3:
+ resolution:
+ {
+ integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==,
+ }
+
+ bufferutil@4.0.8:
+ resolution:
+ {
+ integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==,
+ }
+ engines: { node: '>=6.14.2' }
+
+ call-bind@1.0.7:
+ resolution:
+ {
+ integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==,
+ }
+ engines: { node: '>= 0.4' }
+
+ camelcase@6.3.0:
+ resolution:
+ {
+ integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==,
+ }
+ engines: { node: '>=10' }
+
+ chai@4.5.0:
+ resolution:
+ {
+ integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==,
+ }
+ engines: { node: '>=4' }
+
+ chalk@4.1.2:
+ resolution:
+ {
+ integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==,
+ }
+ engines: { node: '>=10' }
+
+ chalk@5.3.0:
+ resolution:
+ {
+ integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==,
+ }
+ engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 }
+
+ check-error@1.0.3:
+ resolution:
+ {
+ integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==,
+ }
+
+ chokidar@3.5.3:
+ resolution:
+ {
+ integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==,
+ }
+ engines: { node: '>= 8.10.0' }
+
+ cliui@7.0.4:
+ resolution:
+ {
+ integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==,
+ }
+
+ color-convert@2.0.1:
+ resolution:
+ {
+ integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==,
+ }
+ engines: { node: '>=7.0.0' }
+
+ color-name@1.1.4:
+ resolution:
+ {
+ integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==,
+ }
+
+ commander@12.1.0:
+ resolution:
+ {
+ integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==,
+ }
+ engines: { node: '>=18' }
+
+ commander@2.20.3:
+ resolution:
+ {
+ integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==,
+ }
+
+ concat-map@0.0.1:
+ resolution:
+ {
+ integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==,
+ }
+
+ debug@4.3.3:
+ resolution:
+ {
+ integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==,
+ }
+ engines: { node: '>=6.0' }
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.7:
+ resolution:
+ {
+ integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==,
+ }
+ engines: { node: '>=6.0' }
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution:
+ {
+ integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==,
+ }
+ engines: { node: '>=10' }
+
+ deep-eql@4.1.4:
+ resolution:
+ {
+ integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==,
+ }
+ engines: { node: '>=6' }
+
+ define-data-property@1.1.4:
+ resolution:
+ {
+ integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==,
+ }
+ engines: { node: '>= 0.4' }
+
+ define-properties@1.2.1:
+ resolution:
+ {
+ integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==,
+ }
+ engines: { node: '>= 0.4' }
+
+ delay@5.0.0:
+ resolution:
+ {
+ integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==,
+ }
+ engines: { node: '>=10' }
+
+ diff@3.5.0:
+ resolution:
+ {
+ integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==,
+ }
+ engines: { node: '>=0.3.1' }
+
+ diff@5.0.0:
+ resolution:
+ {
+ integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==,
+ }
+ engines: { node: '>=0.3.1' }
+
+ emoji-regex@8.0.0:
+ resolution:
+ {
+ integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==,
+ }
+
+ es-define-property@1.0.0:
+ resolution:
+ {
+ integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==,
+ }
+ engines: { node: '>= 0.4' }
+
+ es-errors@1.3.0:
+ resolution:
+ {
+ integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==,
+ }
+ engines: { node: '>= 0.4' }
+
+ es6-promise@4.2.8:
+ resolution:
+ {
+ integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==,
+ }
+
+ es6-promisify@5.0.0:
+ resolution:
+ {
+ integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==,
+ }
+
+ escalade@3.2.0:
+ resolution:
+ {
+ integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==,
+ }
+ engines: { node: '>=6' }
+
+ escape-string-regexp@4.0.0:
+ resolution:
+ {
+ integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==,
+ }
+ engines: { node: '>=10' }
+
+ eventemitter3@5.0.1:
+ resolution:
+ {
+ integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==,
+ }
+
+ eyes@0.1.8:
+ resolution:
+ {
+ integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==,
+ }
+ engines: { node: '> 0.1.90' }
+
+ fast-stable-stringify@1.0.0:
+ resolution:
+ {
+ integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==,
+ }
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution:
+ {
+ integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==,
+ }
+
+ file-uri-to-path@1.0.0:
+ resolution:
+ {
+ integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==,
+ }
+
+ fill-range@7.1.1:
+ resolution:
+ {
+ integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==,
+ }
+ engines: { node: '>=8' }
+
+ find-up@5.0.0:
+ resolution:
+ {
+ integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==,
+ }
+ engines: { node: '>=10' }
+
+ flat@5.0.2:
+ resolution:
+ {
+ integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==,
+ }
+ hasBin: true
+
+ for-each@0.3.3:
+ resolution:
+ {
+ integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==,
+ }
+
+ fs.realpath@1.0.0:
+ resolution:
+ {
+ integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==,
+ }
+
+ fs@0.0.1-security:
+ resolution:
+ {
+ integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==,
+ }
+
+ fsevents@2.3.3:
+ resolution:
+ {
+ integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==,
+ }
+ engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 }
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution:
+ {
+ integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==,
+ }
+
+ get-caller-file@2.0.5:
+ resolution:
+ {
+ integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==,
+ }
+ engines: { node: 6.* || 8.* || >= 10.* }
+
+ get-func-name@2.0.2:
+ resolution:
+ {
+ integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==,
+ }
+
+ get-intrinsic@1.2.4:
+ resolution:
+ {
+ integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==,
+ }
+ engines: { node: '>= 0.4' }
+
+ glob-parent@5.1.2:
+ resolution:
+ {
+ integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==,
+ }
+ engines: { node: '>= 6' }
+
+ glob@7.2.0:
+ resolution:
+ {
+ integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==,
+ }
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ gopd@1.0.1:
+ resolution:
+ {
+ integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==,
+ }
+
+ growl@1.10.5:
+ resolution:
+ {
+ integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==,
+ }
+ engines: { node: '>=4.x' }
+
+ has-flag@4.0.0:
+ resolution:
+ {
+ integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==,
+ }
+ engines: { node: '>=8' }
+
+ has-property-descriptors@1.0.2:
+ resolution:
+ {
+ integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==,
+ }
+
+ has-proto@1.0.3:
+ resolution:
+ {
+ integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==,
+ }
+ engines: { node: '>= 0.4' }
+
+ has-symbols@1.0.3:
+ resolution:
+ {
+ integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==,
+ }
+ engines: { node: '>= 0.4' }
+
+ has-tostringtag@1.0.2:
+ resolution:
+ {
+ integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==,
+ }
+ engines: { node: '>= 0.4' }
+
+ hasown@2.0.2:
+ resolution:
+ {
+ integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==,
+ }
+ engines: { node: '>= 0.4' }
+
+ he@1.2.0:
+ resolution:
+ {
+ integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==,
+ }
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution:
+ {
+ integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==,
+ }
+
+ ieee754@1.2.1:
+ resolution:
+ {
+ integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==,
+ }
+
+ inflight@1.0.6:
+ resolution:
+ {
+ integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==,
+ }
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution:
+ {
+ integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==,
+ }
+
+ is-arguments@1.1.1:
+ resolution:
+ {
+ integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==,
+ }
+ engines: { node: '>= 0.4' }
+
+ is-binary-path@2.1.0:
+ resolution:
+ {
+ integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==,
+ }
+ engines: { node: '>=8' }
+
+ is-callable@1.2.7:
+ resolution:
+ {
+ integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==,
+ }
+ engines: { node: '>= 0.4' }
+
+ is-extglob@2.1.1:
+ resolution:
+ {
+ integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==,
+ }
+ engines: { node: '>=0.10.0' }
+
+ is-fullwidth-code-point@3.0.0:
+ resolution:
+ {
+ integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==,
+ }
+ engines: { node: '>=8' }
+
+ is-generator-function@1.0.10:
+ resolution:
+ {
+ integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==,
+ }
+ engines: { node: '>= 0.4' }
+
+ is-glob@4.0.3:
+ resolution:
+ {
+ integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==,
+ }
+ engines: { node: '>=0.10.0' }
+
+ is-nan@1.3.2:
+ resolution:
+ {
+ integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==,
+ }
+ engines: { node: '>= 0.4' }
+
+ is-number@7.0.0:
+ resolution:
+ {
+ integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==,
+ }
+ engines: { node: '>=0.12.0' }
+
+ is-plain-obj@2.1.0:
+ resolution:
+ {
+ integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==,
+ }
+ engines: { node: '>=8' }
+
+ is-typed-array@1.1.13:
+ resolution:
+ {
+ integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==,
+ }
+ engines: { node: '>= 0.4' }
+
+ is-unicode-supported@0.1.0:
+ resolution:
+ {
+ integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==,
+ }
+ engines: { node: '>=10' }
+
+ isexe@2.0.0:
+ resolution:
+ {
+ integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==,
+ }
+
+ isomorphic-ws@4.0.1:
+ resolution:
+ {
+ integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==,
+ }
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution:
+ {
+ integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==,
+ }
+ engines: { node: '>=8' }
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution:
+ {
+ integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==,
+ }
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution:
+ {
+ integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==,
+ }
+
+ json5@1.0.2:
+ resolution:
+ {
+ integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==,
+ }
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution:
+ {
+ integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==,
+ }
+ engines: { '0': node >= 0.2.0 }
+
+ locate-path@6.0.0:
+ resolution:
+ {
+ integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==,
+ }
+ engines: { node: '>=10' }
+
+ log-symbols@4.1.0:
+ resolution:
+ {
+ integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==,
+ }
+ engines: { node: '>=10' }
+
+ loupe@2.3.7:
+ resolution:
+ {
+ integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==,
+ }
+
+ make-error@1.3.6:
+ resolution:
+ {
+ integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==,
+ }
+
+ minimatch@3.1.2:
+ resolution:
+ {
+ integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==,
+ }
+
+ minimatch@4.2.1:
+ resolution:
+ {
+ integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==,
+ }
+ engines: { node: '>=10' }
+
+ minimist@1.2.8:
+ resolution:
+ {
+ integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==,
+ }
+
+ mkdirp@0.5.6:
+ resolution:
+ {
+ integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==,
+ }
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution:
+ {
+ integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==,
+ }
+ engines: { node: '>= 12.0.0' }
+ hasBin: true
+
+ ms@2.1.2:
+ resolution:
+ {
+ integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==,
+ }
+
+ ms@2.1.3:
+ resolution:
+ {
+ integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==,
+ }
+
+ nanoid@3.3.1:
+ resolution:
+ {
+ integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==,
+ }
+ engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 }
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution:
+ {
+ integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==,
+ }
+ engines: { node: 4.x || >=6.0.0 }
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution:
+ {
+ integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==,
+ }
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution:
+ {
+ integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==,
+ }
+ engines: { node: '>=0.10.0' }
+
+ object-is@1.1.6:
+ resolution:
+ {
+ integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==,
+ }
+ engines: { node: '>= 0.4' }
+
+ object-keys@1.1.1:
+ resolution:
+ {
+ integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==,
+ }
+ engines: { node: '>= 0.4' }
+
+ object.assign@4.1.5:
+ resolution:
+ {
+ integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==,
+ }
+ engines: { node: '>= 0.4' }
+
+ once@1.4.0:
+ resolution:
+ {
+ integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==,
+ }
+
+ p-limit@3.1.0:
+ resolution:
+ {
+ integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==,
+ }
+ engines: { node: '>=10' }
+
+ p-locate@5.0.0:
+ resolution:
+ {
+ integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==,
+ }
+ engines: { node: '>=10' }
+
+ path-exists@4.0.0:
+ resolution:
+ {
+ integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==,
+ }
+ engines: { node: '>=8' }
+
+ path-is-absolute@1.0.1:
+ resolution:
+ {
+ integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==,
+ }
+ engines: { node: '>=0.10.0' }
+
+ pathval@1.1.1:
+ resolution:
+ {
+ integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==,
+ }
+
+ picomatch@2.3.1:
+ resolution:
+ {
+ integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==,
+ }
+ engines: { node: '>=8.6' }
+
+ possible-typed-array-names@1.0.0:
+ resolution:
+ {
+ integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==,
+ }
+ engines: { node: '>= 0.4' }
+
+ randombytes@2.1.0:
+ resolution:
+ {
+ integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==,
+ }
+
+ readdirp@3.6.0:
+ resolution:
+ {
+ integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==,
+ }
+ engines: { node: '>=8.10.0' }
+
+ regenerator-runtime@0.14.1:
+ resolution:
+ {
+ integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==,
+ }
+
+ require-directory@2.1.1:
+ resolution:
+ {
+ integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==,
+ }
+ engines: { node: '>=0.10.0' }
+
+ rpc-websockets@9.0.4:
+ resolution:
+ {
+ integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==,
+ }
+
+ safe-buffer@5.2.1:
+ resolution:
+ {
+ integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==,
+ }
+
+ serialize-javascript@6.0.0:
+ resolution:
+ {
+ integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==,
+ }
+
+ set-function-length@1.2.2:
+ resolution:
+ {
+ integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==,
+ }
+ engines: { node: '>= 0.4' }
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution:
+ {
+ integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==,
+ }
+ engines: { node: '>= 10' }
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution:
+ {
+ integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==,
+ }
+ engines: { node: '>= 10' }
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution:
+ {
+ integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==,
+ }
+ engines: { node: '>= 10' }
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution:
+ {
+ integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==,
+ }
+ engines: { node: '>= 10' }
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution:
+ {
+ integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==,
+ }
+ engines: { node: '>= 10' }
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution:
+ {
+ integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==,
+ }
+ engines: { node: '>= 10' }
+
+ source-map-support@0.5.21:
+ resolution:
+ {
+ integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==,
+ }
+
+ source-map@0.6.1:
+ resolution:
+ {
+ integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==,
+ }
+ engines: { node: '>=0.10.0' }
+
+ string-width@4.2.3:
+ resolution:
+ {
+ integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==,
+ }
+ engines: { node: '>=8' }
+
+ strip-ansi@6.0.1:
+ resolution:
+ {
+ integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==,
+ }
+ engines: { node: '>=8' }
+
+ strip-bom@3.0.0:
+ resolution:
+ {
+ integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==,
+ }
+ engines: { node: '>=4' }
+
+ strip-json-comments@3.1.1:
+ resolution:
+ {
+ integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==,
+ }
+ engines: { node: '>=8' }
+
+ superstruct@2.0.2:
+ resolution:
+ {
+ integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==,
+ }
+ engines: { node: '>=14.0.0' }
+
+ supports-color@7.2.0:
+ resolution:
+ {
+ integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==,
+ }
+ engines: { node: '>=8' }
+
+ supports-color@8.1.1:
+ resolution:
+ {
+ integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==,
+ }
+ engines: { node: '>=10' }
+
+ text-encoding-utf-8@1.0.2:
+ resolution:
+ {
+ integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==,
+ }
+
+ through@2.3.8:
+ resolution:
+ {
+ integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==,
+ }
+
+ to-regex-range@5.0.1:
+ resolution:
+ {
+ integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==,
+ }
+ engines: { node: '>=8.0' }
+
+ tr46@0.0.3:
+ resolution:
+ {
+ integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==,
+ }
+
+ ts-mocha@10.0.0:
+ resolution:
+ {
+ integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==,
+ }
+ engines: { node: '>= 6.X.X' }
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution:
+ {
+ integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==,
+ }
+ engines: { node: '>=4.2.0' }
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution:
+ {
+ integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==,
+ }
+
+ tslib@2.8.0:
+ resolution:
+ {
+ integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==,
+ }
+
+ type-detect@4.1.0:
+ resolution:
+ {
+ integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==,
+ }
+ engines: { node: '>=4' }
+
+ typescript@4.9.5:
+ resolution:
+ {
+ integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==,
+ }
+ engines: { node: '>=4.2.0' }
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution:
+ {
+ integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==,
+ }
+
+ utf-8-validate@5.0.10:
+ resolution:
+ {
+ integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==,
+ }
+ engines: { node: '>=6.14.2' }
+
+ util@0.12.5:
+ resolution:
+ {
+ integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==,
+ }
+
+ uuid@8.3.2:
+ resolution:
+ {
+ integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==,
+ }
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution:
+ {
+ integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==,
+ }
+
+ whatwg-url@5.0.0:
+ resolution:
+ {
+ integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==,
+ }
+
+ which-typed-array@1.1.15:
+ resolution:
+ {
+ integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==,
+ }
+ engines: { node: '>= 0.4' }
+
+ which@2.0.2:
+ resolution:
+ {
+ integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==,
+ }
+ engines: { node: '>= 8' }
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution:
+ {
+ integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==,
+ }
+
+ wrap-ansi@7.0.0:
+ resolution:
+ {
+ integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==,
+ }
+ engines: { node: '>=10' }
+
+ wrappy@1.0.2:
+ resolution:
+ {
+ integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==,
+ }
+
+ ws@7.5.10:
+ resolution:
+ {
+ integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==,
+ }
+ engines: { node: '>=8.3.0' }
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution:
+ {
+ integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==,
+ }
+ engines: { node: '>=10.0.0' }
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution:
+ {
+ integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==,
+ }
+ engines: { node: '>=10' }
+
+ yargs-parser@20.2.4:
+ resolution:
+ {
+ integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==,
+ }
+ engines: { node: '>=10' }
+
+ yargs-unparser@2.0.0:
+ resolution:
+ {
+ integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==,
+ }
+ engines: { node: '>=10' }
+
+ yargs@16.2.0:
+ resolution:
+ {
+ integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==,
+ }
+ engines: { node: '>=10' }
+
+ yn@2.0.0:
+ resolution:
+ {
+ integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==,
+ }
+ engines: { node: '>=4' }
+
+ yocto-queue@0.1.0:
+ resolution:
+ {
+ integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==,
+ }
+ engines: { node: '>=10' }
+
+ zx@8.1.9:
+ resolution:
+ {
+ integrity: sha512-UHuLHphHmsBYKkAchkSrEN4nzDyagafqC9HUxtc1J7eopaScW6H9dsLJ1lmkAntnLtDTGoM8fa+jrJrXiIfKFA==,
+ }
+ engines: { node: '>= 12.17.0' }
+ hasBin: true
+
+snapshots:
+ '@babel/runtime@7.26.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet@0.7.2':
+ dependencies:
+ ansicolors: 0.3.2
+ assert: 2.1.0
+ bn.js: 5.2.1
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/cusper@0.0.2': {}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ fastestsmallesttextencoderdecoder: 1.0.22
+ typescript: 4.9.5
+
+ '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+ typescript: 4.9.5
+
+ '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - typescript
+ - utf-8-validate
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.26.0
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.8.4
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 22.8.4
+ optional: true
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 22.8.4
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.8.4':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.8.4
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansicolors@0.3.2: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assert@2.1.0:
+ dependencies:
+ call-bind: 1.0.7
+ is-nan: 1.3.2
+ object-is: 1.1.6
+ object.assign: 4.1.5
+ util: 0.12.5
+
+ assertion-error@1.1.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.0
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ call-bind@1.0.7:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ debug@4.3.7:
+ dependencies:
+ ms: 2.1.3
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es-define-property@1.0.0:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-intrinsic@1.2.4:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ gopd@1.0.1:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.0
+
+ has-proto@1.0.3: {}
+
+ has-symbols@1.0.3: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.0.3
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-arguments@1.1.1:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-callable@1.2.7: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.0.10:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-nan@1.3.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-typed-array@1.1.13:
+ dependencies:
+ which-typed-array: 1.1.15
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ possible-typed-array-names@1.0.0: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.13
+ which-typed-array: 1.1.15
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-typed-array@1.1.15:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
+
+ zx@8.1.9:
+ optionalDependencies:
+ '@types/fs-extra': 11.0.4
+ '@types/node': 22.8.4
diff --git a/tokens/create-token/steel/prepare.mjs b/tokens/create-token/steel/prepare.mjs
new file mode 100644
index 000000000..7c5ec464b
--- /dev/null
+++ b/tokens/create-token/steel/prepare.mjs
@@ -0,0 +1,34 @@
+#!/usr/bin/env zx
+
+import { mkdir, rm } from 'node:fs/promises';
+import { join } from 'node:path';
+import { $ } from 'zx';
+
+const programs = [
+ {
+ id: 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',
+ name: 'token_metadata.so',
+ },
+];
+
+const outputDir = 'tests/fixtures';
+const overwrite = true;
+
+try {
+ for (const program of programs) {
+ const { id, name } = program;
+ const outputFile = join(outputDir, name);
+ await $`solana config set -um`;
+
+ try {
+ await mkdir(outputDir, { recursive: true });
+ if (overwrite) await rm(outputFile, { force: true });
+ await $`solana program dump ${id} ${outputFile}`;
+ console.log(`Program ${id} dumped to ${outputFile}`);
+ } catch (error) {
+ console.error(`Error dumping ${id}: ${error.message}`);
+ }
+ }
+} catch (error) {
+ console.error(`Error preparing programs: ${error.message}`);
+}
diff --git a/tokens/create-token/steel/program/Cargo.toml b/tokens/create-token/steel/program/Cargo.toml
new file mode 100644
index 000000000..694428712
--- /dev/null
+++ b/tokens/create-token/steel/program/Cargo.toml
@@ -0,0 +1,30 @@
+[package]
+name = "steel-program"
+description = ""
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+steel-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+spl-token.workspace = true
+mpl-token-metadata = "5.1.0"
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "2.1"
+solana-sdk = "2.1"
+tokio = { version = "1.35", features = ["full"] }
+bytemuck_derive = ">=1.8.1, <1.9.0"
+half = "=2.4.1"
diff --git a/tokens/create-token/steel/program/build.rs b/tokens/create-token/steel/program/build.rs
new file mode 100644
index 000000000..e4ff00ff7
--- /dev/null
+++ b/tokens/create-token/steel/program/build.rs
@@ -0,0 +1,24 @@
+// build.rs
+use std::fs;
+use std::process::Command;
+
+fn main() {
+ println!("cargo:rerun-if-changed=build.rs");
+
+ // Create the fixtures directory path
+ fs::create_dir_all("tests/fixtures").expect("Failed to create fixtures directory");
+
+ let status = Command::new("solana")
+ .args([
+ "program",
+ "dump",
+ "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s",
+ "tests/fixtures/token_metadata.so",
+ ])
+ .status()
+ .expect("Failed to run solana program dump command");
+
+ if !status.success() {
+ panic!("Failed to dump Solana program");
+ }
+}
diff --git a/tokens/create-token/steel/program/src/create_token.rs b/tokens/create-token/steel/program/src/create_token.rs
new file mode 100644
index 000000000..1cb3de352
--- /dev/null
+++ b/tokens/create-token/steel/program/src/create_token.rs
@@ -0,0 +1,112 @@
+use solana_program::msg;
+use solana_program::program_pack::Pack;
+use spl_token::state::Mint;
+use steel::*;
+use steel_api::prelude::*;
+
+pub fn process_create_token(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ //Parse Args
+ let args = CreateToken::try_from_bytes(data)?;
+ let name = String::from_utf8(args.name.to_vec()).expect("Invalid UTF-8");
+ let symbol = String::from_utf8(args.symbol.to_vec()).expect("Invalid UTF-8");
+ let uri = String::from_utf8(args.uri.to_vec()).expect("Invalid UTF-8");
+ let decimals = args.decimals;
+ msg!("Parsed Arguments");
+
+ // Load accounts.
+ let [signer_info, mint_info, metadata_info, system_program, token_program, metadata_program, rent_sysvar] =
+ accounts
+ else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ msg!("Loaded Accounts");
+
+ //Validation
+ signer_info.is_signer()?;
+ mint_info.is_signer()?.is_empty()?.is_writable()?;
+ metadata_info.is_empty()?.is_writable()?.has_seeds(
+ &[
+ METADATA,
+ mpl_token_metadata::ID.as_ref(),
+ mint_info.key.as_ref(),
+ ],
+ &mpl_token_metadata::ID,
+ )?;
+ system_program.is_program(&system_program::ID)?;
+ token_program.is_program(&spl_token::ID)?;
+ metadata_program.is_program(&mpl_token_metadata::ID)?;
+ rent_sysvar.is_sysvar(&sysvar::rent::ID)?;
+ msg!("Accounts validated");
+
+ // First, create an account for the Mint.
+ //
+ msg!("Creating mint account...");
+ msg!("Mint: {}", mint_info.key);
+ solana_program::program::invoke(
+ &solana_program::system_instruction::create_account(
+ signer_info.key,
+ mint_info.key,
+ (solana_program::rent::Rent::get()?).minimum_balance(Mint::LEN),
+ Mint::LEN as u64,
+ token_program.key,
+ ),
+ &[
+ mint_info.clone(),
+ signer_info.clone(),
+ system_program.clone(),
+ token_program.clone(),
+ ],
+ )?;
+
+ // Second, Initialize account as Mint Account
+ //
+ msg!("Initializing mint account...");
+ solana_program::program::invoke(
+ &spl_token::instruction::initialize_mint(
+ token_program.key,
+ mint_info.key,
+ signer_info.key,
+ Some(signer_info.key),
+ decimals, // 9 Decimals for the default SPL Token standard
+ )?,
+ &[
+ mint_info.clone(),
+ signer_info.clone(),
+ token_program.clone(),
+ rent_sysvar.clone(),
+ ],
+ )?;
+
+ // Lastly, create the account for that Mint's metadata
+ //
+ msg!("Creating metadata account...");
+ msg!("Metadata account address: {}", metadata_info.key);
+ mpl_token_metadata::instructions::CreateMetadataAccountV3Cpi {
+ __program: metadata_program,
+ metadata: metadata_info,
+ mint: mint_info,
+ mint_authority: signer_info,
+ payer: signer_info,
+ update_authority: (signer_info, true),
+ system_program,
+ rent: Some(rent_sysvar),
+ __args: mpl_token_metadata::instructions::CreateMetadataAccountV3InstructionArgs {
+ data: mpl_token_metadata::types::DataV2 {
+ name: name,
+ symbol: symbol,
+ uri: uri,
+ seller_fee_basis_points: 0,
+ creators: None,
+ collection: None,
+ uses: None,
+ },
+ is_mutable: true,
+ collection_details: None,
+ },
+ }
+ .invoke()?;
+
+ msg!("Token mint created successfully.");
+
+ Ok(())
+}
diff --git a/tokens/create-token/steel/program/src/lib.rs b/tokens/create-token/steel/program/src/lib.rs
new file mode 100644
index 000000000..e8ad43149
--- /dev/null
+++ b/tokens/create-token/steel/program/src/lib.rs
@@ -0,0 +1,24 @@
+mod create_token;
+use solana_program::msg;
+
+use create_token::*;
+
+use steel::*;
+use steel_api::prelude::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ msg!("Instruction started");
+ let (ix, data) = parse_instruction(&steel_api::ID, program_id, data)?;
+
+ match ix {
+ TokenInstruction::CreateToken => process_create_token(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/tokens/create-token/steel/program/tests/test.rs b/tokens/create-token/steel/program/tests/test.rs
new file mode 100644
index 000000000..303208e16
--- /dev/null
+++ b/tokens/create-token/steel/program/tests/test.rs
@@ -0,0 +1,152 @@
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{
+ program_pack::Pack, signature::Keypair, signer::Signer, transaction::Transaction,
+};
+use steel::*;
+use steel_api::prelude::*;
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "steel_program",
+ steel_api::ID,
+ processor!(steel_program::process_instruction),
+ );
+
+ program_test.add_program("token_metadata", mpl_token_metadata::ID, None);
+
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+
+ //SPL TOKEN
+ let token_mint_keypair = Keypair::new();
+
+ let name = string_to_bytes::<32>("Solana Gold").unwrap();
+ let symbol = string_to_bytes::<8>("GOLDSOL").unwrap();
+ let uri = string_to_bytes::<128>("https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json").unwrap();
+ let decimals = 9;
+
+ // Submit create transaction for spl_token.
+ let ix = create_token(
+ payer.pubkey(),
+ token_mint_keypair.pubkey(),
+ name,
+ symbol,
+ uri,
+ decimals,
+ );
+ let tx = Transaction::new_signed_with_payer(
+ &[ix],
+ Some(&payer.pubkey()),
+ &[&payer, &token_mint_keypair],
+ blockhash,
+ );
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Check token mint account data
+ let mint_account_data = banks
+ .get_account(token_mint_keypair.pubkey())
+ .await
+ .unwrap()
+ .unwrap()
+ .data;
+ let deserialized_mint_data = spl_token::state::Mint::unpack(&mint_account_data).unwrap();
+ assert!(deserialized_mint_data.is_initialized);
+ assert_eq!(deserialized_mint_data.decimals, decimals);
+ assert_eq!(
+ deserialized_mint_data.mint_authority.unwrap(),
+ payer.pubkey()
+ );
+
+ // Check token metadata account data
+ let metadata_account_data = banks
+ .get_account(metadata_pda(token_mint_keypair.pubkey()).0)
+ .await
+ .unwrap()
+ .unwrap()
+ .data;
+ let deserialized_metadata_data =
+ mpl_token_metadata::accounts::Metadata::from_bytes(&metadata_account_data).unwrap();
+ assert_eq!(deserialized_metadata_data.update_authority, payer.pubkey());
+ assert_eq!(deserialized_metadata_data.mint, token_mint_keypair.pubkey());
+ assert_eq!(
+ deserialized_metadata_data.name.trim_end_matches('\0'),
+ "Solana Gold"
+ );
+ assert_eq!(
+ deserialized_metadata_data.symbol.trim_end_matches('\0'),
+ "GOLDSOL"
+ );
+ assert_eq!(deserialized_metadata_data.uri.trim_end_matches('\0'), "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json" );
+
+ //NFT
+ let nft_mint_keypair = Keypair::new();
+
+ let name = string_to_bytes::<32>("Homer NFT").unwrap();
+ let symbol = string_to_bytes::<8>("HOMR").unwrap();
+ let uri = string_to_bytes::<128>("https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json").unwrap();
+ let decimals = 0;
+
+ //Submit create transaction for nft
+ let ix = create_token(
+ payer.pubkey(),
+ nft_mint_keypair.pubkey(),
+ name,
+ symbol,
+ uri,
+ decimals,
+ );
+
+ let tx = Transaction::new_signed_with_payer(
+ &[ix],
+ Some(&payer.pubkey()),
+ &[&payer, &nft_mint_keypair],
+ blockhash,
+ );
+
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ //Check nft mint account data
+ let mint_account_data = banks
+ .get_account(nft_mint_keypair.pubkey())
+ .await
+ .unwrap()
+ .unwrap()
+ .data;
+ let deserialized_mint_data = spl_token::state::Mint::unpack(&mint_account_data).unwrap();
+ assert!(deserialized_mint_data.is_initialized);
+ assert_eq!(deserialized_mint_data.decimals, decimals);
+ assert_eq!(
+ deserialized_mint_data.mint_authority.unwrap(),
+ payer.pubkey()
+ );
+
+ //Check nft metadata account data
+ let metadata_account_data = banks
+ .get_account(metadata_pda(nft_mint_keypair.pubkey()).0)
+ .await
+ .unwrap()
+ .unwrap()
+ .data;
+ let deserialized_metadata_data =
+ mpl_token_metadata::accounts::Metadata::from_bytes(&metadata_account_data).unwrap();
+ assert_eq!(deserialized_metadata_data.update_authority, payer.pubkey());
+ assert_eq!(deserialized_metadata_data.mint, nft_mint_keypair.pubkey());
+ assert_eq!(
+ deserialized_metadata_data.name.trim_end_matches('\0'),
+ "Homer NFT"
+ );
+ assert_eq!(
+ deserialized_metadata_data.symbol.trim_end_matches('\0'),
+ "HOMR"
+ );
+ assert_eq!(deserialized_metadata_data.uri.trim_end_matches('\0'), "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json" );
+}
diff --git a/tokens/create-token/steel/tests/bankrun.test.ts b/tokens/create-token/steel/tests/bankrun.test.ts
new file mode 100644
index 000000000..46c397aa1
--- /dev/null
+++ b/tokens/create-token/steel/tests/bankrun.test.ts
@@ -0,0 +1,123 @@
+import { Buffer } from 'node:buffer';
+import { describe, test } from 'node:test';
+import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata';
+import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { Keypair, PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { start } from 'solana-bankrun';
+import { CreateTokenArgs } from './instructions';
+
+describe('Create Tokens!', async () => {
+ const PROGRAM_ID = new PublicKey('z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35');
+ const context = await start(
+ [
+ { name: 'steel_program', programId: PROGRAM_ID },
+ { name: 'token_metadata', programId: TOKEN_METADATA_PROGRAM_ID },
+ ],
+ [],
+ );
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ const tokenMintKeypair: Keypair = Keypair.generate();
+ const nftMintKeypair: Keypair = Keypair.generate();
+
+ test('Create an SPL Token!', async () => {
+ const metadataPDA = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), tokenMintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+
+ // SPL Token default = 9 decimals
+ //
+ const createArgs = new CreateTokenArgs(
+ 'Solana Gold',
+ 'GOLDSOL',
+ 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json',
+ 9,
+ );
+
+ const createTokenIx = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ {
+ pubkey: tokenMintKeypair.publicKey,
+ isSigner: true,
+ isWritable: true,
+ },
+ { pubkey: metadataPDA, isSigner: false, isWritable: true },
+ {
+ pubkey: SystemProgram.programId,
+ isSigner: false,
+ isWritable: false,
+ },
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
+ {
+ pubkey: TOKEN_METADATA_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: createArgs.toBuffer(),
+ });
+
+ const tx = new Transaction();
+ const [blockhash, _] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockhash;
+ tx.add(createTokenIx).sign(payer, tokenMintKeypair);
+
+ await client.processTransaction(tx);
+
+ console.log('Success!');
+ console.log(`Mint Address: ${tokenMintKeypair.publicKey}`);
+ });
+
+ test('Create an NFT!', async () => {
+ const metadataPDA = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), nftMintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+
+ // NFT default = 0 decimals
+ //
+ const createArgs = new CreateTokenArgs(
+ 'Homer NFT',
+ 'HOMR',
+ 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json',
+ 0,
+ );
+
+ const createTokenIx = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ { pubkey: nftMintKeypair.publicKey, isSigner: true, isWritable: true },
+ { pubkey: metadataPDA, isSigner: false, isWritable: true },
+ {
+ pubkey: SystemProgram.programId,
+ isSigner: false,
+ isWritable: false,
+ },
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
+ {
+ pubkey: TOKEN_METADATA_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: createArgs.toBuffer(),
+ });
+
+ const tx = new Transaction();
+ const [blockhash, _] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockhash;
+ tx.add(createTokenIx).sign(payer, nftMintKeypair);
+
+ await client.processTransaction(tx);
+
+ console.log('Success!');
+ console.log(`Mint Address: ${nftMintKeypair.publicKey}`);
+ });
+});
diff --git a/tokens/create-token/steel/tests/instructions.ts b/tokens/create-token/steel/tests/instructions.ts
new file mode 100644
index 000000000..02c070630
--- /dev/null
+++ b/tokens/create-token/steel/tests/instructions.ts
@@ -0,0 +1,61 @@
+class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+}
+
+// Helper function to pad strings to fixed length buffers
+function strToBytes(str: string, length: number): Buffer {
+ const buffer = Buffer.alloc(length);
+ buffer.write(str);
+ return buffer;
+}
+
+export enum CreateTokenInstruction {
+ Create = 0,
+}
+
+export class CreateTokenArgs {
+ instruction: number;
+ name: Buffer;
+ symbol: Buffer;
+ uri: Buffer;
+ decimals: number;
+
+ constructor(name: string, symbol: string, uri: string, decimals: number) {
+ this.instruction = CreateTokenInstruction.Create;
+ this.name = strToBytes(name, 32);
+ this.symbol = strToBytes(symbol, 8);
+ this.uri = strToBytes(uri, 128);
+ this.decimals = decimals;
+ }
+
+ toBuffer(): Buffer {
+ // Added 1 byte for decimals to the total buffer size
+ const buffer = Buffer.alloc(1 + 32 + 8 + 128 + 1);
+ let offset = 0;
+
+ // Write instruction
+ buffer.writeUInt8(this.instruction, offset);
+ offset += 1;
+
+ // Write name
+ this.name.copy(buffer, offset);
+ offset += 32;
+
+ // Write symbol
+ this.symbol.copy(buffer, offset);
+ offset += 8;
+
+ // Write uri
+ this.uri.copy(buffer, offset);
+ offset += 128;
+
+ // Write decimals
+ buffer.writeUInt8(this.decimals, offset);
+
+ return buffer;
+ }
+}
diff --git a/tokens/create-token/steel/tsconfig.json b/tokens/create-token/steel/tsconfig.json
new file mode 100644
index 000000000..cd5d2e3d0
--- /dev/null
+++ b/tokens/create-token/steel/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/tokens/escrow/anchor/.gitignore b/tokens/escrow/anchor/.gitignore
new file mode 100644
index 000000000..2e0446b07
--- /dev/null
+++ b/tokens/escrow/anchor/.gitignore
@@ -0,0 +1,7 @@
+.anchor
+.DS_Store
+target
+**/*.rs.bk
+node_modules
+test-ledger
+.yarn
diff --git a/tokens/escrow/anchor/.mocharc.json b/tokens/escrow/anchor/.mocharc.json
new file mode 100644
index 000000000..13a83f475
--- /dev/null
+++ b/tokens/escrow/anchor/.mocharc.json
@@ -0,0 +1,6 @@
+{
+ "extension": ["ts"],
+ "spec": "tests/**/*.ts",
+ "require": "ts-node/register",
+ "node-option": ["experimental-specifier-resolution=node", "loader=ts-node/esm"]
+}
diff --git a/tokens/escrow/anchor/.prettierignore b/tokens/escrow/anchor/.prettierignore
new file mode 100644
index 000000000..414258343
--- /dev/null
+++ b/tokens/escrow/anchor/.prettierignore
@@ -0,0 +1,7 @@
+.anchor
+.DS_Store
+target
+node_modules
+dist
+build
+test-ledger
diff --git a/tokens/escrow/anchor/Anchor.toml b/tokens/escrow/anchor/Anchor.toml
new file mode 100644
index 000000000..c3ccc6438
--- /dev/null
+++ b/tokens/escrow/anchor/Anchor.toml
@@ -0,0 +1,18 @@
+[toolchain]
+
+[features]
+resolution = true
+skip-lint = false
+
+[programs.localnet]
+escrow = "qbuMdeYxYJXBjU6C6qFKjZKjXmrU83eDQomHdrch826"
+
+[registry]
+url = "https://api.apr.dev/"
+
+[provider]
+cluster = "Localnet"
+wallet = "~/.config/solana/id.json"
+
+[scripts]
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.test.ts"
diff --git a/tokens/escrow/anchor/Cargo.toml b/tokens/escrow/anchor/Cargo.toml
new file mode 100644
index 000000000..14a951cee
--- /dev/null
+++ b/tokens/escrow/anchor/Cargo.toml
@@ -0,0 +1,15 @@
+[workspace]
+members = [
+ "programs/*"
+]
+resolver = "2"
+
+[profile.release]
+overflow-checks = true
+lto = "fat"
+codegen-units = 1
+
+[profile.release.build-override]
+opt-level = 3
+incremental = false
+codegen-units = 1
diff --git a/tokens/escrow/anchor/README.md b/tokens/escrow/anchor/README.md
new file mode 100644
index 000000000..e67de3059
--- /dev/null
+++ b/tokens/escrow/anchor/README.md
@@ -0,0 +1,49 @@
+# Anchor Escrow
+
+## Introduction
+
+This Solana program is called an **_escrow_** - it allows a user to swap a specific amount of one token for a desired amount of another token.
+
+For example, Alice is offering 10 USDC, and wants 100 WIF in return.
+
+Without our program, users would have to engage in manual token swapping. Imagine the potential problems if Bob promised to send Alice 100 WIF, but instead took the 10 USDC and ran? Or what if Alice was dishonest, received the 10 USDC from Bob, and decided not to send the 100 WIF? Our Escrow program handles these complexities by acting a trusted entity that will only release tokens to both parties at the right time.
+
+Our Escrow program is designed to provide a secure environment for users to swap a specific amount of one token with a specific amount of another token without having to trust each other.
+
+Better yet, since our program allows Alice and Bob to transact directly with each other, they both get a hundred percent of the token they desire!
+
+## Usage
+
+`anchor test`, `anchor deploy` etc.
+
+## Credit
+
+This project is based on [Dean Little's Anchor Escrow,](https://github.com/deanmlittle/anchor-escrow-2024) with a few changes to make discussion in class easier.
+
+### Changes from original
+
+One of the challenges when teaching is avoiding ambiguity — names have to be carefully chosen to be clear and not possible to confuse with other times.
+
+- Custom instructions were replaced by `@solana-developers/helpers` for many tasks to reduce the file size.
+- Shared functionality to transfer tokens is now in `instructions/shared.rs`
+- The upstream project has a custom file layout. We use the 'multiple files' Anchor layout.
+- Contexts are separate data structures from functions that use the contexts. There is no need for OO-like `impl` patterns here - there's no mutable state stored in the Context, and the 'methods' do not mutate that state. Besides, it's easier to type!
+- The name 'deposit' was being used in multiple contexts, and `deposit` can be tough because it's a verb and a noun:
+
+ - Renamed deposit #1 -> 'token_a_offered_amount'
+ - Renamed deposit #2 (in make() ) -> 'send_offered_tokens_to_vault'
+ - Renamed deposit #3 (in take() ) -> 'send_wanted_tokens_to_maker'
+
+- 'seed' was renamed to 'id' because 'seed' as it conflicted with the 'seeds' used for PDA address generation.
+- 'Escrow' was used for the program's name and the account that records details of the offer. This wasn't great because people would confuse 'Escrow' with the 'Vault'.
+
+ - Escrow (the program) -> remains Escrow
+ - Escrow (the offer) -> Offer.
+
+- 'receive' was renamed to 'token_b_wanted_amount' as 'receive' is a verb and not a suitable name for an integer.
+- mint_a -> token_mint_a (ie, what the maker has offered and what the taker wants)
+- mint_b -> token_mint_b (ie, what that maker wants and what the taker must offer)
+- makerAtaA -> makerTokenAccountA,
+- makerAtaB -> makerTokenAccountB
+- takerAtaA -> takerTokenAccountA
+- takerAtaB -> takerTokenAccountB
diff --git a/tokens/escrow/anchor/migrations/deploy.ts b/tokens/escrow/anchor/migrations/deploy.ts
new file mode 100644
index 000000000..64a1c3599
--- /dev/null
+++ b/tokens/escrow/anchor/migrations/deploy.ts
@@ -0,0 +1,12 @@
+// Migrations are an early feature. Currently, they're nothing more than this
+// single deploy script that's invoked from the CLI, injecting a provider
+// configured from the workspace's Anchor.toml.
+
+const anchor = require('@coral-xyz/anchor');
+
+module.exports = async (provider) => {
+ // Configure client to use the provider.
+ anchor.setProvider(provider);
+
+ // Add your deploy script here.
+};
diff --git a/tokens/escrow/anchor/package.json b/tokens/escrow/anchor/package.json
new file mode 100644
index 000000000..ad0e591f8
--- /dev/null
+++ b/tokens/escrow/anchor/package.json
@@ -0,0 +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.3.0",
+ "@solana/spl-token": "^0.4.6",
+ "@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"
+ }
+}
diff --git a/tokens/escrow/anchor/pnpm-lock.yaml b/tokens/escrow/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..95f655f17
--- /dev/null
+++ b/tokens/escrow/anchor/pnpm-lock.yaml
@@ -0,0 +1,1792 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana-developers/helpers':
+ specifier: ^2.3.0
+ version: 2.5.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.4.6
+ version: 0.4.6(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(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)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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))
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.25.0':
+ 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/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.5.0':
+ resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana-developers/helpers@2.5.0':
+ resolution: {integrity: sha512-QKm22DUFcDseUJ+rjZtIJmw6k5KHe5hV6K3g1RVISitL1KoKPfLYMqAjBQlUcT1KG0GNCpmOKT1dFjJTBsm+1w==}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==}
+
+ '@solana/codecs-core@2.0.0-preview.4':
+ resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==}
+
+ '@solana/codecs-data-structures@2.0.0-preview.4':
+ resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
+
+ '@solana/codecs-numbers@2.0.0-preview.4':
+ resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-strings@2.0.0-preview.2':
+ resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+
+ '@solana/codecs-strings@2.0.0-preview.4':
+ resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+ typescript: '>=5'
+
+ '@solana/codecs@2.0.0-preview.2':
+ resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==}
+
+ '@solana/codecs@2.0.0-preview.4':
+ resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.0.0-preview.2':
+ resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
+ hasBin: true
+
+ '@solana/errors@2.0.0-preview.4':
+ resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/options@2.0.0-preview.2':
+ resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==}
+
+ '@solana/options@2.0.0-preview.4':
+ resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/spl-token-group@0.0.4':
+ resolution: {integrity: sha512-7+80nrEMdUKlK37V6kOe024+T7J4nNss0F8LQ9OOPYdWCCfJmsGUzVx2W3oeizZR4IHM6N4yC9v1Xqwc3BTPWw==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token-group@0.0.5':
+ resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.94.0
+
+ '@solana/spl-token-metadata@0.1.4':
+ resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.4.6':
+ resolution: {integrity: sha512-1nCnUqfHVtdguFciVWaY/RKcQz1IF4b31jnKgAmjU9QVN1q7dRUkTEWJZgTYIEtsULjVnC9jRqlhgGN39WbKKA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.4.8':
+ resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.94.0
+
+ '@solana/spl-type-length-value@0.1.0':
+ resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+ engines: {node: '>=16'}
+
+ '@solana/web3.js@1.95.2':
+ resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==}
+
+ '@swc/helpers@0.5.11':
+ resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.14.2':
+ resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.10':
+ resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base-x@5.0.0:
+ resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@6.0.0:
+ resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.25.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(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
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - 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))':
+ dependencies:
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.5.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana-developers/helpers@2.5.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/spl-token': 0.4.8(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 6.0.0
+ dotenv: 16.4.5
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - typescript
+ - utf-8-validate
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-core@2.0.0-preview.4(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-numbers@2.0.0-preview.4(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+ fastestsmallesttextencoderdecoder: 1.0.22
+
+ '@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ fastestsmallesttextencoderdecoder: 1.0.22
+ typescript: 4.9.5
+
+ '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-data-structures': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/options': 2.0.0-preview.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-preview.2':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+
+ '@solana/errors@2.0.0-preview.4(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+ typescript: 4.9.5
+
+ '@solana/options@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+
+ '@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token-group@0.0.4(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token@0.4.6(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-group': 0.0.4(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - utf-8-validate
+
+ '@solana/spl-token@0.4.8(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - typescript
+ - utf-8-validate
+
+ '@solana/spl-type-length-value@0.1.0':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@noble/curves': 1.5.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.11':
+ dependencies:
+ tslib: 2.6.3
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.14.2':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@types/ws@8.5.10':
+ dependencies:
+ '@types/node': 20.14.2
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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)):
+ dependencies:
+ '@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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@5.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ bs58@6.0.0:
+ dependencies:
+ base-x: 5.0.0
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ prettier@2.8.8: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.11
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.10
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.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)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.3: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/tokens/escrow/anchor/programs/escrow/Cargo.toml b/tokens/escrow/anchor/programs/escrow/Cargo.toml
new file mode 100644
index 000000000..654c22701
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/Cargo.toml
@@ -0,0 +1,22 @@
+[package]
+name = "escrow"
+version = "0.1.0"
+description = "Created with Anchor"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+name = "escrow"
+
+[features]
+default = []
+cpi = ["no-entrypoint"]
+no-entrypoint = []
+no-idl = []
+no-log-ix-name = []
+idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
+
+[dependencies]
+anchor-lang = { version = "0.31.1", features = ["init-if-needed"]}
+anchor-spl = "0.31.1"
+solana-program = "=2.0.3"
diff --git a/tokens/escrow/anchor/programs/escrow/Xargo.toml b/tokens/escrow/anchor/programs/escrow/Xargo.toml
new file mode 100644
index 000000000..475fb71ed
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/Xargo.toml
@@ -0,0 +1,2 @@
+[target.bpfel-unknown-unknown.dependencies.std]
+features = []
diff --git a/tokens/escrow/anchor/programs/escrow/src/constants.rs b/tokens/escrow/anchor/programs/escrow/src/constants.rs
new file mode 100644
index 000000000..019371b64
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/src/constants.rs
@@ -0,0 +1,6 @@
+use anchor_lang::prelude::*;
+
+#[constant]
+pub const SEED: &str = "anchor";
+
+pub const ANCHOR_DISCRIMINATOR: usize = 8;
diff --git a/tokens/escrow/anchor/programs/escrow/src/error.rs b/tokens/escrow/anchor/programs/escrow/src/error.rs
new file mode 100644
index 000000000..c37199a44
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/src/error.rs
@@ -0,0 +1,7 @@
+use anchor_lang::prelude::*;
+
+#[error_code]
+pub enum ErrorCode {
+ #[msg("Custom error message")]
+ CustomError,
+}
diff --git a/tokens/escrow/anchor/programs/escrow/src/instructions/make_offer.rs b/tokens/escrow/anchor/programs/escrow/src/instructions/make_offer.rs
new file mode 100644
index 000000000..1f3024b3d
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/src/instructions/make_offer.rs
@@ -0,0 +1,82 @@
+use anchor_lang::prelude::*;
+
+use anchor_spl::{
+ associated_token::AssociatedToken,
+ token_interface::{Mint, TokenAccount, TokenInterface},
+};
+
+use crate::{Offer, ANCHOR_DISCRIMINATOR};
+
+use super::transfer_tokens;
+
+// See https://www.anchor-lang.com/docs/account-constraints#instruction-attribute
+#[derive(Accounts)]
+#[instruction(id: u64)]
+pub struct MakeOffer<'info> {
+ #[account(mut)]
+ pub maker: Signer<'info>,
+
+ #[account(mint::token_program = token_program)]
+ pub token_mint_a: InterfaceAccount<'info, Mint>,
+
+ #[account(mint::token_program = token_program)]
+ pub token_mint_b: InterfaceAccount<'info, Mint>,
+
+ #[account(
+ mut,
+ associated_token::mint = token_mint_a,
+ associated_token::authority = maker,
+ associated_token::token_program = token_program
+ )]
+ pub maker_token_account_a: InterfaceAccount<'info, TokenAccount>,
+
+ #[account(
+ init,
+ payer = maker,
+ space = ANCHOR_DISCRIMINATOR + Offer::INIT_SPACE,
+ seeds = [b"offer", maker.key().as_ref(), id.to_le_bytes().as_ref()],
+ bump
+ )]
+ pub offer: Account<'info, Offer>,
+
+ #[account(
+ init,
+ payer = maker,
+ associated_token::mint = token_mint_a,
+ associated_token::authority = offer,
+ associated_token::token_program = token_program
+ )]
+ pub vault: InterfaceAccount<'info, TokenAccount>,
+
+ pub associated_token_program: Program<'info, AssociatedToken>,
+ pub token_program: Interface<'info, TokenInterface>,
+ pub system_program: Program<'info, System>,
+}
+
+// Move the tokens from the maker's ATA to the vault
+pub fn send_offered_tokens_to_vault(
+ context: &Context,
+ token_a_offered_amount: u64,
+) -> Result<()> {
+ transfer_tokens(
+ &context.accounts.maker_token_account_a,
+ &context.accounts.vault,
+ &token_a_offered_amount,
+ &context.accounts.token_mint_a,
+ &context.accounts.maker,
+ &context.accounts.token_program,
+ )
+}
+
+// Save the details of the offer to the offer account
+pub fn save_offer(context: Context, id: u64, token_b_wanted_amount: u64) -> Result<()> {
+ context.accounts.offer.set_inner(Offer {
+ id,
+ maker: context.accounts.maker.key(),
+ token_mint_a: context.accounts.token_mint_a.key(),
+ token_mint_b: context.accounts.token_mint_b.key(),
+ token_b_wanted_amount,
+ bump: context.bumps.offer,
+ });
+ Ok(())
+}
diff --git a/tokens/escrow/anchor/programs/escrow/src/instructions/mod.rs b/tokens/escrow/anchor/programs/escrow/src/instructions/mod.rs
new file mode 100644
index 000000000..cf1dd986b
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/src/instructions/mod.rs
@@ -0,0 +1,8 @@
+pub mod make_offer;
+pub use make_offer::*;
+
+pub mod take_offer;
+pub use take_offer::*;
+
+pub mod shared;
+pub use shared::*;
diff --git a/tokens/escrow/anchor/programs/escrow/src/instructions/shared.rs b/tokens/escrow/anchor/programs/escrow/src/instructions/shared.rs
new file mode 100644
index 000000000..3152521d9
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/src/instructions/shared.rs
@@ -0,0 +1,25 @@
+use anchor_lang::prelude::*;
+
+use anchor_spl::token_interface::{
+ transfer_checked, Mint, TokenAccount, TokenInterface, TransferChecked,
+};
+
+pub fn transfer_tokens<'info>(
+ from: &InterfaceAccount<'info, TokenAccount>,
+ to: &InterfaceAccount<'info, TokenAccount>,
+ amount: &u64,
+ mint: &InterfaceAccount<'info, Mint>,
+ authority: &Signer<'info>,
+ token_program: &Interface<'info, TokenInterface>,
+) -> Result<()> {
+ let transfer_accounts = TransferChecked {
+ from: from.to_account_info(),
+ mint: mint.to_account_info(),
+ to: to.to_account_info(),
+ authority: authority.to_account_info(),
+ };
+
+ let cpi_context = CpiContext::new(token_program.to_account_info(), transfer_accounts);
+
+ transfer_checked(cpi_context, *amount, mint.decimals)
+}
diff --git a/tokens/escrow/anchor/programs/escrow/src/instructions/take_offer.rs b/tokens/escrow/anchor/programs/escrow/src/instructions/take_offer.rs
new file mode 100644
index 000000000..a3fecb7f0
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/src/instructions/take_offer.rs
@@ -0,0 +1,129 @@
+use anchor_lang::prelude::*;
+
+use anchor_spl::{
+ associated_token::AssociatedToken,
+ token_interface::{
+ close_account, transfer_checked, CloseAccount, Mint, TokenAccount, TokenInterface,
+ TransferChecked,
+ },
+};
+
+use crate::Offer;
+
+use super::transfer_tokens;
+
+#[derive(Accounts)]
+pub struct TakeOffer<'info> {
+ #[account(mut)]
+ pub taker: Signer<'info>,
+
+ #[account(mut)]
+ pub maker: SystemAccount<'info>,
+
+ pub token_mint_a: InterfaceAccount<'info, Mint>,
+
+ pub token_mint_b: InterfaceAccount<'info, Mint>,
+
+ #[account(
+ init_if_needed,
+ payer = taker,
+ associated_token::mint = token_mint_a,
+ associated_token::authority = taker,
+ associated_token::token_program = token_program,
+ )]
+ pub taker_token_account_a: Box>,
+
+ #[account(
+ mut,
+ associated_token::mint = token_mint_b,
+ associated_token::authority = taker,
+ associated_token::token_program = token_program,
+ )]
+ pub taker_token_account_b: Box>,
+
+ #[account(
+ init_if_needed,
+ payer = taker,
+ associated_token::mint = token_mint_b,
+ associated_token::authority = maker,
+ associated_token::token_program = token_program,
+ )]
+ pub maker_token_account_b: Box>,
+
+ #[account(
+ mut,
+ close = maker,
+ has_one = maker,
+ has_one = token_mint_a,
+ has_one = token_mint_b,
+ seeds = [b"offer", maker.key().as_ref(), offer.id.to_le_bytes().as_ref()],
+ bump = offer.bump
+ )]
+ offer: Account<'info, Offer>,
+
+ #[account(
+ mut,
+ associated_token::mint = token_mint_a,
+ associated_token::authority = offer,
+ associated_token::token_program = token_program,
+ )]
+ pub vault: InterfaceAccount<'info, TokenAccount>,
+
+ pub associated_token_program: Program<'info, AssociatedToken>,
+ pub token_program: Interface<'info, TokenInterface>,
+ pub system_program: Program<'info, System>,
+}
+
+pub fn send_wanted_tokens_to_maker(ctx: &Context) -> Result<()> {
+ transfer_tokens(
+ &ctx.accounts.taker_token_account_b,
+ &ctx.accounts.maker_token_account_b,
+ &ctx.accounts.offer.token_b_wanted_amount,
+ &ctx.accounts.token_mint_b,
+ &ctx.accounts.taker,
+ &ctx.accounts.token_program,
+ )
+}
+
+pub fn withdraw_and_close_vault(ctx: Context) -> Result<()> {
+ let seeds = &[
+ b"offer",
+ ctx.accounts.maker.to_account_info().key.as_ref(),
+ &ctx.accounts.offer.id.to_le_bytes()[..],
+ &[ctx.accounts.offer.bump],
+ ];
+ let signer_seeds = [&seeds[..]];
+
+ let accounts = TransferChecked {
+ from: ctx.accounts.vault.to_account_info(),
+ mint: ctx.accounts.token_mint_a.to_account_info(),
+ to: ctx.accounts.taker_token_account_a.to_account_info(),
+ authority: ctx.accounts.offer.to_account_info(),
+ };
+
+ let cpi_context = CpiContext::new_with_signer(
+ ctx.accounts.token_program.to_account_info(),
+ accounts,
+ &signer_seeds,
+ );
+
+ transfer_checked(
+ cpi_context,
+ ctx.accounts.vault.amount,
+ ctx.accounts.token_mint_a.decimals,
+ )?;
+
+ let accounts = CloseAccount {
+ account: ctx.accounts.vault.to_account_info(),
+ destination: ctx.accounts.taker.to_account_info(),
+ authority: ctx.accounts.offer.to_account_info(),
+ };
+
+ let cpi_context = CpiContext::new_with_signer(
+ ctx.accounts.token_program.to_account_info(),
+ accounts,
+ &signer_seeds,
+ );
+
+ close_account(cpi_context)
+}
diff --git a/tokens/escrow/anchor/programs/escrow/src/lib.rs b/tokens/escrow/anchor/programs/escrow/src/lib.rs
new file mode 100644
index 000000000..686b770d6
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/src/lib.rs
@@ -0,0 +1,32 @@
+pub mod constants;
+pub mod error;
+pub mod instructions;
+pub mod state;
+
+use anchor_lang::prelude::*;
+
+pub use constants::*;
+pub use instructions::*;
+pub use state::*;
+
+declare_id!("qbuMdeYxYJXBjU6C6qFKjZKjXmrU83eDQomHdrch826");
+
+#[program]
+pub mod escrow {
+ use super::*;
+
+ pub fn make_offer(
+ context: Context,
+ id: u64,
+ token_a_offered_amount: u64,
+ token_b_wanted_amount: u64,
+ ) -> Result<()> {
+ instructions::make_offer::send_offered_tokens_to_vault(&context, token_a_offered_amount)?;
+ instructions::make_offer::save_offer(context, id, token_b_wanted_amount)
+ }
+
+ pub fn take_offer(context: Context) -> Result<()> {
+ instructions::take_offer::send_wanted_tokens_to_maker(&context)?;
+ instructions::take_offer::withdraw_and_close_vault(context)
+ }
+}
diff --git a/tokens/escrow/anchor/programs/escrow/src/state/mod.rs b/tokens/escrow/anchor/programs/escrow/src/state/mod.rs
new file mode 100644
index 000000000..cfaa08e9f
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/src/state/mod.rs
@@ -0,0 +1,3 @@
+pub mod offer;
+
+pub use offer::*;
diff --git a/tokens/escrow/anchor/programs/escrow/src/state/offer.rs b/tokens/escrow/anchor/programs/escrow/src/state/offer.rs
new file mode 100644
index 000000000..65f90af73
--- /dev/null
+++ b/tokens/escrow/anchor/programs/escrow/src/state/offer.rs
@@ -0,0 +1,12 @@
+use anchor_lang::prelude::*;
+
+#[account]
+#[derive(InitSpace)]
+pub struct Offer {
+ pub id: u64,
+ pub maker: Pubkey,
+ pub token_mint_a: Pubkey,
+ pub token_mint_b: Pubkey,
+ pub token_b_wanted_amount: u64,
+ pub bump: u8,
+}
diff --git a/tokens/escrow/anchor/register.js b/tokens/escrow/anchor/register.js
new file mode 100644
index 000000000..9e438057f
--- /dev/null
+++ b/tokens/escrow/anchor/register.js
@@ -0,0 +1,4 @@
+import { register } from 'node:module';
+import { pathToFileURL } from 'node:url';
+
+register('ts-node/esm', pathToFileURL('./'));
diff --git a/tokens/escrow/anchor/tests/bankrun.test.ts b/tokens/escrow/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..62dd4a371
--- /dev/null
+++ b/tokens/escrow/anchor/tests/bankrun.test.ts
@@ -0,0 +1,177 @@
+import { randomBytes } from 'node:crypto';
+import { describe, it } from 'node:test';
+import * as anchor from '@coral-xyz/anchor';
+import { BN, type Program } from '@coral-xyz/anchor';
+import {
+ MINT_SIZE,
+ TOKEN_2022_PROGRAM_ID,
+ type TOKEN_PROGRAM_ID,
+ createAssociatedTokenAccountIdempotentInstruction,
+ createInitializeMint2Instruction,
+ createMintToInstruction,
+ getAssociatedTokenAddressSync,
+ getMinimumBalanceForRentExemptMint,
+} from '@solana/spl-token';
+import { LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, type TransactionInstruction } from '@solana/web3.js';
+import { BankrunProvider } from 'anchor-bankrun';
+import { assert } from 'chai';
+import { startAnchor } from 'solana-bankrun';
+import type { Escrow } from '../target/types/escrow';
+
+import { confirmTransaction, makeKeypairs } from '@solana-developers/helpers';
+
+const TOKEN_PROGRAM: typeof TOKEN_2022_PROGRAM_ID | typeof TOKEN_PROGRAM_ID = TOKEN_2022_PROGRAM_ID;
+const IDL = require('../target/idl/escrow.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+
+const getRandomBigNumber = (size = 8) => {
+ return new BN(randomBytes(size));
+};
+
+describe('Escrow Bankrun example', async () => {
+ const context = await startAnchor('', [{ name: 'escrow', programId: PROGRAM_ID }], []);
+ const provider = new BankrunProvider(context);
+ const connection = provider.connection;
+ // const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ // We're going to reuse these accounts across multiple tests
+ const accounts: Record = {
+ tokenProgram: TOKEN_PROGRAM,
+ };
+
+ const [alice, bob, tokenMintA, tokenMintB] = makeKeypairs(4);
+
+ before('Creates Alice and Bob accounts, 2 token mints, and associated token accounts for both tokens for both users', async () => {
+ const [aliceTokenAccountA, aliceTokenAccountB, bobTokenAccountA, bobTokenAccountB] = [alice, bob].flatMap((keypair) =>
+ [tokenMintA, tokenMintB].map((mint) => getAssociatedTokenAddressSync(mint.publicKey, keypair.publicKey, false, TOKEN_PROGRAM)),
+ );
+
+ // Airdrops to users, and creates two tokens mints 'A' and 'B'"
+ const minimumLamports = await getMinimumBalanceForRentExemptMint(connection);
+
+ const sendSolInstructions: Array = [alice, bob].map((account) =>
+ SystemProgram.transfer({
+ fromPubkey: provider.publicKey,
+ toPubkey: account.publicKey,
+ lamports: 10 * LAMPORTS_PER_SOL,
+ }),
+ );
+
+ const createMintInstructions: Array = [tokenMintA, tokenMintB].map((mint) =>
+ SystemProgram.createAccount({
+ fromPubkey: provider.publicKey,
+ newAccountPubkey: mint.publicKey,
+ lamports: minimumLamports,
+ space: MINT_SIZE,
+ programId: TOKEN_PROGRAM,
+ }),
+ );
+
+ // Make tokenA and tokenB mints, mint tokens and create ATAs
+ const mintTokensInstructions: Array = [
+ {
+ mint: tokenMintA.publicKey,
+ authority: alice.publicKey,
+ ata: aliceTokenAccountA,
+ },
+ {
+ mint: tokenMintB.publicKey,
+ authority: bob.publicKey,
+ ata: bobTokenAccountB,
+ },
+ ].flatMap((mintDetails) => [
+ createInitializeMint2Instruction(mintDetails.mint, 6, mintDetails.authority, null, TOKEN_PROGRAM),
+ createAssociatedTokenAccountIdempotentInstruction(provider.publicKey, mintDetails.ata, mintDetails.authority, mintDetails.mint, TOKEN_PROGRAM),
+ createMintToInstruction(mintDetails.mint, mintDetails.ata, mintDetails.authority, 1_000_000_000, [], TOKEN_PROGRAM),
+ ]);
+
+ // Add all these instructions to our transaction
+ const tx = new Transaction();
+ tx.instructions = [...sendSolInstructions, ...createMintInstructions, ...mintTokensInstructions];
+
+ await provider.sendAndConfirm(tx, [tokenMintA, tokenMintB, alice, bob]);
+
+ // Save the accounts for later use
+ accounts.maker = alice.publicKey;
+ accounts.taker = bob.publicKey;
+ accounts.tokenMintA = tokenMintA.publicKey;
+ accounts.makerTokenAccountA = aliceTokenAccountA;
+ accounts.takerTokenAccountA = bobTokenAccountA;
+ accounts.tokenMintB = tokenMintB.publicKey;
+ accounts.makerTokenAccountB = aliceTokenAccountB;
+ accounts.takerTokenAccountB = bobTokenAccountB;
+ });
+
+ const tokenAOfferedAmount = new BN(1_000_000);
+ const tokenBWantedAmount = new BN(1_000_000);
+
+ // We'll call this function from multiple tests, so let's seperate it out
+ const make = async () => {
+ // Pick a random ID for the offer we'll make
+ const offerId = getRandomBigNumber();
+
+ // Then determine the account addresses we'll use for the offer and the vault
+ const offer = PublicKey.findProgramAddressSync(
+ [Buffer.from('offer'), accounts.maker.toBuffer(), offerId.toArrayLike(Buffer, 'le', 8)],
+ program.programId,
+ )[0];
+
+ const vault = getAssociatedTokenAddressSync(accounts.tokenMintA, offer, true, TOKEN_PROGRAM);
+
+ accounts.offer = offer;
+ accounts.vault = vault;
+
+ const transactionSignature = await program.methods
+ .makeOffer(offerId, tokenAOfferedAmount, tokenBWantedAmount)
+ .accounts({ ...accounts })
+ .signers([alice])
+ .rpc();
+
+ await confirmTransaction(connection, transactionSignature);
+
+ // Check our vault contains the tokens offered
+ const vaultBalanceResponse = await connection.getTokenAccountBalance(vault);
+ const vaultBalance = new BN(vaultBalanceResponse.value.amount);
+ assert(vaultBalance.eq(tokenAOfferedAmount));
+
+ // Check our Offer account contains the correct data
+ const offerAccount = await program.account.offer.fetch(offer);
+
+ assert(offerAccount.maker.equals(alice.publicKey));
+ assert(offerAccount.tokenMintA.equals(accounts.tokenMintA));
+ assert(offerAccount.tokenMintB.equals(accounts.tokenMintB));
+ assert(offerAccount.tokenBWantedAmount.eq(tokenBWantedAmount));
+ };
+
+ // We'll call this function from multiple tests, so let's seperate it out
+ const take = async () => {
+ const transactionSignature = await program.methods
+ .takeOffer()
+ .accounts({ ...accounts })
+ .signers([bob])
+ .rpc();
+
+ await confirmTransaction(connection, transactionSignature);
+
+ // Check the offered tokens are now in Bob's account
+ // (note: there is no before balance as Bob didn't have any offered tokens before the transaction)
+ const bobTokenAccountBalanceAfterResponse = await connection.getTokenAccountBalance(accounts.takerTokenAccountA);
+ const bobTokenAccountBalanceAfter = new BN(bobTokenAccountBalanceAfterResponse.value.amount);
+ assert(bobTokenAccountBalanceAfter.eq(tokenAOfferedAmount));
+
+ // Check the wanted tokens are now in Alice's account
+ // (note: there is no before balance as Alice didn't have any wanted tokens before the transaction)
+ const aliceTokenAccountBalanceAfterResponse = await connection.getTokenAccountBalance(accounts.makerTokenAccountB);
+ const aliceTokenAccountBalanceAfter = new BN(aliceTokenAccountBalanceAfterResponse.value.amount);
+ assert(aliceTokenAccountBalanceAfter.eq(tokenBWantedAmount));
+ };
+
+ it('Puts the tokens Alice offers into the vault when Alice makes an offer', async () => {
+ await make();
+ });
+
+ it("Puts the tokens from the vault into Bob's account, and gives Alice Bob's tokens, when Bob takes an offer", async () => {
+ await take();
+ });
+});
diff --git a/tokens/escrow/anchor/tests/escrow.test.ts b/tokens/escrow/anchor/tests/escrow.test.ts
new file mode 100644
index 000000000..0c5a5c0bb
--- /dev/null
+++ b/tokens/escrow/anchor/tests/escrow.test.ts
@@ -0,0 +1,169 @@
+import { randomBytes } from 'node:crypto';
+import * as anchor from '@coral-xyz/anchor';
+import { BN, type Program } from '@coral-xyz/anchor';
+import { TOKEN_2022_PROGRAM_ID, type TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
+import { assert } from 'chai';
+import type { Escrow } from '../target/types/escrow';
+
+import { confirmTransaction, createAccountsMintsAndTokenAccounts, makeKeypairs } from '@solana-developers/helpers';
+
+// Work on both Token Program and new Token Extensions Program
+const TOKEN_PROGRAM: typeof TOKEN_2022_PROGRAM_ID | typeof TOKEN_PROGRAM_ID = TOKEN_2022_PROGRAM_ID;
+
+const SECONDS = 1000;
+
+// Tests must complete within half this time otherwise
+// they are marked as slow. Since Anchor involves a little
+// network IO, these tests usually take about 15 seconds.
+const ANCHOR_SLOW_TEST_THRESHOLD = 40 * SECONDS;
+
+const getRandomBigNumber = (size = 8) => {
+ return new BN(randomBytes(size));
+};
+
+describe('escrow', async () => {
+ // Use the cluster and the keypair from Anchor.toml
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+
+ // See https://github.com/coral-xyz/anchor/issues/3122
+ const user = (provider.wallet as anchor.Wallet).payer;
+ const payer = user;
+
+ const connection = provider.connection;
+
+ const program = anchor.workspace.Escrow as Program;
+
+ // We're going to reuse these accounts across multiple tests
+ const accounts: Record = {
+ tokenProgram: TOKEN_PROGRAM,
+ };
+
+ let alice: anchor.web3.Keypair;
+ let bob: anchor.web3.Keypair;
+ let tokenMintA: anchor.web3.Keypair;
+ let tokenMintB: anchor.web3.Keypair;
+
+ [alice, bob, tokenMintA, tokenMintB] = makeKeypairs(4);
+
+ const tokenAOfferedAmount = new BN(1_000_000);
+ const tokenBWantedAmount = new BN(1_000_000);
+
+ before('Creates Alice and Bob accounts, 2 token mints, and associated token accounts for both tokens for both users', async () => {
+ const usersMintsAndTokenAccounts = await createAccountsMintsAndTokenAccounts(
+ [
+ // Alice's token balances
+ [
+ // 1_000_000_000 of token A
+ 1_000_000_000,
+ // 0 of token B
+ 0,
+ ],
+ // Bob's token balances
+ [
+ // 0 of token A
+ 0,
+ // 1_000_000_000 of token B
+ 1_000_000_000,
+ ],
+ ],
+ 1 * LAMPORTS_PER_SOL,
+ connection,
+ payer,
+ );
+
+ // Alice will be the maker (creator) of the offer
+ // Bob will be the taker (acceptor) of the offer
+ const users = usersMintsAndTokenAccounts.users;
+ alice = users[0];
+ bob = users[1];
+
+ // tokenMintA represents the token Alice is offering
+ // tokenMintB represents the token Alice wants in return
+ const mints = usersMintsAndTokenAccounts.mints;
+ tokenMintA = mints[0];
+ tokenMintB = mints[1];
+
+ const tokenAccounts = usersMintsAndTokenAccounts.tokenAccounts;
+
+ // aliceTokenAccountA is Alice's account for tokenA (the token she's offering)
+ // aliceTokenAccountB is Alice's account for tokenB (the token she wants)
+ const aliceTokenAccountA = tokenAccounts[0][0];
+ const aliceTokenAccountB = tokenAccounts[0][1];
+
+ // bobTokenAccountA is Bob's account for tokenA (the token Alice is offering)
+ // bobTokenAccountB is Bob's account for tokenB (the token Alice wants)
+ const bobTokenAccountA = tokenAccounts[1][0];
+ const bobTokenAccountB = tokenAccounts[1][1];
+
+ // Save the accounts for later use
+ accounts.maker = alice.publicKey;
+ accounts.taker = bob.publicKey;
+ accounts.tokenMintA = tokenMintA.publicKey;
+ accounts.makerTokenAccountA = aliceTokenAccountA;
+ accounts.takerTokenAccountA = bobTokenAccountA;
+ accounts.tokenMintB = tokenMintB.publicKey;
+ accounts.makerTokenAccountB = aliceTokenAccountB;
+ accounts.takerTokenAccountB = bobTokenAccountB;
+ });
+
+ it('Puts the tokens Alice offers into the vault when Alice makes an offer', async () => {
+ // Pick a random ID for the offer we'll make
+ const offerId = getRandomBigNumber();
+
+ // Then determine the account addresses we'll use for the offer and the vault
+ const offer = PublicKey.findProgramAddressSync(
+ [Buffer.from('offer'), accounts.maker.toBuffer(), offerId.toArrayLike(Buffer, 'le', 8)],
+ program.programId,
+ )[0];
+
+ const vault = getAssociatedTokenAddressSync(accounts.tokenMintA, offer, true, TOKEN_PROGRAM);
+
+ accounts.offer = offer;
+ accounts.vault = vault;
+
+ const transactionSignature = await program.methods
+ .makeOffer(offerId, tokenAOfferedAmount, tokenBWantedAmount)
+ .accounts({ ...accounts })
+ .signers([alice])
+ .rpc();
+
+ await confirmTransaction(connection, transactionSignature);
+
+ // Check our vault contains the tokens offered
+ const vaultBalanceResponse = await connection.getTokenAccountBalance(vault);
+ const vaultBalance = new BN(vaultBalanceResponse.value.amount);
+ assert(vaultBalance.eq(tokenAOfferedAmount));
+
+ // Check our Offer account contains the correct data
+ const offerAccount = await program.account.offer.fetch(offer);
+
+ assert(offerAccount.maker.equals(alice.publicKey));
+ assert(offerAccount.tokenMintA.equals(accounts.tokenMintA));
+ assert(offerAccount.tokenMintB.equals(accounts.tokenMintB));
+ assert(offerAccount.tokenBWantedAmount.eq(tokenBWantedAmount));
+ }).slow(ANCHOR_SLOW_TEST_THRESHOLD);
+
+ it("Puts the tokens from the vault into Bob's account, and gives Alice Bob's tokens, when Bob takes an offer", async () => {
+ const transactionSignature = await program.methods
+ .takeOffer()
+ .accounts({ ...accounts })
+ .signers([bob])
+ .rpc();
+
+ await confirmTransaction(connection, transactionSignature);
+
+ // Check the offered tokens are now in Bob's account
+ // (note: there is no before balance as Bob didn't have any offered tokens before the transaction)
+ const bobTokenAccountBalanceAfterResponse = await connection.getTokenAccountBalance(accounts.takerTokenAccountA);
+ const bobTokenAccountBalanceAfter = new BN(bobTokenAccountBalanceAfterResponse.value.amount);
+ assert(bobTokenAccountBalanceAfter.eq(tokenAOfferedAmount));
+
+ // Check the wanted tokens are now in Alice's account
+ // (note: there is no before balance as Alice didn't have any wanted tokens before the transaction)
+ const aliceTokenAccountBalanceAfterResponse = await connection.getTokenAccountBalance(accounts.makerTokenAccountB);
+ const aliceTokenAccountBalanceAfter = new BN(aliceTokenAccountBalanceAfterResponse.value.amount);
+ assert(aliceTokenAccountBalanceAfter.eq(tokenBWantedAmount));
+ }).slow(ANCHOR_SLOW_TEST_THRESHOLD);
+});
diff --git a/tokens/escrow/anchor/tsconfig.json b/tokens/escrow/anchor/tsconfig.json
new file mode 100644
index 000000000..cd5d2e3d0
--- /dev/null
+++ b/tokens/escrow/anchor/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/tokens/escrow/native/Cargo.toml b/tokens/escrow/native/Cargo.toml
new file mode 100644
index 000000000..39fc8ab65
--- /dev/null
+++ b/tokens/escrow/native/Cargo.toml
@@ -0,0 +1,3 @@
+[workspace]
+members = ["program"]
+resolver = "2"
diff --git a/tokens/escrow/native/cicd.sh b/tokens/escrow/native/cicd.sh
new file mode 100644
index 000000000..8a16e0387
--- /dev/null
+++ b/tokens/escrow/native/cicd.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This script is for quick building & deploying of the program.
+# It also serves as a reference for the commands used for building & deploying Solana programs.
+# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
+
+cargo build-sbf --manifest-path=./program/Cargo.toml
+solana program deploy ./program/target/deploy/program.so
diff --git a/tokens/escrow/native/package.json b/tokens/escrow/native/package.json
new file mode 100644
index 000000000..184bfe818
--- /dev/null
+++ b/tokens/escrow/native/package.json
@@ -0,0 +1,24 @@
+{
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/program.so"
+ },
+ "dependencies": {
+ "@solana/web3.js": "^1.95.4",
+ "@solana/spl-token": "^0.4.9"
+ },
+ "devDependencies": {
+ "@types/bn.js": "^5.1.0",
+ "@types/chai": "^4.3.1",
+ "@types/mocha": "^10.0.9",
+ "@types/node": "^22.8.6",
+ "borsh": "0.7.0",
+ "chai": "^4.3.4",
+ "mocha": "^10.8.2",
+ "solana-bankrun": "^0.4.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^5"
+ }
+}
diff --git a/tokens/escrow/native/pnpm-lock.yaml b/tokens/escrow/native/pnpm-lock.yaml
new file mode 100644
index 000000000..7c6e8b5f1
--- /dev/null
+++ b/tokens/escrow/native/pnpm-lock.yaml
@@ -0,0 +1,1453 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/spl-token':
+ specifier: ^0.4.9
+ version: 0.4.9(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10)
+ '@solana/web3.js':
+ specifier: ^1.95.4
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^10.0.9
+ version: 10.0.9
+ '@types/node':
+ specifier: ^22.8.6
+ version: 22.8.6
+ borsh:
+ specifier: 0.7.0
+ version: 0.7.0
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^10.8.2
+ version: 10.8.2
+ solana-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@10.8.2)
+ typescript:
+ specifier: ^5
+ version: 5.6.3
+
+packages:
+
+ '@babel/runtime@7.26.0':
+ resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-rc.1':
+ resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-data-structures@2.0.0-rc.1':
+ resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.0.0-rc.1':
+ resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-strings@2.0.0-rc.1':
+ resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+ typescript: '>=5'
+
+ '@solana/codecs@2.0.0-rc.1':
+ resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.0.0-rc.1':
+ resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/options@2.0.0-rc.1':
+ resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/spl-token-group@0.0.7':
+ resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/spl-token-metadata@0.1.6':
+ resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/spl-token@0.4.9':
+ resolution: {integrity: sha512-g3wbj4F4gq82YQlwqhPB0gHFXfgsC6UmyGMxtSLf/BozT/oKd59465DbnlUK8L8EcimKMavxsVAMoLcEdeCicg==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@10.0.9':
+ resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.8.6':
+ resolution: {integrity: sha512-tosuJYKrIqjQIlVCM4PEGxOmyg3FCPa/fViuJChnGeEIhjA46oy8FMVoF9su1/v8PNs2a8Q0iFNyOx0uOF91nw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@10.8.2:
+ resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.26.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3)':
+ dependencies:
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ typescript: 5.6.3
+
+ '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ typescript: 5.6.3
+
+ '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ typescript: 5.6.3
+
+ '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ fastestsmallesttextencoderdecoder: 1.0.22
+ typescript: 5.6.3
+
+ '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-rc.1(typescript@5.6.3)':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+ typescript: 5.6.3
+
+ '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token-group@0.0.7(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token@0.4.9(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - typescript
+ - utf-8-validate
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.26.0
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.8.6
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.8.6
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@10.0.9': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.8.6':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.8.6
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.8.6
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ debug@4.3.7(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@10.8.2:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.7(supports-color@8.1.1)
+ diff: 5.2.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 8.1.0
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 16.2.0
+ yargs-parser: 20.2.9
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@10.8.2):
+ dependencies:
+ mocha: 10.8.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/tokens/escrow/native/program/Cargo.toml b/tokens/escrow/native/program/Cargo.toml
new file mode 100644
index 000000000..678f374a2
--- /dev/null
+++ b/tokens/escrow/native/program/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "escrow-native-program"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+borsh = "1.5.1"
+solana-program = "=1.18.17"
+spl-token = { version = "4.0.0", features = [ "no-entrypoint" ] }
+spl-associated-token-account = { version = "3.0.4", features = [ "no-entrypoint" ] }
+thiserror="1.0.0"
+
+[lib]
+crate-type = ["cdylib", "lib"]
diff --git a/tokens/escrow/native/program/src/error.rs b/tokens/escrow/native/program/src/error.rs
new file mode 100644
index 000000000..7ad3f4d0b
--- /dev/null
+++ b/tokens/escrow/native/program/src/error.rs
@@ -0,0 +1,17 @@
+use solana_program::program_error::ProgramError;
+use thiserror::Error;
+
+#[derive(Debug, Error)]
+pub enum EscrowError {
+ #[error("Offer key provided does not match expected")]
+ OfferKeyMismatch,
+
+ #[error("Token account provided does not match expected")]
+ TokenAccountMismatch,
+}
+
+impl From for ProgramError {
+ fn from(e: EscrowError) -> Self {
+ ProgramError::Custom(e as u32)
+ }
+}
diff --git a/tokens/escrow/native/program/src/instructions/make_offer.rs b/tokens/escrow/native/program/src/instructions/make_offer.rs
new file mode 100644
index 000000000..d9a99a674
--- /dev/null
+++ b/tokens/escrow/native/program/src/instructions/make_offer.rs
@@ -0,0 +1,155 @@
+use {
+ crate::{error::*, state::*, utils::assert_is_associated_token_account},
+ borsh::{BorshDeserialize, BorshSerialize},
+ solana_program::{
+ account_info::AccountInfo,
+ entrypoint::ProgramResult,
+ program::{invoke, invoke_signed},
+ program_error::ProgramError,
+ program_pack::Pack,
+ pubkey::Pubkey,
+ rent::Rent,
+ system_instruction,
+ sysvar::Sysvar,
+ },
+ spl_associated_token_account::instruction as associated_token_account_instruction,
+ spl_token::{instruction as token_instruction, state::Account as TokenAccount},
+};
+
+#[derive(BorshDeserialize, BorshSerialize, Debug)]
+pub struct MakeOffer {
+ pub id: u64,
+ pub token_a_offered_amount: u64,
+ pub token_b_wanted_amount: u64,
+}
+
+impl MakeOffer {
+ pub fn process(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo<'_>],
+ args: MakeOffer,
+ ) -> ProgramResult {
+ // accounts in order.
+ //
+ let [
+ offer_info, // offer account info
+ token_mint_a, // token_mint a
+ token_mint_b, // token mint b
+ maker_token_account_a, // maker token account a
+ vault, // vault
+ maker, // maker
+ payer, // payer
+ token_program, // token program
+ associated_token_program, // associated token program
+ system_program// system program
+ ] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ // ensure the maker signs the instruction
+ //
+ if !maker.is_signer {
+ return Err(ProgramError::MissingRequiredSignature);
+ }
+
+ let offer_seeds = &[
+ Offer::SEED_PREFIX,
+ maker.key.as_ref(),
+ &args.id.to_le_bytes(),
+ ];
+
+ let (offer_key, bump) = Pubkey::find_program_address(offer_seeds, program_id);
+
+ // make sure the offer key is the same
+ //
+ if *offer_info.key != offer_key {
+ return Err(EscrowError::OfferKeyMismatch.into());
+ };
+
+ // check vault is owned by the offer account
+ //
+ assert_is_associated_token_account(vault.key, offer_info.key, token_mint_a.key)?;
+
+ let offer = Offer {
+ bump,
+ maker: *maker.key,
+ id: args.id,
+ token_b_wanted_amount: args.token_b_wanted_amount,
+ token_mint_a: *token_mint_a.key,
+ token_mint_b: *token_mint_b.key,
+ };
+
+ let size = borsh::to_vec::(&offer)?.len();
+ let lamports_required = (Rent::get()?).minimum_balance(size);
+
+ // create account
+ //
+ invoke_signed(
+ &system_instruction::create_account(
+ payer.key,
+ offer_info.key,
+ lamports_required,
+ size as u64,
+ program_id,
+ ),
+ &[payer.clone(), offer_info.clone(), system_program.clone()],
+ &[&[
+ Offer::SEED_PREFIX,
+ maker.key.as_ref(),
+ args.id.to_le_bytes().as_ref(),
+ &[bump],
+ ]],
+ )?;
+
+ // create the vault token account
+ //
+ invoke(
+ &associated_token_account_instruction::create_associated_token_account(
+ payer.key,
+ offer_info.key,
+ token_mint_a.key,
+ token_program.key,
+ ),
+ &[
+ token_mint_a.clone(),
+ vault.clone(),
+ offer_info.clone(),
+ payer.clone(),
+ system_program.clone(),
+ token_program.clone(),
+ associated_token_program.clone(),
+ ],
+ )?;
+
+ // transfer Mint A tokens to vault
+ //
+ invoke(
+ &token_instruction::transfer(
+ token_program.key,
+ maker_token_account_a.key,
+ vault.key,
+ maker.key,
+ &[maker.key],
+ args.token_a_offered_amount,
+ )?,
+ &[
+ token_program.clone(),
+ maker_token_account_a.clone(),
+ vault.clone(),
+ maker.clone(),
+ ],
+ )?;
+
+ let vault_token_amount = TokenAccount::unpack(&vault.data.borrow())?.amount;
+
+ solana_program::msg!("Amount in vault: {}", vault_token_amount);
+
+ assert_eq!(vault_token_amount, args.token_a_offered_amount);
+
+ // write data into offer account
+ //
+ offer.serialize(&mut *offer_info.data.borrow_mut())?;
+
+ Ok(())
+ }
+}
diff --git a/tokens/escrow/native/program/src/instructions/mod.rs b/tokens/escrow/native/program/src/instructions/mod.rs
new file mode 100644
index 000000000..bac9a6549
--- /dev/null
+++ b/tokens/escrow/native/program/src/instructions/mod.rs
@@ -0,0 +1,5 @@
+pub mod make_offer;
+pub use make_offer::*;
+
+pub mod take_offer;
+pub use take_offer::*;
diff --git a/tokens/escrow/native/program/src/instructions/take_offer.rs b/tokens/escrow/native/program/src/instructions/take_offer.rs
new file mode 100644
index 000000000..716e784b7
--- /dev/null
+++ b/tokens/escrow/native/program/src/instructions/take_offer.rs
@@ -0,0 +1,235 @@
+use {
+ crate::{error::*, state::*, utils::*},
+ borsh::{BorshDeserialize, BorshSerialize},
+ solana_program::{
+ account_info::AccountInfo,
+ entrypoint::ProgramResult,
+ program::{invoke, invoke_signed},
+ program_error::ProgramError,
+ program_pack::Pack,
+ pubkey::Pubkey,
+ },
+ spl_associated_token_account::instruction as associated_token_account_instruction,
+ spl_token::{instruction as token_instruction, state::Account as TokenAccount},
+};
+
+#[derive(BorshDeserialize, BorshSerialize, Debug)]
+pub struct TakeOffer {}
+
+impl TakeOffer {
+ pub fn process(program_id: &Pubkey, accounts: &[AccountInfo<'_>]) -> ProgramResult {
+ // accounts in order
+ //
+ let [
+ offer_info, // offer account info
+ token_mint_a, // token mint A
+ token_mint_b, // token mint b
+ maker_token_account_b, // maker token a account
+ taker_token_account_a, // mkaer token b account
+ taker_token_account_b, // taker token a account
+ vault, // vault
+ maker, // maker
+ taker, // taker
+ payer, // payer
+ token_program, // token program
+ associated_token_program, // associated token program
+ system_program// system program
+ ] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ // ensure the taker signs the instruction
+ //
+ if !taker.is_signer {
+ return Err(ProgramError::MissingRequiredSignature);
+ }
+
+ // get the offer data
+ //
+ let offer = Offer::try_from_slice(&offer_info.data.borrow()[..])?;
+
+ // validate the offer
+ //
+ assert_eq!(&offer.maker, maker.key);
+ assert_eq!(&offer.token_mint_a, token_mint_a.key);
+ assert_eq!(&offer.token_mint_b, token_mint_b.key);
+
+ // validate the offer accout with signer seeds
+ let offer_signer_seeds = &[
+ Offer::SEED_PREFIX,
+ maker.key.as_ref(),
+ &offer.id.to_le_bytes(),
+ &[offer.bump],
+ ];
+
+ let offer_key = Pubkey::create_program_address(offer_signer_seeds, program_id)?;
+
+ // make sure the offer key is the same
+ //
+ if *offer_info.key != offer_key {
+ return Err(EscrowError::OfferKeyMismatch.into());
+ };
+
+ // validate receiving addresses
+ //
+ assert_is_associated_token_account(maker_token_account_b.key, maker.key, token_mint_b.key)?;
+ assert_is_associated_token_account(taker_token_account_a.key, taker.key, token_mint_a.key)?;
+
+ // create taker token A account if needed, before receiveing tokens
+ //
+ if taker_token_account_a.lamports() == 0 {
+ // create the vault token account
+ invoke(
+ &associated_token_account_instruction::create_associated_token_account(
+ payer.key,
+ taker.key,
+ token_mint_a.key,
+ token_program.key,
+ ),
+ &[
+ token_mint_a.clone(),
+ taker_token_account_a.clone(),
+ taker.clone(),
+ payer.clone(),
+ system_program.clone(),
+ token_program.clone(),
+ associated_token_program.clone(),
+ ],
+ )?;
+ }
+
+ // create maker token B account if needed, before receiveing tokens
+ //
+ if maker_token_account_b.lamports() == 0 {
+ // create the vault token account
+ invoke(
+ &associated_token_account_instruction::create_associated_token_account(
+ payer.key,
+ maker.key,
+ token_mint_b.key,
+ token_program.key,
+ ),
+ &[
+ token_mint_b.clone(),
+ maker_token_account_b.clone(),
+ maker.clone(),
+ payer.clone(),
+ system_program.clone(),
+ token_program.clone(),
+ associated_token_program.clone(),
+ ],
+ )?;
+ }
+
+ // read token accounts
+ //
+ let vault_amount_a = TokenAccount::unpack(&vault.data.borrow())?.amount;
+ let taker_amount_a_before_transfer =
+ TokenAccount::unpack(&taker_token_account_a.data.borrow())?.amount;
+ let maker_amount_b_before_transfer =
+ TokenAccount::unpack(&maker_token_account_b.data.borrow())?.amount;
+ let taker_amount_b = TokenAccount::unpack(&taker_token_account_b.data.borrow())?.amount;
+
+ solana_program::msg!("Vault A Balance Before Transfer: {}", vault_amount_a);
+ solana_program::msg!(
+ "Taker A Balance Before Transfer: {}",
+ taker_amount_a_before_transfer
+ );
+ solana_program::msg!(
+ "Maker B Balance Before Transfer: {}",
+ maker_amount_b_before_transfer
+ );
+ solana_program::msg!("Taker B Balance Before Transfer: {}", taker_amount_b);
+
+ // taker transfer mint a tokens to vault
+ //
+ invoke(
+ &token_instruction::transfer(
+ token_program.key,
+ taker_token_account_b.key,
+ maker_token_account_b.key,
+ taker.key,
+ &[taker.key],
+ offer.token_b_wanted_amount,
+ )?,
+ &[
+ token_program.clone(),
+ taker_token_account_b.clone(),
+ maker_token_account_b.clone(),
+ taker.clone(),
+ ],
+ )?;
+
+ // transfer from vault to taker
+ //
+ invoke_signed(
+ &token_instruction::transfer(
+ token_program.key,
+ vault.key,
+ taker_token_account_a.key,
+ offer_info.key,
+ &[offer_info.key, taker.key],
+ vault_amount_a,
+ )?,
+ &[
+ token_mint_a.clone(),
+ vault.clone(),
+ taker_token_account_a.clone(),
+ offer_info.clone(),
+ taker.clone(),
+ token_program.clone(),
+ ],
+ &[offer_signer_seeds],
+ )?;
+
+ let taker_amount_a = TokenAccount::unpack(&taker_token_account_a.data.borrow())?.amount;
+ let maker_amount_b = TokenAccount::unpack(&maker_token_account_b.data.borrow())?.amount;
+
+ assert_eq!(
+ taker_amount_a,
+ taker_amount_a_before_transfer + vault_amount_a
+ );
+ assert_eq!(
+ maker_amount_b,
+ taker_amount_a_before_transfer + offer.token_b_wanted_amount
+ );
+
+ let taker_amount_b = TokenAccount::unpack(&taker_token_account_b.data.borrow())?.amount;
+ let vault_amount_a = TokenAccount::unpack(&vault.data.borrow())?.amount;
+
+ solana_program::msg!("Vault A Balance After Transfer: {}", vault_amount_a);
+ solana_program::msg!("Taker A Balance After Transfer: {}", taker_amount_a);
+ solana_program::msg!("Maker B Balance After Transfer: {}", maker_amount_b);
+ solana_program::msg!("Taker B Balance After Transfer: {}", taker_amount_b);
+
+ // close the vault account
+ //
+ invoke_signed(
+ &spl_token::instruction::close_account(
+ token_program.key,
+ vault.key,
+ taker.key,
+ offer_info.key,
+ &[],
+ )?,
+ &[vault.clone(), taker.clone(), offer_info.clone()],
+ &[offer_signer_seeds],
+ )?;
+
+ // Send the rent back to the payer
+ //
+ let lamports = offer_info.lamports();
+ **offer_info.lamports.borrow_mut() -= lamports;
+ **payer.lamports.borrow_mut() += lamports;
+
+ // Realloc the account to zero
+ //
+ offer_info.realloc(0, true)?;
+
+ // Assign the account to the System Program
+ //
+ offer_info.assign(system_program.key);
+
+ Ok(())
+ }
+}
diff --git a/tokens/escrow/native/program/src/lib.rs b/tokens/escrow/native/program/src/lib.rs
new file mode 100644
index 000000000..d6a5249ee
--- /dev/null
+++ b/tokens/escrow/native/program/src/lib.rs
@@ -0,0 +1,33 @@
+mod error;
+mod instructions;
+mod state;
+mod utils;
+
+use {
+ borsh::{BorshDeserialize, BorshSerialize},
+ instructions::*,
+ solana_program::{
+ account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, pubkey::Pubkey,
+ },
+};
+
+entrypoint!(process_instruction);
+
+fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ instruction_data: &[u8],
+) -> ProgramResult {
+ let instruction = EscrowInstruction::try_from_slice(instruction_data)?;
+
+ match instruction {
+ EscrowInstruction::MakeOffer(data) => MakeOffer::process(program_id, accounts, data),
+ EscrowInstruction::TakeOffer => TakeOffer::process(program_id, accounts),
+ }
+}
+
+#[derive(BorshSerialize, BorshDeserialize, Debug)]
+enum EscrowInstruction {
+ MakeOffer(MakeOffer),
+ TakeOffer,
+}
diff --git a/tokens/escrow/native/program/src/state.rs b/tokens/escrow/native/program/src/state.rs
new file mode 100644
index 000000000..48e973e47
--- /dev/null
+++ b/tokens/escrow/native/program/src/state.rs
@@ -0,0 +1,16 @@
+use borsh::{BorshDeserialize, BorshSerialize};
+use solana_program::pubkey::Pubkey;
+
+#[derive(BorshDeserialize, BorshSerialize, Debug)]
+pub struct Offer {
+ pub id: u64,
+ pub maker: Pubkey,
+ pub token_mint_a: Pubkey,
+ pub token_mint_b: Pubkey,
+ pub token_b_wanted_amount: u64,
+ pub bump: u8,
+}
+
+impl Offer {
+ pub const SEED_PREFIX: &'static [u8] = b"offer";
+}
diff --git a/tokens/escrow/native/program/src/utils.rs b/tokens/escrow/native/program/src/utils.rs
new file mode 100644
index 000000000..0d3276fc7
--- /dev/null
+++ b/tokens/escrow/native/program/src/utils.rs
@@ -0,0 +1,17 @@
+use crate::error::EscrowError;
+use solana_program::{program_error::ProgramError, pubkey::Pubkey};
+
+pub fn assert_is_associated_token_account(
+ token_address: &Pubkey,
+ owner: &Pubkey,
+ mint: &Pubkey,
+) -> Result<(), ProgramError> {
+ let associated_token_account_address =
+ &spl_associated_token_account::get_associated_token_address(owner, mint);
+
+ if token_address != associated_token_account_address {
+ return Err(EscrowError::TokenAccountMismatch.into());
+ }
+
+ Ok(())
+}
diff --git a/tokens/escrow/native/tests/account.ts b/tokens/escrow/native/tests/account.ts
new file mode 100644
index 000000000..207789a6c
--- /dev/null
+++ b/tokens/escrow/native/tests/account.ts
@@ -0,0 +1,74 @@
+import { PublicKey } from '@solana/web3.js';
+import * as borsh from 'borsh';
+
+export class OfferAccount {
+ id: bigint;
+ maker: Uint8Array;
+ token_mint_a: Uint8Array;
+ token_mint_b: Uint8Array;
+ token_b_wanted_amount: bigint;
+ bump: number;
+
+ constructor(offer: OfferRaw) {
+ this.id = offer.id;
+ this.maker = offer.maker;
+ this.token_b_wanted_amount = offer.token_b_wanted_amount;
+ this.token_mint_a = offer.token_mint_a;
+ this.token_mint_b = offer.token_mint_b;
+ this.bump = this.bump;
+ }
+
+ toBuffer() {
+ return Buffer.from(borsh.serialize(OfferSchema, this));
+ }
+
+ static fromBuffer(buffer: Uint8Array) {
+ return borsh.deserialize(OfferSchema, OfferAccount, Buffer.from(buffer));
+ }
+
+ toData(): Offer {
+ return {
+ id: this.id,
+ maker: new PublicKey(this.maker),
+ token_mint_a: new PublicKey(this.token_mint_a),
+ token_mint_b: new PublicKey(this.token_mint_b),
+ token_b_wanted_amount: this.token_b_wanted_amount,
+ bump: this.bump,
+ };
+ }
+}
+
+const OfferSchema = new Map([
+ [
+ OfferAccount,
+ {
+ kind: 'struct',
+ fields: [
+ ['id', 'u64'],
+ ['maker', [32]],
+ ['token_mint_a', [32]],
+ ['token_mint_b', [32]],
+ ['token_b_wanted_amount', 'u64'],
+ ['bump', 'u8'],
+ ],
+ },
+ ],
+]);
+
+type OfferRaw = {
+ id: bigint;
+ maker: Uint8Array;
+ token_mint_a: Uint8Array;
+ token_mint_b: Uint8Array;
+ token_b_wanted_amount: bigint;
+ bump: number;
+};
+
+type Offer = {
+ id: bigint;
+ maker: PublicKey;
+ token_mint_a: PublicKey;
+ token_mint_b: PublicKey;
+ token_b_wanted_amount: bigint;
+ bump: number;
+};
diff --git a/tokens/escrow/native/tests/instruction.ts b/tokens/escrow/native/tests/instruction.ts
new file mode 100644
index 000000000..54a3874d4
--- /dev/null
+++ b/tokens/escrow/native/tests/instruction.ts
@@ -0,0 +1,214 @@
+import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from '@solana/spl-token';
+import { PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
+import BN from 'bn.js';
+import * as borsh from 'borsh';
+
+class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+}
+
+enum EscrowInstruction {
+ MakeOffer = 0,
+ TakeOffer = 1,
+}
+
+class MakeOffer extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(MakeOfferSchema, this));
+ }
+}
+
+const MakeOfferSchema = new Map([
+ [
+ MakeOffer,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['id', 'u64'],
+ ['token_a_offered_amount', 'u64'],
+ ['token_b_wanted_amount', 'u64'],
+ ],
+ },
+ ],
+]);
+
+class TakeOffer extends Assignable {
+ toBuffer() {
+ return Buffer.from(borsh.serialize(TakeOfferSchema, this));
+ }
+}
+
+const TakeOfferSchema = new Map([
+ [
+ TakeOffer,
+ {
+ kind: 'struct',
+ fields: [['instruction', 'u8']],
+ },
+ ],
+]);
+
+export function buildMakeOffer(props: {
+ id: BN;
+ token_a_offered_amount: BN;
+ token_b_wanted_amount: BN;
+ offer: PublicKey;
+ mint_a: PublicKey;
+ mint_b: PublicKey;
+ maker_token_a: PublicKey;
+ vault: PublicKey;
+ maker: PublicKey;
+ payer: PublicKey;
+ programId: PublicKey;
+}) {
+ const ix = new MakeOffer({
+ instruction: EscrowInstruction.MakeOffer,
+ id: props.id,
+ token_a_offered_amount: props.token_a_offered_amount,
+ token_b_wanted_amount: props.token_b_wanted_amount,
+ });
+
+ return new TransactionInstruction({
+ keys: [
+ {
+ pubkey: props.offer,
+ isSigner: false,
+ isWritable: true,
+ },
+ {
+ pubkey: props.mint_a,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: props.mint_b,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: props.maker_token_a,
+ isSigner: false,
+ isWritable: true,
+ },
+ {
+ pubkey: props.vault,
+ isSigner: false,
+ isWritable: true,
+ },
+ {
+ pubkey: props.maker,
+ isSigner: true,
+ isWritable: true,
+ },
+ {
+ pubkey: props.payer,
+ isSigner: true,
+ isWritable: true,
+ },
+ {
+ pubkey: TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: props.programId,
+ data: ix.toBuffer(),
+ });
+}
+
+export function buildTakeOffer(props: {
+ offer: PublicKey;
+ mint_a: PublicKey;
+ mint_b: PublicKey;
+ maker_token_b: PublicKey;
+ taker_token_a: PublicKey;
+ taker_token_b: PublicKey;
+ vault: PublicKey;
+ taker: PublicKey;
+ maker: PublicKey;
+ payer: PublicKey;
+ programId: PublicKey;
+}) {
+ const ix = new TakeOffer({
+ instruction: EscrowInstruction.TakeOffer,
+ });
+
+ return new TransactionInstruction({
+ keys: [
+ {
+ pubkey: props.offer,
+ isSigner: false,
+ isWritable: true,
+ },
+ {
+ pubkey: props.mint_a,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: props.mint_b,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: props.maker_token_b,
+ isSigner: false,
+ isWritable: true,
+ },
+ {
+ pubkey: props.taker_token_a,
+ isSigner: false,
+ isWritable: true,
+ },
+ {
+ pubkey: props.taker_token_b,
+ isSigner: false,
+ isWritable: true,
+ },
+ {
+ pubkey: props.vault,
+ isSigner: false,
+ isWritable: true,
+ },
+ {
+ pubkey: props.maker,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: props.taker,
+ isSigner: true,
+ isWritable: true,
+ },
+ {
+ pubkey: props.payer,
+ isSigner: true,
+ isWritable: true,
+ },
+ {
+ pubkey: TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: props.programId,
+ data: ix.toBuffer(),
+ });
+}
diff --git a/tokens/escrow/native/tests/test.ts b/tokens/escrow/native/tests/test.ts
new file mode 100644
index 000000000..0ae394509
--- /dev/null
+++ b/tokens/escrow/native/tests/test.ts
@@ -0,0 +1,110 @@
+import { describe, test } from 'node:test';
+import { AccountLayout } from '@solana/spl-token';
+import { Transaction } from '@solana/web3.js';
+import { assert } from 'chai';
+import { start } from 'solana-bankrun';
+import { OfferAccount } from './account';
+import { buildMakeOffer, buildTakeOffer } from './instruction';
+import { createValues, mintingTokens } from './utils';
+
+describe('Escrow!', async () => {
+ const values = createValues();
+
+ const context = await start([{ name: 'escrow_native_program', programId: values.programId }], []);
+
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ console.log(`Program Address : ${values.programId}`);
+ console.log(`Payer Address : ${payer.publicKey}`);
+
+ test('mint tokens to maker and taker', async () => {
+ // mint token a to maker account
+ await mintingTokens({
+ context,
+ holder: values.maker,
+ mintKeypair: values.mintAKeypair,
+ });
+
+ // mint Token B to Taker account
+ await mintingTokens({
+ context,
+ holder: values.taker,
+ mintKeypair: values.mintBKeypair,
+ });
+ });
+
+ test('Make Offer', async () => {
+ const ix = buildMakeOffer({
+ id: values.id,
+ maker: values.maker.publicKey,
+ maker_token_a: values.makerAccountA,
+ offer: values.offer,
+ token_a_offered_amount: values.amountA,
+ token_b_wanted_amount: values.amountB,
+ vault: values.vault,
+ mint_a: values.mintAKeypair.publicKey,
+ mint_b: values.mintBKeypair.publicKey,
+ payer: payer.publicKey,
+ programId: values.programId,
+ });
+
+ const blockhash = context.lastBlockhash;
+
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, values.maker);
+ await client.processTransaction(tx);
+
+ const offerInfo = await client.getAccount(values.offer);
+ const offer = OfferAccount.fromBuffer(offerInfo.data).toData();
+
+ const vaultInfo = await client.getAccount(values.vault);
+ const vaultTokenAccount = AccountLayout.decode(vaultInfo.data);
+
+ assert(offer.id.toString() === values.id.toString(), 'wrong id');
+ assert(offer.maker.toBase58() === values.maker.publicKey.toBase58(), 'maker key does not match');
+ assert(offer.token_mint_a.toBase58() === values.mintAKeypair.publicKey.toBase58(), 'wrong mint A');
+ assert(offer.token_mint_b.toBase58() === values.mintBKeypair.publicKey.toBase58(), 'wrong mint B');
+ assert(offer.token_b_wanted_amount.toString() === values.amountB.toString(), 'unexpected amount B');
+ assert(vaultTokenAccount.amount.toString() === values.amountA.toString(), 'unexpected amount A');
+ });
+
+ test('Take Offer', async () => {
+ const ix = buildTakeOffer({
+ maker: values.maker.publicKey,
+ offer: values.offer,
+ vault: values.vault,
+ mint_a: values.mintAKeypair.publicKey,
+ mint_b: values.mintBKeypair.publicKey,
+ maker_token_b: values.makerAccountB,
+ taker: values.taker.publicKey,
+ taker_token_a: values.takerAccountA,
+ taker_token_b: values.takerAccountB,
+ payer: payer.publicKey,
+ programId: values.programId,
+ });
+
+ const blockhash = context.lastBlockhash;
+
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, values.taker);
+ await client.processTransaction(tx);
+
+ const offerInfo = await client.getAccount(values.offer);
+ assert(offerInfo === null, 'offer account not closed');
+
+ const vaultInfo = await client.getAccount(values.vault);
+ assert(vaultInfo === null, 'vault account not closed');
+
+ const makerTokenBInfo = await client.getAccount(values.makerAccountB);
+ const makerTokenAccountB = AccountLayout.decode(makerTokenBInfo.data);
+
+ const takerTokenAInfo = await client.getAccount(values.takerAccountA);
+ const takerTokenAccountA = AccountLayout.decode(takerTokenAInfo.data);
+
+ assert(takerTokenAccountA.amount.toString() === values.amountA.toString(), 'unexpected amount a');
+ assert(makerTokenAccountB.amount.toString() === values.amountB.toString(), 'unexpected amount b');
+ });
+});
diff --git a/tokens/escrow/native/tests/utils.ts b/tokens/escrow/native/tests/utils.ts
new file mode 100644
index 000000000..c075364d8
--- /dev/null
+++ b/tokens/escrow/native/tests/utils.ts
@@ -0,0 +1,159 @@
+import {
+ ASSOCIATED_TOKEN_PROGRAM_ID,
+ MINT_SIZE,
+ TOKEN_PROGRAM_ID,
+ createAssociatedTokenAccountIdempotentInstruction,
+ createInitializeMint2Instruction,
+ createMintToInstruction,
+ getAssociatedTokenAddressSync,
+} from '@solana/spl-token';
+import { Keypair, PublicKey, type Signer, SystemProgram, Transaction } from '@solana/web3.js';
+import BN from 'bn.js';
+import { ProgramTestContext } from 'solana-bankrun';
+
+export async function sleep(seconds: number) {
+ new Promise((resolve) => setTimeout(resolve, seconds * 1000));
+}
+
+export const expectRevert = async (promise: Promise) => {
+ try {
+ await promise;
+ throw new Error('Expected a revert');
+ } catch {
+ return;
+ }
+};
+
+export const mintingTokens = async ({
+ context,
+ holder,
+ mintKeypair,
+ mintedAmount = 100,
+ decimals = 6,
+}: {
+ context: ProgramTestContext;
+ holder: Signer;
+ mintKeypair: Keypair;
+ mintedAmount?: number;
+ decimals?: number;
+}) => {
+ async function createMint(context: ProgramTestContext, mint: Keypair, decimals: number) {
+ const rent = await context.banksClient.getRent();
+
+ const lamports = rent.minimumBalance(BigInt(MINT_SIZE));
+
+ const transaction = new Transaction().add(
+ SystemProgram.createAccount({
+ fromPubkey: context.payer.publicKey,
+ newAccountPubkey: mint.publicKey,
+ space: MINT_SIZE,
+ lamports: new BN(lamports.toString()).toNumber(),
+ programId: TOKEN_PROGRAM_ID,
+ }),
+ createInitializeMint2Instruction(mint.publicKey, decimals, context.payer.publicKey, context.payer.publicKey, TOKEN_PROGRAM_ID),
+ );
+ transaction.recentBlockhash = context.lastBlockhash;
+ transaction.sign(context.payer, mint);
+
+ await context.banksClient.processTransaction(transaction);
+ }
+
+ async function createAssociatedTokenAccountIfNeeded(context: ProgramTestContext, mint: PublicKey, owner: PublicKey) {
+ const associatedToken = getAssociatedTokenAddressSync(mint, owner, true);
+
+ const rent = await context.banksClient.getRent();
+
+ rent.minimumBalance(BigInt(MINT_SIZE));
+
+ const transaction = new Transaction().add(
+ createAssociatedTokenAccountIdempotentInstruction(
+ context.payer.publicKey,
+ associatedToken,
+ owner,
+ mint,
+ TOKEN_PROGRAM_ID,
+ ASSOCIATED_TOKEN_PROGRAM_ID,
+ ),
+ );
+ transaction.recentBlockhash = context.lastBlockhash;
+ transaction.sign(context.payer);
+
+ await context.banksClient.processTransaction(transaction);
+ }
+
+ async function mintTo(context: ProgramTestContext, mint: PublicKey, destination: PublicKey, amount: number | bigint) {
+ const transaction = new Transaction().add(createMintToInstruction(mint, destination, context.payer.publicKey, amount, [], TOKEN_PROGRAM_ID));
+ transaction.recentBlockhash = context.lastBlockhash;
+ transaction.sign(context.payer);
+
+ await context.banksClient.processTransaction(transaction);
+ }
+
+ // creator creates the mint
+ await createMint(context, mintKeypair, decimals);
+
+ // create holder token account
+ await createAssociatedTokenAccountIfNeeded(context, mintKeypair.publicKey, holder.publicKey);
+
+ // mint to holders token account
+ await mintTo(
+ context,
+ mintKeypair.publicKey,
+ getAssociatedTokenAddressSync(mintKeypair.publicKey, holder.publicKey, true),
+ mintedAmount * 10 ** decimals,
+ );
+};
+
+export interface TestValues {
+ id: BN;
+ amountA: BN;
+ amountB: BN;
+ maker: Keypair;
+ taker: Keypair;
+ mintAKeypair: Keypair;
+ mintBKeypair: Keypair;
+ offer: PublicKey;
+ vault: PublicKey;
+ makerAccountA: PublicKey;
+ makerAccountB: PublicKey;
+ takerAccountA: PublicKey;
+ takerAccountB: PublicKey;
+ programId: PublicKey;
+}
+
+type TestValuesDefaults = {
+ [K in keyof TestValues]+?: TestValues[K];
+};
+
+export function createValues(defaults?: TestValuesDefaults): TestValues {
+ const programId = PublicKey.unique();
+ const id = defaults?.id || new BN(0);
+ const maker = Keypair.generate();
+ const taker = Keypair.generate();
+
+ // Making sure tokens are in the right order
+ const mintAKeypair = Keypair.generate();
+ let mintBKeypair = Keypair.generate();
+ while (new BN(mintBKeypair.publicKey.toBytes()).lt(new BN(mintAKeypair.publicKey.toBytes()))) {
+ mintBKeypair = Keypair.generate();
+ }
+
+ const offer = PublicKey.findProgramAddressSync([Buffer.from('offer'), maker.publicKey.toBuffer(), Buffer.from(id.toArray('le', 8))], programId)[0];
+
+ return {
+ id,
+ maker,
+ taker,
+ mintAKeypair,
+ mintBKeypair,
+ offer,
+ vault: getAssociatedTokenAddressSync(mintAKeypair.publicKey, offer, true),
+ makerAccountA: getAssociatedTokenAddressSync(mintAKeypair.publicKey, maker.publicKey, true),
+ makerAccountB: getAssociatedTokenAddressSync(mintBKeypair.publicKey, maker.publicKey, true),
+ takerAccountA: getAssociatedTokenAddressSync(mintAKeypair.publicKey, taker.publicKey, true),
+ takerAccountB: getAssociatedTokenAddressSync(mintBKeypair.publicKey, taker.publicKey, true),
+ amountA: new BN(4 * 10 ** 6),
+ amountB: new BN(1 * 10 ** 6),
+ programId,
+ };
+}
diff --git a/tokens/escrow/native/tsconfig.json b/tokens/escrow/native/tsconfig.json
new file mode 100644
index 000000000..8c20b2236
--- /dev/null
+++ b/tokens/escrow/native/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/tokens/escrow/steel/Cargo.toml b/tokens/escrow/steel/Cargo.toml
new file mode 100644
index 000000000..3a05c7748
--- /dev/null
+++ b/tokens/escrow/steel/Cargo.toml
@@ -0,0 +1,22 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+escrow-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = { version = "3.0", features = ["spl"] }
+thiserror = "1.0"
+spl-token = "^4"
diff --git a/tokens/escrow/steel/README.md b/tokens/escrow/steel/README.md
new file mode 100644
index 000000000..18955045d
--- /dev/null
+++ b/tokens/escrow/steel/README.md
@@ -0,0 +1,40 @@
+# Escrow
+
+**Escrow** is a ...
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`MakeOffer`](program/src/make_offer.rs) – Make an offer ...
+- [`TakerOffer`](program/src/take_offer.rs) – Take an offer ...
+
+## State
+- [`Offer`](api/src/state/offer.rs) – Offer state ...
+
+## How to?
+
+Compile your program:
+
+```sh
+pnpm build
+```
+
+Run tests:
+
+```sh
+pnpm test
+```
+
+Run build and test
+
+```sh
+pnpm build-and-test
+```
+
+Deploy your program:
+
+```sh
+pnpm deploy
+```
diff --git a/tokens/escrow/steel/api/Cargo.toml b/tokens/escrow/steel/api/Cargo.toml
new file mode 100644
index 000000000..83cb3ecb4
--- /dev/null
+++ b/tokens/escrow/steel/api/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "escrow-api"
+description = "API for interacting with the Escrow program"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
+spl-token.workspace = true
diff --git a/tokens/escrow/steel/api/src/consts.rs b/tokens/escrow/steel/api/src/consts.rs
new file mode 100644
index 000000000..a072bddee
--- /dev/null
+++ b/tokens/escrow/steel/api/src/consts.rs
@@ -0,0 +1,8 @@
+use solana_program::pubkey;
+use steel::Pubkey;
+
+/// Seed of the offer account PDA.
+pub const OFFER_SEED: &[u8] = b"offer";
+
+pub const ASSOCIATED_TOKEN_PROGRAM_ID: Pubkey =
+ pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
diff --git a/tokens/escrow/steel/api/src/instruction.rs b/tokens/escrow/steel/api/src/instruction.rs
new file mode 100644
index 000000000..95ee62862
--- /dev/null
+++ b/tokens/escrow/steel/api/src/instruction.rs
@@ -0,0 +1,23 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum EscrowInstruction {
+ MakeOffer = 0,
+ TakerOffer = 1,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct MakeOffer {
+ pub id: [u8; 8],
+ pub token_a_offered_amount: [u8; 8],
+ pub token_b_wanted_amount: [u8; 8],
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct TakerOffer {}
+
+instruction!(EscrowInstruction, MakeOffer);
+instruction!(EscrowInstruction, TakerOffer);
diff --git a/tokens/escrow/steel/api/src/lib.rs b/tokens/escrow/steel/api/src/lib.rs
new file mode 100644
index 000000000..6db8ac73d
--- /dev/null
+++ b/tokens/escrow/steel/api/src/lib.rs
@@ -0,0 +1,16 @@
+pub mod consts;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/tokens/escrow/steel/api/src/sdk.rs b/tokens/escrow/steel/api/src/sdk.rs
new file mode 100644
index 000000000..3960a5a79
--- /dev/null
+++ b/tokens/escrow/steel/api/src/sdk.rs
@@ -0,0 +1,86 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn make_offer(
+ maker: Pubkey,
+ mint_a: Pubkey,
+ mint_b: Pubkey,
+ id: u64,
+ token_a_offered_amount: u64,
+ token_b_wanted_amount: u64,
+) -> Instruction {
+ let (maker_token_account_a, _) = Pubkey::find_program_address(
+ &[maker.as_ref(), spl_token::ID.as_ref(), mint_a.as_ref()],
+ &spl_token::ID,
+ );
+
+ let offer = offer_pda(maker, id).0;
+ let (vault, _) = Pubkey::find_program_address(
+ &[offer.as_ref(), spl_token::ID.as_ref(), mint_a.as_ref()],
+ &spl_token::ID,
+ );
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(maker, true),
+ AccountMeta::new_readonly(mint_a, false),
+ AccountMeta::new_readonly(mint_b, false),
+ AccountMeta::new(maker_token_account_a, false),
+ AccountMeta::new(offer, false),
+ AccountMeta::new(vault, false),
+ AccountMeta::new_readonly(spl_token::ID, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ AccountMeta::new_readonly(ASSOCIATED_TOKEN_PROGRAM_ID, false),
+ ],
+ data: MakeOffer {
+ id: id.to_le_bytes(),
+ token_a_offered_amount: token_a_offered_amount.to_le_bytes(),
+ token_b_wanted_amount: token_b_wanted_amount.to_le_bytes(),
+ }
+ .to_bytes(),
+ }
+}
+
+pub fn take_offer(
+ taker: Pubkey,
+ maker: Pubkey,
+ mint_a: Pubkey,
+ mint_b: Pubkey,
+ offer: Pubkey,
+) -> Instruction {
+ let (taker_token_account_a, _) = Pubkey::find_program_address(
+ &[taker.as_ref(), spl_token::ID.as_ref(), mint_a.as_ref()],
+ &spl_token::ID,
+ );
+ let (taker_token_account_b, _) = Pubkey::find_program_address(
+ &[taker.as_ref(), spl_token::ID.as_ref(), mint_b.as_ref()],
+ &spl_token::ID,
+ );
+ let (maker_token_account_b, _) = Pubkey::find_program_address(
+ &[maker.as_ref(), spl_token::ID.as_ref(), mint_b.as_ref()],
+ &spl_token::ID,
+ );
+ let (vault, _) = Pubkey::find_program_address(
+ &[offer.as_ref(), spl_token::ID.as_ref(), mint_a.as_ref()],
+ &spl_token::ID,
+ );
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(taker, true),
+ AccountMeta::new(maker, false),
+ AccountMeta::new_readonly(mint_a, false),
+ AccountMeta::new_readonly(mint_b, false),
+ AccountMeta::new(taker_token_account_a, false),
+ AccountMeta::new(taker_token_account_b, false),
+ AccountMeta::new(maker_token_account_b, false),
+ AccountMeta::new(offer, false),
+ AccountMeta::new(vault, false),
+ AccountMeta::new_readonly(spl_token::ID, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ AccountMeta::new_readonly(ASSOCIATED_TOKEN_PROGRAM_ID, false),
+ ],
+ data: TakerOffer {}.to_bytes(),
+ }
+}
diff --git a/tokens/escrow/steel/api/src/state/mod.rs b/tokens/escrow/steel/api/src/state/mod.rs
new file mode 100644
index 000000000..bffcf64b4
--- /dev/null
+++ b/tokens/escrow/steel/api/src/state/mod.rs
@@ -0,0 +1,11 @@
+mod offer;
+
+pub use offer::*;
+
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum EscrowAccount {
+ Offer = 0,
+}
diff --git a/tokens/escrow/steel/api/src/state/offer.rs b/tokens/escrow/steel/api/src/state/offer.rs
new file mode 100644
index 000000000..617866d85
--- /dev/null
+++ b/tokens/escrow/steel/api/src/state/offer.rs
@@ -0,0 +1,26 @@
+use steel::*;
+
+use crate::consts::OFFER_SEED;
+
+use super::EscrowAccount;
+
+/// Fetch PDA of the counter account.
+pub fn offer_pda(maker: Pubkey, id: u64) -> (Pubkey, u8) {
+ Pubkey::find_program_address(
+ &[OFFER_SEED, maker.as_ref(), id.to_le_bytes().as_ref()],
+ &crate::id(),
+ )
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct Offer {
+ pub id: [u8; 8],
+ pub maker: Pubkey,
+ pub token_mint_a: Pubkey,
+ pub token_mint_b: Pubkey,
+ pub token_b_wanted_amount: [u8; 8],
+ pub bump: u8,
+}
+
+account!(EscrowAccount, Offer);
diff --git a/tokens/escrow/steel/package.json b/tokens/escrow/steel/package.json
new file mode 100644
index 000000000..5f23801cb
--- /dev/null
+++ b/tokens/escrow/steel/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "steel",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/account_data_program.so"
+ },
+ "keywords": [],
+ "author": "Leo Pham ",
+ "license": "ISC",
+ "dependencies": {
+ "@solana/spl-token": "^0.4.9",
+ "@solana/web3.js": "^1.95.4",
+ "bs58": "^6.0.0"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.3.7",
+ "@types/mocha": "^10.0.9",
+ "@types/node": "^22.7.9",
+ "borsh": "^2.0.0",
+ "chai": "^4.3.7",
+ "mocha": "^10.7.3",
+ "solana-bankrun": "^0.4.0",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^5.6.3"
+ }
+}
diff --git a/tokens/escrow/steel/pnpm-lock.yaml b/tokens/escrow/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..a5ea70d28
--- /dev/null
+++ b/tokens/escrow/steel/pnpm-lock.yaml
@@ -0,0 +1,1463 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@solana/spl-token':
+ specifier: ^0.4.9
+ version: 0.4.9(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10)
+ '@solana/web3.js':
+ specifier: ^1.95.4
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58:
+ specifier: ^6.0.0
+ version: 6.0.0
+ devDependencies:
+ '@types/chai':
+ specifier: ^4.3.7
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^10.0.9
+ version: 10.0.9
+ '@types/node':
+ specifier: ^22.7.9
+ version: 22.8.1
+ borsh:
+ specifier: ^2.0.0
+ version: 2.0.0
+ chai:
+ specifier: ^4.3.7
+ version: 4.5.0
+ mocha:
+ specifier: ^10.7.3
+ version: 10.7.3
+ solana-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@10.7.3)
+ typescript:
+ specifier: ^5.6.3
+ version: 5.6.3
+
+packages:
+
+ '@babel/runtime@7.26.0':
+ resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
+ engines: {node: '>=6.9.0'}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-rc.1':
+ resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-data-structures@2.0.0-rc.1':
+ resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.0.0-rc.1':
+ resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-strings@2.0.0-rc.1':
+ resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+ typescript: '>=5'
+
+ '@solana/codecs@2.0.0-rc.1':
+ resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.0.0-rc.1':
+ resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/options@2.0.0-rc.1':
+ resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/spl-token-group@0.0.7':
+ resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/spl-token-metadata@0.1.6':
+ resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/spl-token@0.4.9':
+ resolution: {integrity: sha512-g3wbj4F4gq82YQlwqhPB0gHFXfgsC6UmyGMxtSLf/BozT/oKd59465DbnlUK8L8EcimKMavxsVAMoLcEdeCicg==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@10.0.9':
+ resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.8.1':
+ resolution: {integrity: sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base-x@5.0.0:
+ resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ borsh@2.0.0:
+ resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@6.0.0:
+ resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@10.7.3:
+ resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==}
+ engines: {node: '>= 14.0.0'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ workerpool@6.5.1:
+ resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.26.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-rc.1(typescript@5.6.3)':
+ dependencies:
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ typescript: 5.6.3
+
+ '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ typescript: 5.6.3
+
+ '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ typescript: 5.6.3
+
+ '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ fastestsmallesttextencoderdecoder: 1.0.22
+ typescript: 5.6.3
+
+ '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-rc.1(typescript@5.6.3)':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+ typescript: 5.6.3
+
+ '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.6.3)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/errors': 2.0.0-rc.1(typescript@5.6.3)
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token-group@0.0.7(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)':
+ dependencies:
+ '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token@0.4.9(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - typescript
+ - utf-8-validate
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.26.0
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.8.1
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@10.0.9': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.8.1':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.8.1
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.8.1
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@5.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ borsh@2.0.0: {}
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ bs58@6.0.0:
+ dependencies:
+ base-x: 5.0.0
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ debug@4.3.7(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@10.7.3:
+ dependencies:
+ ansi-colors: 4.1.3
+ browser-stdout: 1.3.1
+ chokidar: 3.6.0
+ debug: 4.3.7(supports-color@8.1.1)
+ diff: 5.2.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 8.1.0
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 5.1.6
+ ms: 2.1.3
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 6.5.1
+ yargs: 16.2.0
+ yargs-parser: 20.2.9
+ yargs-unparser: 2.0.0
+
+ ms@2.1.3: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@10.7.3):
+ dependencies:
+ mocha: 10.7.3
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ workerpool@6.5.1: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/tokens/escrow/steel/program/Cargo.toml b/tokens/escrow/steel/program/Cargo.toml
new file mode 100644
index 000000000..5c49f9643
--- /dev/null
+++ b/tokens/escrow/steel/program/Cargo.toml
@@ -0,0 +1,27 @@
+[package]
+name = "escrow-program"
+description = ""
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+homepage.workspace = true
+documentation.workspace = true
+repository.workspace = true
+readme.workspace = true
+keywords.workspace = true
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+escrow-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+spl-token.workspace = true
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/tokens/escrow/steel/program/src/lib.rs b/tokens/escrow/steel/program/src/lib.rs
new file mode 100644
index 000000000..b89852407
--- /dev/null
+++ b/tokens/escrow/steel/program/src/lib.rs
@@ -0,0 +1,25 @@
+mod make_offer;
+mod take_offer;
+
+use make_offer::*;
+use take_offer::*;
+
+use escrow_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&escrow_api::ID, program_id, data)?;
+
+ match ix {
+ EscrowInstruction::MakeOffer => process_make_offer(accounts, data)?,
+ EscrowInstruction::TakerOffer => process_take_offer(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/tokens/escrow/steel/program/src/make_offer.rs b/tokens/escrow/steel/program/src/make_offer.rs
new file mode 100644
index 000000000..e4fab025d
--- /dev/null
+++ b/tokens/escrow/steel/program/src/make_offer.rs
@@ -0,0 +1,80 @@
+use escrow_api::prelude::*;
+use steel::*;
+
+pub fn process_make_offer(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ // Parse args.
+ let args = MakeOffer::try_from_bytes(data)?;
+ let id = u64::from_le_bytes(args.id);
+ let token_a_offered_amount = u64::from_le_bytes(args.token_a_offered_amount);
+
+ // Load accounts.
+ let [maker_info, mint_a_info, mint_b_info, maker_token_account_a_info, offer_info, vault_info, token_program, system_program, associated_token_program] =
+ accounts
+ else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ maker_info.is_signer()?;
+ token_program.is_program(&spl_token::ID)?;
+ system_program.is_program(&system_program::ID)?;
+ associated_token_program.is_program(&ASSOCIATED_TOKEN_PROGRAM_ID)?;
+
+ offer_info.is_empty()?.is_writable()?.has_seeds(
+ &[
+ OFFER_SEED,
+ maker_info.key.as_ref(),
+ id.to_le_bytes().as_ref(),
+ ],
+ &escrow_api::ID,
+ )?;
+
+ vault_info.is_empty()?.is_writable()?;
+
+ // Create associated token account for vault
+ create_associated_token_account(
+ maker_info,
+ offer_info,
+ vault_info,
+ mint_a_info,
+ system_program,
+ token_program,
+ associated_token_program,
+ )?;
+
+ // Call CPI to create account offer
+ create_account::(
+ offer_info,
+ system_program,
+ maker_info,
+ &escrow_api::ID,
+ &[
+ OFFER_SEED,
+ maker_info.key.as_ref(),
+ id.to_le_bytes().as_ref(),
+ ],
+ )?;
+
+ let _mint_a = mint_a_info.as_mint()?;
+ let _mint_b = mint_b_info.as_mint()?;
+
+ // transfer token A to vault
+ transfer(
+ maker_info,
+ maker_token_account_a_info,
+ vault_info,
+ token_program,
+ token_a_offered_amount,
+ )?;
+
+ let offer: &mut Offer = offer_info.as_account_mut::(&escrow_api::ID)?;
+
+ // Update state
+ offer.id = args.id;
+ offer.maker = *maker_info.key;
+ offer.token_mint_a = *mint_a_info.key;
+ offer.token_mint_b = *mint_b_info.key;
+ offer.token_b_wanted_amount = args.token_b_wanted_amount;
+ offer.bump = offer_pda(*maker_info.key, id).1;
+
+ Ok(())
+}
diff --git a/tokens/escrow/steel/program/src/take_offer.rs b/tokens/escrow/steel/program/src/take_offer.rs
new file mode 100644
index 000000000..994b5142b
--- /dev/null
+++ b/tokens/escrow/steel/program/src/take_offer.rs
@@ -0,0 +1,110 @@
+use escrow_api::prelude::*;
+use steel::*;
+
+pub fn process_take_offer(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult {
+ // Load accounts.
+ let [taker_info, maker_info, mint_a_info, mint_b_info, taker_token_account_a_info, taker_token_account_b_info, maker_token_account_b_info, offer_info, vault_info, token_program, system_program, associated_token_program] =
+ accounts
+ else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ taker_info.is_signer()?;
+ token_program.is_program(&spl_token::ID)?;
+ system_program.is_program(&system_program::ID)?;
+ associated_token_program.is_program(&ASSOCIATED_TOKEN_PROGRAM_ID)?;
+
+ let vaul = vault_info.as_associated_token_account(offer_info.key, mint_a_info.key)?;
+
+ // validate mint
+ let _mint_a = mint_a_info.as_mint()?;
+ let _mint_b = mint_b_info.as_mint()?;
+
+ if taker_token_account_a_info.data_is_empty() {
+ create_associated_token_account(
+ taker_info,
+ taker_info,
+ taker_token_account_a_info,
+ mint_a_info,
+ system_program,
+ token_program,
+ associated_token_program,
+ )?;
+ }
+
+ let _taker_token_account_b = taker_token_account_b_info
+ .is_writable()?
+ .as_associated_token_account(taker_info.key, mint_b_info.key)?;
+
+ if maker_token_account_b_info.data_is_empty() {
+ create_associated_token_account(
+ taker_info,
+ maker_info,
+ maker_token_account_b_info,
+ mint_b_info,
+ system_program,
+ token_program,
+ associated_token_program,
+ )?;
+ }
+
+ offer_info.is_writable()?;
+
+ let offer: &mut Offer = offer_info.as_account_mut::(&escrow_api::ID)?;
+ offer_info.has_seeds(
+ &[OFFER_SEED, offer.maker.as_ref(), offer.id.as_ref()],
+ &escrow_api::ID,
+ )?;
+
+ // transfer wanted token from taker to maker
+ let token_b_wanted_amount = u64::from_le_bytes(offer.token_b_wanted_amount);
+ transfer(
+ taker_info,
+ taker_token_account_b_info,
+ maker_token_account_b_info,
+ token_program,
+ token_b_wanted_amount,
+ )?;
+
+ // // widthdraw token A from vault
+ transfer_signed_with_bump(
+ offer_info,
+ vault_info,
+ taker_token_account_a_info,
+ token_program,
+ vaul.amount,
+ &[OFFER_SEED, offer.maker.as_ref(), offer.id.as_ref()],
+ offer.bump,
+ )?;
+
+ let seeds = &[
+ OFFER_SEED,
+ offer.maker.as_ref(),
+ offer.id.as_ref(),
+ &[offer.bump],
+ ];
+ let signer_seeds = &[&seeds[..]];
+
+ // close vault account
+ solana_program::program::invoke_signed(
+ &spl_token::instruction::close_account(
+ &spl_token::ID,
+ vault_info.key,
+ taker_info.key,
+ offer_info.key,
+ &[&offer_info.key],
+ )?,
+ &[
+ token_program.clone(),
+ vault_info.clone(),
+ taker_info.clone(),
+ offer_info.clone(),
+ ],
+ signer_seeds,
+ )?;
+
+ // close offer account
+ offer_info.close(maker_info)?;
+
+ Ok(())
+}
diff --git a/tokens/escrow/steel/tests/bankrun.test.ts b/tokens/escrow/steel/tests/bankrun.test.ts
new file mode 100644
index 000000000..6bf30fb79
--- /dev/null
+++ b/tokens/escrow/steel/tests/bankrun.test.ts
@@ -0,0 +1,184 @@
+import { ASSOCIATED_TOKEN_PROGRAM_ID, AccountLayout, TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { assert } from 'chai';
+import { BanksClient, ProgramTestContext, start } from 'solana-bankrun';
+import { createAMint, deserializeOfferAccount, encodeBigint, getMakeOfferInstructionData, getTakeOfferInstructionData, mintTo } from './utils';
+
+const PROGRAM_ID = new PublicKey('z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35');
+
+describe('Escrow Program', () => {
+ let context: ProgramTestContext;
+ let client: BanksClient;
+ let payer: Keypair;
+ const maker = Keypair.generate();
+ const taker = Keypair.generate();
+
+ const mint_a = Keypair.generate();
+ const mint_b = Keypair.generate();
+
+ let makerAccountA: PublicKey;
+ let makerAccountB: PublicKey;
+ let takerAccountA: PublicKey;
+ let takerAccountB: PublicKey;
+ const id = BigInt(1);
+ const token_a_offered_amount = BigInt(2 * 10 ** 9);
+ const token_b_wanted_amount = BigInt(5 * 10 ** 9);
+ const [offer, offerBump] = PublicKey.findProgramAddressSync(
+ [Buffer.from('offer'), maker.publicKey.toBuffer(), Buffer.from(encodeBigint(id))],
+ PROGRAM_ID,
+ );
+ const vault = getAssociatedTokenAddressSync(mint_a.publicKey, offer, true);
+
+ before(async () => {
+ context = await start([{ name: 'escrow_program', programId: PROGRAM_ID }], []);
+ client = context.banksClient;
+ payer = context.payer;
+
+ {
+ const tx = new Transaction();
+ tx.add(
+ SystemProgram.transfer({
+ fromPubkey: payer.publicKey,
+ toPubkey: maker.publicKey,
+ lamports: LAMPORTS_PER_SOL,
+ }),
+ SystemProgram.transfer({
+ fromPubkey: payer.publicKey,
+ toPubkey: taker.publicKey,
+ lamports: LAMPORTS_PER_SOL,
+ }),
+ );
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.sign(payer);
+
+ await client.processTransaction(tx);
+ }
+
+ await createAMint(context, payer, mint_a);
+ await createAMint(context, payer, mint_b);
+
+ makerAccountA = getAssociatedTokenAddressSync(mint_a.publicKey, maker.publicKey, false);
+
+ makerAccountB = getAssociatedTokenAddressSync(mint_b.publicKey, maker.publicKey, false);
+
+ takerAccountA = getAssociatedTokenAddressSync(mint_a.publicKey, taker.publicKey, false);
+
+ takerAccountB = getAssociatedTokenAddressSync(mint_b.publicKey, taker.publicKey, false);
+
+ await mintTo(context, payer, maker.publicKey, mint_a.publicKey);
+ // await mintTo(context, payer, maker.publicKey, mint_b.publicKey);
+ // await mintTo(context, payer, taker.publicKey, mint_a.publicKey);
+ await mintTo(context, payer, taker.publicKey, mint_b.publicKey);
+ });
+
+ it('Should make an offer successfully', async () => {
+ const tx = new Transaction();
+ tx.add(
+ new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [
+ { pubkey: maker.publicKey, isSigner: true, isWritable: true },
+ { pubkey: mint_a.publicKey, isSigner: false, isWritable: false },
+ { pubkey: mint_b.publicKey, isSigner: false, isWritable: false },
+ { pubkey: makerAccountA, isSigner: false, isWritable: true },
+ { pubkey: offer, isSigner: false, isWritable: true },
+ { pubkey: vault, isSigner: false, isWritable: true },
+ {
+ pubkey: TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: SystemProgram.programId,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ ],
+ data: getMakeOfferInstructionData(id, token_a_offered_amount, token_b_wanted_amount),
+ }),
+ );
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.sign(maker);
+
+ // process the transaction
+ await client.processTransaction(tx);
+
+ const offerAccount = await client.getAccount(offer);
+ assert.isNotNull(offerAccount);
+ assert.equal(offerAccount?.owner.toBase58(), PROGRAM_ID.toBase58());
+ const offerAccountData = deserializeOfferAccount(offerAccount.data);
+ assert.equal(offerAccountData.id, Number(id));
+ assert.equal(offerAccountData.maker.toBase58(), maker.publicKey.toBase58());
+ assert.equal(offerAccountData.token_mint_a.toBase58(), mint_a.publicKey.toBase58());
+ assert.equal(offerAccountData.token_mint_b.toBase58(), mint_b.publicKey.toBase58());
+ assert.equal(offerAccountData.token_b_wanted_amount, Number(token_b_wanted_amount));
+ assert.equal(offerAccountData.bump, offerBump);
+
+ const rawVaultAccount = await client.getAccount(vault);
+ assert.isNotNull(rawVaultAccount);
+ const decodedVaultAccount = AccountLayout.decode(rawVaultAccount?.data);
+ assert.equal(decodedVaultAccount.amount, token_a_offered_amount);
+ });
+
+ it('Should take an offer successfully', async () => {
+ const tx = new Transaction();
+ tx.add(
+ new TransactionInstruction({
+ programId: PROGRAM_ID,
+ keys: [
+ { pubkey: taker.publicKey, isSigner: true, isWritable: true },
+ { pubkey: maker.publicKey, isSigner: false, isWritable: true },
+ { pubkey: mint_a.publicKey, isSigner: false, isWritable: false },
+ { pubkey: mint_b.publicKey, isSigner: false, isWritable: false },
+ { pubkey: takerAccountA, isSigner: false, isWritable: true },
+ { pubkey: takerAccountB, isSigner: false, isWritable: true },
+ { pubkey: makerAccountB, isSigner: false, isWritable: true },
+ { pubkey: offer, isSigner: false, isWritable: true },
+ { pubkey: vault, isSigner: false, isWritable: true },
+ {
+ pubkey: TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: SystemProgram.programId,
+ isSigner: false,
+ isWritable: false,
+ },
+ {
+ pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ ],
+ data: getTakeOfferInstructionData(),
+ }),
+ );
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.sign(taker);
+
+ // process the transaction
+ await client.processTransaction(tx);
+
+ const rawMakerAccountB = await client.getAccount(makerAccountB);
+ assert.isNotNull(rawMakerAccountB);
+ const decodedMakerAccountB = AccountLayout.decode(rawMakerAccountB?.data);
+ assert.equal(decodedMakerAccountB.amount, token_b_wanted_amount);
+
+ const rawTakerAccountA = await client.getAccount(takerAccountA);
+ assert.isNotNull(rawTakerAccountA);
+ const decodedTakerAccountA = AccountLayout.decode(rawTakerAccountA?.data);
+ assert.equal(decodedTakerAccountA.amount, token_a_offered_amount);
+
+ const offerAccount = await client.getAccount(offer);
+ assert.isNull(offerAccount);
+
+ const vaultAccount = await client.getAccount(vault);
+ assert.isNull(vaultAccount);
+ });
+});
diff --git a/tokens/escrow/steel/tests/utils.ts b/tokens/escrow/steel/tests/utils.ts
new file mode 100644
index 000000000..965032fb1
--- /dev/null
+++ b/tokens/escrow/steel/tests/utils.ts
@@ -0,0 +1,116 @@
+import {
+ MINT_SIZE,
+ TOKEN_PROGRAM_ID,
+ createAssociatedTokenAccountInstruction,
+ createInitializeMint2Instruction,
+ createMintToInstruction,
+ getAssociatedTokenAddressSync,
+} from '@solana/spl-token';
+import { Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction } from '@solana/web3.js';
+import * as borsh from 'borsh';
+import { ProgramTestContext } from 'solana-bankrun';
+
+export const instructionDiscriminators = {
+ MakeOffer: Buffer.from([0]),
+ TakeOffer: Buffer.from([1]),
+};
+
+export const getMakeOfferInstructionData = (id: bigint, token_a_offered_amount: bigint, token_b_wanted_amount: bigint) => {
+ return Buffer.concat([
+ instructionDiscriminators.MakeOffer,
+ encodeBigint(id),
+ encodeBigint(token_a_offered_amount),
+ encodeBigint(token_b_wanted_amount),
+ ]);
+};
+
+export const getTakeOfferInstructionData = () => {
+ return Buffer.concat([instructionDiscriminators.TakeOffer]);
+};
+
+export const createAMint = async (context: ProgramTestContext, payer: Keypair, mint: Keypair) => {
+ const tx = new Transaction();
+ tx.add(
+ SystemProgram.createAccount({
+ fromPubkey: payer.publicKey,
+ newAccountPubkey: mint.publicKey,
+ // the `space` required for a token mint is accessible in the `@solana/spl-token` sdk
+ space: MINT_SIZE,
+ // store enough lamports needed for our `space` to be rent exempt
+ lamports: Number((await context.banksClient.getRent()).minimumBalance(BigInt(MINT_SIZE))),
+ // tokens are owned by the "token program"
+ programId: TOKEN_PROGRAM_ID,
+ }),
+ createInitializeMint2Instruction(mint.publicKey, 9, payer.publicKey, payer.publicKey),
+ );
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.sign(payer, mint);
+
+ // process the transaction
+ await context.banksClient.processTransaction(tx);
+};
+
+export const mintTo = async (context: ProgramTestContext, payer: Keypair, owner: PublicKey, mint: PublicKey) => {
+ const tokenAccount = getAssociatedTokenAddressSync(mint, owner, false);
+ const tx = new Transaction();
+ tx.add(
+ createAssociatedTokenAccountInstruction(payer.publicKey, tokenAccount, owner, mint),
+ createMintToInstruction(mint, tokenAccount, payer.publicKey, 1_000 * LAMPORTS_PER_SOL),
+ );
+ tx.recentBlockhash = context.lastBlockhash;
+ tx.sign(payer);
+
+ // process the transaction
+ await context.banksClient.processTransaction(tx);
+ return tokenAccount;
+};
+
+export const encodeBigint = (value: bigint) => {
+ const buffer = Buffer.alloc(8);
+ buffer.writeBigUInt64LE(value);
+ return Uint8Array.from(buffer);
+};
+
+export type OfferAccount = {
+ id: number;
+ maker: PublicKey;
+ token_mint_a: PublicKey;
+ token_mint_b: PublicKey;
+ token_b_wanted_amount: number;
+ bump: number;
+};
+
+// Define DataAccountRaw type for deserialization
+export type OfferAccountRaw = {
+ id: number;
+ maker: Uint8Array;
+ token_mint_a: Uint8Array;
+ token_mint_b: Uint8Array;
+ token_b_wanted_amount: number;
+ bump: number;
+};
+
+// Define the schema for the account data
+export const offerAccountSchema: borsh.Schema = {
+ struct: {
+ discriminator: 'u64',
+ id: 'u64',
+ maker: { array: { type: 'u8', len: 32 } },
+ token_mint_a: { array: { type: 'u8', len: 32 } },
+ token_mint_b: { array: { type: 'u8', len: 32 } },
+ token_b_wanted_amount: 'u64',
+ bump: 'u8',
+ },
+};
+
+export const deserializeOfferAccount = (data: Uint8Array): OfferAccount => {
+ const account = borsh.deserialize(offerAccountSchema, data) as OfferAccountRaw;
+ return {
+ id: account.id,
+ maker: new PublicKey(account.maker),
+ token_mint_a: new PublicKey(account.token_mint_a),
+ token_mint_b: new PublicKey(account.token_mint_b),
+ token_b_wanted_amount: account.token_b_wanted_amount,
+ bump: account.bump,
+ };
+};
diff --git a/tokens/escrow/steel/tsconfig.json b/tokens/escrow/steel/tsconfig.json
new file mode 100644
index 000000000..8c20b2236
--- /dev/null
+++ b/tokens/escrow/steel/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/tokens/external-delegate-token-master/anchor/Anchor.toml b/tokens/external-delegate-token-master/anchor/Anchor.toml
new file mode 100644
index 000000000..a3838dbb6
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/Anchor.toml
@@ -0,0 +1,16 @@
+[features]
+seeds = false
+skip-lint = false
+
+[programs.localnet]
+external_delegate_token_master = "FYPkt5VWMvtyWZDMGCwoKFkE3wXTzphicTpnNGuHWVbD"
+
+[registry]
+url = "https://api.apr.dev/"
+
+[provider]
+cluster = "localnet"
+wallet = "~/.config/solana/id.json"
+
+[scripts]
+test = "yarn test"
\ No newline at end of file
diff --git a/tokens/external-delegate-token-master/anchor/Cargo.toml b/tokens/external-delegate-token-master/anchor/Cargo.toml
new file mode 100644
index 000000000..92e201f94
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/Cargo.toml
@@ -0,0 +1,12 @@
+[workspace]
+members = ["programs/*"]
+resolver = "2"
+
+[profile.release]
+overflow-checks = true
+lto = "fat"
+codegen-units = 1
+[profile.release.build-override]
+opt-level = 3
+incremental = false
+codegen-units = 1
diff --git a/tokens/external-delegate-token-master/anchor/package.json b/tokens/external-delegate-token-master/anchor/package.json
new file mode 100644
index 000000000..209a612a3
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "external-delegate-token-master",
+ "version": "1.0.0",
+ "license": "MIT",
+ "scripts": {
+ "test": "jest --detectOpenHandles --forceExit",
+ "test:watch": "jest --watch",
+ "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check",
+ "build": "anchor build"
+ },
+ "dependencies": {
+ "@coral-xyz/anchor": "^0.29.0",
+ "@solana/spl-token": "^0.3.9",
+ "@solana/web3.js": "^1.90.0",
+ "ethers": "^5.7.2"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.23.7",
+ "@babel/preset-env": "^7.23.7",
+ "@babel/preset-typescript": "^7.23.7",
+ "@types/chai": "^4.3.0",
+ "@types/jest": "^29.5.11",
+ "@types/node": "^18.0.0",
+ "babel-jest": "^29.7.0",
+ "chai": "^4.3.4",
+ "jest": "^29.7.0",
+ "prettier": "^2.6.2",
+ "solana-bankrun": "^0.2.0",
+ "ts-jest": "^29.1.1",
+ "typescript": "^4.9.5",
+ "@testing-library/jest-dom": "^6.1.6"
+ }
+}
diff --git a/tokens/external-delegate-token-master/anchor/pnpm-lock.yaml b/tokens/external-delegate-token-master/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..dd62569dc
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/pnpm-lock.yaml
@@ -0,0 +1,5123 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.29.0
+ version: 0.29.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.3.9
+ version: 0.3.11(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/web3.js':
+ specifier: ^1.90.0
+ version: 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ethers:
+ specifier: ^5.7.2
+ version: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.23.7
+ version: 7.27.1
+ '@babel/preset-env':
+ specifier: ^7.23.7
+ version: 7.27.2(@babel/core@7.27.1)
+ '@babel/preset-typescript':
+ specifier: ^7.23.7
+ version: 7.27.1(@babel/core@7.27.1)
+ '@testing-library/jest-dom':
+ specifier: ^6.1.6
+ version: 6.6.3
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.20
+ '@types/jest':
+ specifier: ^29.5.11
+ version: 29.5.14
+ '@types/node':
+ specifier: ^18.0.0
+ version: 18.19.100
+ babel-jest:
+ specifier: ^29.7.0
+ version: 29.7.0(@babel/core@7.27.1)
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ jest:
+ specifier: ^29.7.0
+ version: 29.7.0(@types/node@18.19.100)
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ solana-bankrun:
+ specifier: ^0.2.0
+ version: 0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ ts-jest:
+ specifier: ^29.1.1
+ version: 29.3.2(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@18.19.100))(typescript@4.9.5)
+ typescript:
+ specifier: ^4.9.5
+ version: 4.9.5
+
+packages:
+
+ '@adobe/css-tools@4.4.2':
+ resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==}
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.27.2':
+ resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.27.1':
+ resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.27.1':
+ resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.27.1':
+ resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.27.2':
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.27.1':
+ resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-create-regexp-features-plugin@7.27.1':
+ resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-define-polyfill-provider@0.6.4':
+ resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ '@babel/helper-member-expression-to-functions@7.27.1':
+ resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.27.1':
+ resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.27.1':
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-remap-async-to-generator@7.27.1':
+ resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-replace-supers@7.27.1':
+ resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-wrap-function@7.27.1':
+ resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.27.1':
+ resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.27.2':
+ resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1':
+ resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1':
+ resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1':
+ resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1':
+ resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1':
+ resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
+ resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-bigint@7.8.3':
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-assertions@7.27.1':
+ resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.27.1':
+ resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.27.1':
+ resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.27.1':
+ resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
+ resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-arrow-functions@7.27.1':
+ resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-generator-functions@7.27.1':
+ resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-to-generator@7.27.1':
+ resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoped-functions@7.27.1':
+ resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoping@7.27.1':
+ resolution: {integrity: sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-properties@7.27.1':
+ resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-static-block@7.27.1':
+ resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+
+ '@babel/plugin-transform-classes@7.27.1':
+ resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-computed-properties@7.27.1':
+ resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-destructuring@7.27.1':
+ resolution: {integrity: sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-dotall-regex@7.27.1':
+ resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-duplicate-keys@7.27.1':
+ resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1':
+ resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-dynamic-import@7.27.1':
+ resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-exponentiation-operator@7.27.1':
+ resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-export-namespace-from@7.27.1':
+ resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-for-of@7.27.1':
+ resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-function-name@7.27.1':
+ resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-json-strings@7.27.1':
+ resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-literals@7.27.1':
+ resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-logical-assignment-operators@7.27.1':
+ resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-member-expression-literals@7.27.1':
+ resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-amd@7.27.1':
+ resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-commonjs@7.27.1':
+ resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-systemjs@7.27.1':
+ resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-umd@7.27.1':
+ resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.27.1':
+ resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-new-target@7.27.1':
+ resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.27.1':
+ resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-numeric-separator@7.27.1':
+ resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-rest-spread@7.27.2':
+ resolution: {integrity: sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-super@7.27.1':
+ resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-catch-binding@7.27.1':
+ resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-chaining@7.27.1':
+ resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-parameters@7.27.1':
+ resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-methods@7.27.1':
+ resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-property-in-object@7.27.1':
+ resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-property-literals@7.27.1':
+ resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regenerator@7.27.1':
+ resolution: {integrity: sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regexp-modifiers@7.27.1':
+ resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-reserved-words@7.27.1':
+ resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-shorthand-properties@7.27.1':
+ resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-spread@7.27.1':
+ resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-sticky-regex@7.27.1':
+ resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-template-literals@7.27.1':
+ resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typeof-symbol@7.27.1':
+ resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typescript@7.27.1':
+ resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-escapes@7.27.1':
+ resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-property-regex@7.27.1':
+ resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-regex@7.27.1':
+ resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-sets-regex@7.27.1':
+ resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/preset-env@7.27.2':
+ resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-modules@0.1.6-no-external-plugins':
+ resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+
+ '@babel/preset-typescript@7.27.1':
+ resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.27.1':
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.27.1':
+ resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.27.1':
+ resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@bcoe/v8-coverage@0.2.3':
+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+
+ '@coral-xyz/anchor@0.29.0':
+ resolution: {integrity: sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.29.0':
+ resolution: {integrity: sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@ethersproject/abi@5.8.0':
+ resolution: {integrity: sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==}
+
+ '@ethersproject/abstract-provider@5.8.0':
+ resolution: {integrity: sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==}
+
+ '@ethersproject/abstract-signer@5.8.0':
+ resolution: {integrity: sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==}
+
+ '@ethersproject/address@5.8.0':
+ resolution: {integrity: sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==}
+
+ '@ethersproject/base64@5.8.0':
+ resolution: {integrity: sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==}
+
+ '@ethersproject/basex@5.8.0':
+ resolution: {integrity: sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==}
+
+ '@ethersproject/bignumber@5.8.0':
+ resolution: {integrity: sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==}
+
+ '@ethersproject/bytes@5.8.0':
+ resolution: {integrity: sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==}
+
+ '@ethersproject/constants@5.8.0':
+ resolution: {integrity: sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==}
+
+ '@ethersproject/contracts@5.8.0':
+ resolution: {integrity: sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==}
+
+ '@ethersproject/hash@5.8.0':
+ resolution: {integrity: sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==}
+
+ '@ethersproject/hdnode@5.8.0':
+ resolution: {integrity: sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==}
+
+ '@ethersproject/json-wallets@5.8.0':
+ resolution: {integrity: sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==}
+
+ '@ethersproject/keccak256@5.8.0':
+ resolution: {integrity: sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==}
+
+ '@ethersproject/logger@5.8.0':
+ resolution: {integrity: sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==}
+
+ '@ethersproject/networks@5.8.0':
+ resolution: {integrity: sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==}
+
+ '@ethersproject/pbkdf2@5.8.0':
+ resolution: {integrity: sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==}
+
+ '@ethersproject/properties@5.8.0':
+ resolution: {integrity: sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==}
+
+ '@ethersproject/providers@5.8.0':
+ resolution: {integrity: sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==}
+
+ '@ethersproject/random@5.8.0':
+ resolution: {integrity: sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==}
+
+ '@ethersproject/rlp@5.8.0':
+ resolution: {integrity: sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==}
+
+ '@ethersproject/sha2@5.8.0':
+ resolution: {integrity: sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==}
+
+ '@ethersproject/signing-key@5.8.0':
+ resolution: {integrity: sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==}
+
+ '@ethersproject/solidity@5.8.0':
+ resolution: {integrity: sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==}
+
+ '@ethersproject/strings@5.8.0':
+ resolution: {integrity: sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==}
+
+ '@ethersproject/transactions@5.8.0':
+ resolution: {integrity: sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==}
+
+ '@ethersproject/units@5.8.0':
+ resolution: {integrity: sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==}
+
+ '@ethersproject/wallet@5.8.0':
+ resolution: {integrity: sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==}
+
+ '@ethersproject/web@5.8.0':
+ resolution: {integrity: sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==}
+
+ '@ethersproject/wordlists@5.8.0':
+ resolution: {integrity: sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==}
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
+ engines: {node: '>=8'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jest/console@29.7.0':
+ resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/core@29.7.0':
+ resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/environment@29.7.0':
+ resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/expect-utils@29.7.0':
+ resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/expect@29.7.0':
+ resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/fake-timers@29.7.0':
+ resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/globals@29.7.0':
+ resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/reporters@29.7.0':
+ resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/source-map@29.6.3':
+ resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/test-result@29.7.0':
+ resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/test-sequencer@29.7.0':
+ resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/transform@29.7.0':
+ resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/types@29.6.3':
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jridgewell/gen-mapping@0.3.8':
+ resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@noble/curves@1.9.0':
+ resolution: {integrity: sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.8.0':
+ resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@sinclair/typebox@0.27.8':
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+
+ '@sinonjs/commons@3.0.1':
+ resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
+
+ '@sinonjs/fake-timers@10.3.0':
+ resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-rc.1':
+ resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-core@2.1.1':
+ resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-data-structures@2.0.0-rc.1':
+ resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.0.0-rc.1':
+ resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.1.1':
+ resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/codecs-strings@2.0.0-rc.1':
+ resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+ typescript: '>=5'
+
+ '@solana/codecs@2.0.0-rc.1':
+ resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.0.0-rc.1':
+ resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.1.1':
+ resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/options@2.0.0-rc.1':
+ resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/spl-token-metadata@0.1.6':
+ resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/web3.js@1.98.2':
+ resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+
+ '@swc/helpers@0.5.17':
+ resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+
+ '@testing-library/jest-dom@6.6.3':
+ resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==}
+ engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.20.7':
+ resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/graceful-fs@4.1.9':
+ resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+
+ '@types/jest@29.5.14':
+ resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@18.19.100':
+ resolution: {integrity: sha512-ojmMP8SZBKprc3qGrGk8Ujpo80AXkrP7G2tOT4VWr5jlr5DHjsJF+emXJz+Wm0glmy4Js62oKMdZZ6B9Y+tEcA==}
+
+ '@types/stack-utils@2.0.3':
+ resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+
+ '@types/yargs@17.0.33':
+ resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
+
+ aes-js@3.0.0:
+ resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ aria-query@5.3.2:
+ resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
+ engines: {node: '>= 0.4'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ async@3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
+ babel-jest@29.7.0:
+ resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.8.0
+
+ babel-plugin-istanbul@6.1.1:
+ resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
+ engines: {node: '>=8'}
+
+ babel-plugin-jest-hoist@29.6.3:
+ resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ babel-plugin-polyfill-corejs2@0.4.13:
+ resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-corejs3@0.11.1:
+ resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-regenerator@0.6.4:
+ resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-preset-current-node-syntax@1.1.0:
+ resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ babel-preset-jest@29.6.3:
+ resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bech32@1.1.4:
+ resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.3.0:
+ resolution: {integrity: sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@4.12.2:
+ resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ brorand@1.1.0:
+ resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
+
+ browserslist@4.24.5:
+ resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bs-logger@0.2.6:
+ resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
+ engines: {node: '>= 6'}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bser@2.1.1:
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.9:
+ resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
+ engines: {node: '>=6.14.2'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ caniuse-lite@1.0.30001717:
+ resolution: {integrity: sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@3.0.0:
+ resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+ engines: {node: '>=8'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ char-regex@1.0.2:
+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+
+ cjs-module-lexer@1.4.3:
+ resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ co@4.6.0:
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+
+ collect-v8-coverage@1.0.2:
+ resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ core-js-compat@3.42.0:
+ resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==}
+
+ create-jest@29.7.0:
+ resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+
+ cross-fetch@3.2.0:
+ resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ crypto-hash@1.3.0:
+ resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==}
+ engines: {node: '>=8'}
+
+ css.escape@1.5.1:
+ resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
+
+ debug@4.4.0:
+ resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ dedent@1.6.0:
+ resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ detect-newline@3.1.0:
+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ engines: {node: '>=8'}
+
+ diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ dom-accessibility-api@0.6.3:
+ resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
+
+ dot-case@3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+
+ ejs@3.1.10:
+ resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ electron-to-chromium@1.5.152:
+ resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==}
+
+ elliptic@6.6.1:
+ resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==}
+
+ emittery@0.13.1:
+ resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
+ engines: {node: '>=12'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ ethers@5.8.0:
+ resolution: {integrity: sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ exit@0.1.2:
+ resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
+ engines: {node: '>= 0.8.0'}
+
+ expect@29.7.0:
+ resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ filelist@1.0.4:
+ resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ get-package-type@0.1.0:
+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
+ engines: {node: '>=8.0.0'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ hash.js@1.1.7:
+ resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hmac-drbg@1.0.1:
+ resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
+
+ html-escaper@2.0.2:
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ import-local@3.2.0:
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-fn@2.1.0:
+ resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
+ engines: {node: '>=6'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@5.2.1:
+ resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@6.0.3:
+ resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-source-maps@4.0.1:
+ resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
+ engines: {node: '>=10'}
+
+ istanbul-reports@3.1.7:
+ resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
+ engines: {node: '>=8'}
+
+ jake@10.9.2:
+ resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ jayson@4.2.0:
+ resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ jest-changed-files@29.7.0:
+ resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-circus@29.7.0:
+ resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-cli@29.7.0:
+ resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ jest-config@29.7.0:
+ resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@types/node': '*'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ ts-node:
+ optional: true
+
+ jest-diff@29.7.0:
+ resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-docblock@29.7.0:
+ resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-each@29.7.0:
+ resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-environment-node@29.7.0:
+ resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-get-type@29.6.3:
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-haste-map@29.7.0:
+ resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-leak-detector@29.7.0:
+ resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-matcher-utils@29.7.0:
+ resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-message-util@29.7.0:
+ resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-mock@29.7.0:
+ resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-pnp-resolver@1.2.3:
+ resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ jest-resolve: '*'
+ peerDependenciesMeta:
+ jest-resolve:
+ optional: true
+
+ jest-regex-util@29.6.3:
+ resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-resolve-dependencies@29.7.0:
+ resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-resolve@29.7.0:
+ resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-runner@29.7.0:
+ resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-runtime@29.7.0:
+ resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-snapshot@29.7.0:
+ resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-util@29.7.0:
+ resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-validate@29.7.0:
+ resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-watcher@29.7.0:
+ resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-worker@29.7.0:
+ resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest@29.7.0:
+ resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ js-sha3@0.8.0:
+ resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@3.14.1:
+ resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ hasBin: true
+
+ jsesc@3.0.2:
+ resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ lower-case@2.0.2:
+ resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ makeerror@1.0.12:
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ min-indent@1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+
+ minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+
+ minimalistic-crypto-utils@1.0.1:
+ resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ node-int64@0.4.0:
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+
+ node-releases@2.0.19:
+ resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ pkg-dir@4.2.0:
+ resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
+ engines: {node: '>=8'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ pretty-format@29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
+
+ pure-rand@6.1.0:
+ resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
+
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+ redent@3.0.0:
+ resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+ engines: {node: '>=8'}
+
+ regenerate-unicode-properties@10.2.0:
+ resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==}
+ engines: {node: '>=4'}
+
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+
+ regexpu-core@6.2.0:
+ resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==}
+ engines: {node: '>=4'}
+
+ regjsgen@0.8.0:
+ resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
+
+ regjsparser@0.12.0:
+ resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==}
+ hasBin: true
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-cwd@3.0.0:
+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+ engines: {node: '>=8'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve.exports@2.0.3:
+ resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
+ engines: {node: '>=10'}
+
+ resolve@1.22.10:
+ resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ rpc-websockets@9.1.1:
+ resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ scrypt-js@3.0.1:
+ resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.7.2:
+ resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ snake-case@3.0.4:
+ resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
+
+ solana-bankrun-darwin-arm64@0.2.0:
+ resolution: {integrity: sha512-ENQ5Z/CYeY8ZVWIc2VutY/gMlBaHi93/kDw9w0iVwewoV+/YpQmP2irwrshIKu6ggRPTF3Ehlh2V6fGVIYWcXw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.2.0:
+ resolution: {integrity: sha512-HE45TvZXzBipm1fMn87+fkHeIuQ/KFAi5G/S29y/TLuBYt4RDI935RkWiT0rEQ7KwnwO6Y1aTsOaQXldY5R7uQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.2.0:
+ resolution: {integrity: sha512-42UsVrnac2Oo4UaIDo60zfI3Xn1i8W6fmcc9ixJQZNTtdO8o2/sY4mFxcJx9lhLMhda5FPHrQbGYgYdIs0kK0g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.2.0:
+ resolution: {integrity: sha512-WnqQjfBBdcI0ZLysjvRStI8gX7vm1c3CI6CC03lgkUztH+Chcq9C4LI9m2M8mXza8Xkn9ryeKAmX36Bx/yoVzg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.2.0:
+ resolution: {integrity: sha512-8mtf14ZBoah30+MIJBUwb5BlGLRZyK5cZhCkYnC/ROqaIDN8RxMM44NL63gTUIaNHsFwWGA9xR0KSeljeh3PKQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.2.0:
+ resolution: {integrity: sha512-TS6vYoO/9YJZng7oiLOVyuz8V7yLow5Hp4SLYWW71XM3702v+z9f1fvUBKudRfa4dfpta4tRNufApSiBIALxJQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.13:
+ resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
+ stream-chain@2.2.5:
+ resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
+
+ stream-json@1.9.1:
+ resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+
+ string-length@4.0.2:
+ resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
+ engines: {node: '>=10'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@4.0.0:
+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+ engines: {node: '>=8'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ strip-indent@3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ test-exclude@6.0.0:
+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
+ engines: {node: '>=8'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ tmpl@1.0.5:
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-jest@29.3.2:
+ resolution: {integrity: sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==}
+ engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@babel/core': '>=7.0.0-beta.0 <8'
+ '@jest/transform': ^29.0.0
+ '@jest/types': ^29.0.0
+ babel-jest: ^29.0.0
+ esbuild: '*'
+ jest: ^29.0.0
+ typescript: '>=4.3 <6'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ '@jest/transform':
+ optional: true
+ '@jest/types':
+ optional: true
+ babel-jest:
+ optional: true
+ esbuild:
+ optional: true
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ type-fest@4.41.0:
+ resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+ engines: {node: '>=16'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ unicode-canonical-property-names-ecmascript@2.0.1:
+ resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-value-ecmascript@2.2.0:
+ resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==}
+ engines: {node: '>=4'}
+
+ unicode-property-aliases-ecmascript@2.1.0:
+ resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+ engines: {node: '>=4'}
+
+ update-browserslist-db@1.1.3:
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ v8-to-istanbul@9.3.0:
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
+
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ write-file-atomic@4.0.2:
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@adobe/css-tools@4.4.2': {}
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.27.1
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.27.2': {}
+
+ '@babel/core@7.27.1':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1)
+ '@babel/helpers': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
+ convert-source-map: 2.0.0
+ debug: 4.4.0
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.27.1':
+ dependencies:
+ '@babel/parser': 7.27.2
+ '@babel/types': 7.27.1
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.27.1':
+ dependencies:
+ '@babel/types': 7.27.1
+
+ '@babel/helper-compilation-targets@7.27.2':
+ dependencies:
+ '@babel/compat-data': 7.27.2
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.24.5
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.27.1
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-annotate-as-pure': 7.27.1
+ regexpu-core: 6.2.0
+ semver: 6.3.1
+
+ '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ debug: 4.4.0
+ lodash.debounce: 4.0.8
+ resolve: 1.22.10
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-member-expression-to-functions@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ dependencies:
+ '@babel/types': 7.27.1
+
+ '@babel/helper-plugin-utils@7.27.1': {}
+
+ '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-wrap-function': 7.27.1
+ '@babel/traverse': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.27.1': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helper-wrap-function@7.27.1':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.27.1
+ '@babel/types': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helpers@7.27.1':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.1
+
+ '@babel/parser@7.27.2':
+ dependencies:
+ '@babel/types': 7.27.1
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/traverse': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/traverse': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1)
+ '@babel/traverse': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1)
+ '@babel/traverse': 7.27.1
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/template': 7.27.2
+
+ '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/traverse': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1)
+
+ '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/preset-env@7.27.2(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/compat-data': 7.27.2
+ '@babel/core': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1)
+ '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.1)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.27.1)
+ '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.1)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.1)
+ babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.1)
+ babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.1)
+ babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.1)
+ core-js-compat: 3.42.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/types': 7.27.1
+ esutils: 2.0.3
+
+ '@babel/preset-typescript@7.27.1(@babel/core@7.27.1)':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/runtime@7.27.1': {}
+
+ '@babel/template@7.27.2':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/types': 7.27.1
+
+ '@babel/traverse@7.27.1':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.1
+ '@babel/parser': 7.27.2
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.1
+ debug: 4.4.0
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.27.1':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+
+ '@bcoe/v8-coverage@0.2.3': {}
+
+ '@coral-xyz/anchor@0.29.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/borsh': 0.29.0(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))
+ '@noble/hashes': 1.8.0
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.2.0
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.29.0(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bn.js: 5.2.2
+ buffer-layout: 1.2.2
+
+ '@ethersproject/abi@5.8.0':
+ dependencies:
+ '@ethersproject/address': 5.8.0
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/constants': 5.8.0
+ '@ethersproject/hash': 5.8.0
+ '@ethersproject/keccak256': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/strings': 5.8.0
+
+ '@ethersproject/abstract-provider@5.8.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/networks': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/transactions': 5.8.0
+ '@ethersproject/web': 5.8.0
+
+ '@ethersproject/abstract-signer@5.8.0':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.8.0
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/properties': 5.8.0
+
+ '@ethersproject/address@5.8.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/keccak256': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/rlp': 5.8.0
+
+ '@ethersproject/base64@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+
+ '@ethersproject/basex@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/properties': 5.8.0
+
+ '@ethersproject/bignumber@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ bn.js: 5.2.2
+
+ '@ethersproject/bytes@5.8.0':
+ dependencies:
+ '@ethersproject/logger': 5.8.0
+
+ '@ethersproject/constants@5.8.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.8.0
+
+ '@ethersproject/contracts@5.8.0':
+ dependencies:
+ '@ethersproject/abi': 5.8.0
+ '@ethersproject/abstract-provider': 5.8.0
+ '@ethersproject/abstract-signer': 5.8.0
+ '@ethersproject/address': 5.8.0
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/constants': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/transactions': 5.8.0
+
+ '@ethersproject/hash@5.8.0':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.8.0
+ '@ethersproject/address': 5.8.0
+ '@ethersproject/base64': 5.8.0
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/keccak256': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/strings': 5.8.0
+
+ '@ethersproject/hdnode@5.8.0':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.8.0
+ '@ethersproject/basex': 5.8.0
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/pbkdf2': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/sha2': 5.8.0
+ '@ethersproject/signing-key': 5.8.0
+ '@ethersproject/strings': 5.8.0
+ '@ethersproject/transactions': 5.8.0
+ '@ethersproject/wordlists': 5.8.0
+
+ '@ethersproject/json-wallets@5.8.0':
+ dependencies:
+ '@ethersproject/abstract-signer': 5.8.0
+ '@ethersproject/address': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/hdnode': 5.8.0
+ '@ethersproject/keccak256': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/pbkdf2': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/random': 5.8.0
+ '@ethersproject/strings': 5.8.0
+ '@ethersproject/transactions': 5.8.0
+ aes-js: 3.0.0
+ scrypt-js: 3.0.1
+
+ '@ethersproject/keccak256@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ js-sha3: 0.8.0
+
+ '@ethersproject/logger@5.8.0': {}
+
+ '@ethersproject/networks@5.8.0':
+ dependencies:
+ '@ethersproject/logger': 5.8.0
+
+ '@ethersproject/pbkdf2@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/sha2': 5.8.0
+
+ '@ethersproject/properties@5.8.0':
+ dependencies:
+ '@ethersproject/logger': 5.8.0
+
+ '@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.8.0
+ '@ethersproject/abstract-signer': 5.8.0
+ '@ethersproject/address': 5.8.0
+ '@ethersproject/base64': 5.8.0
+ '@ethersproject/basex': 5.8.0
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/constants': 5.8.0
+ '@ethersproject/hash': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/networks': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/random': 5.8.0
+ '@ethersproject/rlp': 5.8.0
+ '@ethersproject/sha2': 5.8.0
+ '@ethersproject/strings': 5.8.0
+ '@ethersproject/transactions': 5.8.0
+ '@ethersproject/web': 5.8.0
+ bech32: 1.1.4
+ ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@ethersproject/random@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/logger': 5.8.0
+
+ '@ethersproject/rlp@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/logger': 5.8.0
+
+ '@ethersproject/sha2@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ hash.js: 1.1.7
+
+ '@ethersproject/signing-key@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ bn.js: 5.2.2
+ elliptic: 6.6.1
+ hash.js: 1.1.7
+
+ '@ethersproject/solidity@5.8.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/keccak256': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/sha2': 5.8.0
+ '@ethersproject/strings': 5.8.0
+
+ '@ethersproject/strings@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/constants': 5.8.0
+ '@ethersproject/logger': 5.8.0
+
+ '@ethersproject/transactions@5.8.0':
+ dependencies:
+ '@ethersproject/address': 5.8.0
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/constants': 5.8.0
+ '@ethersproject/keccak256': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/rlp': 5.8.0
+ '@ethersproject/signing-key': 5.8.0
+
+ '@ethersproject/units@5.8.0':
+ dependencies:
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/constants': 5.8.0
+ '@ethersproject/logger': 5.8.0
+
+ '@ethersproject/wallet@5.8.0':
+ dependencies:
+ '@ethersproject/abstract-provider': 5.8.0
+ '@ethersproject/abstract-signer': 5.8.0
+ '@ethersproject/address': 5.8.0
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/hash': 5.8.0
+ '@ethersproject/hdnode': 5.8.0
+ '@ethersproject/json-wallets': 5.8.0
+ '@ethersproject/keccak256': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/random': 5.8.0
+ '@ethersproject/signing-key': 5.8.0
+ '@ethersproject/transactions': 5.8.0
+ '@ethersproject/wordlists': 5.8.0
+
+ '@ethersproject/web@5.8.0':
+ dependencies:
+ '@ethersproject/base64': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/strings': 5.8.0
+
+ '@ethersproject/wordlists@5.8.0':
+ dependencies:
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/hash': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/strings': 5.8.0
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ dependencies:
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.1
+ resolve-from: 5.0.0
+
+ '@istanbuljs/schema@0.1.3': {}
+
+ '@jest/console@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ chalk: 4.1.2
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ slash: 3.0.0
+
+ '@jest/core@29.7.0':
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/reporters': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-changed-files: 29.7.0
+ jest-config: 29.7.0(@types/node@18.19.100)
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-resolve-dependencies: 29.7.0
+ jest-runner: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ jest-watcher: 29.7.0
+ micromatch: 4.0.8
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-ansi: 6.0.1
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ '@jest/environment@29.7.0':
+ dependencies:
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ jest-mock: 29.7.0
+
+ '@jest/expect-utils@29.7.0':
+ dependencies:
+ jest-get-type: 29.6.3
+
+ '@jest/expect@29.7.0':
+ dependencies:
+ expect: 29.7.0
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/fake-timers@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@sinonjs/fake-timers': 10.3.0
+ '@types/node': 18.19.100
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ '@jest/globals@29.7.0':
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/types': 29.6.3
+ jest-mock: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/reporters@29.7.0':
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@jest/console': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/node': 18.19.100
+ chalk: 4.1.2
+ collect-v8-coverage: 1.0.2
+ exit: 0.1.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-instrument: 6.0.3
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 4.0.1
+ istanbul-reports: 3.1.7
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ slash: 3.0.0
+ string-length: 4.0.2
+ strip-ansi: 6.0.1
+ v8-to-istanbul: 9.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jest/source-map@29.6.3':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ callsites: 3.1.0
+ graceful-fs: 4.2.11
+
+ '@jest/test-result@29.7.0':
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ collect-v8-coverage: 1.0.2
+
+ '@jest/test-sequencer@29.7.0':
+ dependencies:
+ '@jest/test-result': 29.7.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ slash: 3.0.0
+
+ '@jest/transform@29.7.0':
+ dependencies:
+ '@babel/core': 7.27.1
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.25
+ babel-plugin-istanbul: 6.1.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ micromatch: 4.0.8
+ pirates: 4.0.7
+ slash: 3.0.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 18.19.100
+ '@types/yargs': 17.0.33
+ chalk: 4.1.2
+
+ '@jridgewell/gen-mapping@0.3.8':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@noble/curves@1.9.0':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@sinclair/typebox@0.27.8': {}
+
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
+ '@sinonjs/fake-timers@10.3.0':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-core@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.1(typescript@4.9.5)
+ '@solana/errors': 2.1.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ fastestsmallesttextencoderdecoder: 1.0.22
+ typescript: 4.9.5
+
+ '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 12.1.0
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ typescript: 4.9.5
+
+ '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - typescript
+ - utf-8-validate
+
+ '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@noble/curves': 1.9.0
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.1(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ bn.js: 5.2.2
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.1.1
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@swc/helpers@0.5.17':
+ dependencies:
+ tslib: 2.8.1
+
+ '@testing-library/jest-dom@6.6.3':
+ dependencies:
+ '@adobe/css-tools': 4.4.2
+ aria-query: 5.3.2
+ chalk: 3.0.0
+ css.escape: 1.5.1
+ dom-accessibility-api: 0.6.3
+ lodash: 4.17.21
+ redent: 3.0.0
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.27.2
+ '@babel/types': 7.27.1
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.20.7
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.27.1
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.27.2
+ '@babel/types': 7.27.1
+
+ '@types/babel__traverse@7.20.7':
+ dependencies:
+ '@babel/types': 7.27.1
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 18.19.100
+
+ '@types/graceful-fs@4.1.9':
+ dependencies:
+ '@types/node': 18.19.100
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/jest@29.5.14':
+ dependencies:
+ expect: 29.7.0
+ pretty-format: 29.7.0
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@18.19.100':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/stack-utils@2.0.3': {}
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 18.19.100
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 18.19.100
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.33':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ aes-js@3.0.0: {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@5.2.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ aria-query@5.3.2: {}
+
+ assertion-error@1.1.0: {}
+
+ async@3.2.6: {}
+
+ babel-jest@29.7.0(@babel/core@7.27.1):
+ dependencies:
+ '@babel/core': 7.27.1
+ '@jest/transform': 29.7.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 6.1.1
+ babel-preset-jest: 29.6.3(@babel/core@7.27.1)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-istanbul@6.1.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.27.1
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 5.2.1
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-jest-hoist@29.6.3:
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.1
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.20.7
+
+ babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.1):
+ dependencies:
+ '@babel/compat-data': 7.27.2
+ '@babel/core': 7.27.1
+ '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.1):
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1)
+ core-js-compat: 3.42.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.1):
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-preset-current-node-syntax@1.1.0(@babel/core@7.27.1):
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.1)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.1)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.1)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.1)
+ '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.1)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.1)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.1)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.1)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.1)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.1)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.1)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.1)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.1)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.1)
+
+ babel-preset-jest@29.6.3(@babel/core@7.27.1):
+ dependencies:
+ '@babel/core': 7.27.1
+ babel-plugin-jest-hoist: 29.6.3
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.1)
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bech32@1.1.4: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@4.12.2: {}
+
+ bn.js@5.2.2: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.2
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ brorand@1.1.0: {}
+
+ browserslist@4.24.5:
+ dependencies:
+ caniuse-lite: 1.0.30001717
+ electron-to-chromium: 1.5.152
+ node-releases: 2.0.19
+ update-browserslist-db: 1.1.3(browserslist@4.24.5)
+
+ bs-logger@0.2.6:
+ dependencies:
+ fast-json-stable-stringify: 2.1.0
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.9:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ callsites@3.1.0: {}
+
+ camelcase@5.3.1: {}
+
+ camelcase@6.3.0: {}
+
+ caniuse-lite@1.0.30001717: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@3.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ char-regex@1.0.2: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ ci-info@3.9.0: {}
+
+ cjs-module-lexer@1.4.3: {}
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ co@4.6.0: {}
+
+ collect-v8-coverage@1.0.2: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.1.0: {}
+
+ commander@13.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ convert-source-map@2.0.0: {}
+
+ core-js-compat@3.42.0:
+ dependencies:
+ browserslist: 4.24.5
+
+ create-jest@29.7.0(@types/node@18.19.100):
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-config: 29.7.0(@types/node@18.19.100)
+ jest-util: 29.7.0
+ prompts: 2.4.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ cross-fetch@3.2.0:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ crypto-hash@1.3.0: {}
+
+ css.escape@1.5.1: {}
+
+ debug@4.4.0:
+ dependencies:
+ ms: 2.1.3
+
+ dedent@1.6.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ deepmerge@4.3.1: {}
+
+ delay@5.0.0: {}
+
+ detect-newline@3.1.0: {}
+
+ diff-sequences@29.6.3: {}
+
+ dom-accessibility-api@0.6.3: {}
+
+ dot-case@3.0.4:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.8.1
+
+ ejs@3.1.10:
+ dependencies:
+ jake: 10.9.2
+
+ electron-to-chromium@1.5.152: {}
+
+ elliptic@6.6.1:
+ dependencies:
+ bn.js: 4.12.2
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ emittery@0.13.1: {}
+
+ emoji-regex@8.0.0: {}
+
+ error-ex@1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ esprima@4.0.1: {}
+
+ esutils@2.0.3: {}
+
+ ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@ethersproject/abi': 5.8.0
+ '@ethersproject/abstract-provider': 5.8.0
+ '@ethersproject/abstract-signer': 5.8.0
+ '@ethersproject/address': 5.8.0
+ '@ethersproject/base64': 5.8.0
+ '@ethersproject/basex': 5.8.0
+ '@ethersproject/bignumber': 5.8.0
+ '@ethersproject/bytes': 5.8.0
+ '@ethersproject/constants': 5.8.0
+ '@ethersproject/contracts': 5.8.0
+ '@ethersproject/hash': 5.8.0
+ '@ethersproject/hdnode': 5.8.0
+ '@ethersproject/json-wallets': 5.8.0
+ '@ethersproject/keccak256': 5.8.0
+ '@ethersproject/logger': 5.8.0
+ '@ethersproject/networks': 5.8.0
+ '@ethersproject/pbkdf2': 5.8.0
+ '@ethersproject/properties': 5.8.0
+ '@ethersproject/providers': 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ '@ethersproject/random': 5.8.0
+ '@ethersproject/rlp': 5.8.0
+ '@ethersproject/sha2': 5.8.0
+ '@ethersproject/signing-key': 5.8.0
+ '@ethersproject/solidity': 5.8.0
+ '@ethersproject/strings': 5.8.0
+ '@ethersproject/transactions': 5.8.0
+ '@ethersproject/units': 5.8.0
+ '@ethersproject/wallet': 5.8.0
+ '@ethersproject/web': 5.8.0
+ '@ethersproject/wordlists': 5.8.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ exit@0.1.2: {}
+
+ expect@29.7.0:
+ dependencies:
+ '@jest/expect-utils': 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+
+ eyes@0.1.8: {}
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
+ file-uri-to-path@1.0.0: {}
+
+ filelist@1.0.4:
+ dependencies:
+ minimatch: 5.1.6
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-package-type@0.1.0: {}
+
+ get-stream@6.0.1: {}
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ globals@11.12.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ has-flag@4.0.0: {}
+
+ hash.js@1.1.7:
+ dependencies:
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hmac-drbg@1.0.1:
+ dependencies:
+ hash.js: 1.1.7
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ html-escaper@2.0.2: {}
+
+ human-signals@2.1.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ import-local@3.2.0:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@4.0.0: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-arrayish@0.2.1: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-fn@2.1.0: {}
+
+ is-number@7.0.0: {}
+
+ is-stream@2.0.1: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-instrument@5.2.1:
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/parser': 7.27.2
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-instrument@6.0.3:
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/parser': 7.27.2
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-report@3.0.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+
+ istanbul-lib-source-maps@4.0.1:
+ dependencies:
+ debug: 4.4.0
+ istanbul-lib-coverage: 3.2.2
+ source-map: 0.6.1
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-reports@3.1.7:
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
+
+ jake@10.9.2:
+ dependencies:
+ async: 3.2.6
+ chalk: 4.1.2
+ filelist: 1.0.4
+ minimatch: 3.1.2
+
+ jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ stream-json: 1.9.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ jest-changed-files@29.7.0:
+ dependencies:
+ execa: 5.1.1
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+
+ jest-circus@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ chalk: 4.1.2
+ co: 4.6.0
+ dedent: 1.6.0
+ is-generator-fn: 2.1.0
+ jest-each: 29.7.0
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+ pretty-format: 29.7.0
+ pure-rand: 6.1.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-cli@29.7.0(@types/node@18.19.100):
+ dependencies:
+ '@jest/core': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ create-jest: 29.7.0(@types/node@18.19.100)
+ exit: 0.1.2
+ import-local: 3.2.0
+ jest-config: 29.7.0(@types/node@18.19.100)
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ jest-config@29.7.0(@types/node@18.19.100):
+ dependencies:
+ '@babel/core': 7.27.1
+ '@jest/test-sequencer': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.27.1)
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ deepmerge: 4.3.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-circus: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-get-type: 29.6.3
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-runner: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ micromatch: 4.0.8
+ parse-json: 5.2.0
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ optionalDependencies:
+ '@types/node': 18.19.100
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-diff@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ diff-sequences: 29.6.3
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-docblock@29.7.0:
+ dependencies:
+ detect-newline: 3.1.0
+
+ jest-each@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ jest-util: 29.7.0
+ pretty-format: 29.7.0
+
+ jest-environment-node@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ jest-get-type@29.6.3: {}
+
+ jest-haste-map@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/graceful-fs': 4.1.9
+ '@types/node': 18.19.100
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ jest-leak-detector@29.7.0:
+ dependencies:
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-matcher-utils@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-message-util@29.7.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@jest/types': 29.6.3
+ '@types/stack-utils': 2.0.3
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.8
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+
+ jest-mock@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ jest-util: 29.7.0
+
+ jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
+ optionalDependencies:
+ jest-resolve: 29.7.0
+
+ jest-regex-util@29.6.3: {}
+
+ jest-resolve-dependencies@29.7.0:
+ dependencies:
+ jest-regex-util: 29.6.3
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-resolve@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ resolve: 1.22.10
+ resolve.exports: 2.0.3
+ slash: 3.0.0
+
+ jest-runner@29.7.0:
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/environment': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ chalk: 4.1.2
+ emittery: 0.13.1
+ graceful-fs: 4.2.11
+ jest-docblock: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-haste-map: 29.7.0
+ jest-leak-detector: 29.7.0
+ jest-message-util: 29.7.0
+ jest-resolve: 29.7.0
+ jest-runtime: 29.7.0
+ jest-util: 29.7.0
+ jest-watcher: 29.7.0
+ jest-worker: 29.7.0
+ p-limit: 3.1.0
+ source-map-support: 0.5.13
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-runtime@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/globals': 29.7.0
+ '@jest/source-map': 29.6.3
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ chalk: 4.1.2
+ cjs-module-lexer: 1.4.3
+ collect-v8-coverage: 1.0.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ slash: 3.0.0
+ strip-bom: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-snapshot@29.7.0:
+ dependencies:
+ '@babel/core': 7.27.1
+ '@babel/generator': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1)
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1)
+ '@babel/types': 7.27.1
+ '@jest/expect-utils': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.1)
+ chalk: 4.1.2
+ expect: 29.7.0
+ graceful-fs: 4.2.11
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ natural-compare: 1.4.0
+ pretty-format: 29.7.0
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-util@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ graceful-fs: 4.2.11
+ picomatch: 2.3.1
+
+ jest-validate@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ leven: 3.1.0
+ pretty-format: 29.7.0
+
+ jest-watcher@29.7.0:
+ dependencies:
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 18.19.100
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ emittery: 0.13.1
+ jest-util: 29.7.0
+ string-length: 4.0.2
+
+ jest-worker@29.7.0:
+ dependencies:
+ '@types/node': 18.19.100
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest@29.7.0(@types/node@18.19.100):
+ dependencies:
+ '@jest/core': 29.7.0
+ '@jest/types': 29.6.3
+ import-local: 3.2.0
+ jest-cli: 29.7.0(@types/node@18.19.100)
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ js-sha3@0.8.0: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@3.14.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ jsesc@3.0.2: {}
+
+ jsesc@3.1.0: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@2.2.3: {}
+
+ kleur@3.0.3: {}
+
+ leven@3.1.0: {}
+
+ lines-and-columns@1.2.4: {}
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ lodash.debounce@4.0.8: {}
+
+ lodash.memoize@4.1.2: {}
+
+ lodash@4.17.21: {}
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.8.1
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.7.2
+
+ make-error@1.3.6: {}
+
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
+ merge-stream@2.0.0: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mimic-fn@2.1.0: {}
+
+ min-indent@1.0.1: {}
+
+ minimalistic-assert@1.0.1: {}
+
+ minimalistic-crypto-utils@1.0.1: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ ms@2.1.3: {}
+
+ natural-compare@1.4.0: {}
+
+ no-case@3.0.4:
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.8.1
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4:
+ optional: true
+
+ node-int64@0.4.0: {}
+
+ node-releases@2.0.19: {}
+
+ normalize-path@3.0.0: {}
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-try@2.2.0: {}
+
+ pako@2.1.0: {}
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ pathval@1.1.1: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ pirates@4.0.7: {}
+
+ pkg-dir@4.2.0:
+ dependencies:
+ find-up: 4.1.0
+
+ prettier@2.8.8: {}
+
+ pretty-format@29.7.0:
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+
+ pure-rand@6.1.0: {}
+
+ react-is@18.3.1: {}
+
+ redent@3.0.0:
+ dependencies:
+ indent-string: 4.0.0
+ strip-indent: 3.0.0
+
+ regenerate-unicode-properties@10.2.0:
+ dependencies:
+ regenerate: 1.4.2
+
+ regenerate@1.4.2: {}
+
+ regexpu-core@6.2.0:
+ dependencies:
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.2.0
+ regjsgen: 0.8.0
+ regjsparser: 0.12.0
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.2.0
+
+ regjsgen@0.8.0: {}
+
+ regjsparser@0.12.0:
+ dependencies:
+ jsesc: 3.0.2
+
+ require-directory@2.1.1: {}
+
+ resolve-cwd@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+
+ resolve-from@5.0.0: {}
+
+ resolve.exports@2.0.3: {}
+
+ resolve@1.22.10:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ rpc-websockets@9.1.1:
+ dependencies:
+ '@swc/helpers': 0.5.17
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ scrypt-js@3.0.1: {}
+
+ semver@6.3.1: {}
+
+ semver@7.7.2: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ signal-exit@3.0.7: {}
+
+ sisteransi@1.0.5: {}
+
+ slash@3.0.0: {}
+
+ snake-case@3.0.4:
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.8.1
+
+ solana-bankrun-darwin-arm64@0.2.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.2.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.2.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.2.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.2.0:
+ optional: true
+
+ solana-bankrun@0.2.0(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.2.0
+ solana-bankrun-darwin-universal: 0.2.0
+ solana-bankrun-darwin-x64: 0.2.0
+ solana-bankrun-linux-x64-gnu: 0.2.0
+ solana-bankrun-linux-x64-musl: 0.2.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ source-map-support@0.5.13:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ sprintf-js@1.0.3: {}
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ string-length@4.0.2:
+ dependencies:
+ char-regex: 1.0.2
+ strip-ansi: 6.0.1
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@4.0.0: {}
+
+ strip-final-newline@2.0.0: {}
+
+ strip-indent@3.0.0:
+ dependencies:
+ min-indent: 1.0.1
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ test-exclude@6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 7.2.3
+ minimatch: 3.1.2
+
+ text-encoding-utf-8@1.0.2: {}
+
+ tmpl@1.0.5: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-jest@29.3.2(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@18.19.100))(typescript@4.9.5):
+ dependencies:
+ bs-logger: 0.2.6
+ ejs: 3.1.10
+ fast-json-stable-stringify: 2.1.0
+ jest: 29.7.0(@types/node@18.19.100)
+ jest-util: 29.7.0
+ json5: 2.2.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ semver: 7.7.2
+ type-fest: 4.41.0
+ typescript: 4.9.5
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@babel/core': 7.27.1
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.27.1)
+
+ tslib@2.8.1: {}
+
+ type-detect@4.0.8: {}
+
+ type-detect@4.1.0: {}
+
+ type-fest@0.21.3: {}
+
+ type-fest@4.41.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ unicode-canonical-property-names-ecmascript@2.0.1: {}
+
+ unicode-match-property-ecmascript@2.0.0:
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.1
+ unicode-property-aliases-ecmascript: 2.1.0
+
+ unicode-match-property-value-ecmascript@2.2.0: {}
+
+ unicode-property-aliases-ecmascript@2.1.0: {}
+
+ update-browserslist-db@1.1.3(browserslist@4.24.5):
+ dependencies:
+ browserslist: 4.24.5
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ uuid@8.3.2: {}
+
+ v8-to-istanbul@9.3.0:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/istanbul-lib-coverage': 2.0.6
+ convert-source-map: 2.0.0
+
+ walker@1.0.8:
+ dependencies:
+ makeerror: 1.0.12
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ write-file-atomic@4.0.2:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 3.0.7
+
+ ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.9
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yocto-queue@0.1.0: {}
diff --git a/tokens/external-delegate-token-master/anchor/programs/external-delegate-token-master/Cargo.toml b/tokens/external-delegate-token-master/anchor/programs/external-delegate-token-master/Cargo.toml
new file mode 100644
index 000000000..9a5387245
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/programs/external-delegate-token-master/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "external-delegate-token-master"
+version = "0.1.0"
+description = "Created with Anchor"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+name = "external_delegate_token_master"
+
+[features]
+default = []
+cpi = ["no-entrypoint"]
+no-entrypoint = []
+no-idl = []
+no-log-ix-name = []
+idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
+
+[dependencies]
+anchor-lang = { version = "0.31.1", features = ["init-if-needed"] }
+anchor-spl = { version = "0.31.1", features = ["metadata"] }
+sha3 = "0.10.8"
+solana-program = "2.2.1"
diff --git a/tokens/external-delegate-token-master/anchor/programs/external-delegate-token-master/Xargo.toml b/tokens/external-delegate-token-master/anchor/programs/external-delegate-token-master/Xargo.toml
new file mode 100644
index 000000000..475fb71ed
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/programs/external-delegate-token-master/Xargo.toml
@@ -0,0 +1,2 @@
+[target.bpfel-unknown-unknown.dependencies.std]
+features = []
diff --git a/tokens/external-delegate-token-master/anchor/programs/external-delegate-token-master/src/lib.rs b/tokens/external-delegate-token-master/anchor/programs/external-delegate-token-master/src/lib.rs
new file mode 100644
index 000000000..94c0bc547
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/programs/external-delegate-token-master/src/lib.rs
@@ -0,0 +1,160 @@
+use anchor_lang::prelude::*;
+use anchor_spl::token;
+use anchor_spl::token::{Token, TokenAccount, Transfer};
+use solana_program::secp256k1_recover::secp256k1_recover;
+use sha3::{Digest, Keccak256};
+
+declare_id!("FYPkt5VWMvtyWZDMGCwoKFkE3wXTzphicTpnNGuHWVbD");
+
+#[program]
+pub mod external_delegate_token_master {
+ use super::*;
+
+ pub fn initialize(ctx: Context) -> Result<()> {
+ let user_account = &mut ctx.accounts.user_account;
+ user_account.authority = ctx.accounts.authority.key();
+ user_account.ethereum_address = [0; 20];
+ Ok(())
+ }
+
+ pub fn set_ethereum_address(ctx: Context, ethereum_address: [u8; 20]) -> Result<()> {
+ let user_account = &mut ctx.accounts.user_account;
+ user_account.ethereum_address = ethereum_address;
+ Ok(())
+ }
+
+ pub fn transfer_tokens(ctx: Context, amount: u64, signature: [u8; 65], message: [u8; 32]) -> Result<()> {
+ let user_account = &ctx.accounts.user_account;
+
+ if !verify_ethereum_signature(&user_account.ethereum_address, &message, &signature) {
+ return Err(ErrorCode::InvalidSignature.into());
+ }
+
+ // Transfer tokens
+ let transfer_instruction = Transfer {
+ from: ctx.accounts.user_token_account.to_account_info(),
+ to: ctx.accounts.recipient_token_account.to_account_info(),
+ authority: ctx.accounts.user_pda.to_account_info(),
+ };
+
+ token::transfer(
+ CpiContext::new_with_signer(
+ ctx.accounts.token_program.to_account_info(),
+ transfer_instruction,
+ &[&[
+ user_account.key().as_ref(),
+ &[ctx.bumps.user_pda],
+ ]],
+ ),
+ amount,
+ )?;
+
+ Ok(())
+ }
+
+ pub fn authority_transfer(ctx: Context, amount: u64) -> Result<()> {
+ // Transfer tokens
+ let transfer_instruction = Transfer {
+ from: ctx.accounts.user_token_account.to_account_info(),
+ to: ctx.accounts.recipient_token_account.to_account_info(),
+ authority: ctx.accounts.user_pda.to_account_info(),
+ };
+
+ token::transfer(
+ CpiContext::new_with_signer(
+ ctx.accounts.token_program.to_account_info(),
+ transfer_instruction,
+ &[&[
+ ctx.accounts.user_account.key().as_ref(),
+ &[ctx.bumps.user_pda],
+ ]],
+ ),
+ amount,
+ )?;
+
+ Ok(())
+ }
+}
+
+#[derive(Accounts)]
+pub struct Initialize<'info> {
+ #[account(init, payer = authority, space = 8 + 32 + 20)] // Ensure this is only for user_account
+ pub user_account: Account<'info, UserAccount>,
+ #[account(mut)]
+ pub authority: Signer<'info>, // This should remain as a signer
+ pub system_program: Program<'info, System>, // Required for initialization
+}
+
+#[derive(Accounts)]
+pub struct SetEthereumAddress<'info> {
+ #[account(mut, has_one = authority)]
+ pub user_account: Account<'info, UserAccount>,
+ pub authority: Signer<'info>,
+}
+
+#[derive(Accounts)]
+pub struct TransferTokens<'info> {
+ #[account(has_one = authority)]
+ pub user_account: Account<'info, UserAccount>,
+ pub authority: Signer<'info>,
+ #[account(mut)]
+ pub user_token_account: Account<'info, TokenAccount>,
+ #[account(mut)]
+ pub recipient_token_account: Account<'info, TokenAccount>,
+ #[account(
+ seeds = [user_account.key().as_ref()],
+ bump,
+ )]
+ pub user_pda: SystemAccount<'info>,
+ pub token_program: Program<'info, Token>,
+}
+
+#[derive(Accounts)]
+pub struct AuthorityTransfer<'info> {
+ #[account(has_one = authority)]
+ pub user_account: Account<'info, UserAccount>,
+ pub authority: Signer<'info>,
+ #[account(mut)]
+ pub user_token_account: Account<'info, TokenAccount>,
+ #[account(mut)]
+ pub recipient_token_account: Account<'info, TokenAccount>,
+ #[account(
+ seeds = [user_account.key().as_ref()],
+ bump,
+ )]
+ pub user_pda: SystemAccount<'info>,
+ pub token_program: Program<'info, Token>,
+}
+
+#[account]
+pub struct UserAccount {
+ pub authority: Pubkey,
+ pub ethereum_address: [u8; 20],
+}
+
+#[error_code]
+pub enum ErrorCode {
+ #[msg("Invalid Ethereum signature")]
+ InvalidSignature,
+}
+
+fn verify_ethereum_signature(ethereum_address: &[u8; 20], message: &[u8; 32], signature: &[u8; 65]) -> bool {
+ let recovery_id = signature[64];
+ let mut sig = [0u8; 64];
+ sig.copy_from_slice(&signature[..64]);
+
+ if let Ok(pubkey) = secp256k1_recover(message, recovery_id, &sig) {
+ let pubkey_bytes = pubkey.to_bytes();
+ let mut recovered_address = [0u8; 20];
+ recovered_address.copy_from_slice(&keccak256(&pubkey_bytes[1..])[12..]);
+ recovered_address == *ethereum_address
+ } else {
+ false
+ }
+}
+
+fn keccak256(data: &[u8]) -> [u8; 32] {
+ let mut hasher = Keccak256::new();
+ hasher.update(data);
+ hasher.finalize().into()
+}
diff --git a/tokens/external-delegate-token-master/anchor/tests/external-delegate-token-master.test.ts b/tokens/external-delegate-token-master/anchor/tests/external-delegate-token-master.test.ts
new file mode 100644
index 000000000..db0b8a988
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/tests/external-delegate-token-master.test.ts
@@ -0,0 +1,142 @@
+import { TOKEN_PROGRAM_ID, createMint, getOrCreateAssociatedTokenAccount, mintTo } from '@solana/spl-token';
+import { Connection, Keypair, PublicKey, SystemProgram } from '@solana/web3.js';
+import { expect } from 'chai';
+import { start } from 'solana-bankrun';
+
+jest.setTimeout(30000); // Set timeout to 30 seconds
+
+const ACCOUNT_SIZE = 8 + 32 + 20; // Define your account size here
+
+async function retryWithBackoff(fn: () => Promise, retries = 5, delay = 500): Promise {
+ try {
+ return await fn();
+ } catch (err) {
+ if (retries === 0) throw err;
+ await new Promise((resolve) => setTimeout(resolve, delay));
+ return retryWithBackoff(fn, retries - 1, delay * 2);
+ }
+}
+
+describe('External Delegate Token Master Tests', () => {
+ let context: any;
+ let program: any;
+ let authority: Keypair;
+ let userAccount: Keypair;
+ let mint: PublicKey;
+ let userTokenAccount: PublicKey;
+ let recipientTokenAccount: PublicKey;
+ let userPda: PublicKey;
+ let bumpSeed: number;
+
+ beforeEach(async () => {
+ authority = Keypair.generate();
+ userAccount = Keypair.generate();
+
+ const programs = [
+ {
+ name: 'external_delegate_token_master',
+ programId: new PublicKey('FYPkt5VWMvtyWZDMGCwoKFkE3wXTzphicTpnNGuHWVbD'),
+ program: 'target/deploy/external_delegate_token_master.so',
+ },
+ ];
+
+ context = await retryWithBackoff(async () => await start(programs, []));
+
+ const connection = new Connection('https://api.devnet.solana.com/', 'confirmed');
+ context.connection = connection;
+
+ // Airdrop SOL to authority with retry logic
+ await retryWithBackoff(async () => {
+ await connection.requestAirdrop(authority.publicKey, 1000000000);
+ });
+
+ // Create mint with retry logic
+ mint = await retryWithBackoff(async () => await createMint(connection, authority, authority.publicKey, null, 6));
+
+ const userTokenAccountInfo = await retryWithBackoff(
+ async () => await getOrCreateAssociatedTokenAccount(connection, authority, mint, authority.publicKey),
+ );
+ userTokenAccount = userTokenAccountInfo.address;
+
+ const recipientTokenAccountInfo = await retryWithBackoff(
+ async () => await getOrCreateAssociatedTokenAccount(connection, authority, mint, Keypair.generate().publicKey),
+ );
+ recipientTokenAccount = recipientTokenAccountInfo.address;
+
+ // Mint tokens to the user's account
+ await retryWithBackoff(async () => await mintTo(connection, authority, mint, userTokenAccount, authority, 1000000000));
+
+ // Find program-derived address (PDA)
+ [userPda, bumpSeed] = await retryWithBackoff(
+ async () => await PublicKey.findProgramAddress([userAccount.publicKey.toBuffer()], context.program.programId),
+ );
+ });
+
+ it('should initialize user account', async () => {
+ const space = ACCOUNT_SIZE;
+ const rentExempt = await retryWithBackoff(async () => {
+ return await context.connection.getMinimumBalanceForRentExemption(space);
+ });
+
+ await context.program.methods
+ .initialize()
+ .accounts({
+ userAccount: userAccount.publicKey,
+ authority: authority.publicKey,
+ systemProgram: SystemProgram.programId,
+ })
+ .preInstructions([
+ SystemProgram.createAccount({
+ fromPubkey: authority.publicKey,
+ newAccountPubkey: userAccount.publicKey,
+ lamports: rentExempt,
+ space: space,
+ programId: context.program.programId,
+ }),
+ ])
+ .signers([authority, userAccount])
+ .rpc();
+
+ const account = await context.program.account.userAccount.fetch(userAccount.publicKey);
+ expect(account.authority.toString()).to.equal(authority.publicKey.toString());
+ expect(account.ethereumAddress).to.deep.equal(new Array(20).fill(0));
+ });
+
+ it('should set ethereum address', async () => {
+ const ethereumAddress = Buffer.from('1C8cd0c38F8DE35d6056c7C7aBFa7e65D260E816', 'hex');
+
+ await context.program.methods
+ .setEthereumAddress(ethereumAddress)
+ .accounts({
+ userAccount: userAccount.publicKey,
+ authority: authority.publicKey,
+ })
+ .signers([authority])
+ .rpc();
+
+ const account = await context.program.account.userAccount.fetch(userAccount.publicKey);
+ expect(account.ethereumAddress).to.deep.equal(Array.from(ethereumAddress));
+ });
+
+ it('should perform authority transfer', async () => {
+ const newAuthority = Keypair.generate();
+
+ await context.program.methods
+ .transferAuthority(newAuthority.publicKey)
+ .accounts({
+ userAccount: userAccount.publicKey,
+ authority: authority.publicKey,
+ })
+ .signers([authority])
+ .rpc();
+
+ const account = await context.program.account.userAccount.fetch(userAccount.publicKey);
+ expect(account.authority.toString()).to.equal(newAuthority.publicKey.toString());
+ });
+
+ afterEach(async () => {
+ if (context && typeof context.terminate === 'function') {
+ await context.terminate();
+ }
+ });
+});
diff --git a/tokens/external-delegate-token-master/anchor/tests/types.ts b/tokens/external-delegate-token-master/anchor/tests/types.ts
new file mode 100644
index 000000000..191287b59
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/tests/types.ts
@@ -0,0 +1,17 @@
+// tests/types.ts
+import { PublicKey } from '@solana/web3.js';
+
+export interface ProgramTestContext {
+ connection: any;
+ programs: {
+ programId: PublicKey;
+ program: string;
+ }[];
+ grantLamports: (address: PublicKey, amount: number) => Promise;
+ terminate: () => Promise;
+}
+
+export interface UserAccount {
+ authority: PublicKey;
+ ethereumAddress: number[];
+}
diff --git a/tokens/external-delegate-token-master/anchor/tsconfig.json b/tokens/external-delegate-token-master/anchor/tsconfig.json
new file mode 100644
index 000000000..04f68b131
--- /dev/null
+++ b/tokens/external-delegate-token-master/anchor/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "compilerOptions": {
+ "types": ["jest", "node"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015", "dom", "es6", "es2017", "esnext.asynciterable"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true,
+ "resolveJsonModule": true,
+ "sourceMap": true,
+ "moduleResolution": "node",
+ "declaration": true,
+ "declarationMap": true,
+ "allowJs": true,
+ "strict": true,
+ "strictNullChecks": true,
+ "noImplicitAny": false,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["src/*"]
+ },
+ "outDir": "dist"
+ },
+ "include": ["tests/**/*", "programs/**/*", "jest.setup.js", "jest.config.js"],
+ "exclude": ["node_modules"]
+}
diff --git a/tokens/freeze-tokens/README.md b/tokens/freeze-tokens/README.md
deleted file mode 100644
index 8e2d8b511..000000000
--- a/tokens/freeze-tokens/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Freeze Tokens
-
-> Coming soon!
\ No newline at end of file
diff --git a/tokens/nft-minter/anchor/Anchor.toml b/tokens/nft-minter/anchor/Anchor.toml
index cc329fc62..505e661f1 100644
--- a/tokens/nft-minter/anchor/Anchor.toml
+++ b/tokens/nft-minter/anchor/Anchor.toml
@@ -1,20 +1,27 @@
+[toolchain]
+
[features]
-seeds = false
+resolution = true
skip-lint = false
+seeds = true
[programs.localnet]
-nft_minter = "3qHNM98iLTaQtwmj2NkViXnHZQjNBS5PTHT2AuPxHXYN"
+nft_minter = "52quezNUzc1Ej6Jh6L4bvtxPW8j6TEFHuLVAWiFvdnsc"
+
+[registry]
+url = "https://api.apr.dev/"
[provider]
cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
[test]
startup_wait = 5000
shutdown_wait = 2000
+upgradeable = false
[test.validator]
bind_address = "0.0.0.0"
diff --git a/tokens/nft-minter/anchor/Cargo.toml b/tokens/nft-minter/anchor/Cargo.toml
index 867aa296b..1c63ae30e 100644
--- a/tokens/nft-minter/anchor/Cargo.toml
+++ b/tokens/nft-minter/anchor/Cargo.toml
@@ -1,5 +1,6 @@
[workspace]
members = ["programs/*"]
+resolver = "2"
[profile.release]
overflow-checks = true
@@ -9,3 +10,4 @@ codegen-units = 1
opt-level = 3
incremental = false
codegen-units = 1
+
diff --git a/tokens/nft-minter/anchor/package.json b/tokens/nft-minter/anchor/package.json
index a50bb4200..80041bfab 100644
--- a/tokens/nft-minter/anchor/package.json
+++ b/tokens/nft-minter/anchor/package.json
@@ -1,16 +1,19 @@
{
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.1-beta.2",
- "@metaplex-foundation/mpl-token-metadata": "^2.5.2",
- "@solana/spl-token": "^0.3.8"
+ "scripts": {
+ "postinstall": "zx prepare.mjs"
},
"devDependencies": {
+ "@coral-xyz/anchor": "^0.30.0",
+ "@solana/spl-token": "^0.3.11",
"@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"
+ "typescript": "^4.3.5",
+ "zx": "^8.1.4"
}
}
diff --git a/tokens/nft-minter/anchor/pnpm-lock.yaml b/tokens/nft-minter/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..eb787b75b
--- /dev/null
+++ b/tokens/nft-minter/anchor/pnpm-lock.yaml
@@ -0,0 +1,1597 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.3.11
+ version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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.91.8(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
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+ zx:
+ specifier: ^8.1.4
+ version: 8.1.4
+
+packages:
+
+ '@babel/runtime@7.24.5':
+ resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==}
+ engines: {node: '>=6.9.0'}
+
+ '@coral-xyz/anchor@0.30.0':
+ resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.0':
+ resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==}
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==}
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
+
+ '@solana/codecs-strings@2.0.0-preview.2':
+ resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+
+ '@solana/codecs@2.0.0-preview.2':
+ resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==}
+
+ '@solana/errors@2.0.0-preview.2':
+ resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
+ hasBin: true
+
+ '@solana/options@2.0.0-preview.2':
+ resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==}
+
+ '@solana/spl-token-metadata@0.1.4':
+ resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/spl-type-length-value@0.1.0':
+ resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+ engines: {node: '>=16'}
+
+ '@solana/web3.js@1.91.8':
+ resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.0.0:
+ resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.0:
+ resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@7.11.0:
+ resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zx@8.1.4:
+ resolution: {integrity: sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==}
+ engines: {node: '>= 12.17.0'}
+ hasBin: true
+
+snapshots:
+
+ '@babel/runtime@7.24.5':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@noble/hashes': 1.4.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+ fastestsmallesttextencoderdecoder: 1.0.22
+
+ '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-data-structures': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/options': 2.0.0-preview.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-preview.2':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.0.0
+
+ '@solana/options@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+
+ '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - utf-8-validate
+
+ '@solana/spl-type-length-value@0.1.0':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.5
+ '@noble/curves': 1.4.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 7.11.0
+ superstruct: 0.14.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 20.12.11
+ optional: true
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 20.12.11
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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.91.8(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)
+ '@solana/web3.js': 1.91.8(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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.0.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@7.11.0:
+ dependencies:
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.14.2: {}
+
+ superstruct@0.15.5: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
+
+ zx@8.1.4:
+ optionalDependencies:
+ '@types/fs-extra': 11.0.4
+ '@types/node': 20.12.11
diff --git a/tokens/nft-minter/anchor/prepare.mjs b/tokens/nft-minter/anchor/prepare.mjs
new file mode 100644
index 000000000..7c5ec464b
--- /dev/null
+++ b/tokens/nft-minter/anchor/prepare.mjs
@@ -0,0 +1,34 @@
+#!/usr/bin/env zx
+
+import { mkdir, rm } from 'node:fs/promises';
+import { join } from 'node:path';
+import { $ } from 'zx';
+
+const programs = [
+ {
+ id: 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',
+ name: 'token_metadata.so',
+ },
+];
+
+const outputDir = 'tests/fixtures';
+const overwrite = true;
+
+try {
+ for (const program of programs) {
+ const { id, name } = program;
+ const outputFile = join(outputDir, name);
+ await $`solana config set -um`;
+
+ try {
+ await mkdir(outputDir, { recursive: true });
+ if (overwrite) await rm(outputFile, { force: true });
+ await $`solana program dump ${id} ${outputFile}`;
+ console.log(`Program ${id} dumped to ${outputFile}`);
+ } catch (error) {
+ console.error(`Error dumping ${id}: ${error.message}`);
+ }
+ }
+} catch (error) {
+ console.error(`Error preparing programs: ${error.message}`);
+}
diff --git a/tokens/nft-minter/anchor/programs/nft-minter/Cargo.toml b/tokens/nft-minter/anchor/programs/nft-minter/Cargo.toml
index afb8cf710..8b56ed631 100644
--- a/tokens/nft-minter/anchor/programs/nft-minter/Cargo.toml
+++ b/tokens/nft-minter/anchor/programs/nft-minter/Cargo.toml
@@ -9,13 +9,13 @@ crate-type = ["cdylib", "lib"]
name = "nft_minter"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
[dependencies]
-anchor-lang = { version = "0.28.0", features = ["init-if-needed"] }
-anchor-spl = { version = "0.28.0", features = ["metadata"] }
-mpl-token-metadata = { version = "1.13.1", features = ["no-entrypoint"] }
+anchor-lang = { version = "0.31.1", features = ["init-if-needed"] }
+anchor-spl = { version = "0.31.1", features = ["metadata"] }
diff --git a/tokens/nft-minter/anchor/programs/nft-minter/src/lib.rs b/tokens/nft-minter/anchor/programs/nft-minter/src/lib.rs
index a01c6355b..3bec59354 100644
--- a/tokens/nft-minter/anchor/programs/nft-minter/src/lib.rs
+++ b/tokens/nft-minter/anchor/programs/nft-minter/src/lib.rs
@@ -5,18 +5,15 @@ use {
anchor_spl::{
associated_token::AssociatedToken,
metadata::{
- create_master_edition_v3, create_metadata_accounts_v3, CreateMasterEditionV3,
- CreateMetadataAccountsV3, Metadata,
+ create_master_edition_v3, create_metadata_accounts_v3,
+ mpl_token_metadata::types::DataV2, CreateMasterEditionV3, CreateMetadataAccountsV3,
+ Metadata,
},
token::{mint_to, Mint, MintTo, Token, TokenAccount},
},
- mpl_token_metadata::{
- pda::{find_master_edition_account, find_metadata_account},
- state::DataV2,
- },
};
-declare_id!("3qHNM98iLTaQtwmj2NkViXnHZQjNBS5PTHT2AuPxHXYN");
+declare_id!("52quezNUzc1Ej6Jh6L4bvtxPW8j6TEFHuLVAWiFvdnsc");
#[program]
pub mod nft_minter {
@@ -105,17 +102,21 @@ pub struct CreateToken<'info> {
#[account(mut)]
pub payer: Signer<'info>,
- /// CHECK: Address validated using constraint
+ /// CHECK: Validate address by deriving pda
#[account(
mut,
- address=find_metadata_account(&mint_account.key()).0
+ seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref()],
+ bump,
+ seeds::program = token_metadata_program.key(),
)]
pub metadata_account: UncheckedAccount<'info>,
- /// CHECK: Address validated using constraint
+ /// CHECK: Validate address by deriving pda
#[account(
mut,
- address=find_master_edition_account(&mint_account.key()).0
+ seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref(), b"edition"],
+ bump,
+ seeds::program = token_metadata_program.key(),
)]
pub edition_account: UncheckedAccount<'info>,
diff --git a/tokens/nft-minter/anchor/tests/bankrun.test.ts b/tokens/nft-minter/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..5e54f32c4
--- /dev/null
+++ b/tokens/nft-minter/anchor/tests/bankrun.test.ts
@@ -0,0 +1,57 @@
+import fs from 'node:fs';
+import { describe, it } from 'node:test';
+import * as anchor from '@coral-xyz/anchor';
+import { getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { Keypair } from '@solana/web3.js';
+import { PublicKey } from '@solana/web3.js';
+import { BankrunProvider } from 'anchor-bankrun';
+import { startAnchor } from 'solana-bankrun';
+import type { NftMinter } from '../target/types/nft_minter';
+
+const IDL = require('../target/idl/nft_minter.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+const METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
+
+describe('NFT bankrun Minter', async () => {
+ const context = await startAnchor(
+ '',
+ [
+ { name: 'nft_minter', programId: PROGRAM_ID },
+ { name: 'token_metadata', programId: METADATA_PROGRAM_ID },
+ ],
+ [],
+ );
+ const provider = new BankrunProvider(context);
+ anchor.setProvider(provider);
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ // The metadata for our NFT
+ const metadata = {
+ name: 'Homer NFT',
+ symbol: 'HOMR',
+ uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json',
+ };
+
+ it('Create an NFT!', async () => {
+ // Generate a keypair to use as the address of our mint account
+ const mintKeypair = new Keypair();
+
+ // Derive the associated token address account for the mint and payer.
+ const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, payer.publicKey);
+
+ const transactionSignature = await program.methods
+ .mintNft(metadata.name, metadata.symbol, metadata.uri)
+ .accounts({
+ payer: payer.publicKey,
+ mintAccount: mintKeypair.publicKey,
+ associatedTokenAccount: associatedTokenAccountAddress,
+ })
+ .signers([mintKeypair])
+ .rpc({ skipPreflight: true });
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ console.log(` Transaction Signature: ${transactionSignature}`);
+ });
+});
diff --git a/tokens/nft-minter/anchor/tests/test.ts b/tokens/nft-minter/anchor/tests/test.ts
index 3f150a02b..527cb94f7 100644
--- a/tokens/nft-minter/anchor/tests/test.ts
+++ b/tokens/nft-minter/anchor/tests/test.ts
@@ -1,19 +1,9 @@
-import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
-import * as anchor from "@coral-xyz/anchor";
-import { NftMinter } from "../target/types/nft_minter";
-import {
- Keypair,
- PublicKey,
- SYSVAR_RENT_PUBKEY,
- SystemProgram,
-} from "@solana/web3.js";
-import {
- getAssociatedTokenAddressSync,
- ASSOCIATED_TOKEN_PROGRAM_ID,
- TOKEN_PROGRAM_ID,
-} from "@solana/spl-token";
+import * as anchor from '@coral-xyz/anchor';
+import { getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { Keypair } from '@solana/web3.js';
+import type { NftMinter } from '../target/types/nft_minter';
-describe("NFT Minter", () => {
+describe('NFT Minter', () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const payer = provider.wallet as anchor.Wallet;
@@ -21,60 +11,29 @@ describe("NFT Minter", () => {
// The metadata for our NFT
const metadata = {
- name: "Homer NFT",
- symbol: "HOMR",
- uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json",
+ name: 'Homer NFT',
+ symbol: 'HOMR',
+ uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json',
};
- it("Create an NFT!", async () => {
+ it('Create an NFT!', async () => {
// Generate a keypair to use as the address of our mint account
const mintKeypair = new Keypair();
- // Derive the PDA of the metadata account for the mint.
- const [metadataAddress] = PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- );
-
- // Derive the PDA of the master edition account for the mint.
- const [editionAddress] = PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- Buffer.from("edition"),
- ],
- TOKEN_METADATA_PROGRAM_ID
- );
-
// Derive the associated token address account for the mint and payer.
- const associatedTokenAccountAddress = getAssociatedTokenAddressSync(
- mintKeypair.publicKey,
- payer.publicKey
- );
+ const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, payer.publicKey);
const transactionSignature = await program.methods
.mintNft(metadata.name, metadata.symbol, metadata.uri)
.accounts({
payer: payer.publicKey,
- metadataAccount: metadataAddress,
- editionAccount: editionAddress,
mintAccount: mintKeypair.publicKey,
associatedTokenAccount: associatedTokenAccountAddress,
- tokenProgram: TOKEN_PROGRAM_ID,
- associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
- tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
- systemProgram: SystemProgram.programId,
- rent: SYSVAR_RENT_PUBKEY,
})
.signers([mintKeypair])
.rpc({ skipPreflight: true });
- console.log("Success!");
+ console.log('Success!');
console.log(` Mint Address: ${mintKeypair.publicKey}`);
console.log(` Transaction Signature: ${transactionSignature}`);
});
diff --git a/tokens/nft-minter/native/cicd.sh b/tokens/nft-minter/native/cicd.sh
index 3ec707cb8..8a16e0387 100644
--- a/tokens/nft-minter/native/cicd.sh
+++ b/tokens/nft-minter/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml
-solana program deploy ./program/target/deploy/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml
+solana program deploy ./program/target/deploy/program.so
diff --git a/tokens/nft-minter/native/package.json b/tokens/nft-minter/native/package.json
index 3adfa05b1..654051c13 100644
--- a/tokens/nft-minter/native/package.json
+++ b/tokens/nft-minter/native/package.json
@@ -1,6 +1,6 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
},
"dependencies": {
"@metaplex-foundation/mpl-token-metadata": "^2.5.2",
diff --git a/tokens/nft-minter/native/program/Cargo.toml b/tokens/nft-minter/native/program/Cargo.toml
index 551217948..d44fa35f6 100644
--- a/tokens/nft-minter/native/program/Cargo.toml
+++ b/tokens/nft-minter/native/program/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
borsh = "0.9.3"
borsh-derive = "0.9.1"
-solana-program = "1.16.10"
+solana-program = "2.0"
spl-token = { version="4.0.0", features = [ "no-entrypoint" ] }
spl-associated-token-account = { version="2.0.0", features = [ "no-entrypoint" ] }
mpl-token-metadata = { version="1.11" }
diff --git a/tokens/nft-minter/native/tests/instructions.ts b/tokens/nft-minter/native/tests/instructions.ts
index 9a2888914..39ccae97b 100644
--- a/tokens/nft-minter/native/tests/instructions.ts
+++ b/tokens/nft-minter/native/tests/instructions.ts
@@ -1,50 +1,49 @@
-import * as borsh from "borsh";
-
+import * as borsh from 'borsh';
class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
-};
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+}
export enum NftMinterInstruction {
- Create,
- Mint,
+ Create = 0,
+ Mint = 1,
}
export class CreateTokenArgs extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this));
- }
-};
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this));
+ }
+}
const CreateTokenArgsSchema = new Map([
- [
- CreateTokenArgs, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ['nft_title', 'string'],
- ['nft_symbol', 'string'],
- ['nft_uri', 'string'],
- ]
- }
- ]
+ [
+ CreateTokenArgs,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['nft_title', 'string'],
+ ['nft_symbol', 'string'],
+ ['nft_uri', 'string'],
+ ],
+ },
+ ],
]);
export class MintToArgs extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(MintToArgsSchema, this));
- }
-};
+ toBuffer() {
+ return Buffer.from(borsh.serialize(MintToArgsSchema, this));
+ }
+}
const MintToArgsSchema = new Map([
- [
- MintToArgs, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ]
- }
- ]
-]);
\ No newline at end of file
+ [
+ MintToArgs,
+ {
+ kind: 'struct',
+ fields: [['instruction', 'u8']],
+ },
+ ],
+]);
diff --git a/tokens/nft-minter/native/tests/test.ts b/tokens/nft-minter/native/tests/test.ts
index cfb76f043..d957d4f4e 100644
--- a/tokens/nft-minter/native/tests/test.ts
+++ b/tokens/nft-minter/native/tests/test.ts
@@ -1,145 +1,120 @@
-import {
- PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID
-} from '@metaplex-foundation/mpl-token-metadata';
+import { Buffer } from 'node:buffer';
+import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata';
+import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddress } from '@solana/spl-token';
import {
- Connection,
- Keypair,
- PublicKey,
- SystemProgram,
- SYSVAR_RENT_PUBKEY,
- TransactionInstruction,
- Transaction,
- sendAndConfirmTransaction,
+ Connection,
+ Keypair,
+ PublicKey,
+ SYSVAR_RENT_PUBKEY,
+ SystemProgram,
+ Transaction,
+ TransactionInstruction,
+ sendAndConfirmTransaction,
} from '@solana/web3.js';
-import {
- ASSOCIATED_TOKEN_PROGRAM_ID,
- getAssociatedTokenAddress,
- TOKEN_PROGRAM_ID,
-} from '@solana/spl-token';
-import { Buffer } from "buffer";
-import {
- CreateTokenArgs,
- MintToArgs,
- NftMinterInstruction,
-} from './instructions';
-
+import { CreateTokenArgs, MintToArgs, NftMinterInstruction } from './instructions';
function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
-
-
-describe("NFT Minter", async () => {
+ return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8'))));
+}
+
+describe('NFT Minter', async () => {
+ // const connection = new Connection(`http://localhost:8899`, 'confirmed');
+ const connection = new Connection('https://api.devnet.solana.com/', 'confirmed');
+ const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`);
+ const program = createKeypairFromFile('./program/target/deploy/program-keypair.json');
+
+ const mintKeypair: Keypair = Keypair.generate();
+
+ it('Create an NFT!', async () => {
+ const metadataAddress = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+
+ const instructionData = new CreateTokenArgs({
+ instruction: NftMinterInstruction.Create,
+ nft_title: 'Homer NFT',
+ nft_symbol: 'HOMR',
+ nft_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json',
+ });
- // const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const connection = new Connection(`https://api.devnet.solana.com/`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/deploy/program-keypair.json');
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
+ { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
+ { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
+ {
+ pubkey: TOKEN_METADATA_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ }, // Token metadata program
+ ],
+ programId: program.publicKey,
+ data: instructionData.toBuffer(),
+ });
- const mintKeypair: Keypair = Keypair.generate();
+ const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, mintKeypair]);
- it("Create an NFT!", async () => {
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ console.log(` Tx Signature: ${sx}`);
+ });
- const metadataAddress = (PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- ))[0];
-
- const instructionData = new CreateTokenArgs({
- instruction: NftMinterInstruction.Create,
- nft_title: "Homer NFT",
- nft_symbol: "HOMR",
- nft_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json",
- });
+ it('Mint the NFT to your wallet!', async () => {
+ const metadataAddress = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
- let ix = new TransactionInstruction({
- keys: [
- { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
- { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
- { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
- { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
- { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
- { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
- { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
- { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program
- ],
- programId: program.publicKey,
- data: instructionData.toBuffer(),
- });
+ const editionAddress = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer(), Buffer.from('edition')],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
- const sx = await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, mintKeypair]
- );
+ const associatedTokenAccountAddress = await getAssociatedTokenAddress(mintKeypair.publicKey, payer.publicKey);
- console.log("Success!");
- console.log(` Mint Address: ${mintKeypair.publicKey}`);
- console.log(` Tx Signature: ${sx}`);
+ const instructionData = new MintToArgs({
+ instruction: NftMinterInstruction.Mint,
});
- it("Mint the NFT to your wallet!", async () => {
-
- const metadataAddress = (PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- ))[0];
-
- const editionAddress = (PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- Buffer.from("edition"),
- ],
- TOKEN_METADATA_PROGRAM_ID
- ))[0];
-
- const associatedTokenAccountAddress = await getAssociatedTokenAddress(
- mintKeypair.publicKey,
- payer.publicKey,
- );
-
- const instructionData = new MintToArgs({
- instruction: NftMinterInstruction.Mint,
- });
-
- let ix = new TransactionInstruction({
- keys: [
- { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account
- { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
- { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account
- { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
- { pubkey: associatedTokenAccountAddress, isSigner: false, isWritable: true }, // ATA
- { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
- { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
- { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
- { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
- { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Associated token program
- { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program
- ],
- programId: program.publicKey,
- data: instructionData.toBuffer(),
- });
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account
+ { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
+ { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account
+ { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
+ {
+ pubkey: associatedTokenAccountAddress,
+ isSigner: false,
+ isWritable: true,
+ }, // ATA
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
+ {
+ pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ }, // Associated token program
+ {
+ pubkey: TOKEN_METADATA_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ }, // Token metadata program
+ ],
+ programId: program.publicKey,
+ data: instructionData.toBuffer(),
+ });
- const sx = await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer],
- );
+ const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]);
- console.log("Success!");
- console.log(` ATA Address: ${associatedTokenAccountAddress}`);
- console.log(` Tx Signature: ${sx}`);
+ console.log('Success!');
+ console.log(` ATA Address: ${associatedTokenAccountAddress}`);
+ console.log(` Tx Signature: ${sx}`);
});
-});
\ No newline at end of file
+});
diff --git a/tokens/nft-minter/native/tsconfig.json b/tokens/nft-minter/native/tsconfig.json
index b7d51edac..cd5d2e3d0 100644
--- a/tokens/nft-minter/native/tsconfig.json
+++ b/tokens/nft-minter/native/tsconfig.json
@@ -5,6 +5,6 @@
"lib": ["es2015"],
"module": "commonjs",
"target": "es6",
- "esModuleInterop": true,
+ "esModuleInterop": true
}
}
diff --git a/tokens/nft-minter/solang/.gitignore b/tokens/nft-minter/solang/.gitignore
deleted file mode 100644
index 8d401163f..000000000
--- a/tokens/nft-minter/solang/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-
-.anchor
-.DS_Store
-target
-**/*.rs.bk
-node_modules
-test-ledger
-.yarn
diff --git a/tokens/nft-minter/solang/Anchor.toml b/tokens/nft-minter/solang/Anchor.toml
deleted file mode 100644
index e272fa99b..000000000
--- a/tokens/nft-minter/solang/Anchor.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-nft_minter = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "Localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
-
-[test.validator]
-url = "https://api.mainnet-beta.solana.com/"
-
-[[test.validator.clone]]
-address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
\ No newline at end of file
diff --git a/tokens/nft-minter/solang/libraries/mpl_metadata.sol b/tokens/nft-minter/solang/libraries/mpl_metadata.sol
deleted file mode 100644
index 7b030a3a7..000000000
--- a/tokens/nft-minter/solang/libraries/mpl_metadata.sol
+++ /dev/null
@@ -1,134 +0,0 @@
-import 'solana';
-
-// Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/instruction/metadata.rs#L449
-// Solidity does not support Rust Option<> type, so we need to handle it manually
-// Requires creating a struct for each combination of Option<> types
-// If bool for Option<> type is false, comment out the corresponding struct field otherwise instruction fails with "invalid account data"
-// TODO: figure out better way to handle Option<> types
-library MplMetadata {
- address constant metadataProgramId = address"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s";
- address constant systemAddress = address"11111111111111111111111111111111";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/instruction/metadata.rs#L31
- struct CreateMetadataAccountArgsV3 {
- DataV2 data;
- bool isMutable;
- bool collectionDetailsPresent; // To handle Rust Option<> in Solidity
- // CollectionDetails collectionDetails;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/state/data.rs#L22
- struct DataV2 {
- string name;
- string symbol;
- string uri;
- uint16 sellerFeeBasisPoints;
- bool creatorsPresent; // To handle Rust Option<> in Solidity
- // Creator[] creators;
- bool collectionPresent; // To handle Rust Option<> in Solidity
- // Collection collection;
- bool usesPresent; // To handle Rust Option<> in Solidity
- // Uses uses;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L10
- struct Creator {
- address creatorAddress;
- bool verified;
- uint8 share;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L66
- struct Collection {
- bool verified;
- address key;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/state/collection.rs#L57
- struct CollectionDetails {
- CollectionDetailsType detailType;
- uint64 size;
- }
- enum CollectionDetailsType {
- V1
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L43
- struct Uses {
- UseMethod useMethod;
- uint64 remaining;
- uint64 total;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L35
- enum UseMethod {
- Burn,
- Multiple,
- Single
- }
-
- function create_metadata_account(
- address metadata,
- address mint,
- address mintAuthority,
- address payer,
- address updateAuthority,
- string name,
- string symbol,
- string uri
- ) public {
- // // Example of how to add a Creator[] array to the DataV2 struct
- // Creator[] memory creators = new Creator[](1);
- // creators[0] = Creator({
- // creatorAddress: payer,
- // verified: false,
- // share: 100
- // });
-
- DataV2 data = DataV2({
- name: name,
- symbol: symbol,
- uri: uri,
- sellerFeeBasisPoints: 0,
- creatorsPresent: false,
- // creators: creators,
- collectionPresent: false,
- // collection: Collection({
- // verified: false,
- // key: address(0)
- // }),
- usesPresent: false
- // uses: Uses({
- // useMethod: UseMethod.Burn,
- // remaining: 0,
- // total: 0
- // })
- });
-
- CreateMetadataAccountArgsV3 args = CreateMetadataAccountArgsV3({
- data: data,
- isMutable: true,
- collectionDetailsPresent: false
- // collectionDetails: CollectionDetails({
- // detailType: CollectionDetailsType.V1,
- // size: 0
- // })
- });
-
- AccountMeta[7] metas = [
- AccountMeta({pubkey: metadata, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: mintAuthority, is_writable: false, is_signer: true}),
- AccountMeta({pubkey: payer, is_writable: true, is_signer: true}),
- AccountMeta({pubkey: updateAuthority, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: systemAddress, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: rentAddress, is_writable: false, is_signer: false})
- ];
-
- bytes1 discriminator = 33;
- bytes instructionData = abi.encode(discriminator, args);
-
- metadataProgramId.call{accounts: metas}(instructionData);
- }
-}
diff --git a/tokens/nft-minter/solang/libraries/spl_token.sol b/tokens/nft-minter/solang/libraries/spl_token.sol
deleted file mode 100644
index 9316305af..000000000
--- a/tokens/nft-minter/solang/libraries/spl_token.sol
+++ /dev/null
@@ -1,387 +0,0 @@
-import 'solana';
-import 'system_instruction.sol';
-
-library SplToken {
- address constant tokenProgramId = address"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
- address constant associatedTokenProgramId = address"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
- enum TokenInstruction {
- InitializeMint, // 0
- InitializeAccount, // 1
- InitializeMultisig, // 2
- Transfer, // 3
- Approve, // 4
- Revoke, // 5
- SetAuthority, // 6
- MintTo, // 7
- Burn, // 8
- CloseAccount, // 9
- FreezeAccount, // 10
- ThawAccount, // 11
- TransferChecked, // 12
- ApproveChecked, // 13
- MintToChecked, // 14
- BurnChecked, // 15
- InitializeAccount2, // 16
- SyncNative, // 17
- InitializeAccount3, // 18
- InitializeMultisig2, // 19
- InitializeMint2, // 20
- GetAccountDataSize, // 21
- InitializeImmutableOwner, // 22
- AmountToUiAmount, // 23
- UiAmountToAmount, // 24
- InitializeMintCloseAuthority, // 25
- TransferFeeExtension, // 26
- ConfidentialTransferExtension, // 27
- DefaultAccountStateExtension, // 28
- Reallocate, // 29
- MemoTransferExtension, // 30
- CreateNativeMint // 31
- }
-
- /// Initialize a new token account.
- ///
- /// @param tokenAccount the public key of the token account to initialize
- /// @param mint the public key of the mint account for this new token account
- /// @param owner the public key of the owner of this new token account
- function initialize_account(address tokenAccount, address mint, address owner) internal{
- bytes instr = new bytes(1);
-
- instr[0] = uint8(TokenInstruction.InitializeAccount);
- AccountMeta[4] metas = [
- AccountMeta({pubkey: tokenAccount, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: rentAddress, is_writable: false, is_signer: false})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Initialize a new associated token account.
- ///
- /// @param payer the public key of the payer to create the associated token account
- /// @param tokenAccount the public key of the token account to initialize
- /// @param mint the public key of the mint account for this new token account
- /// @param owner the public key of the owner of this new token account
- function create_associated_token_account(address payer, address tokenAccount, address mint, address owner) internal {
- AccountMeta[6] metas = [
- AccountMeta({pubkey: payer, is_writable: true, is_signer: true}),
- AccountMeta({pubkey: tokenAccount, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: SystemInstruction.systemAddress, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: SplToken.tokenProgramId, is_writable: false, is_signer: false})
- ];
-
- bytes instructionData = abi.encode((0));
- associatedTokenProgramId.call{accounts: metas}(instructionData);
- }
-
- // Initialize mint instruction data
- struct InitializeMintInstruction {
- uint8 instruction;
- uint8 decimals;
- address mintAuthority;
- uint8 freezeAuthorityOption;
- address freezeAuthority;
- }
-
- /// Initialize a new mint account.
- ///
- /// @param mint the public key of the mint account to initialize
- /// @param mintAuthority the public key of the mint authority
- /// @param freezeAuthority the public key of the freeze authority
- /// @param decimals the decimals of the mint
- function initialize_mint(address mint, address mintAuthority, address freezeAuthority, uint8 decimals) internal {
- InitializeMintInstruction instr = InitializeMintInstruction({
- instruction: 20,
- decimals: decimals,
- mintAuthority: mintAuthority,
- freezeAuthorityOption: 1,
- freezeAuthority: freezeAuthority
- });
-
- AccountMeta[1] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Create and initialize a new mint account in one instruction
- ///
- /// @param payer the public key of the account paying to create the mint account
- /// @param mint the public key of the mint account to initialize
- /// @param mintAuthority the public key of the mint authority
- /// @param freezeAuthority the public key of the freeze authority
- /// @param decimals the decimals of the mint
- function create_mint(address payer, address mint, address mintAuthority, address freezeAuthority, uint8 decimals) internal {
- // Invoke System Program to create a new account for the mint account
- // Program owner is set to the Token program
- SystemInstruction.create_account(
- payer, // lamports sent from this account (payer)
- mint, // lamports sent to this account (account to be created)
- 1461600, // lamport amount (minimum lamports for mint account)
- 82, // space required for the account (mint account)
- SplToken.tokenProgramId // new program owner
- );
-
- InitializeMintInstruction instr = InitializeMintInstruction({
- instruction: 20,
- decimals: decimals,
- mintAuthority: mintAuthority,
- freezeAuthorityOption: 1,
- freezeAuthority: freezeAuthority
- });
-
- AccountMeta[1] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Mint new tokens. The transaction should be signed by the mint authority keypair
- ///
- /// @param mint the account of the mint
- /// @param account the token account where the minted tokens should go
- /// @param authority the public key of the mint authority
- /// @param amount the amount of tokens to mint
- function mint_to(address mint, address account, address authority, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.MintTo);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: authority, is_writable: true, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Transfer @amount token from @from to @to. The transaction should be signed by the owner
- /// keypair of the from account.
- ///
- /// @param from the account to transfer tokens from
- /// @param to the account to transfer tokens to
- /// @param owner the publickey of the from account owner keypair
- /// @param amount the amount to transfer
- function transfer(address from, address to, address owner, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.Transfer);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: to, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: true, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Burn @amount tokens in account. This transaction should be signed by the owner.
- ///
- /// @param account the acount for which tokens should be burned
- /// @param mint the mint for this token
- /// @param owner the publickey of the account owner keypair
- /// @param amount the amount to transfer
- function burn(address account, address mint, address owner, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.Burn);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: true, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Approve an amount to a delegate. This transaction should be signed by the owner
- ///
- /// @param account the account for which a delegate should be approved
- /// @param delegate the delegate publickey
- /// @param owner the publickey of the account owner keypair
- /// @param amount the amount to approve
- function approve(address account, address delegate, address owner, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.Approve);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: delegate, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Revoke a previously approved delegate. This transaction should be signed by the owner. After
- /// this transaction, no delgate is approved for any amount.
- ///
- /// @param account the account for which a delegate should be approved
- /// @param owner the publickey of the account owner keypair
- function revoke(address account, address owner) internal {
- bytes instr = new bytes(1);
-
- instr[0] = uint8(TokenInstruction.Revoke);
-
- AccountMeta[2] metas = [
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Get the total supply for the mint, i.e. the total amount in circulation
- /// @param mint the mint for this token
- function total_supply(address mint) internal view returns (uint64) {
- AccountInfo account = get_account_info(mint);
-
- return account.data.readUint64LE(36);
- }
-
- /// Get the balance for an account.
- ///
- /// @param account the account for which we want to know a balance
- function get_balance(address account) internal view returns (uint64) {
- AccountInfo ai = get_account_info(account);
-
- return ai.data.readUint64LE(64);
- }
-
- /// Get the account info for an account. This walks the transaction account infos
- /// and find the account info, or the transaction fails.
- ///
- /// @param account the account for which we want to have the acount info.
- function get_account_info(address account) internal view returns (AccountInfo) {
- for (uint64 i = 0; i < tx.accounts.length; i++) {
- AccountInfo ai = tx.accounts[i];
- if (ai.key == account) {
- return ai;
- }
- }
-
- revert("account missing");
- }
-
- /// This enum represents the state of a token account
- enum AccountState {
- Uninitialized,
- Initialized,
- Frozen
- }
-
- /// This struct is the return of 'get_token_account_data'
- struct TokenAccountData {
- address mintAccount;
- address owner;
- uint64 balance;
- bool delegate_present;
- address delegate;
- AccountState state;
- bool is_native_present;
- uint64 is_native;
- uint64 delegated_amount;
- bool close_authority_present;
- address close_authority;
- }
-
- /// Fetch the owner, mint account and balance for an associated token account.
- ///
- /// @param tokenAccount The token account
- /// @return struct TokenAccountData
- function get_token_account_data(address tokenAccount) public view returns (TokenAccountData) {
- AccountInfo ai = get_account_info(tokenAccount);
-
- TokenAccountData data = TokenAccountData(
- {
- mintAccount: ai.data.readAddress(0),
- owner: ai.data.readAddress(32),
- balance: ai.data.readUint64LE(64),
- delegate_present: ai.data.readUint32LE(72) > 0,
- delegate: ai.data.readAddress(76),
- state: AccountState(ai.data[108]),
- is_native_present: ai.data.readUint32LE(109) > 0,
- is_native: ai.data.readUint64LE(113),
- delegated_amount: ai.data.readUint64LE(121),
- close_authority_present: ai.data.readUint32LE(129) > 10,
- close_authority: ai.data.readAddress(133)
- }
- );
-
- return data;
- }
-
- // This struct is the return of 'get_mint_account_data'
- struct MintAccountData {
- bool authority_present;
- address mint_authority;
- uint64 supply;
- uint8 decimals;
- bool is_initialized;
- bool freeze_authority_present;
- address freeze_authority;
- }
-
- /// Retrieve the information saved in a mint account
- ///
- /// @param mintAccount the account whose information we want to retrive
- /// @return the MintAccountData struct
- function get_mint_account_data(address mintAccount) public view returns (MintAccountData) {
- AccountInfo ai = get_account_info(mintAccount);
-
- uint32 authority_present = ai.data.readUint32LE(0);
- uint32 freeze_authority_present = ai.data.readUint32LE(46);
- MintAccountData data = MintAccountData( {
- authority_present: authority_present > 0,
- mint_authority: ai.data.readAddress(4),
- supply: ai.data.readUint64LE(36),
- decimals: uint8(ai.data[44]),
- is_initialized: ai.data[45] > 0,
- freeze_authority_present: freeze_authority_present > 0,
- freeze_authority: ai.data.readAddress(50)
- });
-
- return data;
- }
-
- // A mint account has an authority, whose type is one of the members of this struct.
- enum AuthorityType {
- MintTokens,
- FreezeAccount,
- AccountOwner,
- CloseAccount
- }
-
- /// Remove the mint authority from a mint account
- ///
- /// @param mintAccount the public key for the mint account
- /// @param mintAuthority the public for the mint authority
- function remove_mint_authority(address mintAccount, address mintAuthority) public {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: mintAccount, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: mintAuthority, is_signer: true, is_writable: false})
- ];
-
- bytes data = new bytes(9);
- data[0] = uint8(TokenInstruction.SetAuthority);
- data[1] = uint8(AuthorityType.MintTokens);
- data[3] = 0;
-
- tokenProgramId.call{accounts: metas}(data);
- }
-}
diff --git a/tokens/nft-minter/solang/libraries/system_instruction.sol b/tokens/nft-minter/solang/libraries/system_instruction.sol
deleted file mode 100644
index 0ba370c8c..000000000
--- a/tokens/nft-minter/solang/libraries/system_instruction.sol
+++ /dev/null
@@ -1,300 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-// Disclaimer: This library provides a bridge for Solidity to interact with Solana's system instructions. Although it is production ready,
-// it has not been audited for security, so use it at your own risk.
-
-import 'solana';
-
-library SystemInstruction {
- address constant systemAddress = address"11111111111111111111111111111111";
- address constant recentBlockHashes = address"SysvarRecentB1ockHashes11111111111111111111";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
- uint64 constant state_size = 80;
-
- enum Instruction {
- CreateAccount,
- Assign,
- Transfer,
- CreateAccountWithSeed,
- AdvanceNounceAccount,
- WithdrawNonceAccount,
- InitializeNonceAccount,
- AuthorizeNonceAccount,
- Allocate,
- AllocateWithSeed,
- AssignWithSeed,
- TransferWithSeed,
- UpgradeNonceAccount // This is not available on Solana v1.9.15
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to public key for the account to be created
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account(address from, address to, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.CreateAccount), lamports, space, owner);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to the public key for the account to be created. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'to' address using the seed
- /// @param seed the string utilized to created the 'to' public key
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account_with_seed(address from, address to, address base, string seed, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- uint32 buffer_size = 92 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.CreateAccountWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- uint32 offset = seed.length + 44;
- bincode.writeUint64LE(lamports, offset);
- offset += 8;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Assign account to a program (owner)
- ///
- /// @param pubkey the public key for the account whose owner is going to be reassigned
- /// @param owner the public key for the new account owner
- function assign(address pubkey, address owner) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pubkey, is_signer: true, is_writable: true})
- ];
- bytes bincode = abi.encode(uint32(Instruction.Assign), owner);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Assign account to a program (owner) based on a seed
- ///
- /// @param addr the public key for the account whose owner is going to be reassigned. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to created the 'addr' public key
- /// @param owner the public key for the new program owner
- function assign_with_seed(address addr, address base, string seed, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
-
- uint32 buffer_size = 76 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.AssignWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- bincode.writeAddress(owner, 44 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports between accounts
- ///
- /// @param from public key for the funding account
- /// @param to public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer(address from, address to, uint64 lamports) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Transfer), lamports);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports from a derived address
- ///
- /// @param from_pubkey The funding account public key. It should match create_with_seed(from_base, seed, from_owner)
- /// @param from_base the base address that derived the 'from_pubkey' key using the seed
- /// @param seed the string utilized to create the 'from_pubkey' public key
- /// @param from_owner owner to use to derive the funding account address
- /// @param to_pubkey the public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer_with_seed(address from_pubkey, address from_base, string seed, address from_owner, address to_pubkey, uint64 lamports) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: from_base, is_signer: true, is_writable: false}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true})
- ];
-
- uint32 buffer_size = seed.length + 52;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.TransferWithSeed), 0);
- bincode.writeUint64LE(lamports, 4);
- bincode.writeUint64LE(seed.length, 12);
- bincode.writeString(seed, 20);
- bincode.writeAddress(from_owner, 20 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Allocate space in a (possibly new) account without funding
- ///
- /// @param pub_key account for which to allocate space
- /// @param space number of bytes of memory to allocate
- function allocate(address pub_key, uint64 space) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pub_key, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Allocate), space);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Allocate space for an assign an account at an address derived from a base public key and a seed
- ///
- /// @param addr account for which to allocate space. It should match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param space number of bytes of memory to allocate
- /// @param owner owner to use to derive the 'addr' account address
- function allocate_with_seed(address addr, address base, string seed, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = new bytes(seed.length + 84);
- bincode.writeUint32LE(uint32(Instruction.AllocateWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(seed.length, 36);
- bincode.writeString(seed, 44);
- uint32 offset = 44 + seed.length;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new nonce account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the account to be created. The public key must match create_with_seed(base, seed, systemAddress)
- /// @param base the base address that derived the 'nonce' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account_with_seed(address from, address nonce, address base, string seed, address authority, uint64 lamports) internal {
- create_account_with_seed(from, nonce, base, seed, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the nonce account to be created
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account(address from, address nonce, address authority, uint64 lamports) internal {
- create_account(from, nonce, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Consumes a stored nonce, replacing it with a successor
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the publick key for the entity authorized to execute instructins on the account
- function advance_nonce_account(address nonce_pubkey, address authorized_pubkey) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AdvanceNounceAccount));
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Withdraw funds from a nonce account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param to_pubkey the recipient account
- /// @param lamports the number of lamports to withdraw
- function withdraw_nonce_account(address nonce_pubkey, address authorized_pubkey, address to_pubkey, uint64 lamports) internal {
- AccountMeta[5] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.WithdrawNonceAccount), lamports);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Change the entity authorized to execute nonce instructions on the account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param new_authority
- function authorize_nonce_account(address nonce_pubkey, address authorized_pubkey, address new_authority) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AuthorizeNonceAccount), new_authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// One-time idempotent upgrade of legacy nonce version in order to bump them out of chain domain.
- ///
- /// @param nonce the public key for the nonce account
- // This is not available on Solana v1.9.15
- function upgrade_nonce_account(address nonce) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.UpgradeNonceAccount));
- systemAddress.call{accounts: meta}(bincode);
- }
-}
diff --git a/tokens/nft-minter/solang/package.json b/tokens/nft-minter/solang/package.json
deleted file mode 100644
index 7fa094e46..000000000
--- a/tokens/nft-minter/solang/package.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0",
- "@metaplex-foundation/js": "^0.19.4",
- "@project-serum/anchor": "^0.26.0",
- "@solana/spl-token": "^0.3.8"
- },
- "devDependencies": {
- "@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"
- }
-}
diff --git a/tokens/nft-minter/solang/solidity/nft-minter.sol b/tokens/nft-minter/solang/solidity/nft-minter.sol
deleted file mode 100644
index 888829cfb..000000000
--- a/tokens/nft-minter/solang/solidity/nft-minter.sol
+++ /dev/null
@@ -1,69 +0,0 @@
-
-import "../libraries/spl_token.sol";
-import "../libraries/mpl_metadata.sol";
-
-@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
-contract nft_minter {
-
- @payer(payer)
- constructor() {}
-
- function createTokenMint(
- address payer, // payer account
- address mint, // mint account to be created
- address mintAuthority, // mint authority for the mint account
- address freezeAuthority, // freeze authority for the mint account
- address metadata, // metadata account to be created
- uint8 decimals, // decimals for the mint account
- string name, // name for the metadata account
- string symbol, // symbol for the metadata account
- string uri // uri for the metadata account
- ) public {
- // Invoke System Program to create a new account for the mint account and,
- // Invoke Token Program to initialize the mint account
- // Set mint authority, freeze authority, and decimals for the mint account
- SplToken.create_mint(
- payer, // payer account
- mint, // mint account
- mintAuthority, // mint authority
- freezeAuthority, // freeze authority
- decimals // decimals
- );
-
- // Invoke Metadata Program to create a new account for the metadata account
- MplMetadata.create_metadata_account(
- metadata, // metadata account
- mint, // mint account
- mintAuthority, // mint authority
- payer, // payer
- payer, // update authority (of the metadata account)
- name, // name
- symbol, // symbol
- uri // uri (off-chain metadata json)
- );
- }
-
- function mintTo(address payer, address tokenAccount, address mint, address owner) public {
- // Create an associated token account for the owner to receive the minted token
- SplToken.create_associated_token_account(
- payer, // payer account
- tokenAccount, // associated token account address
- mint, // mint account
- owner // owner account
- );
-
- // Mint 1 token to the associated token account
- SplToken.mint_to(
- mint, // mint account
- tokenAccount, // token account
- payer, // mint authority
- 1 // amount
- );
-
- // Remove mint authority from mint account
- SplToken.remove_mint_authority(
- mint, // mint
- payer // mint authority
- );
- }
-}
diff --git a/tokens/nft-minter/solang/tests/nft-minter.ts b/tokens/nft-minter/solang/tests/nft-minter.ts
deleted file mode 100644
index 76d5605ff..000000000
--- a/tokens/nft-minter/solang/tests/nft-minter.ts
+++ /dev/null
@@ -1,123 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { NftMinter } from "../target/types/nft_minter";
-import { PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY } from "@solana/web3.js";
-import { Metaplex } from "@metaplex-foundation/js";
-import {
- ASSOCIATED_TOKEN_PROGRAM_ID,
- getAssociatedTokenAddressSync,
- TOKEN_PROGRAM_ID,
-} from "@solana/spl-token";
-
-describe("nft-minter", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- // Generate a new keypair for the data account for the program
- const dataAccount = anchor.web3.Keypair.generate();
-
- // Generate a mint keypair
- const mintKeypair = anchor.web3.Keypair.generate();
- const wallet = provider.wallet;
- const connection = provider.connection;
-
- const program = anchor.workspace.NftMinter as Program;
-
- // Metadata for the NFT
- const nftTitle = "Homer NFT";
- const nftSymbol = "HOMR";
- const nftUri =
- "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json";
-
- it("Is initialized!", async () => {
- // Initialize data account for the program, which is required by Solang
- const tx = await program.methods
- .new()
- .accounts({ dataAccount: dataAccount.publicKey })
- .signers([dataAccount])
- .rpc();
- console.log("Your transaction signature", tx);
- });
-
- it("Create an NFT!", async () => {
- // Get the metadata address for the mint
- const metaplex = Metaplex.make(connection);
- const metadataAddress = await metaplex
- .nfts()
- .pdas()
- .metadata({ mint: mintKeypair.publicKey });
-
- const tx = await program.methods
- .createTokenMint(
- wallet.publicKey, // payer
- mintKeypair.publicKey, // mint
- wallet.publicKey, // mint authority
- wallet.publicKey, // freeze authority
- metadataAddress, // metadata address
- 0, // 0 decimals for NFT
- nftTitle, // NFT name
- nftSymbol, // NFT symbol
- nftUri // NFT URI
- )
- .accounts({ dataAccount: dataAccount.publicKey })
- .remainingAccounts([
- {
- pubkey: wallet.publicKey,
- isWritable: true,
- isSigner: true,
- },
- { pubkey: mintKeypair.publicKey, isWritable: true, isSigner: true },
- {
- pubkey: new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"), // Metadata program id
- isWritable: false,
- isSigner: false,
- },
- { pubkey: metadataAddress, isWritable: true, isSigner: false },
- { pubkey: SystemProgram.programId, isWritable: false, isSigner: false },
- { pubkey: SYSVAR_RENT_PUBKEY, isWritable: false, isSigner: false },
- ])
- .signers([mintKeypair])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
- });
-
- it("Mint the NFT to your wallet!", async () => {
- // Derive wallet's associated token account address for mint
- const tokenAccount = getAssociatedTokenAddressSync(
- mintKeypair.publicKey,
- wallet.publicKey
- );
-
- const tx = await program.methods
- .mintTo(
- wallet.publicKey, // payer
- tokenAccount, // associated token account address
- mintKeypair.publicKey, // mint
- wallet.publicKey // owner of token account
- )
- .accounts({ dataAccount: dataAccount.publicKey })
- .remainingAccounts([
- {
- pubkey: wallet.publicKey,
- isWritable: true,
- isSigner: true,
- },
- { pubkey: tokenAccount, isWritable: true, isSigner: false },
- { pubkey: mintKeypair.publicKey, isWritable: true, isSigner: false },
- {
- pubkey: SystemProgram.programId,
- isWritable: false,
- isSigner: false,
- },
- { pubkey: TOKEN_PROGRAM_ID, isWritable: false, isSigner: false },
- {
- pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,
- isWritable: false,
- isSigner: false,
- },
- ])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
- });
-});
diff --git a/tokens/nft-minter/solang/tsconfig.json b/tokens/nft-minter/solang/tsconfig.json
deleted file mode 100644
index 558b83e5e..000000000
--- a/tokens/nft-minter/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
- }
-
\ No newline at end of file
diff --git a/tokens/nft-operations/anchor/Anchor.toml b/tokens/nft-operations/anchor/Anchor.toml
new file mode 100644
index 000000000..c6ceb4e19
--- /dev/null
+++ b/tokens/nft-operations/anchor/Anchor.toml
@@ -0,0 +1,27 @@
+[toolchain]
+
+[features]
+seeds = false
+skip-lint = false
+
+[programs.localnet]
+mint_nft = "3EMcczaGi9ivdLxvvFwRbGYeEUEHpGwabXegARw4jLxa"
+
+[programs.devnet]
+mint_nft = "3EMcczaGi9ivdLxvvFwRbGYeEUEHpGwabXegARw4jLxa"
+
+[registry]
+url = "https://api.apr.dev/"
+
+[provider]
+cluster = "localnet"
+wallet = "~/.config/solana/id.json"
+
+[scripts]
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+
+[test.validator]
+url = "https://api.mainnet-beta.solana.com/"
+
+[[test.validator.clone]]
+address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
diff --git a/tokens/nft-operations/anchor/Cargo.lock b/tokens/nft-operations/anchor/Cargo.lock
new file mode 100644
index 000000000..1857e4657
--- /dev/null
+++ b/tokens/nft-operations/anchor/Cargo.lock
@@ -0,0 +1,2735 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aead"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aes-gcm-siv"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "polyval",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
+dependencies = [
+ "getrandom 0.2.15",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anchor-attribute-access-control"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47fe28365b33e8334dd70ae2f34a43892363012fe239cf37d2ee91693575b1f8"
+dependencies = [
+ "anchor-syn",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "anchor-attribute-account"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c288d496168268d198d9b53ee9f4f9d260a55ba4df9877ea1d4486ad6109e0f"
+dependencies = [
+ "anchor-syn",
+ "bs58 0.5.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "anchor-attribute-constant"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b77b6948d0eeaaa129ce79eea5bbbb9937375a9241d909ca8fb9e006bb6e90"
+dependencies = [
+ "anchor-syn",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "anchor-attribute-error"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d20bb569c5a557c86101b944721d865e1fd0a4c67c381d31a44a84f07f84828"
+dependencies = [
+ "anchor-syn",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "anchor-attribute-event"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cebd8d0671a3a9dc3160c48598d652c34c77de6be4d44345b8b514323284d57"
+dependencies = [
+ "anchor-syn",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "anchor-attribute-program"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efb2a5eb0860e661ab31aff7bb5e0288357b176380e985bade4ccb395981b42d"
+dependencies = [
+ "anchor-lang-idl",
+ "anchor-syn",
+ "anyhow",
+ "bs58 0.5.1",
+ "heck",
+ "proc-macro2",
+ "quote",
+ "serde_json",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "anchor-derive-accounts"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04368b5abef4266250ca8d1d12f4dff860242681e4ec22b885dcfe354fd35aa1"
+dependencies = [
+ "anchor-syn",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "anchor-derive-serde"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0bb0e0911ad4a70cab880cdd6287fe1e880a1a9d8e4e6defa8e9044b9796a6c"
+dependencies = [
+ "anchor-syn",
+ "borsh-derive-internal 0.9.3",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "anchor-derive-space"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef415ff156dc82e9ecb943189b0cb241b3a6bfc26a180234dc21bd3ef3ce0cb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "anchor-lang"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6620c9486d9d36a4389cab5e37dc34a42ed0bfaa62e6a75a2999ce98f8f2e373"
+dependencies = [
+ "anchor-attribute-access-control",
+ "anchor-attribute-account",
+ "anchor-attribute-constant",
+ "anchor-attribute-error",
+ "anchor-attribute-event",
+ "anchor-attribute-program",
+ "anchor-derive-accounts",
+ "anchor-derive-serde",
+ "anchor-derive-space",
+ "anchor-lang-idl",
+ "arrayref",
+ "base64 0.21.7",
+ "bincode",
+ "borsh 0.9.3",
+ "bytemuck",
+ "getrandom 0.2.15",
+ "solana-program",
+ "thiserror",
+]
+
+[[package]]
+name = "anchor-lang-idl"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31cf97b4e6f7d6144a05e435660fcf757dbc3446d38d0e2b851d11ed13625bba"
+dependencies = [
+ "anchor-lang-idl-spec",
+ "anyhow",
+ "heck",
+ "regex",
+ "serde",
+ "serde_json",
+ "sha2 0.10.8",
+]
+
+[[package]]
+name = "anchor-lang-idl-spec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bdf143115440fe621bdac3a29a1f7472e09f6cd82b2aa569429a0c13f103838"
+dependencies = [
+ "anyhow",
+ "serde",
+]
+
+[[package]]
+name = "anchor-spl"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04bd077c34449319a1e4e0bc21cea572960c9ae0d0fefda0dd7c52fcc3c647a3"
+dependencies = [
+ "anchor-lang",
+ "mpl-token-metadata",
+ "spl-associated-token-account",
+ "spl-pod",
+ "spl-token",
+ "spl-token-2022",
+ "spl-token-group-interface",
+ "spl-token-metadata-interface",
+]
+
+[[package]]
+name = "anchor-syn"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f99daacb53b55cfd37ce14d6c9905929721137fd4c67bbab44a19802aecb622f"
+dependencies = [
+ "anyhow",
+ "bs58 0.5.1",
+ "cargo_toml",
+ "heck",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "sha2 0.10.8",
+ "syn 1.0.109",
+ "thiserror",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
+
+[[package]]
+name = "ark-bn254"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f"
+dependencies = [
+ "ark-ec",
+ "ark-ff",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-ec"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba"
+dependencies = [
+ "ark-ff",
+ "ark-poly",
+ "ark-serialize",
+ "ark-std",
+ "derivative",
+ "hashbrown 0.13.2",
+ "itertools",
+ "num-traits",
+ "zeroize",
+]
+
+[[package]]
+name = "ark-ff"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba"
+dependencies = [
+ "ark-ff-asm",
+ "ark-ff-macros",
+ "ark-serialize",
+ "ark-std",
+ "derivative",
+ "digest 0.10.7",
+ "itertools",
+ "num-bigint",
+ "num-traits",
+ "paste",
+ "rustc_version",
+ "zeroize",
+]
+
+[[package]]
+name = "ark-ff-asm"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-ff-macros"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-poly"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf"
+dependencies = [
+ "ark-ff",
+ "ark-serialize",
+ "ark-std",
+ "derivative",
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "ark-serialize"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5"
+dependencies = [
+ "ark-serialize-derive",
+ "ark-std",
+ "digest 0.10.7",
+ "num-bigint",
+]
+
+[[package]]
+name = "ark-serialize-derive"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-std"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185"
+dependencies = [
+ "num-traits",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "assert_matches"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
+
+[[package]]
+name = "base64"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitmaps"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "blake3"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "cc",
+ "cfg-if",
+ "constant_time_eq",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "block-padding",
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
+
+[[package]]
+name = "borsh"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa"
+dependencies = [
+ "borsh-derive 0.9.3",
+ "hashbrown 0.11.2",
+]
+
+[[package]]
+name = "borsh"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b"
+dependencies = [
+ "borsh-derive 0.10.3",
+ "hashbrown 0.11.2",
+]
+
+[[package]]
+name = "borsh"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed"
+dependencies = [
+ "borsh-derive 1.5.1",
+ "cfg_aliases",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775"
+dependencies = [
+ "borsh-derive-internal 0.9.3",
+ "borsh-schema-derive-internal 0.9.3",
+ "proc-macro-crate 0.1.5",
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7"
+dependencies = [
+ "borsh-derive-internal 0.10.3",
+ "borsh-schema-derive-internal 0.10.3",
+ "proc-macro-crate 0.1.5",
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b"
+dependencies = [
+ "once_cell",
+ "proc-macro-crate 3.1.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+ "syn_derive",
+]
+
+[[package]]
+name = "borsh-derive-internal"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-schema-derive-internal"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-schema-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bs58"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3"
+
+[[package]]
+name = "bs58"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+
+[[package]]
+name = "bv"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340"
+dependencies = [
+ "feature-probe",
+ "serde",
+]
+
+[[package]]
+name = "bytemuck"
+version = "1.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "cargo_toml"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a98356df42a2eb1bd8f1793ae4ee4de48e384dd974ce5eac8eee802edb7492be"
+dependencies = [
+ "serde",
+ "toml 0.8.14",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695"
+dependencies = [
+ "jobserver",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
+[[package]]
+name = "chrono"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "console_log"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f"
+dependencies = [
+ "log",
+ "web-sys",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "ctr"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "3.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0"
+dependencies = [
+ "byteorder",
+ "digest 0.9.0",
+ "rand_core 0.5.1",
+ "serde",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "derivation-path"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0"
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer 0.10.4",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "ed25519"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7"
+dependencies = [
+ "signature",
+]
+
+[[package]]
+name = "ed25519-dalek"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"
+dependencies = [
+ "curve25519-dalek",
+ "ed25519",
+ "rand 0.7.3",
+ "serde",
+ "sha2 0.9.9",
+ "zeroize",
+]
+
+[[package]]
+name = "ed25519-dalek-bip32"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908"
+dependencies = [
+ "derivation-path",
+ "ed25519-dalek",
+ "hmac 0.12.1",
+ "sha2 0.10.8",
+]
+
+[[package]]
+name = "either"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+
+[[package]]
+name = "env_logger"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "feature-probe"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "serde",
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash 0.7.8",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash 0.8.11",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hmac"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840"
+dependencies = [
+ "crypto-mac",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "hmac-drbg"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1"
+dependencies = [
+ "digest 0.9.0",
+ "generic-array",
+ "hmac 0.8.1",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "im"
+version = "15.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9"
+dependencies = [
+ "bitmaps",
+ "rand_core 0.6.4",
+ "rand_xoshiro",
+ "rayon",
+ "serde",
+ "sized-chunks",
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.5",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+
+[[package]]
+name = "jobserver"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "keccak"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
+dependencies = [
+ "cpufeatures",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libc"
+version = "0.2.155"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
+
+[[package]]
+name = "libsecp256k1"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73"
+dependencies = [
+ "arrayref",
+ "base64 0.12.3",
+ "digest 0.9.0",
+ "hmac-drbg",
+ "libsecp256k1-core",
+ "libsecp256k1-gen-ecmult",
+ "libsecp256k1-gen-genmult",
+ "rand 0.7.3",
+ "serde",
+ "sha2 0.9.9",
+ "typenum",
+]
+
+[[package]]
+name = "libsecp256k1-core"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80"
+dependencies = [
+ "crunchy",
+ "digest 0.9.0",
+ "subtle",
+]
+
+[[package]]
+name = "libsecp256k1-gen-ecmult"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3"
+dependencies = [
+ "libsecp256k1-core",
+]
+
+[[package]]
+name = "libsecp256k1-gen-genmult"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d"
+dependencies = [
+ "libsecp256k1-core",
+]
+
+[[package]]
+name = "light-poseidon"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee"
+dependencies = [
+ "ark-bn254",
+ "ark-ff",
+ "num-bigint",
+ "thiserror",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "memmap2"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "merlin"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d"
+dependencies = [
+ "byteorder",
+ "keccak",
+ "rand_core 0.6.4",
+ "zeroize",
+]
+
+[[package]]
+name = "mint-nft"
+version = "0.1.0"
+dependencies = [
+ "anchor-lang",
+ "anchor-spl",
+]
+
+[[package]]
+name = "mpl-token-metadata"
+version = "4.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caf0f61b553e424a6234af1268456972ee66c2222e1da89079242251fa7479e5"
+dependencies = [
+ "borsh 0.9.3",
+ "num-derive 0.3.3",
+ "num-traits",
+ "solana-program",
+ "thiserror",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
+dependencies = [
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.46"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
+dependencies = [
+ "proc-macro-crate 3.1.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+[[package]]
+name = "pbkdf2"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd"
+dependencies = [
+ "crypto-mac",
+]
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "polyval"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
+dependencies = [
+ "toml_edit 0.21.1",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "qstring"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "qualifier_attr"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.15",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_xoshiro"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rayon"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
+
+[[package]]
+name = "ryu"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "semver"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+
+[[package]]
+name = "serde"
+version = "1.0.203"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.203"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.118"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d947f6b3163d8857ea16c4fa0dd4840d52f3041039a85decd46867eb1abef2e4"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe"
+dependencies = [
+ "serde",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha3"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809"
+dependencies = [
+ "block-buffer 0.9.0",
+ "digest 0.9.0",
+ "keccak",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha3"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
+dependencies = [
+ "digest 0.10.7",
+ "keccak",
+]
+
+[[package]]
+name = "signature"
+version = "1.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "sized-chunks"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e"
+dependencies = [
+ "bitmaps",
+ "typenum",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+
+[[package]]
+name = "solana-frozen-abi"
+version = "1.18.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4867f66e9527fa44451c861c1dc6d9b2a7c7a668d7c6a297cdefbe39f4395b33"
+dependencies = [
+ "block-buffer 0.10.4",
+ "bs58 0.4.0",
+ "bv",
+ "either",
+ "generic-array",
+ "im",
+ "lazy_static",
+ "log",
+ "memmap2",
+ "rustc_version",
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "sha2 0.10.8",
+ "solana-frozen-abi-macro",
+ "subtle",
+ "thiserror",
+]
+
+[[package]]
+name = "solana-frozen-abi-macro"
+version = "1.18.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "168f24d97347b85f05192df58d6be3e3047a4aadc4001bc1b9e711a5ec878eea"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "solana-logger"
+version = "1.18.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0511082fc62f2d086520fff5aa1917c389d8c840930c08ad255ae05952c08a2"
+dependencies = [
+ "env_logger",
+ "lazy_static",
+ "log",
+]
+
+[[package]]
+name = "solana-program"
+version = "1.18.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc5a636dc75e5c25651e34f7a36afc9ae60d38166687c5b0375abb580ac81a2"
+dependencies = [
+ "ark-bn254",
+ "ark-ec",
+ "ark-ff",
+ "ark-serialize",
+ "base64 0.21.7",
+ "bincode",
+ "bitflags",
+ "blake3",
+ "borsh 0.10.3",
+ "borsh 0.9.3",
+ "borsh 1.5.1",
+ "bs58 0.4.0",
+ "bv",
+ "bytemuck",
+ "cc",
+ "console_error_panic_hook",
+ "console_log",
+ "curve25519-dalek",
+ "getrandom 0.2.15",
+ "itertools",
+ "js-sys",
+ "lazy_static",
+ "libc",
+ "libsecp256k1",
+ "light-poseidon",
+ "log",
+ "memoffset",
+ "num-bigint",
+ "num-derive 0.4.2",
+ "num-traits",
+ "parking_lot",
+ "rand 0.8.5",
+ "rustc_version",
+ "rustversion",
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "serde_json",
+ "sha2 0.10.8",
+ "sha3 0.10.8",
+ "solana-frozen-abi",
+ "solana-frozen-abi-macro",
+ "solana-sdk-macro",
+ "thiserror",
+ "tiny-bip39",
+ "wasm-bindgen",
+ "zeroize",
+]
+
+[[package]]
+name = "solana-sdk"
+version = "1.18.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df43d3a1e1637397ab43cbc216a5a8f977ec8a3cc3f3ae8c3851c83a3255dbcf"
+dependencies = [
+ "assert_matches",
+ "base64 0.21.7",
+ "bincode",
+ "bitflags",
+ "borsh 1.5.1",
+ "bs58 0.4.0",
+ "bytemuck",
+ "byteorder",
+ "chrono",
+ "derivation-path",
+ "digest 0.10.7",
+ "ed25519-dalek",
+ "ed25519-dalek-bip32",
+ "generic-array",
+ "hmac 0.12.1",
+ "itertools",
+ "js-sys",
+ "lazy_static",
+ "libsecp256k1",
+ "log",
+ "memmap2",
+ "num-derive 0.4.2",
+ "num-traits",
+ "num_enum",
+ "pbkdf2 0.11.0",
+ "qstring",
+ "qualifier_attr",
+ "rand 0.7.3",
+ "rand 0.8.5",
+ "rustc_version",
+ "rustversion",
+ "serde",
+ "serde_bytes",
+ "serde_derive",
+ "serde_json",
+ "serde_with",
+ "sha2 0.10.8",
+ "sha3 0.10.8",
+ "siphasher",
+ "solana-frozen-abi",
+ "solana-frozen-abi-macro",
+ "solana-logger",
+ "solana-program",
+ "solana-sdk-macro",
+ "thiserror",
+ "uriparse",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "solana-sdk-macro"
+version = "1.18.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86c76414183a325038ff020b22c07d1e9d2da0703ddc0244acfed37ee2921d96"
+dependencies = [
+ "bs58 0.4.0",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "solana-security-txt"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183"
+
+[[package]]
+name = "solana-zk-token-sdk"
+version = "1.18.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "513407f88394e437b4ff5aad892bc5bf51a655ae2401e6e63549734d3695c46f"
+dependencies = [
+ "aes-gcm-siv",
+ "base64 0.21.7",
+ "bincode",
+ "bytemuck",
+ "byteorder",
+ "curve25519-dalek",
+ "getrandom 0.1.16",
+ "itertools",
+ "lazy_static",
+ "merlin",
+ "num-derive 0.4.2",
+ "num-traits",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "sha3 0.9.1",
+ "solana-program",
+ "solana-sdk",
+ "subtle",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "spl-associated-token-account"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2e688554bac5838217ffd1fab7845c573ff106b6336bf7d290db7c98d5a8efd"
+dependencies = [
+ "assert_matches",
+ "borsh 1.5.1",
+ "num-derive 0.4.2",
+ "num-traits",
+ "solana-program",
+ "spl-token",
+ "spl-token-2022",
+ "thiserror",
+]
+
+[[package]]
+name = "spl-discriminator"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34d1814406e98b08c5cd02c1126f83fd407ad084adce0b05fda5730677822eac"
+dependencies = [
+ "bytemuck",
+ "solana-program",
+ "spl-discriminator-derive",
+]
+
+[[package]]
+name = "spl-discriminator-derive"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750"
+dependencies = [
+ "quote",
+ "spl-discriminator-syn",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "spl-discriminator-syn"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c1f05593b7ca9eac7caca309720f2eafb96355e037e6d373b909a80fe7b69b9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "sha2 0.10.8",
+ "syn 2.0.68",
+ "thiserror",
+]
+
+[[package]]
+name = "spl-memo"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58e9bae02de3405079a057fe244c867a08f92d48327d231fc60da831f94caf0a"
+dependencies = [
+ "solana-program",
+]
+
+[[package]]
+name = "spl-pod"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046ce669f48cf2eca1ec518916d8725596bfb655beb1c74374cf71dc6cb773c9"
+dependencies = [
+ "borsh 1.5.1",
+ "bytemuck",
+ "solana-program",
+ "solana-zk-token-sdk",
+ "spl-program-error",
+]
+
+[[package]]
+name = "spl-program-error"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49065093ea91f57b9b2bd81493ff705e2ad4e64507a07dbc02b085778e02770e"
+dependencies = [
+ "num-derive 0.4.2",
+ "num-traits",
+ "solana-program",
+ "spl-program-error-derive",
+ "thiserror",
+]
+
+[[package]]
+name = "spl-program-error-derive"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d375dd76c517836353e093c2dbb490938ff72821ab568b545fd30ab3256b3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "sha2 0.10.8",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "spl-tlv-account-resolution"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cace91ba08984a41556efe49cbf2edca4db2f577b649da7827d3621161784bf8"
+dependencies = [
+ "bytemuck",
+ "solana-program",
+ "spl-discriminator",
+ "spl-pod",
+ "spl-program-error",
+ "spl-type-length-value",
+]
+
+[[package]]
+name = "spl-token"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ae123223633a389f95d1da9d49c2d0a50d499e7060b9624626a69e536ad2a4"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+ "num-derive 0.4.2",
+ "num-traits",
+ "num_enum",
+ "solana-program",
+ "thiserror",
+]
+
+[[package]]
+name = "spl-token-2022"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5412f99ae7ee6e0afde00defaa354e6228e47e30c0e3adf553e2e01e6abb584"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+ "num-derive 0.4.2",
+ "num-traits",
+ "num_enum",
+ "solana-program",
+ "solana-security-txt",
+ "solana-zk-token-sdk",
+ "spl-memo",
+ "spl-pod",
+ "spl-token",
+ "spl-token-group-interface",
+ "spl-token-metadata-interface",
+ "spl-transfer-hook-interface",
+ "spl-type-length-value",
+ "thiserror",
+]
+
+[[package]]
+name = "spl-token-group-interface"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d419b5cfa3ee8e0f2386fd7e02a33b3ec8a7db4a9c7064a2ea24849dc4a273b6"
+dependencies = [
+ "bytemuck",
+ "solana-program",
+ "spl-discriminator",
+ "spl-pod",
+ "spl-program-error",
+]
+
+[[package]]
+name = "spl-token-metadata-interface"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30179c47e93625680dabb620c6e7931bd12d62af390f447bc7beb4a3a9b5feee"
+dependencies = [
+ "borsh 1.5.1",
+ "solana-program",
+ "spl-discriminator",
+ "spl-pod",
+ "spl-program-error",
+ "spl-type-length-value",
+]
+
+[[package]]
+name = "spl-transfer-hook-interface"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66a98359769cd988f7b35c02558daa56d496a7e3bd8626e61f90a7c757eedb9b"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+ "solana-program",
+ "spl-discriminator",
+ "spl-pod",
+ "spl-program-error",
+ "spl-tlv-account-resolution",
+ "spl-type-length-value",
+]
+
+[[package]]
+name = "spl-type-length-value"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "422ce13429dbd41d2cee8a73931c05fda0b0c8ca156a8b0c19445642550bb61a"
+dependencies = [
+ "bytemuck",
+ "solana-program",
+ "spl-discriminator",
+ "spl-pod",
+ "spl-program-error",
+]
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "tiny-bip39"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d"
+dependencies = [
+ "anyhow",
+ "hmac 0.8.1",
+ "once_cell",
+ "pbkdf2 0.4.0",
+ "rand 0.7.3",
+ "rustc-hash",
+ "sha2 0.9.9",
+ "thiserror",
+ "unicode-normalization",
+ "wasm-bindgen",
+ "zeroize",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.22.14",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
+dependencies = [
+ "indexmap",
+ "toml_datetime",
+ "winnow 0.5.40",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.22.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow 0.6.13",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
+
+[[package]]
+name = "universal-hash"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "uriparse"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff"
+dependencies = [
+ "fnv",
+ "lazy_static",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
+
+[[package]]
+name = "web-sys"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
+
+[[package]]
+name = "winnow"
+version = "0.5.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winnow"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.68",
+]
diff --git a/tokens/nft-operations/anchor/Cargo.toml b/tokens/nft-operations/anchor/Cargo.toml
new file mode 100644
index 000000000..f39770481
--- /dev/null
+++ b/tokens/nft-operations/anchor/Cargo.toml
@@ -0,0 +1,14 @@
+[workspace]
+members = [
+ "programs/*"
+]
+resolver = "2"
+
+[profile.release]
+overflow-checks = true
+lto = "fat"
+codegen-units = 1
+[profile.release.build-override]
+opt-level = 3
+incremental = false
+codegen-units = 1
diff --git a/tokens/nft-operations/anchor/package.json b/tokens/nft-operations/anchor/package.json
new file mode 100644
index 000000000..ecfe34583
--- /dev/null
+++ b/tokens/nft-operations/anchor/package.json
@@ -0,0 +1,28 @@
+{
+ "scripts": {
+ "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check",
+ "postinstall": "zx prepare.mjs"
+ },
+ "dependencies": {
+ "@coral-xyz/anchor": "^0.30.1",
+ "@metaplex-foundation/mpl-token-metadata": "^3.1.2",
+ "@metaplex-foundation/umi": "^0.9.0",
+ "@solana/spl-token": "^0.4.6",
+ "axios": "^1.6.7",
+ "node-fetch": "^3.3.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",
+ "zx": "^8.1.4"
+ }
+}
diff --git a/tokens/nft-operations/anchor/pnpm-lock.yaml b/tokens/nft-operations/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..85e44271b
--- /dev/null
+++ b/tokens/nft-operations/anchor/pnpm-lock.yaml
@@ -0,0 +1,1951 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.1
+ version: 0.30.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/mpl-token-metadata':
+ specifier: ^3.1.2
+ version: 3.2.1(@metaplex-foundation/umi@0.9.2)
+ '@metaplex-foundation/umi':
+ specifier: ^0.9.0
+ version: 0.9.2
+ '@solana/spl-token':
+ specifier: ^0.4.6
+ version: 0.4.8(@solana/web3.js@1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ axios:
+ specifier: ^1.6.7
+ version: 1.7.2
+ node-fetch:
+ specifier: ^3.3.2
+ version: 3.3.2
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ version: 9.1.1
+ anchor-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(@coral-xyz/anchor@0.30.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.0(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
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ prettier:
+ specifier: ^2.6.2
+ version: 2.8.8
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+ zx:
+ specifier: ^8.1.4
+ version: 8.1.4
+
+packages:
+
+ '@babel/runtime@7.24.7':
+ resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==}
+ engines: {node: '>=6.9.0'}
+
+ '@coral-xyz/anchor-errors@0.30.1':
+ resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==}
+ engines: {node: '>=10'}
+
+ '@coral-xyz/anchor@0.30.1':
+ resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.30.1':
+ resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@metaplex-foundation/mpl-token-metadata@3.2.1':
+ resolution: {integrity: sha512-26W1NhQwDWmLOg/pBRYut7x/vEs/5kFS2sWVEY5/X0f2jJOLhnd4NaZQcq+5u+XZsXvm1jq2AtrRGPNK43oqWQ==}
+ peerDependencies:
+ '@metaplex-foundation/umi': '>= 0.8.2 < 1'
+
+ '@metaplex-foundation/mpl-toolbox@0.9.4':
+ resolution: {integrity: sha512-fd6JxfoLbj/MM8FG2x91KYVy1U6AjBQw4qjt7+Da3trzQaWnSaYHDcYRG/53xqfvZ9qofY1T2t53GXPlD87lnQ==}
+ peerDependencies:
+ '@metaplex-foundation/umi': '>= 0.8.2 < 1'
+
+ '@metaplex-foundation/umi-options@0.8.9':
+ resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==}
+
+ '@metaplex-foundation/umi-public-keys@0.8.9':
+ resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==}
+
+ '@metaplex-foundation/umi-serializers-core@0.8.9':
+ resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==}
+
+ '@metaplex-foundation/umi-serializers-encodings@0.8.9':
+ resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==}
+
+ '@metaplex-foundation/umi-serializers-numbers@0.8.9':
+ resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==}
+
+ '@metaplex-foundation/umi-serializers@0.9.0':
+ resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==}
+
+ '@metaplex-foundation/umi@0.9.2':
+ resolution: {integrity: sha512-9i4Acm4pruQfJcpRrc2EauPBwkfDN0I9QTvJyZocIlKgoZwD6A6wH0PViH1AjOVG5CQCd1YI3tJd5XjYE1ElBw==}
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==}
+
+ '@solana/codecs-core@2.0.0-preview.4':
+ resolution: {integrity: sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==}
+
+ '@solana/codecs-data-structures@2.0.0-preview.4':
+ resolution: {integrity: sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
+
+ '@solana/codecs-numbers@2.0.0-preview.4':
+ resolution: {integrity: sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-strings@2.0.0-preview.2':
+ resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+
+ '@solana/codecs-strings@2.0.0-preview.4':
+ resolution: {integrity: sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+ typescript: '>=5'
+
+ '@solana/codecs@2.0.0-preview.2':
+ resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==}
+
+ '@solana/codecs@2.0.0-preview.4':
+ resolution: {integrity: sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.0.0-preview.2':
+ resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
+ hasBin: true
+
+ '@solana/errors@2.0.0-preview.4':
+ resolution: {integrity: sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/options@2.0.0-preview.2':
+ resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==}
+
+ '@solana/options@2.0.0-preview.4':
+ resolution: {integrity: sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/spl-token-group@0.0.5':
+ resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.94.0
+
+ '@solana/spl-token-metadata@0.1.4':
+ resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.4.8':
+ resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.94.0
+
+ '@solana/spl-type-length-value@0.1.0':
+ resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+ engines: {node: '>=16'}
+
+ '@solana/web3.js@1.95.0':
+ resolution: {integrity: sha512-iHwJ/HcWrF9qbnI1ctwI1UXHJ0vZXRpnt+lI5UcQIk8WvJNuQ5gV06icxzM6B7ojUES85Q1/FM4jZ49UQ8yZZQ==}
+
+ '@swc/helpers@0.5.11':
+ resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.14.10':
+ resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.10':
+ resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ axios@1.7.2:
+ resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
+
+ 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'}
+
+ data-uri-to-buffer@4.0.1:
+ resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+ engines: {node: '>= 12'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ fetch-blob@3.2.0:
+ resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+ engines: {node: ^12.20 || >= 14.13}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+
+ formdata-polyfill@4.0.10:
+ resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+ engines: {node: '>=12.20.0'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.1:
+ resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+
+ node-domexception@1.0.0:
+ resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+ engines: {node: '>=10.5.0'}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-fetch@3.3.2:
+ resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.2:
+ resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ web-streams-polyfill@3.3.3:
+ resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
+ engines: {node: '>= 8'}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zx@8.1.4:
+ resolution: {integrity: sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==}
+ engines: {node: '>= 12.17.0'}
+ hasBin: true
+
+snapshots:
+
+ '@babel/runtime@7.24.7':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor-errors@0.30.1': {}
+
+ '@coral-xyz/anchor@0.30.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/anchor-errors': 0.30.1
+ '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@noble/hashes': 1.4.0
+ '@solana/web3.js': 1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@metaplex-foundation/mpl-token-metadata@3.2.1(@metaplex-foundation/umi@0.9.2)':
+ dependencies:
+ '@metaplex-foundation/mpl-toolbox': 0.9.4(@metaplex-foundation/umi@0.9.2)
+ '@metaplex-foundation/umi': 0.9.2
+
+ '@metaplex-foundation/mpl-toolbox@0.9.4(@metaplex-foundation/umi@0.9.2)':
+ dependencies:
+ '@metaplex-foundation/umi': 0.9.2
+
+ '@metaplex-foundation/umi-options@0.8.9': {}
+
+ '@metaplex-foundation/umi-public-keys@0.8.9':
+ dependencies:
+ '@metaplex-foundation/umi-serializers-encodings': 0.8.9
+
+ '@metaplex-foundation/umi-serializers-core@0.8.9': {}
+
+ '@metaplex-foundation/umi-serializers-encodings@0.8.9':
+ dependencies:
+ '@metaplex-foundation/umi-serializers-core': 0.8.9
+
+ '@metaplex-foundation/umi-serializers-numbers@0.8.9':
+ dependencies:
+ '@metaplex-foundation/umi-serializers-core': 0.8.9
+
+ '@metaplex-foundation/umi-serializers@0.9.0':
+ dependencies:
+ '@metaplex-foundation/umi-options': 0.8.9
+ '@metaplex-foundation/umi-public-keys': 0.8.9
+ '@metaplex-foundation/umi-serializers-core': 0.8.9
+ '@metaplex-foundation/umi-serializers-encodings': 0.8.9
+ '@metaplex-foundation/umi-serializers-numbers': 0.8.9
+
+ '@metaplex-foundation/umi@0.9.2':
+ dependencies:
+ '@metaplex-foundation/umi-options': 0.8.9
+ '@metaplex-foundation/umi-public-keys': 0.8.9
+ '@metaplex-foundation/umi-serializers': 0.9.0
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-core@2.0.0-preview.4(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-data-structures@2.0.0-preview.4(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-numbers@2.0.0-preview.4(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+ fastestsmallesttextencoderdecoder: 1.0.22
+
+ '@solana/codecs-strings@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ fastestsmallesttextencoderdecoder: 1.0.22
+ typescript: 4.9.5
+
+ '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-data-structures': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/options': 2.0.0-preview.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/codecs@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/options': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-preview.2':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+
+ '@solana/errors@2.0.0-preview.4(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+ typescript: 4.9.5
+
+ '@solana/options@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+
+ '@solana/options@2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-preview.4(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/errors': 2.0.0-preview.4(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token@0.4.8(@solana/web3.js@1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - typescript
+ - utf-8-validate
+
+ '@solana/spl-type-length-value@0.1.0':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.2
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.11':
+ dependencies:
+ tslib: 2.6.3
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.14.10
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 20.14.10
+ optional: true
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 20.14.10
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.14.10':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.5.10':
+ dependencies:
+ '@types/node': 20.14.10
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ anchor-bankrun@0.4.0(@coral-xyz/anchor@0.30.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@solana/web3.js@1.95.0(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.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.95.0(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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ asynckit@0.4.0: {}
+
+ axios@1.7.2:
+ dependencies:
+ follow-redirects: 1.15.6
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ crypto-hash@1.3.0: {}
+
+ data-uri-to-buffer@4.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ delayed-stream@1.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ dot-case@3.0.4:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.6.3
+
+ emoji-regex@8.0.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ fetch-blob@3.2.0:
+ dependencies:
+ node-domexception: 1.0.0
+ web-streams-polyfill: 3.3.3
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ follow-redirects@1.15.6: {}
+
+ form-data@4.0.0:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ formdata-polyfill@4.0.10:
+ dependencies:
+ fetch-blob: 3.2.0
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.6.3
+
+ make-error@1.3.6: {}
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ no-case@3.0.4:
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.6.3
+
+ node-domexception@1.0.0: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-fetch@3.3.2:
+ dependencies:
+ data-uri-to-buffer: 4.0.1
+ fetch-blob: 3.2.0
+ formdata-polyfill: 4.0.10
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ prettier@2.8.8: {}
+
+ proxy-from-env@1.1.0: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.2:
+ dependencies:
+ '@swc/helpers': 0.5.11
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.10
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.15.5: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.3: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ web-streams-polyfill@3.3.3: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
+
+ zx@8.1.4:
+ optionalDependencies:
+ '@types/fs-extra': 11.0.4
+ '@types/node': 20.14.10
diff --git a/tokens/nft-operations/anchor/prepare.mjs b/tokens/nft-operations/anchor/prepare.mjs
new file mode 100644
index 000000000..7c5ec464b
--- /dev/null
+++ b/tokens/nft-operations/anchor/prepare.mjs
@@ -0,0 +1,34 @@
+#!/usr/bin/env zx
+
+import { mkdir, rm } from 'node:fs/promises';
+import { join } from 'node:path';
+import { $ } from 'zx';
+
+const programs = [
+ {
+ id: 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',
+ name: 'token_metadata.so',
+ },
+];
+
+const outputDir = 'tests/fixtures';
+const overwrite = true;
+
+try {
+ for (const program of programs) {
+ const { id, name } = program;
+ const outputFile = join(outputDir, name);
+ await $`solana config set -um`;
+
+ try {
+ await mkdir(outputDir, { recursive: true });
+ if (overwrite) await rm(outputFile, { force: true });
+ await $`solana program dump ${id} ${outputFile}`;
+ console.log(`Program ${id} dumped to ${outputFile}`);
+ } catch (error) {
+ console.error(`Error dumping ${id}: ${error.message}`);
+ }
+ }
+} catch (error) {
+ console.error(`Error preparing programs: ${error.message}`);
+}
diff --git a/tokens/nft-operations/anchor/programs/mint-nft/Cargo.toml b/tokens/nft-operations/anchor/programs/mint-nft/Cargo.toml
new file mode 100644
index 000000000..98e0f6427
--- /dev/null
+++ b/tokens/nft-operations/anchor/programs/mint-nft/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "mint-nft"
+version = "0.1.0"
+description = "Created with Anchor"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+name = "mint_nft"
+
+[features]
+no-entrypoint = []
+no-idl = []
+no-log-ix-name = []
+cpi = ["no-entrypoint"]
+default = []
+idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
+
+[dependencies]
+anchor-lang = { version = "0.31.1", features = ["init-if-needed"] }
+anchor-spl = { version = "0.31.1", features = ["metadata"] }
diff --git a/tokens/nft-operations/anchor/programs/mint-nft/Xargo.toml b/tokens/nft-operations/anchor/programs/mint-nft/Xargo.toml
new file mode 100644
index 000000000..475fb71ed
--- /dev/null
+++ b/tokens/nft-operations/anchor/programs/mint-nft/Xargo.toml
@@ -0,0 +1,2 @@
+[target.bpfel-unknown-unknown.dependencies.std]
+features = []
diff --git a/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/create_collection.rs b/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/create_collection.rs
new file mode 100644
index 000000000..152cc116a
--- /dev/null
+++ b/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/create_collection.rs
@@ -0,0 +1,156 @@
+use anchor_lang::prelude::*;
+use anchor_spl::{
+ associated_token::AssociatedToken,
+ metadata::Metadata,
+ token::{
+ mint_to,
+ Mint,
+ MintTo,
+ Token,
+ TokenAccount,
+ }
+};
+use anchor_spl::metadata::mpl_token_metadata::{
+ instructions::{
+ CreateMasterEditionV3Cpi,
+ CreateMasterEditionV3CpiAccounts,
+ CreateMasterEditionV3InstructionArgs,
+ CreateMetadataAccountV3Cpi,
+ CreateMetadataAccountV3CpiAccounts,
+ CreateMetadataAccountV3InstructionArgs
+ },
+ types::{
+ CollectionDetails,
+ Creator,
+ DataV2
+ }
+};
+
+#[derive(Accounts)]
+pub struct CreateCollection<'info> {
+ #[account(mut)]
+ user: Signer<'info>,
+ #[account(
+ init,
+ payer = user,
+ mint::decimals = 0,
+ mint::authority = mint_authority,
+ mint::freeze_authority = mint_authority,
+ )]
+ mint: Account<'info, Mint>,
+ #[account(
+ seeds = [b"authority"],
+ bump,
+ )]
+ /// CHECK: This account is not initialized and is being used for signing purposes only
+ pub mint_authority: UncheckedAccount<'info>,
+ #[account(mut)]
+ /// CHECK: This account will be initialized by the metaplex program
+ metadata: UncheckedAccount<'info>,
+ #[account(mut)]
+ /// CHECK: This account will be initialized by the metaplex program
+ master_edition: UncheckedAccount<'info>,
+ #[account(
+ init,
+ payer = user,
+ associated_token::mint = mint,
+ associated_token::authority = user
+ )]
+ destination: Account<'info, TokenAccount>,
+ system_program: Program<'info, System>,
+ token_program: Program<'info, Token>,
+ associated_token_program: Program<'info, AssociatedToken>,
+ token_metadata_program: Program<'info, Metadata>,
+}
+
+impl<'info> CreateCollection<'info> {
+ pub fn create_collection(&mut self, bumps: &CreateCollectionBumps) -> Result<()> {
+
+ let metadata = &self.metadata.to_account_info();
+ let master_edition = &self.master_edition.to_account_info();
+ let mint = &self.mint.to_account_info();
+ let authority = &self.mint_authority.to_account_info();
+ let payer = &self.user.to_account_info();
+ let system_program = &self.system_program.to_account_info();
+ let spl_token_program = &self.token_program.to_account_info();
+ let spl_metadata_program = &self.token_metadata_program.to_account_info();
+
+ let seeds = &[
+ &b"authority"[..],
+ &[bumps.mint_authority]
+ ];
+ let signer_seeds = &[&seeds[..]];
+
+ let cpi_program = self.token_program.to_account_info();
+ let cpi_accounts = MintTo {
+ mint: self.mint.to_account_info(),
+ to: self.destination.to_account_info(),
+ authority: self.mint_authority.to_account_info(),
+ };
+ let cpi_ctx = CpiContext::new_with_signer(cpi_program, cpi_accounts, signer_seeds);
+ mint_to(cpi_ctx, 1)?;
+ msg!("Collection NFT minted!");
+
+ let creator = vec![
+ Creator {
+ address: self.mint_authority.key().clone(),
+ verified: true,
+ share: 100,
+ },
+ ];
+
+ let metadata_account = CreateMetadataAccountV3Cpi::new(
+ spl_metadata_program,
+ CreateMetadataAccountV3CpiAccounts {
+ metadata,
+ mint,
+ mint_authority: authority,
+ payer,
+ update_authority: (authority, true),
+ system_program,
+ rent: None,
+ },
+ CreateMetadataAccountV3InstructionArgs {
+ data: DataV2 {
+ name: "DummyCollection".to_owned(),
+ symbol: "DC".to_owned(),
+ uri: "".to_owned(),
+ seller_fee_basis_points: 0,
+ creators: Some(creator),
+ collection: None,
+ uses: None,
+ },
+ is_mutable: true,
+ collection_details: Some(
+ CollectionDetails::V1 {
+ size: 0
+ }
+ )
+ }
+ );
+ metadata_account.invoke_signed(signer_seeds)?;
+ msg!("Metadata Account created!");
+
+ let master_edition_account = CreateMasterEditionV3Cpi::new(
+ spl_metadata_program,
+ CreateMasterEditionV3CpiAccounts {
+ edition: master_edition,
+ update_authority: authority,
+ mint_authority: authority,
+ mint,
+ payer,
+ metadata,
+ token_program: spl_token_program,
+ system_program,
+ rent: None,
+ },
+ CreateMasterEditionV3InstructionArgs {
+ max_supply: Some(0),
+ }
+ );
+ master_edition_account.invoke_signed(signer_seeds)?;
+ msg!("Master Edition Account created");
+
+ Ok(())
+ }
+}
\ No newline at end of file
diff --git a/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/mint_nft.rs b/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/mint_nft.rs
new file mode 100644
index 000000000..b4612cffb
--- /dev/null
+++ b/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/mint_nft.rs
@@ -0,0 +1,156 @@
+use anchor_lang::prelude::*;
+use anchor_spl::{
+ associated_token::AssociatedToken,
+ metadata::Metadata,
+ token::{
+ mint_to,
+ Mint,
+ MintTo,
+ Token,
+ TokenAccount
+ }
+};
+use anchor_spl::metadata::mpl_token_metadata::{
+ instructions::{
+ CreateMasterEditionV3Cpi,
+ CreateMasterEditionV3CpiAccounts,
+ CreateMasterEditionV3InstructionArgs,
+ CreateMetadataAccountV3Cpi,
+ CreateMetadataAccountV3CpiAccounts,
+ CreateMetadataAccountV3InstructionArgs,
+ },
+ types::{
+ Collection,
+ Creator,
+ DataV2,
+ }
+};
+
+#[derive(Accounts)]
+pub struct MintNFT<'info> {
+ #[account(mut)]
+ pub owner: Signer<'info>,
+ #[account(
+ init,
+ payer = owner,
+ mint::decimals = 0,
+ mint::authority = mint_authority,
+ mint::freeze_authority = mint_authority,
+ )]
+ pub mint: Account<'info, Mint>,
+ #[account(
+ init,
+ payer = owner,
+ associated_token::mint = mint,
+ associated_token::authority = owner
+ )]
+ pub destination: Account<'info, TokenAccount>,
+ #[account(mut)]
+ /// CHECK: This account will be initialized by the metaplex program
+ pub metadata: UncheckedAccount<'info>,
+ #[account(mut)]
+ /// CHECK: This account will be initialized by the metaplex program
+ pub master_edition: UncheckedAccount<'info>,
+ #[account(
+ seeds = [b"authority"],
+ bump,
+ )]
+ /// CHECK: This is account is not initialized and is being used for signing purposes only
+ pub mint_authority: UncheckedAccount<'info>,
+ #[account(mut)]
+ pub collection_mint: Account<'info, Mint>,
+ pub system_program: Program<'info, System>,
+ pub token_program: Program<'info, Token>,
+ pub associated_token_program: Program<'info, AssociatedToken>,
+ pub token_metadata_program: Program<'info, Metadata>,
+}
+
+impl<'info> MintNFT<'info> {
+ pub fn mint_nft(&mut self, bumps: &MintNFTBumps) -> Result<()> {
+
+ let metadata = &self.metadata.to_account_info();
+ let master_edition = &self.master_edition.to_account_info();
+ let mint = &self.mint.to_account_info();
+ let authority = &self.mint_authority.to_account_info();
+ let payer = &self.owner.to_account_info();
+ let system_program = &self.system_program.to_account_info();
+ let spl_token_program = &self.token_program.to_account_info();
+ let spl_metadata_program = &self.token_metadata_program.to_account_info();
+
+ let seeds = &[
+ &b"authority"[..],
+ &[bumps.mint_authority]
+ ];
+ let signer_seeds = &[&seeds[..]];
+
+ let cpi_program = self.token_program.to_account_info();
+ let cpi_accounts = MintTo {
+ mint: self.mint.to_account_info(),
+ to: self.destination.to_account_info(),
+ authority: self.mint_authority.to_account_info(),
+ };
+ let cpi_ctx = CpiContext::new_with_signer(cpi_program, cpi_accounts, signer_seeds);
+ mint_to(cpi_ctx, 1)?;
+ msg!("Collection NFT minted!");
+
+ let creator = vec![
+ Creator {
+ address: self.mint_authority.key(),
+ verified: true,
+ share: 100,
+ },
+ ];
+
+ let metadata_account = CreateMetadataAccountV3Cpi::new(
+ spl_metadata_program,
+ CreateMetadataAccountV3CpiAccounts {
+ metadata,
+ mint,
+ mint_authority: authority,
+ payer,
+ update_authority: (authority, true),
+ system_program,
+ rent: None,
+ },
+ CreateMetadataAccountV3InstructionArgs {
+ data: DataV2 {
+ name: "Mint Test".to_string(),
+ symbol: "YAY".to_string(),
+ uri: "".to_string(),
+ seller_fee_basis_points: 0,
+ creators: Some(creator),
+ collection: Some(Collection {
+ verified: false,
+ key: self.collection_mint.key(),
+ }),
+ uses: None
+ },
+ is_mutable: true,
+ collection_details: None,
+ }
+ );
+ metadata_account.invoke_signed(signer_seeds)?;
+
+ let master_edition_account = CreateMasterEditionV3Cpi::new(
+ spl_metadata_program,
+ CreateMasterEditionV3CpiAccounts {
+ edition: master_edition,
+ update_authority: authority,
+ mint_authority: authority,
+ mint,
+ payer,
+ metadata,
+ token_program: spl_token_program,
+ system_program,
+ rent: None,
+ },
+ CreateMasterEditionV3InstructionArgs {
+ max_supply: Some(0),
+ }
+ );
+ master_edition_account.invoke_signed(signer_seeds)?;
+
+ Ok(())
+
+ }
+}
\ No newline at end of file
diff --git a/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/mod.rs b/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/mod.rs
new file mode 100644
index 000000000..d4557134e
--- /dev/null
+++ b/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/mod.rs
@@ -0,0 +1,7 @@
+pub mod mint_nft;
+pub mod create_collection;
+pub mod verify_collection;
+
+pub use mint_nft::*;
+pub use create_collection::*;
+pub use verify_collection::*;
diff --git a/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/verify_collection.rs b/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/verify_collection.rs
new file mode 100644
index 000000000..b1440f255
--- /dev/null
+++ b/tokens/nft-operations/anchor/programs/mint-nft/src/contexts/verify_collection.rs
@@ -0,0 +1,75 @@
+use anchor_lang::prelude::*;
+
+use anchor_spl::metadata::mpl_token_metadata::instructions::{
+ VerifyCollectionV1Cpi,
+ VerifyCollectionV1CpiAccounts,
+};
+use anchor_spl::metadata::{
+ MasterEditionAccount,
+ MetadataAccount,
+};
+use anchor_spl::{
+ token::Mint,
+ metadata::Metadata,
+};
+pub use anchor_lang::solana_program::sysvar::instructions::ID as INSTRUCTIONS_ID;
+
+#[derive(Accounts)]
+pub struct VerifyCollectionMint<'info> {
+ pub authority: Signer<'info>,
+ #[account(mut)]
+ pub metadata: Account<'info, MetadataAccount>,
+ pub mint: Account<'info, Mint>,
+ #[account(
+ seeds = [b"authority"],
+ bump,
+ )]
+ /// CHECK: This account is not initialized and is being used for signing purposes only
+ pub mint_authority: UncheckedAccount<'info>,
+ pub collection_mint: Account<'info, Mint>,
+ #[account(mut)]
+ pub collection_metadata: Account<'info, MetadataAccount>,
+ pub collection_master_edition: Account<'info, MasterEditionAccount>,
+ pub system_program: Program<'info, System>,
+ #[account(address = INSTRUCTIONS_ID)]
+ /// CHECK: Sysvar instruction account that is being checked with an address constraint
+ pub sysvar_instruction: UncheckedAccount<'info>,
+ pub token_metadata_program: Program<'info, Metadata>,
+}
+
+impl<'info> VerifyCollectionMint<'info> {
+ pub fn verify_collection(&mut self, bumps: &VerifyCollectionMintBumps) -> Result<()> {
+ let metadata = &self.metadata.to_account_info();
+ let authority = &self.mint_authority.to_account_info();
+ let collection_mint = &self.collection_mint.to_account_info();
+ let collection_metadata = &self.collection_metadata.to_account_info();
+ let collection_master_edition = &self.collection_master_edition.to_account_info();
+ let system_program = &self.system_program.to_account_info();
+ let sysvar_instructions = &self.sysvar_instruction.to_account_info();
+ let spl_metadata_program = &self.token_metadata_program.to_account_info();
+
+ let seeds = &[
+ &b"authority"[..],
+ &[bumps.mint_authority]
+ ];
+ let signer_seeds = &[&seeds[..]];
+
+ let verify_collection = VerifyCollectionV1Cpi::new(
+ spl_metadata_program,
+ VerifyCollectionV1CpiAccounts {
+ authority,
+ delegate_record: None,
+ metadata,
+ collection_mint,
+ collection_metadata: Some(collection_metadata),
+ collection_master_edition: Some(collection_master_edition),
+ system_program,
+ sysvar_instructions,
+ });
+ verify_collection.invoke_signed(signer_seeds)?;
+
+ msg!("Collection Verified!");
+
+ Ok(())
+ }
+}
\ No newline at end of file
diff --git a/tokens/nft-operations/anchor/programs/mint-nft/src/lib.rs b/tokens/nft-operations/anchor/programs/mint-nft/src/lib.rs
new file mode 100644
index 000000000..24a0860f6
--- /dev/null
+++ b/tokens/nft-operations/anchor/programs/mint-nft/src/lib.rs
@@ -0,0 +1,24 @@
+use anchor_lang::prelude::*;
+
+declare_id!("3EMcczaGi9ivdLxvvFwRbGYeEUEHpGwabXegARw4jLxa");
+
+pub mod contexts;
+
+pub use contexts::*;
+
+#[program]
+pub mod mint_nft {
+
+ use super::*;
+ pub fn create_collection(ctx: Context) -> Result<()> {
+ ctx.accounts.create_collection(&ctx.bumps)
+ }
+
+ pub fn mint_nft(ctx: Context) -> Result<()> {
+ ctx.accounts.mint_nft(&ctx.bumps)
+ }
+
+ pub fn verify_collection(ctx: Context) -> Result<()> {
+ ctx.accounts.verify_collection(&ctx.bumps)
+ }
+}
diff --git a/tokens/nft-operations/anchor/readme.MD b/tokens/nft-operations/anchor/readme.MD
new file mode 100644
index 000000000..df13a202f
--- /dev/null
+++ b/tokens/nft-operations/anchor/readme.MD
@@ -0,0 +1,541 @@
+# NFT Operations
+
+This example demonstrates how to create a NFT collection, how to mint a NFT and how to verify a NFT as part of a collection.
+
+---
+
+## Program Setup
+
+For this program example we will be cloning the Metaplex Token Metadata program from mainnet. You can find this in the Anchor.toml file
+
+```rust
+[test.validator]
+url = "https://api.mainnet-beta.solana.com/"
+
+[[test.validator.clone]]
+address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
+```
+
+We will need this program to perform CPIs to create the Metadata Accounts, Master Edition Accounts and to Verify NFTs as part of collections
+
+---
+
+## Create a NFT Collection:
+
+The accounts needed to create a NFT Collection are the following:
+
+```rust
+#[derive(Accounts)]
+pub struct CreateCollection<'info> {
+ #[account(mut)]
+ user: Signer<'info>,
+ #[account(
+ init,
+ payer = user,
+ mint::decimals = 0,
+ mint::authority = mint_authority,
+ mint::freeze_authority = mint_authority,
+ )]
+ mint: Account<'info, Mint>,
+ #[account(
+ seeds = [b"authority"],
+ bump,
+ )]
+ /// CHECK: This account is not initialized and is being used for signing purposes only
+ pub mint_authority: UncheckedAccount<'info>,
+ #[account(mut)]
+ /// CHECK: This account will be initialized by the metaplex program
+ metadata: UncheckedAccount<'info>,
+ #[account(mut)]
+ /// CHECK: This account will be initialized by the metaplex program
+ master_edition: UncheckedAccount<'info>,
+ #[account(
+ init,
+ payer = user,
+ associated_token::mint = mint,
+ associated_token::authority = user
+ )]
+ destination: Account<'info, TokenAccount>,
+ system_program: Program<'info, System>,
+ token_program: Program<'info, Token>,
+ associated_token_program: Program<'info, AssociatedToken>,
+ token_metadata_program: Program<'info, Metadata>,
+}
+```
+
+### Let's break down these accounts:
+
+- user: the account that is creating the collection NFT and the owner of the destination token account
+
+- mint: the collection NFT Mint account. We will be initializing this account with 0 decimals and giving the mint authority and freeze authority to the mint_authority account
+
+- mint_authority: the account with authority to mint tokens from the collection NFT mint account
+
+- metadata: the metadata account of the collection NFT
+
+- master_edition: the master edition account of the collection NFT
+
+- destination: the token account where the collection NFT will minted to. We will be initializing this account and verifying the correct mint and authority
+
+- system_program: Program resposible for the initialization of any new account
+
+- token_program and associated_token_program: We are creating new ATAs and minting tokens
+
+- token_metadata_program: MPL token metadata program that will be used to create the metadata and master edition accounts
+
+To note in here, that both the metadata account and the master_edition account are Unchecked Accounts. That is due to the fact that they are not initialized, and the initialization will be performed by the token_metadata_program when we perform a CPI (cross program invocation) to initialize both accounts.
+
+If we had something like:
+
+```rust
+#[derive(Accounts)]
+pub struct CreateCollection<'info> {
+ #[account(mut)]
+ metadata: Account<'info, MetadataAccount>,
+ #[account(mut)]
+ master_edition: Account<'info, MasterEditionAccount>,
+}
+```
+
+our instruction would fail because it would expect the accounts to be already initialized.
+
+However, if the account was already initialized (you'll see that while we verify collections), you should use the specific account types
+
+### We then implement some functionality for our CreateCollection context:
+
+```rust
+impl<'info> CreateCollection<'info> {
+ pub fn create_collection(&mut self, bumps: &CreateCollectionBumps) -> Result<()> {
+
+ let metadata = &self.metadata.to_account_info();
+ let master_edition = &self.master_edition.to_account_info();
+ let mint = &self.mint.to_account_info();
+ let authority = &self.mint_authority.to_account_info();
+ let payer = &self.user.to_account_info();
+ let system_program = &self.system_program.to_account_info();
+ let spl_token_program = &self.token_program.to_account_info();
+ let spl_metadata_program = &self.token_metadata_program.to_account_info();
+
+ let seeds = &[
+ &b"authority"[..],
+ &[bumps.mint_authority]
+ ];
+ let signer_seeds = &[&seeds[..]];
+
+ let cpi_program = self.token_program.to_account_info();
+ let cpi_accounts = MintTo {
+ mint: self.mint.to_account_info(),
+ to: self.destination.to_account_info(),
+ authority: self.mint_authority.to_account_info(),
+ };
+ let cpi_ctx = CpiContext::new_with_signer(cpi_program, cpi_accounts, signer_seeds);
+ mint_to(cpi_ctx, 1)?;
+ msg!("Collection NFT minted!");
+
+ let creator = vec![
+ Creator {
+ address: self.mint_authority.key().clone(),
+ verified: true,
+ share: 100,
+ },
+ ];
+
+ let metadata_account = CreateMetadataAccountV3Cpi::new(
+ spl_metadata_program,
+ CreateMetadataAccountV3CpiAccounts {
+ metadata,
+ mint,
+ mint_authority: authority,
+ payer,
+ update_authority: (authority, true),
+ system_program,
+ rent: None,
+ },
+ CreateMetadataAccountV3InstructionArgs {
+ data: DataV2 {
+ name: "DummyCollection".to_owned(),
+ symbol: "DC".to_owned(),
+ uri: "".to_owned(),
+ seller_fee_basis_points: 0,
+ creators: Some(creator),
+ collection: None,
+ uses: None,
+ },
+ is_mutable: true,
+ collection_details: Some(
+ CollectionDetails::V1 {
+ size: 0
+ }
+ )
+ }
+ );
+ metadata_account.invoke_signed(signer_seeds)?;
+ msg!("Metadata Account created!");
+
+ let master_edition_account = CreateMasterEditionV3Cpi::new(
+ spl_metadata_program,
+ CreateMasterEditionV3CpiAccounts {
+ edition: master_edition,
+ update_authority: authority,
+ mint_authority: authority,
+ mint,
+ payer,
+ metadata,
+ token_program: spl_token_program,
+ system_program,
+ rent: None,
+ },
+ CreateMasterEditionV3InstructionArgs {
+ max_supply: Some(0),
+ }
+ );
+ master_edition_account.invoke_signed(signer_seeds)?;
+ msg!("Master Edition Account created");
+
+ Ok(())
+ }
+}
+```
+
+The create collection method consists of 3 steps:
+
+- Mint one token to the destination token account by performing a CPI to the Token Program
+
+- Create a metadata account for the mint account to store standardized data that can be understood by apps and marketplaces. This is achieved by performing a CPI to the Token Metadata Program. The mint authority needs to sign that CPI, therefore we use "invoke_signed" and pass in the seeds of our authority PDA
+
+- Create a master edition account for the mint account by performing a CPI to the Token Metadata Program. That will ensure that the special characteristics on Non-Fungible Tokens are met. It will also transfer both the mint authority and the freeze authority to the Master Edition PDA. The mint authority needs to sign that CPI, therefore we use "invoke_signed" and pass in the seeds of our authority PDA
+
+
+More information on Token Metadata can be found at https://developers.metaplex.com/token-metadata
+
+---
+
+## Mint a NFT:
+
+The accounts needed to create a NFT Collection are the following:
+
+```rust
+#[derive(Accounts)]
+pub struct MintNFT<'info> {
+ #[account(mut)]
+ pub owner: Signer<'info>,
+ #[account(
+ init,
+ payer = owner,
+ mint::decimals = 0,
+ mint::authority = mint_authority,
+ mint::freeze_authority = mint_authority,
+ )]
+ pub mint: Account<'info, Mint>,
+ #[account(
+ init,
+ payer = owner,
+ associated_token::mint = mint,
+ associated_token::authority = owner
+ )]
+ pub destination: Account<'info, TokenAccount>,
+ #[account(mut)]
+ /// CHECK: This account will be initialized by the metaplex program
+ pub metadata: UncheckedAccount<'info>,
+ #[account(mut)]
+ /// CHECK: This account will be initialized by the metaplex program
+ pub master_edition: UncheckedAccount<'info>,
+ #[account(
+ seeds = [b"authority"],
+ bump,
+ )]
+ /// CHECK: This is account is not initialized and is being used for signing purposes only
+ pub mint_authority: UncheckedAccount<'info>,
+ #[account(mut)]
+ pub collection_mint: Account<'info, Mint>,
+ pub system_program: Program<'info, System>,
+ pub token_program: Program<'info, Token>,
+ pub associated_token_program: Program<'info, AssociatedToken>,
+ pub token_metadata_program: Program<'info, Metadata>,
+}
+```
+
+### Let's break down these accounts:
+
+- owner: the account that is creating the NFT and the owner of the destination token account
+
+- mint: the collection NFT Mint account. We will be initializing this account with 0 decimals and giving the mint authority and freeze authority to the mint_authority account
+
+- destination: the token account where the collection NFT will minted to. We will be initializing this account and verifying the correct mint and authority
+
+- metadata: the metadata account of the collection NFT
+
+- master_edition: the master edition account of the collection NFT
+
+- mint_authority: the account with authority to mint tokens from the collection NFT mint account
+
+- collection_mint: the collection account that the NFT that we are minting should be part of
+
+- system_program: Program resposible for the initialization of any new account
+
+- token_program and associated_token_program: We are creating new ATAs and minting tokens
+
+- token_metadata_program: MPL token metadata program that will be used to create the metadata and master edition accounts
+
+If you take a closer look, you will see that the accounts (apart from "collection_mint") are the same.
+This is due to the fact that the a collection is basically just a regular NFT but, the "collection_details" field will be set with a CollectionDetails struct and the "collection" field under "data" set to None.
+
+On the other hand, a NFT will have "collection_details" field set to None and with a CollectionDetails and the "collection" field under "data" set to a Collection struct, containing the key of the collection it belongs to and a verified boolean (set to False, it will be automatically set to True once the NFT gets verified as part of the collection)
+
+This is actually where the "collection" account comes from. This account is used to set the the address of the Collection struct when we are creating the NFT metadata account
+
+### We then implement some functionality for our MintNFT context:
+
+```rust
+impl<'info> MintNFT<'info> {
+ pub fn mint_nft(&mut self, bumps: &MintNFTBumps) -> Result<()> {
+
+ let metadata = &self.metadata.to_account_info();
+ let master_edition = &self.master_edition.to_account_info();
+ let mint = &self.mint.to_account_info();
+ let authority = &self.mint_authority.to_account_info();
+ let payer = &self.owner.to_account_info();
+ let system_program = &self.system_program.to_account_info();
+ let spl_token_program = &self.token_program.to_account_info();
+ let spl_metadata_program = &self.token_metadata_program.to_account_info();
+
+ let seeds = &[
+ &b"authority"[..],
+ &[bumps.mint_authority]
+ ];
+ let signer_seeds = &[&seeds[..]];
+
+ let cpi_program = self.token_program.to_account_info();
+ let cpi_accounts = MintTo {
+ mint: self.mint.to_account_info(),
+ to: self.destination.to_account_info(),
+ authority: self.mint_authority.to_account_info(),
+ };
+ let cpi_ctx = CpiContext::new_with_signer(cpi_program, cpi_accounts, signer_seeds);
+ mint_to(cpi_ctx, 1)?;
+ msg!("Collection NFT minted!");
+
+ let creator = vec![
+ Creator {
+ address: self.mint_authority.key(),
+ verified: true,
+ share: 100,
+ },
+ ];
+
+ let metadata_account = CreateMetadataAccountV3Cpi::new(
+ spl_metadata_program,
+ CreateMetadataAccountV3CpiAccounts {
+ metadata,
+ mint,
+ mint_authority: authority,
+ payer,
+ update_authority: (authority, true),
+ system_program,
+ rent: None,
+ },
+ CreateMetadataAccountV3InstructionArgs {
+ data: DataV2 {
+ name: "Mint Test".to_string(),
+ symbol: "YAY".to_string(),
+ uri: "".to_string(),
+ seller_fee_basis_points: 0,
+ creators: Some(creator),
+ collection: Some(Collection {
+ verified: false,
+ key: self.collection_mint.key(),
+ }),
+ uses: None
+ },
+ is_mutable: true,
+ collection_details: None,
+ }
+ );
+ metadata_account.invoke_signed(signer_seeds)?;
+
+ let master_edition_account = CreateMasterEditionV3Cpi::new(
+ spl_metadata_program,
+ CreateMasterEditionV3CpiAccounts {
+ edition: master_edition,
+ update_authority: authority,
+ mint_authority: authority,
+ mint,
+ payer,
+ metadata,
+ token_program: spl_token_program,
+ system_program,
+ rent: None,
+ },
+ CreateMasterEditionV3InstructionArgs {
+ max_supply: Some(0),
+ }
+ );
+ master_edition_account.invoke_signed(signer_seeds)?;
+
+ Ok(())
+
+ }
+}
+```
+
+Since a collection NFT is just a regular NFT with "special" metadata, again you can see that the same is happening as when created the Collection NFT.
+
+- Mint one token to the destination token account by performing a CPI to the Token Program
+
+- Create a metadata account for the mint account to store standardized data that can be understood by apps and marketplaces. This is achieved by performing a CPI to the Token Metadata Program. The mint authority needs to sign that CPI, therefore we use "invoke_signed" and pass in the seeds of our authority PDA
+
+- Create a master edition account for the mint account by performing a CPI to the Token Metadata Program. That will ensure that the special characteristics on Non-Fungible Tokens are met. It will also transfer both the mint authority and the freeze authority to the Master Edition PDA. The mint authority needs to sign that CPI, therefore we use "invoke_signed" and pass in the seeds of our authority PDA
+
+
+The difference is in the data of our metadata account.
+
+for our collection NFT, we have
+```rust
+CreateMetadataAccountV3InstructionArgs {
+ data: DataV2 {
+ name: "DummyCollection".to_owned(),
+ symbol: "DC".to_owned(),
+ uri: "".to_owned(),
+ seller_fee_basis_points: 0,
+ creators: Some(creator),
+ collection: None,
+ uses: None,
+ },
+ is_mutable: true,
+ collection_details: Some(
+ CollectionDetails::V1 {
+ size: 0
+ }
+ )
+}
+```
+where we set the "collection_details" field
+
+
+for our "regular" NFT we have
+```rust
+CreateMetadataAccountV3InstructionArgs {
+ data: DataV2 {
+ name: "Mint Test".to_string(),
+ symbol: "YAY".to_string(),
+ uri: "".to_string(),
+ seller_fee_basis_points: 0,
+ creators: Some(creator),
+ collection: Some(Collection {
+ verified: false,
+ key: self.collection_mint.key(),
+ }),
+ uses: None
+ },
+ is_mutable: true,
+ collection_details: None,
+}
+```
+where we set the "collection" field with the key of the collection account.
+
+Again, we set the "verified" boolean to false, since this NFT has not yet been verified as part of the desired collection
+
+---
+
+## Verify a NFT as part of a collection:
+
+The accounts needed to verify a NFT as part of a collection are the following:
+
+```rust
+#[derive(Accounts)]
+pub struct VerifyCollectionMint<'info> {
+ pub authority: Signer<'info>,
+ #[account(mut)]
+ pub metadata: Account<'info, MetadataAccount>,
+ pub mint: Account<'info, Mint>,
+ #[account(
+ seeds = [b"authority"],
+ bump,
+ )]
+ /// CHECK: This account is not initialized and is being used for signing purposes only
+ pub mint_authority: UncheckedAccount<'info>,
+ pub collection_mint: Account<'info, Mint>,
+ #[account(mut)]
+ pub collection_metadata: Account<'info, MetadataAccount>,
+ pub collection_master_edition: Account<'info, MasterEditionAccount>,
+ pub system_program: Program<'info, System>,
+ #[account(address = INSTRUCTIONS_ID)]
+ /// CHECK: Sysvar instruction account that is being checked with an address constraint
+ pub sysvar_instruction: UncheckedAccount<'info>,
+ pub token_metadata_program: Program<'info, Metadata>,
+}
+```
+
+### Let's break down these accounts:
+
+- authority: signer of the transaction. This can be used to restrict the address that can execute the verify collection method, by adding constraints
+
+- metadata: the metadata account of the NFT that we want to verify
+
+- mint: the NFT that we want to verify
+
+- mint_authority: the mint_authority of the Collection NFT
+
+- collection_mint: the mint account of the Collection NFT
+
+- collection_metadata: the metadata account of the Collection NFT
+
+- collection_master_edition: the master edition account of the Collection NFT
+
+- system_program: program resposible for the initialization of any new account
+
+- sysvar_instruction: the instructions sysvar provides access to the serialized instruction data
+for the currently-running transaction
+
+- token_metadata_program: MPL token metadata program that will be used to verify the NFT as part of the desired collection
+
+Note that the only account that need to be mutable in here, are the NFT and Colelction NFT metadata accounts.
+This is due to the fact that both will be updated. The NFT metadata account will have the "verified" boolean set to true, and the Collection NFT metadata account will have the colelction size incremented
+
+### We then implement some functionality for our VerifyCollectionMint context:
+
+```rust
+impl<'info> VerifyCollectionMint<'info> {
+ pub fn verify_collection(&mut self, bumps: &VerifyCollectionMintBumps) -> Result<()> {
+ let metadata = &self.metadata.to_account_info();
+ let authority = &self.mint_authority.to_account_info();
+ let collection_mint = &self.collection_mint.to_account_info();
+ let collection_metadata = &self.collection_metadata.to_account_info();
+ let collection_master_edition = &self.collection_master_edition.to_account_info();
+ let system_program = &self.system_program.to_account_info();
+ let sysvar_instructions = &self.sysvar_instruction.to_account_info();
+ let spl_metadata_program = &self.token_metadata_program.to_account_info();
+
+ let seeds = &[
+ &b"authority"[..],
+ &[bumps.mint_authority]
+ ];
+ let signer_seeds = &[&seeds[..]];
+
+ let verify_collection = VerifyCollectionV1Cpi::new(
+ spl_metadata_program,
+ VerifyCollectionV1CpiAccounts {
+ authority,
+ delegate_record: None,
+ metadata,
+ collection_mint,
+ collection_metadata: Some(collection_metadata),
+ collection_master_edition: Some(collection_master_edition),
+ system_program,
+ sysvar_instructions,
+ }
+ );
+ verify_collection.invoke_signed(signer_seeds)?;
+
+ msg!("Collection Verified!");
+
+ Ok(())
+ }
+}
+```
+
+In this "verify_collection" method, we simply create a CPI to the to the Token Metadata Program with the appropriate accounts to verify the NFT as part of a collection. Since the authority of the Collection NFT will sign that CPI, the NFT will be verified as part of the collection.
+
+---
+
+With this examples, you will be able to adjust / adapt it to your needs and create Collections, Mint NFTs, and verify NFTs as part of collections
diff --git a/tokens/nft-operations/anchor/tests/bankrun.test.ts b/tokens/nft-operations/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..4cb5454f4
--- /dev/null
+++ b/tokens/nft-operations/anchor/tests/bankrun.test.ts
@@ -0,0 +1,150 @@
+import { describe, it } from 'node:test';
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import type NodeWallet from '@coral-xyz/anchor/dist/cjs/nodewallet';
+import { ASSOCIATED_PROGRAM_ID } from '@coral-xyz/anchor/dist/cjs/utils/token';
+import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { Keypair, PublicKey, SystemProgram } from '@solana/web3.js';
+import { BankrunProvider } from 'anchor-bankrun';
+import { startAnchor } from 'solana-bankrun';
+import type { MintNft } from '../target/types/mint_nft';
+
+const IDL = require('../target/idl/mint_nft.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+const METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
+
+describe('mint-nft bankrun', async () => {
+ const context = await startAnchor(
+ '',
+ [
+ { name: 'mint_nft', programId: PROGRAM_ID },
+ { name: 'token_metadata', programId: METADATA_PROGRAM_ID },
+ ],
+ [],
+ );
+ const provider = new BankrunProvider(context);
+ anchor.setProvider(provider);
+ const wallet = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ const TOKEN_METADATA_PROGRAM_ID = new anchor.web3.PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
+
+ const mintAuthority = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('authority')], program.programId)[0];
+
+ const collectionKeypair = Keypair.generate();
+ const collectionMint = collectionKeypair.publicKey;
+
+ const mintKeypair = Keypair.generate();
+ const mint = mintKeypair.publicKey;
+
+ const getMetadata = async (mint: anchor.web3.PublicKey): Promise => {
+ return anchor.web3.PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+ };
+
+ const getMasterEdition = async (mint: anchor.web3.PublicKey): Promise => {
+ return anchor.web3.PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer(), Buffer.from('edition')],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+ };
+
+ it('Create Collection NFT', async () => {
+ console.log('\nCollection Mint Key: ', collectionMint.toBase58());
+
+ const metadata = await getMetadata(collectionMint);
+ console.log('Collection Metadata Account: ', metadata.toBase58());
+
+ const masterEdition = await getMasterEdition(collectionMint);
+ console.log('Master Edition Account: ', masterEdition.toBase58());
+
+ const destination = getAssociatedTokenAddressSync(collectionMint, wallet.publicKey);
+ console.log('Destination ATA = ', destination.toBase58());
+
+ const tx = await program.methods
+ .createCollection()
+ .accountsPartial({
+ user: wallet.publicKey,
+ mint: collectionMint,
+ mintAuthority,
+ metadata,
+ masterEdition,
+ destination,
+ systemProgram: SystemProgram.programId,
+ tokenProgram: TOKEN_PROGRAM_ID,
+ associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
+ tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
+ })
+ .signers([collectionKeypair])
+ .rpc({
+ skipPreflight: true,
+ });
+ console.log('\nCollection NFT minted: TxID - ', tx);
+ });
+
+ it('Mint NFT', async () => {
+ console.log('\nMint', mint.toBase58());
+
+ const metadata = await getMetadata(mint);
+ console.log('Metadata', metadata.toBase58());
+
+ const masterEdition = await getMasterEdition(mint);
+ console.log('Master Edition', masterEdition.toBase58());
+
+ const destination = getAssociatedTokenAddressSync(mint, wallet.publicKey);
+ console.log('Destination', destination.toBase58());
+
+ const tx = await program.methods
+ .mintNft()
+ .accountsPartial({
+ owner: wallet.publicKey,
+ destination,
+ metadata,
+ masterEdition,
+ mint,
+ mintAuthority,
+ collectionMint,
+ systemProgram: SystemProgram.programId,
+ tokenProgram: TOKEN_PROGRAM_ID,
+ associatedTokenProgram: ASSOCIATED_PROGRAM_ID,
+ tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
+ })
+ .signers([mintKeypair])
+ .rpc({
+ skipPreflight: true,
+ });
+ console.log('\nNFT Minted! Your transaction signature', tx);
+ });
+
+ it('Verify Collection', async () => {
+ const mintMetadata = await getMetadata(mint);
+ console.log('\nMint Metadata', mintMetadata.toBase58());
+
+ const collectionMetadata = await getMetadata(collectionMint);
+ console.log('Collection Metadata', collectionMetadata.toBase58());
+
+ const collectionMasterEdition = await getMasterEdition(collectionMint);
+ console.log('Collection Master Edition', collectionMasterEdition.toBase58());
+
+ const tx = await program.methods
+ .verifyCollection()
+ .accountsPartial({
+ authority: wallet.publicKey,
+ metadata: mintMetadata,
+ mint,
+ mintAuthority,
+ collectionMint,
+ collectionMetadata,
+ collectionMasterEdition,
+ systemProgram: SystemProgram.programId,
+ sysvarInstruction: anchor.web3.SYSVAR_INSTRUCTIONS_PUBKEY,
+ tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
+ })
+ .rpc({
+ skipPreflight: true,
+ });
+ console.log('\nCollection Verified! Your transaction signature', tx);
+ });
+});
diff --git a/tokens/nft-operations/anchor/tests/mint-nft.ts b/tokens/nft-operations/anchor/tests/mint-nft.ts
new file mode 100644
index 000000000..02521b548
--- /dev/null
+++ b/tokens/nft-operations/anchor/tests/mint-nft.ts
@@ -0,0 +1,138 @@
+import * as anchor from '@coral-xyz/anchor';
+import type { Program } from '@coral-xyz/anchor';
+import type NodeWallet from '@coral-xyz/anchor/dist/cjs/nodewallet';
+import { ASSOCIATED_PROGRAM_ID } from '@coral-xyz/anchor/dist/cjs/utils/token';
+import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { Keypair, SystemProgram } from '@solana/web3.js';
+import type { MintNft } from '../target/types/mint_nft';
+
+describe('mint-nft', () => {
+ // Configure the client to use the local cluster.
+ const provider = anchor.AnchorProvider.env();
+ anchor.setProvider(provider);
+
+ const wallet = provider.wallet as NodeWallet;
+
+ const program = anchor.workspace.MintNft as Program;
+
+ const TOKEN_METADATA_PROGRAM_ID = new anchor.web3.PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
+
+ const mintAuthority = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('authority')], program.programId)[0];
+
+ const collectionKeypair = Keypair.generate();
+ const collectionMint = collectionKeypair.publicKey;
+
+ const mintKeypair = Keypair.generate();
+ const mint = mintKeypair.publicKey;
+
+ const getMetadata = async (mint: anchor.web3.PublicKey): Promise => {
+ return anchor.web3.PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+ };
+
+ const getMasterEdition = async (mint: anchor.web3.PublicKey): Promise => {
+ return anchor.web3.PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer(), Buffer.from('edition')],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+ };
+
+ it('Create Collection NFT', async () => {
+ console.log('\nCollection Mint Key: ', collectionMint.toBase58());
+
+ const metadata = await getMetadata(collectionMint);
+ console.log('Collection Metadata Account: ', metadata.toBase58());
+
+ const masterEdition = await getMasterEdition(collectionMint);
+ console.log('Master Edition Account: ', masterEdition.toBase58());
+
+ const destination = getAssociatedTokenAddressSync(collectionMint, wallet.publicKey);
+ console.log('Destination ATA = ', destination.toBase58());
+
+ const tx = await program.methods
+ .createCollection()
+ .accountsPartial({
+ user: wallet.publicKey,
+ mint: collectionMint,
+ mintAuthority,
+ metadata,
+ masterEdition,
+ destination,
+ systemProgram: SystemProgram.programId,
+ tokenProgram: TOKEN_PROGRAM_ID,
+ associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
+ tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
+ })
+ .signers([collectionKeypair])
+ .rpc({
+ skipPreflight: true,
+ });
+ console.log('\nCollection NFT minted: TxID - ', tx);
+ });
+
+ it('Mint NFT', async () => {
+ console.log('\nMint', mint.toBase58());
+
+ const metadata = await getMetadata(mint);
+ console.log('Metadata', metadata.toBase58());
+
+ const masterEdition = await getMasterEdition(mint);
+ console.log('Master Edition', masterEdition.toBase58());
+
+ const destination = getAssociatedTokenAddressSync(mint, wallet.publicKey);
+ console.log('Destination', destination.toBase58());
+
+ const tx = await program.methods
+ .mintNft()
+ .accountsPartial({
+ owner: wallet.publicKey,
+ destination,
+ metadata,
+ masterEdition,
+ mint,
+ mintAuthority,
+ collectionMint,
+ systemProgram: SystemProgram.programId,
+ tokenProgram: TOKEN_PROGRAM_ID,
+ associatedTokenProgram: ASSOCIATED_PROGRAM_ID,
+ tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
+ })
+ .signers([mintKeypair])
+ .rpc({
+ skipPreflight: true,
+ });
+ console.log('\nNFT Minted! Your transaction signature', tx);
+ });
+
+ it('Verify Collection', async () => {
+ const mintMetadata = await getMetadata(mint);
+ console.log('\nMint Metadata', mintMetadata.toBase58());
+
+ const collectionMetadata = await getMetadata(collectionMint);
+ console.log('Collection Metadata', collectionMetadata.toBase58());
+
+ const collectionMasterEdition = await getMasterEdition(collectionMint);
+ console.log('Collection Master Edition', collectionMasterEdition.toBase58());
+
+ const tx = await program.methods
+ .verifyCollection()
+ .accountsPartial({
+ authority: wallet.publicKey,
+ metadata: mintMetadata,
+ mint,
+ mintAuthority,
+ collectionMint,
+ collectionMetadata,
+ collectionMasterEdition,
+ systemProgram: SystemProgram.programId,
+ sysvarInstruction: anchor.web3.SYSVAR_INSTRUCTIONS_PUBKEY,
+ tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
+ })
+ .rpc({
+ skipPreflight: true,
+ });
+ console.log('\nCollection Verified! Your transaction signature', tx);
+ });
+});
diff --git a/tokens/nft-operations/anchor/tsconfig.json b/tokens/nft-operations/anchor/tsconfig.json
new file mode 100644
index 000000000..cd5d2e3d0
--- /dev/null
+++ b/tokens/nft-operations/anchor/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/tokens/pda-mint-authority/anchor/Anchor.toml b/tokens/pda-mint-authority/anchor/Anchor.toml
index 7d53d9bd7..08710c2d2 100644
--- a/tokens/pda-mint-authority/anchor/Anchor.toml
+++ b/tokens/pda-mint-authority/anchor/Anchor.toml
@@ -1,23 +1,26 @@
+[toolchain]
+
[features]
-seeds = false
+resolution = true
skip-lint = false
[programs.localnet]
-token_minter = "A5gNtapBvMLD6i7D2t3SSyJeFtBdfb6ibvZu1hoBLzCo"
+token_minter = "3LFrPHqwk5jMrmiz48BFj6NV2k4NjobgTe1jChzx3JGD"
[registry]
url = "https://api.apr.dev/"
[provider]
-cluster = "Localnet"
+cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
[test]
startup_wait = 5000
shutdown_wait = 2000
+upgradeable = false
[test.validator]
bind_address = "0.0.0.0"
diff --git a/tokens/pda-mint-authority/anchor/package.json b/tokens/pda-mint-authority/anchor/package.json
index a50bb4200..c48b56368 100644
--- a/tokens/pda-mint-authority/anchor/package.json
+++ b/tokens/pda-mint-authority/anchor/package.json
@@ -1,16 +1,21 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.1-beta.2",
- "@metaplex-foundation/mpl-token-metadata": "^2.5.2",
+ "@coral-xyz/anchor": "^0.30.0",
"@solana/spl-token": "^0.3.8"
},
+ "scripts": {
+ "postinstall": "zx prepare.mjs"
+ },
"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"
+ "typescript": "^4.3.5",
+ "zx": "^8.1.4"
}
}
diff --git a/tokens/pda-mint-authority/anchor/pnpm-lock.yaml b/tokens/pda-mint-authority/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..c4f54089e
--- /dev/null
+++ b/tokens/pda-mint-authority/anchor/pnpm-lock.yaml
@@ -0,0 +1,1598 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.3.8
+ version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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.91.8(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
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+ zx:
+ specifier: ^8.1.4
+ version: 8.1.4
+
+packages:
+
+ '@babel/runtime@7.24.5':
+ resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==}
+ engines: {node: '>=6.9.0'}
+
+ '@coral-xyz/anchor@0.30.0':
+ resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.0':
+ resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==}
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==}
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
+
+ '@solana/codecs-strings@2.0.0-preview.2':
+ resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+
+ '@solana/codecs@2.0.0-preview.2':
+ resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==}
+
+ '@solana/errors@2.0.0-preview.2':
+ resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
+ hasBin: true
+
+ '@solana/options@2.0.0-preview.2':
+ resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==}
+
+ '@solana/spl-token-metadata@0.1.4':
+ resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/spl-type-length-value@0.1.0':
+ resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+ engines: {node: '>=16'}
+
+ '@solana/web3.js@1.91.8':
+ resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.0.0:
+ resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.0:
+ resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@7.11.0:
+ resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zx@8.1.4:
+ resolution: {integrity: sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==}
+ engines: {node: '>= 12.17.0'}
+ hasBin: true
+
+snapshots:
+
+ '@babel/runtime@7.24.5':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@noble/hashes': 1.4.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+ fastestsmallesttextencoderdecoder: 1.0.22
+
+ '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-data-structures': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/options': 2.0.0-preview.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-preview.2':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.0.0
+
+ '@solana/options@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+
+ '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - utf-8-validate
+
+ '@solana/spl-type-length-value@0.1.0':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.5
+ '@noble/curves': 1.4.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 7.11.0
+ superstruct: 0.14.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 20.12.11
+ optional: true
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 20.12.11
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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.91.8(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)
+ '@solana/web3.js': 1.91.8(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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.0.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@7.11.0:
+ dependencies:
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.14.2: {}
+
+ superstruct@0.15.5: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
+
+ zx@8.1.4:
+ optionalDependencies:
+ '@types/fs-extra': 11.0.4
+ '@types/node': 20.12.11
diff --git a/tokens/pda-mint-authority/anchor/prepare.mjs b/tokens/pda-mint-authority/anchor/prepare.mjs
new file mode 100644
index 000000000..7c5ec464b
--- /dev/null
+++ b/tokens/pda-mint-authority/anchor/prepare.mjs
@@ -0,0 +1,34 @@
+#!/usr/bin/env zx
+
+import { mkdir, rm } from 'node:fs/promises';
+import { join } from 'node:path';
+import { $ } from 'zx';
+
+const programs = [
+ {
+ id: 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',
+ name: 'token_metadata.so',
+ },
+];
+
+const outputDir = 'tests/fixtures';
+const overwrite = true;
+
+try {
+ for (const program of programs) {
+ const { id, name } = program;
+ const outputFile = join(outputDir, name);
+ await $`solana config set -um`;
+
+ try {
+ await mkdir(outputDir, { recursive: true });
+ if (overwrite) await rm(outputFile, { force: true });
+ await $`solana program dump ${id} ${outputFile}`;
+ console.log(`Program ${id} dumped to ${outputFile}`);
+ } catch (error) {
+ console.error(`Error dumping ${id}: ${error.message}`);
+ }
+ }
+} catch (error) {
+ console.error(`Error preparing programs: ${error.message}`);
+}
diff --git a/tokens/pda-mint-authority/anchor/programs/token-minter/Cargo.toml b/tokens/pda-mint-authority/anchor/programs/token-minter/Cargo.toml
index 40a3daa8a..658be73d1 100644
--- a/tokens/pda-mint-authority/anchor/programs/token-minter/Cargo.toml
+++ b/tokens/pda-mint-authority/anchor/programs/token-minter/Cargo.toml
@@ -9,13 +9,13 @@ crate-type = ["cdylib", "lib"]
name = "token_minter"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
[dependencies]
-anchor-lang = { version = "0.28.0", features = ["init-if-needed"] }
-anchor-spl = { version = "0.28.0", features = ["metadata"] }
-mpl-token-metadata = { version = "1.13.1", features = ["no-entrypoint"] }
+anchor-lang = { version = "0.31.1", features = ["init-if-needed"] }
+anchor-spl = { version = "0.31.1", features = ["metadata"] }
diff --git a/tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/create.rs b/tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/create.rs
index ac033569d..c1f42e311 100644
--- a/tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/create.rs
+++ b/tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/create.rs
@@ -3,10 +3,12 @@
use {
anchor_lang::prelude::*,
anchor_spl::{
- metadata::{create_metadata_accounts_v3, CreateMetadataAccountsV3, Metadata},
+ metadata::{
+ create_metadata_accounts_v3, mpl_token_metadata::types::DataV2,
+ CreateMetadataAccountsV3, Metadata,
+ },
token::{Mint, Token},
},
- mpl_token_metadata::{pda::find_metadata_account, state::DataV2},
};
#[derive(Accounts)]
@@ -28,10 +30,12 @@ pub struct CreateToken<'info> {
)]
pub mint_account: Account<'info, Mint>,
- /// CHECK: Address validated using constraint
+ /// CHECK: Validate address by deriving pda
#[account(
mut,
- address=find_metadata_account(&mint_account.key()).0
+ seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref()],
+ bump,
+ seeds::program = token_metadata_program.key(),
)]
pub metadata_account: UncheckedAccount<'info>,
@@ -50,7 +54,7 @@ pub fn create_token(
msg!("Creating metadata account");
// PDA signer seeds
- let signer_seeds: &[&[&[u8]]] = &[&[b"mint", &[*ctx.bumps.get("mint_account").unwrap()]]];
+ let signer_seeds: &[&[&[u8]]] = &[&[b"mint", &[ctx.bumps.mint_account]]];
// Cross Program Invocation (CPI) signed by PDA
// Invoking the create_metadata_account_v3 instruction on the token metadata program
diff --git a/tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/mint.rs b/tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/mint.rs
index 000742d1d..cfc36b133 100644
--- a/tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/mint.rs
+++ b/tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/mint.rs
@@ -43,7 +43,7 @@ pub fn mint_token(ctx: Context, amount: u64) -> Result<()> {
);
// PDA signer seeds
- let signer_seeds: &[&[&[u8]]] = &[&[b"mint", &[*ctx.bumps.get("mint_account").unwrap()]]];
+ let signer_seeds: &[&[&[u8]]] = &[&[b"mint", &[ctx.bumps.mint_account]]];
// Invoke the mint_to instruction on the token program
mint_to(
diff --git a/tokens/pda-mint-authority/anchor/programs/token-minter/src/lib.rs b/tokens/pda-mint-authority/anchor/programs/token-minter/src/lib.rs
index 5ecce6d70..0fe0ff862 100644
--- a/tokens/pda-mint-authority/anchor/programs/token-minter/src/lib.rs
+++ b/tokens/pda-mint-authority/anchor/programs/token-minter/src/lib.rs
@@ -4,7 +4,7 @@ use anchor_lang::prelude::*;
use instructions::*;
pub mod instructions;
-declare_id!("A5gNtapBvMLD6i7D2t3SSyJeFtBdfb6ibvZu1hoBLzCo");
+declare_id!("3LFrPHqwk5jMrmiz48BFj6NV2k4NjobgTe1jChzx3JGD");
#[program]
pub mod token_minter {
diff --git a/tokens/pda-mint-authority/anchor/tests/bankrun.test.ts b/tokens/pda-mint-authority/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..e1e2b706c
--- /dev/null
+++ b/tokens/pda-mint-authority/anchor/tests/bankrun.test.ts
@@ -0,0 +1,69 @@
+import { describe, it } from 'node:test';
+import * as anchor from '@coral-xyz/anchor';
+import { getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { PublicKey } from '@solana/web3.js';
+import { BankrunProvider } from 'anchor-bankrun';
+import { startAnchor } from 'solana-bankrun';
+import type { TokenMinter } from '../target/types/token_minter';
+
+const IDL = require('../target/idl/token_minter.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+const METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
+
+describe('NFT Minter', async () => {
+ const context = await startAnchor(
+ '',
+ [
+ { name: 'token_minter', programId: PROGRAM_ID },
+ { name: 'token_metadata', programId: METADATA_PROGRAM_ID },
+ ],
+ [],
+ );
+ const provider = new BankrunProvider(context);
+ anchor.setProvider(provider);
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ // Derive the PDA to use as mint account address.
+ // This same PDA is also used as the mint authority.
+ const [mintPDA] = PublicKey.findProgramAddressSync([Buffer.from('mint')], program.programId);
+
+ const metadata = {
+ name: 'Solana Gold',
+ symbol: 'GOLDSOL',
+ uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json',
+ };
+
+ it('Create a token!', async () => {
+ const transactionSignature = await program.methods
+ .createToken(metadata.name, metadata.symbol, metadata.uri)
+ .accounts({
+ payer: payer.publicKey,
+ })
+ .rpc();
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintPDA}`);
+ console.log(` Transaction Signature: ${transactionSignature}`);
+ });
+
+ it('Mint 1 Token!', async () => {
+ // Derive the associated token address account for the mint and payer.
+ const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintPDA, payer.publicKey);
+
+ // Amount of tokens to mint.
+ const amount = new anchor.BN(100);
+
+ const transactionSignature = await program.methods
+ .mintToken(amount)
+ .accounts({
+ payer: payer.publicKey,
+ associatedTokenAccount: associatedTokenAccountAddress,
+ })
+ .rpc();
+
+ console.log('Success!');
+ console.log(` Associated Token Account Address: ${associatedTokenAccountAddress}`);
+ console.log(` Transaction Signature: ${transactionSignature}`);
+ });
+});
diff --git a/tokens/pda-mint-authority/anchor/tests/test.ts b/tokens/pda-mint-authority/anchor/tests/test.ts
index 7561d5f69..8b88c33d0 100644
--- a/tokens/pda-mint-authority/anchor/tests/test.ts
+++ b/tokens/pda-mint-authority/anchor/tests/test.ts
@@ -1,14 +1,9 @@
-import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
-import * as anchor from "@coral-xyz/anchor";
-import { TokenMinter } from "../target/types/token_minter";
-import { PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram } from "@solana/web3.js";
-import {
- getAssociatedTokenAddressSync,
- ASSOCIATED_TOKEN_PROGRAM_ID,
- TOKEN_PROGRAM_ID,
-} from "@solana/spl-token";
+import * as anchor from '@coral-xyz/anchor';
+import { getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { PublicKey } from '@solana/web3.js';
+import type { TokenMinter } from '../target/types/token_minter';
-describe("NFT Minter", () => {
+describe('NFT Minter', () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const payer = provider.wallet as anchor.Wallet;
@@ -16,52 +11,30 @@ describe("NFT Minter", () => {
// Derive the PDA to use as mint account address.
// This same PDA is also used as the mint authority.
- const [mintPDA] = PublicKey.findProgramAddressSync(
- [Buffer.from("mint")],
- program.programId
- );
+ const [mintPDA] = PublicKey.findProgramAddressSync([Buffer.from('mint')], program.programId);
const metadata = {
- name: "Solana Gold",
- symbol: "GOLDSOL",
- uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json",
+ name: 'Solana Gold',
+ symbol: 'GOLDSOL',
+ uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json',
};
- it("Create a token!", async () => {
- // Derive the metadata account address.
- const [metadataAddress] = PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintPDA.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- );
-
+ it('Create a token!', async () => {
const transactionSignature = await program.methods
.createToken(metadata.name, metadata.symbol, metadata.uri)
.accounts({
payer: payer.publicKey,
- mintAccount: mintPDA,
- metadataAccount: metadataAddress,
- tokenProgram: TOKEN_PROGRAM_ID,
- tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
- systemProgram: SystemProgram.programId,
- rent: SYSVAR_RENT_PUBKEY,
})
.rpc();
- console.log("Success!");
+ console.log('Success!');
console.log(` Mint Address: ${mintPDA}`);
console.log(` Transaction Signature: ${transactionSignature}`);
});
- it("Mint 1 Token!", async () => {
+ it('Mint 1 Token!', async () => {
// Derive the associated token address account for the mint and payer.
- const associatedTokenAccountAddress = getAssociatedTokenAddressSync(
- mintPDA,
- payer.publicKey
- );
+ const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintPDA, payer.publicKey);
// Amount of tokens to mint.
const amount = new anchor.BN(100);
@@ -70,18 +43,12 @@ describe("NFT Minter", () => {
.mintToken(amount)
.accounts({
payer: payer.publicKey,
- mintAccount: mintPDA,
associatedTokenAccount: associatedTokenAccountAddress,
- tokenProgram: TOKEN_PROGRAM_ID,
- associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
- systemProgram: SystemProgram.programId,
})
.rpc();
- console.log("Success!");
- console.log(
- ` Associated Token Account Address: ${associatedTokenAccountAddress}`
- );
+ console.log('Success!');
+ console.log(` Associated Token Account Address: ${associatedTokenAccountAddress}`);
console.log(` Transaction Signature: ${transactionSignature}`);
});
});
diff --git a/tokens/pda-mint-authority/native/cicd.sh b/tokens/pda-mint-authority/native/cicd.sh
index 3ec707cb8..8a16e0387 100644
--- a/tokens/pda-mint-authority/native/cicd.sh
+++ b/tokens/pda-mint-authority/native/cicd.sh
@@ -4,5 +4,5 @@
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
-cargo build-bpf --manifest-path=./program/Cargo.toml
-solana program deploy ./program/target/deploy/program.so
\ No newline at end of file
+cargo build-sbf --manifest-path=./program/Cargo.toml
+solana program deploy ./program/target/deploy/program.so
diff --git a/tokens/pda-mint-authority/native/package.json b/tokens/pda-mint-authority/native/package.json
index 3adfa05b1..c40574d38 100644
--- a/tokens/pda-mint-authority/native/package.json
+++ b/tokens/pda-mint-authority/native/package.json
@@ -1,6 +1,9 @@
{
"scripts": {
- "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts"
+ "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",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/hello_solana_program.so"
},
"dependencies": {
"@metaplex-foundation/mpl-token-metadata": "^2.5.2",
@@ -16,6 +19,7 @@
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
+ "solana-bankrun": "^0.3.0",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5"
}
diff --git a/tokens/pda-mint-authority/native/pnpm-lock.yaml b/tokens/pda-mint-authority/native/pnpm-lock.yaml
new file mode 100644
index 000000000..de38e9e59
--- /dev/null
+++ b/tokens/pda-mint-authority/native/pnpm-lock.yaml
@@ -0,0 +1,1780 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@metaplex-foundation/mpl-token-metadata':
+ specifier: ^2.5.2
+ version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.3.7
+ version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js':
+ specifier: ^1.73.0
+ version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ borsh:
+ specifier: ^0.7.0
+ version: 0.7.0
+ buffer:
+ specifier: ^6.0.3
+ version: 6.0.3
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.4.1
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+
+packages:
+
+ '@babel/runtime@7.24.6':
+ resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==}
+ engines: {node: '>=6.9.0'}
+
+ '@metaplex-foundation/beet-solana@0.4.1':
+ resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==}
+
+ '@metaplex-foundation/beet@0.7.2':
+ resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==}
+
+ '@metaplex-foundation/cusper@0.0.2':
+ resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0':
+ resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==}
+
+ '@noble/curves@1.4.0':
+ resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==}
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==}
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
+
+ '@solana/codecs-strings@2.0.0-preview.2':
+ resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+
+ '@solana/codecs@2.0.0-preview.2':
+ resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==}
+
+ '@solana/errors@2.0.0-preview.2':
+ resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
+ hasBin: true
+
+ '@solana/options@2.0.0-preview.2':
+ resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==}
+
+ '@solana/spl-token-metadata@0.1.4':
+ resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/spl-type-length-value@0.1.0':
+ resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+ engines: {node: '>=16'}
+
+ '@solana/web3.js@1.91.8':
+ resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.12':
+ resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansicolors@0.3.2:
+ resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assert@2.1.0:
+ resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base-x@4.0.0:
+ resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@5.0.0:
+ resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-arguments@1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-nan@1.3.2:
+ resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+ engines: {node: '>= 0.4'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.0:
+ resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@7.11.0:
+ resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ solana-bankrun-darwin-arm64@0.3.0:
+ resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@babel/runtime@7.24.6':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet@0.7.2':
+ dependencies:
+ ansicolors: 0.3.2
+ assert: 2.1.0
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/cusper@0.0.2': {}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - utf-8-validate
+
+ '@noble/curves@1.4.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+ fastestsmallesttextencoderdecoder: 1.0.22
+
+ '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-data-structures': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/options': 2.0.0-preview.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-preview.2':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+
+ '@solana/options@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+
+ '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - utf-8-validate
+
+ '@solana/spl-type-length-value@0.1.0':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.6
+ '@noble/curves': 1.4.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 7.11.0
+ superstruct: 0.14.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.12
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.12':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansicolors@0.3.2: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assert@2.1.0:
+ dependencies:
+ call-bind: 1.0.7
+ is-nan: 1.3.2
+ object-is: 1.1.6
+ object.assign: 4.1.5
+ util: 0.12.5
+
+ assertion-error@1.1.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.0
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ call-bind@1.0.7:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es-define-property@1.0.0:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-intrinsic@1.2.4:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ gopd@1.0.1:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.0
+
+ has-proto@1.0.3: {}
+
+ has-symbols@1.0.3: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.0.3
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-arguments@1.1.1:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-callable@1.2.7: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.0.10:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-nan@1.3.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-typed-array@1.1.13:
+ dependencies:
+ which-typed-array: 1.1.15
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ possible-typed-array-names@1.0.0: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@7.11.0:
+ dependencies:
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+
+ solana-bankrun-darwin-arm64@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.14.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.13
+ which-typed-array: 1.1.15
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-typed-array@1.1.15:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/tokens/pda-mint-authority/native/program/Cargo.toml b/tokens/pda-mint-authority/native/program/Cargo.toml
index 751bf055a..f0f4aad3f 100644
--- a/tokens/pda-mint-authority/native/program/Cargo.toml
+++ b/tokens/pda-mint-authority/native/program/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
borsh = "0.9.3"
borsh-derive = "0.9.1"
-solana-program = "1.16.10"
+solana-program = "2.0"
spl-token = { version="4.0.0", features = [ "no-entrypoint" ] }
spl-associated-token-account = { version="2.0.0", features = [ "no-entrypoint" ] }
mpl-token-metadata = { version="1.11", features = [ "no-entrypoint" ] }
diff --git a/tokens/pda-mint-authority/native/tests/instructions.ts b/tokens/pda-mint-authority/native/tests/instructions.ts
index 9da6b8e27..00871d08d 100644
--- a/tokens/pda-mint-authority/native/tests/instructions.ts
+++ b/tokens/pda-mint-authority/native/tests/instructions.ts
@@ -1,67 +1,65 @@
-import * as borsh from "borsh";
-
+import * as borsh from 'borsh';
class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
-};
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+}
export enum NftMinterInstruction {
- Init,
- Create,
- Mint,
+ Init = 0,
+ Create = 1,
+ Mint = 2,
}
export class InitArgs extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(InitArgsSchema, this));
- }
+ toBuffer() {
+ return Buffer.from(borsh.serialize(InitArgsSchema, this));
+ }
}
const InitArgsSchema = new Map([
- [
- InitArgs, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ]
- }
- ]
+ [
+ InitArgs,
+ {
+ kind: 'struct',
+ fields: [['instruction', 'u8']],
+ },
+ ],
]);
export class CreateTokenArgs extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this));
- }
-};
+ toBuffer() {
+ return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this));
+ }
+}
const CreateTokenArgsSchema = new Map([
- [
- CreateTokenArgs, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ['nft_title', 'string'],
- ['nft_symbol', 'string'],
- ['nft_uri', 'string'],
- ]
- }
- ]
+ [
+ CreateTokenArgs,
+ {
+ kind: 'struct',
+ fields: [
+ ['instruction', 'u8'],
+ ['nft_title', 'string'],
+ ['nft_symbol', 'string'],
+ ['nft_uri', 'string'],
+ ],
+ },
+ ],
]);
export class MintToArgs extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(MintToArgsSchema, this));
- }
-};
+ toBuffer() {
+ return Buffer.from(borsh.serialize(MintToArgsSchema, this));
+ }
+}
const MintToArgsSchema = new Map([
- [
- MintToArgs, {
- kind: 'struct',
- fields: [
- ['instruction', 'u8'],
- ]
- }
- ]
-]);
\ No newline at end of file
+ [
+ MintToArgs,
+ {
+ kind: 'struct',
+ fields: [['instruction', 'u8']],
+ },
+ ],
+]);
diff --git a/tokens/pda-mint-authority/native/tests/test.ts b/tokens/pda-mint-authority/native/tests/test.ts
index 40704ed8e..3d59aad33 100644
--- a/tokens/pda-mint-authority/native/tests/test.ts
+++ b/tokens/pda-mint-authority/native/tests/test.ts
@@ -1,180 +1,144 @@
-import {
- PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID
-} from '@metaplex-foundation/mpl-token-metadata';
+import { Buffer } from 'node:buffer';
+import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata';
+import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddress } from '@solana/spl-token';
import {
- Connection,
- Keypair,
- PublicKey,
- SystemProgram,
- SYSVAR_RENT_PUBKEY,
- TransactionInstruction,
- Transaction,
- sendAndConfirmTransaction,
+ Connection,
+ Keypair,
+ PublicKey,
+ SYSVAR_RENT_PUBKEY,
+ SystemProgram,
+ Transaction,
+ TransactionInstruction,
+ sendAndConfirmTransaction,
} from '@solana/web3.js';
-import {
- ASSOCIATED_TOKEN_PROGRAM_ID,
- getAssociatedTokenAddress,
- TOKEN_PROGRAM_ID,
-} from '@solana/spl-token';
-import { Buffer } from "buffer";
-import {
- CreateTokenArgs,
- InitArgs,
- MintToArgs,
- NftMinterInstruction,
-} from './instructions';
-
+import { CreateTokenArgs, InitArgs, MintToArgs, NftMinterInstruction } from './instructions';
function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
-};
+ return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8'))));
+}
+
+describe('NFT Minter', async () => {
+ // const connection = new Connection(`http://localhost:8899`, 'confirmed');
+ const connection = new Connection('https://api.devnet.solana.com/', 'confirmed');
+ const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`);
+ const program = createKeypairFromFile('./program/target/deploy/program-keypair.json');
+
+ const mintAuthorityPublicKey = PublicKey.findProgramAddressSync([Buffer.from('mint_authority')], program.publicKey)[0];
+
+ const mintKeypair: Keypair = Keypair.generate();
+
+ it('Init Mint Authority PDA', async () => {
+ const instructionData = new InitArgs({
+ instruction: NftMinterInstruction.Init,
+ });
+
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true },
+ { pubkey: payer.publicKey, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: program.publicKey,
+ data: instructionData.toBuffer(),
+ });
+
+ const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer], { skipPreflight: true });
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ console.log(` Tx Signature: ${sx}`);
+ });
+
+ it('Create an NFT!', async () => {
+ const metadataAddress = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+ const instructionData = new CreateTokenArgs({
+ instruction: NftMinterInstruction.Create,
+ nft_title: 'Homer NFT',
+ nft_symbol: 'HOMR',
+ nft_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json',
+ });
-describe("NFT Minter", async () => {
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
+ { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, // Mint authority account
+ { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
+ {
+ pubkey: TOKEN_METADATA_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ }, // Token metadata program
+ ],
+ programId: program.publicKey,
+ data: instructionData.toBuffer(),
+ });
- // const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const connection = new Connection(`https://api.devnet.solana.com/`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const program = createKeypairFromFile('./program/target/deploy/program-keypair.json');
+ const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, mintKeypair], { skipPreflight: true });
- const mintAuthorityPublicKey = PublicKey.findProgramAddressSync(
- [Buffer.from("mint_authority")],
- program.publicKey,
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ console.log(` Tx Signature: ${sx}`);
+ });
+
+ it('Mint the NFT to your wallet!', async () => {
+ const metadataAddress = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+
+ const editionAddress = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer(), Buffer.from('edition')],
+ TOKEN_METADATA_PROGRAM_ID,
)[0];
- const mintKeypair: Keypair = Keypair.generate();
-
- it("Init Mint Authority PDA", async () => {
-
- const instructionData = new InitArgs({
- instruction: NftMinterInstruction.Init,
- });
-
- let ix = new TransactionInstruction({
- keys: [
- { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true },
- { pubkey: payer.publicKey, isSigner: false, isWritable: true },
- { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
- ],
- programId: program.publicKey,
- data: instructionData.toBuffer(),
- });
-
- const sx = await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer],
- { skipPreflight: true }
- );
-
- console.log("Success!");
- console.log(` Mint Address: ${mintKeypair.publicKey}`);
- console.log(` Tx Signature: ${sx}`);
+ const associatedTokenAccountAddress = await getAssociatedTokenAddress(mintKeypair.publicKey, payer.publicKey);
+
+ const instructionData = new MintToArgs({
+ instruction: NftMinterInstruction.Mint,
});
- it("Create an NFT!", async () => {
-
- const metadataAddress = (PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- ))[0];
-
- const instructionData = new CreateTokenArgs({
- instruction: NftMinterInstruction.Create,
- nft_title: "Homer NFT",
- nft_symbol: "HOMR",
- nft_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json",
- });
-
- let ix = new TransactionInstruction({
- keys: [
- { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
- { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, // Mint authority account
- { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
- { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
- { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
- { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
- { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
- { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program
- ],
- programId: program.publicKey,
- data: instructionData.toBuffer(),
- });
-
- const sx = await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, mintKeypair],
- { skipPreflight: true }
- );
-
- console.log("Success!");
- console.log(` Mint Address: ${mintKeypair.publicKey}`);
- console.log(` Tx Signature: ${sx}`);
+ const ix = new TransactionInstruction({
+ keys: [
+ { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account
+ { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
+ { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account
+ { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, // Mint authority account
+ {
+ pubkey: associatedTokenAccountAddress,
+ isSigner: false,
+ isWritable: true,
+ }, // ATA
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
+ {
+ pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ }, // Associated token program
+ {
+ pubkey: TOKEN_METADATA_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ }, // Token metadata program
+ ],
+ programId: program.publicKey,
+ data: instructionData.toBuffer(),
});
- it("Mint the NFT to your wallet!", async () => {
-
- const metadataAddress = (PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- ],
- TOKEN_METADATA_PROGRAM_ID
- ))[0];
-
- const editionAddress = (PublicKey.findProgramAddressSync(
- [
- Buffer.from("metadata"),
- TOKEN_METADATA_PROGRAM_ID.toBuffer(),
- mintKeypair.publicKey.toBuffer(),
- Buffer.from("edition"),
- ],
- TOKEN_METADATA_PROGRAM_ID
- ))[0];
-
- const associatedTokenAccountAddress = await getAssociatedTokenAddress(
- mintKeypair.publicKey,
- payer.publicKey,
- );
-
- const instructionData = new MintToArgs({
- instruction: NftMinterInstruction.Mint,
- });
-
- let ix = new TransactionInstruction({
- keys: [
- { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account
- { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
- { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account
- { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, // Mint authority account
- { pubkey: associatedTokenAccountAddress, isSigner: false, isWritable: true }, // ATA
- { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
- { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
- { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
- { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
- { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Associated token program
- { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program
- ],
- programId: program.publicKey,
- data: instructionData.toBuffer(),
- });
-
- const sx = await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer],
- );
-
- console.log("Success!");
- console.log(` ATA Address: ${associatedTokenAccountAddress}`);
- console.log(` Tx Signature: ${sx}`);
+ const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]);
+
+ console.log('Success!');
+ console.log(` ATA Address: ${associatedTokenAccountAddress}`);
+ console.log(` Tx Signature: ${sx}`);
});
-});
\ No newline at end of file
+});
diff --git a/tokens/pda-mint-authority/native/tsconfig.json b/tokens/pda-mint-authority/native/tsconfig.json
index b7d51edac..cd5d2e3d0 100644
--- a/tokens/pda-mint-authority/native/tsconfig.json
+++ b/tokens/pda-mint-authority/native/tsconfig.json
@@ -5,6 +5,6 @@
"lib": ["es2015"],
"module": "commonjs",
"target": "es6",
- "esModuleInterop": true,
+ "esModuleInterop": true
}
}
diff --git a/tokens/pda-mint-authority/solang/.gitignore b/tokens/pda-mint-authority/solang/.gitignore
deleted file mode 100644
index 8d401163f..000000000
--- a/tokens/pda-mint-authority/solang/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-
-.anchor
-.DS_Store
-target
-**/*.rs.bk
-node_modules
-test-ledger
-.yarn
diff --git a/tokens/pda-mint-authority/solang/Anchor.toml b/tokens/pda-mint-authority/solang/Anchor.toml
deleted file mode 100644
index 828efd04e..000000000
--- a/tokens/pda-mint-authority/solang/Anchor.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-[features]
-seeds = false
-skip-lint = false
-[programs.localnet]
-pda_mint_authority = "J2eUKE878XKXJZaP7vXwxgWnWnNQMqHSkMPoRFQwa86b"
-
-[registry]
-url = "https://api.apr.dev/"
-
-[provider]
-cluster = "localnet"
-wallet = "~/.config/solana/id.json"
-
-[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
-
-[test.validator]
-url = "https://api.mainnet-beta.solana.com/"
-
-[[test.validator.clone]]
-address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
\ No newline at end of file
diff --git a/tokens/pda-mint-authority/solang/libraries/mpl_metadata.sol b/tokens/pda-mint-authority/solang/libraries/mpl_metadata.sol
deleted file mode 100644
index 7b030a3a7..000000000
--- a/tokens/pda-mint-authority/solang/libraries/mpl_metadata.sol
+++ /dev/null
@@ -1,134 +0,0 @@
-import 'solana';
-
-// Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/instruction/metadata.rs#L449
-// Solidity does not support Rust Option<> type, so we need to handle it manually
-// Requires creating a struct for each combination of Option<> types
-// If bool for Option<> type is false, comment out the corresponding struct field otherwise instruction fails with "invalid account data"
-// TODO: figure out better way to handle Option<> types
-library MplMetadata {
- address constant metadataProgramId = address"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s";
- address constant systemAddress = address"11111111111111111111111111111111";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/instruction/metadata.rs#L31
- struct CreateMetadataAccountArgsV3 {
- DataV2 data;
- bool isMutable;
- bool collectionDetailsPresent; // To handle Rust Option<> in Solidity
- // CollectionDetails collectionDetails;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/state/data.rs#L22
- struct DataV2 {
- string name;
- string symbol;
- string uri;
- uint16 sellerFeeBasisPoints;
- bool creatorsPresent; // To handle Rust Option<> in Solidity
- // Creator[] creators;
- bool collectionPresent; // To handle Rust Option<> in Solidity
- // Collection collection;
- bool usesPresent; // To handle Rust Option<> in Solidity
- // Uses uses;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L10
- struct Creator {
- address creatorAddress;
- bool verified;
- uint8 share;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L66
- struct Collection {
- bool verified;
- address key;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/state/collection.rs#L57
- struct CollectionDetails {
- CollectionDetailsType detailType;
- uint64 size;
- }
- enum CollectionDetailsType {
- V1
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L43
- struct Uses {
- UseMethod useMethod;
- uint64 remaining;
- uint64 total;
- }
-
- // Reference: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/bubblegum/program/src/state/metaplex_adapter.rs#L35
- enum UseMethod {
- Burn,
- Multiple,
- Single
- }
-
- function create_metadata_account(
- address metadata,
- address mint,
- address mintAuthority,
- address payer,
- address updateAuthority,
- string name,
- string symbol,
- string uri
- ) public {
- // // Example of how to add a Creator[] array to the DataV2 struct
- // Creator[] memory creators = new Creator[](1);
- // creators[0] = Creator({
- // creatorAddress: payer,
- // verified: false,
- // share: 100
- // });
-
- DataV2 data = DataV2({
- name: name,
- symbol: symbol,
- uri: uri,
- sellerFeeBasisPoints: 0,
- creatorsPresent: false,
- // creators: creators,
- collectionPresent: false,
- // collection: Collection({
- // verified: false,
- // key: address(0)
- // }),
- usesPresent: false
- // uses: Uses({
- // useMethod: UseMethod.Burn,
- // remaining: 0,
- // total: 0
- // })
- });
-
- CreateMetadataAccountArgsV3 args = CreateMetadataAccountArgsV3({
- data: data,
- isMutable: true,
- collectionDetailsPresent: false
- // collectionDetails: CollectionDetails({
- // detailType: CollectionDetailsType.V1,
- // size: 0
- // })
- });
-
- AccountMeta[7] metas = [
- AccountMeta({pubkey: metadata, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: mintAuthority, is_writable: false, is_signer: true}),
- AccountMeta({pubkey: payer, is_writable: true, is_signer: true}),
- AccountMeta({pubkey: updateAuthority, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: systemAddress, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: rentAddress, is_writable: false, is_signer: false})
- ];
-
- bytes1 discriminator = 33;
- bytes instructionData = abi.encode(discriminator, args);
-
- metadataProgramId.call{accounts: metas}(instructionData);
- }
-}
diff --git a/tokens/pda-mint-authority/solang/libraries/spl_token.sol b/tokens/pda-mint-authority/solang/libraries/spl_token.sol
deleted file mode 100644
index 9316305af..000000000
--- a/tokens/pda-mint-authority/solang/libraries/spl_token.sol
+++ /dev/null
@@ -1,387 +0,0 @@
-import 'solana';
-import 'system_instruction.sol';
-
-library SplToken {
- address constant tokenProgramId = address"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
- address constant associatedTokenProgramId = address"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
- enum TokenInstruction {
- InitializeMint, // 0
- InitializeAccount, // 1
- InitializeMultisig, // 2
- Transfer, // 3
- Approve, // 4
- Revoke, // 5
- SetAuthority, // 6
- MintTo, // 7
- Burn, // 8
- CloseAccount, // 9
- FreezeAccount, // 10
- ThawAccount, // 11
- TransferChecked, // 12
- ApproveChecked, // 13
- MintToChecked, // 14
- BurnChecked, // 15
- InitializeAccount2, // 16
- SyncNative, // 17
- InitializeAccount3, // 18
- InitializeMultisig2, // 19
- InitializeMint2, // 20
- GetAccountDataSize, // 21
- InitializeImmutableOwner, // 22
- AmountToUiAmount, // 23
- UiAmountToAmount, // 24
- InitializeMintCloseAuthority, // 25
- TransferFeeExtension, // 26
- ConfidentialTransferExtension, // 27
- DefaultAccountStateExtension, // 28
- Reallocate, // 29
- MemoTransferExtension, // 30
- CreateNativeMint // 31
- }
-
- /// Initialize a new token account.
- ///
- /// @param tokenAccount the public key of the token account to initialize
- /// @param mint the public key of the mint account for this new token account
- /// @param owner the public key of the owner of this new token account
- function initialize_account(address tokenAccount, address mint, address owner) internal{
- bytes instr = new bytes(1);
-
- instr[0] = uint8(TokenInstruction.InitializeAccount);
- AccountMeta[4] metas = [
- AccountMeta({pubkey: tokenAccount, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: rentAddress, is_writable: false, is_signer: false})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Initialize a new associated token account.
- ///
- /// @param payer the public key of the payer to create the associated token account
- /// @param tokenAccount the public key of the token account to initialize
- /// @param mint the public key of the mint account for this new token account
- /// @param owner the public key of the owner of this new token account
- function create_associated_token_account(address payer, address tokenAccount, address mint, address owner) internal {
- AccountMeta[6] metas = [
- AccountMeta({pubkey: payer, is_writable: true, is_signer: true}),
- AccountMeta({pubkey: tokenAccount, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: SystemInstruction.systemAddress, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: SplToken.tokenProgramId, is_writable: false, is_signer: false})
- ];
-
- bytes instructionData = abi.encode((0));
- associatedTokenProgramId.call{accounts: metas}(instructionData);
- }
-
- // Initialize mint instruction data
- struct InitializeMintInstruction {
- uint8 instruction;
- uint8 decimals;
- address mintAuthority;
- uint8 freezeAuthorityOption;
- address freezeAuthority;
- }
-
- /// Initialize a new mint account.
- ///
- /// @param mint the public key of the mint account to initialize
- /// @param mintAuthority the public key of the mint authority
- /// @param freezeAuthority the public key of the freeze authority
- /// @param decimals the decimals of the mint
- function initialize_mint(address mint, address mintAuthority, address freezeAuthority, uint8 decimals) internal {
- InitializeMintInstruction instr = InitializeMintInstruction({
- instruction: 20,
- decimals: decimals,
- mintAuthority: mintAuthority,
- freezeAuthorityOption: 1,
- freezeAuthority: freezeAuthority
- });
-
- AccountMeta[1] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Create and initialize a new mint account in one instruction
- ///
- /// @param payer the public key of the account paying to create the mint account
- /// @param mint the public key of the mint account to initialize
- /// @param mintAuthority the public key of the mint authority
- /// @param freezeAuthority the public key of the freeze authority
- /// @param decimals the decimals of the mint
- function create_mint(address payer, address mint, address mintAuthority, address freezeAuthority, uint8 decimals) internal {
- // Invoke System Program to create a new account for the mint account
- // Program owner is set to the Token program
- SystemInstruction.create_account(
- payer, // lamports sent from this account (payer)
- mint, // lamports sent to this account (account to be created)
- 1461600, // lamport amount (minimum lamports for mint account)
- 82, // space required for the account (mint account)
- SplToken.tokenProgramId // new program owner
- );
-
- InitializeMintInstruction instr = InitializeMintInstruction({
- instruction: 20,
- decimals: decimals,
- mintAuthority: mintAuthority,
- freezeAuthorityOption: 1,
- freezeAuthority: freezeAuthority
- });
-
- AccountMeta[1] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Mint new tokens. The transaction should be signed by the mint authority keypair
- ///
- /// @param mint the account of the mint
- /// @param account the token account where the minted tokens should go
- /// @param authority the public key of the mint authority
- /// @param amount the amount of tokens to mint
- function mint_to(address mint, address account, address authority, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.MintTo);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: authority, is_writable: true, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Transfer @amount token from @from to @to. The transaction should be signed by the owner
- /// keypair of the from account.
- ///
- /// @param from the account to transfer tokens from
- /// @param to the account to transfer tokens to
- /// @param owner the publickey of the from account owner keypair
- /// @param amount the amount to transfer
- function transfer(address from, address to, address owner, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.Transfer);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: to, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: true, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Burn @amount tokens in account. This transaction should be signed by the owner.
- ///
- /// @param account the acount for which tokens should be burned
- /// @param mint the mint for this token
- /// @param owner the publickey of the account owner keypair
- /// @param amount the amount to transfer
- function burn(address account, address mint, address owner, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.Burn);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: true, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Approve an amount to a delegate. This transaction should be signed by the owner
- ///
- /// @param account the account for which a delegate should be approved
- /// @param delegate the delegate publickey
- /// @param owner the publickey of the account owner keypair
- /// @param amount the amount to approve
- function approve(address account, address delegate, address owner, uint64 amount) internal {
- bytes instr = new bytes(9);
-
- instr[0] = uint8(TokenInstruction.Approve);
- instr.writeUint64LE(amount, 1);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: delegate, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Revoke a previously approved delegate. This transaction should be signed by the owner. After
- /// this transaction, no delgate is approved for any amount.
- ///
- /// @param account the account for which a delegate should be approved
- /// @param owner the publickey of the account owner keypair
- function revoke(address account, address owner) internal {
- bytes instr = new bytes(1);
-
- instr[0] = uint8(TokenInstruction.Revoke);
-
- AccountMeta[2] metas = [
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: owner, is_writable: false, is_signer: true})
- ];
-
- tokenProgramId.call{accounts: metas}(instr);
- }
-
- /// Get the total supply for the mint, i.e. the total amount in circulation
- /// @param mint the mint for this token
- function total_supply(address mint) internal view returns (uint64) {
- AccountInfo account = get_account_info(mint);
-
- return account.data.readUint64LE(36);
- }
-
- /// Get the balance for an account.
- ///
- /// @param account the account for which we want to know a balance
- function get_balance(address account) internal view returns (uint64) {
- AccountInfo ai = get_account_info(account);
-
- return ai.data.readUint64LE(64);
- }
-
- /// Get the account info for an account. This walks the transaction account infos
- /// and find the account info, or the transaction fails.
- ///
- /// @param account the account for which we want to have the acount info.
- function get_account_info(address account) internal view returns (AccountInfo) {
- for (uint64 i = 0; i < tx.accounts.length; i++) {
- AccountInfo ai = tx.accounts[i];
- if (ai.key == account) {
- return ai;
- }
- }
-
- revert("account missing");
- }
-
- /// This enum represents the state of a token account
- enum AccountState {
- Uninitialized,
- Initialized,
- Frozen
- }
-
- /// This struct is the return of 'get_token_account_data'
- struct TokenAccountData {
- address mintAccount;
- address owner;
- uint64 balance;
- bool delegate_present;
- address delegate;
- AccountState state;
- bool is_native_present;
- uint64 is_native;
- uint64 delegated_amount;
- bool close_authority_present;
- address close_authority;
- }
-
- /// Fetch the owner, mint account and balance for an associated token account.
- ///
- /// @param tokenAccount The token account
- /// @return struct TokenAccountData
- function get_token_account_data(address tokenAccount) public view returns (TokenAccountData) {
- AccountInfo ai = get_account_info(tokenAccount);
-
- TokenAccountData data = TokenAccountData(
- {
- mintAccount: ai.data.readAddress(0),
- owner: ai.data.readAddress(32),
- balance: ai.data.readUint64LE(64),
- delegate_present: ai.data.readUint32LE(72) > 0,
- delegate: ai.data.readAddress(76),
- state: AccountState(ai.data[108]),
- is_native_present: ai.data.readUint32LE(109) > 0,
- is_native: ai.data.readUint64LE(113),
- delegated_amount: ai.data.readUint64LE(121),
- close_authority_present: ai.data.readUint32LE(129) > 10,
- close_authority: ai.data.readAddress(133)
- }
- );
-
- return data;
- }
-
- // This struct is the return of 'get_mint_account_data'
- struct MintAccountData {
- bool authority_present;
- address mint_authority;
- uint64 supply;
- uint8 decimals;
- bool is_initialized;
- bool freeze_authority_present;
- address freeze_authority;
- }
-
- /// Retrieve the information saved in a mint account
- ///
- /// @param mintAccount the account whose information we want to retrive
- /// @return the MintAccountData struct
- function get_mint_account_data(address mintAccount) public view returns (MintAccountData) {
- AccountInfo ai = get_account_info(mintAccount);
-
- uint32 authority_present = ai.data.readUint32LE(0);
- uint32 freeze_authority_present = ai.data.readUint32LE(46);
- MintAccountData data = MintAccountData( {
- authority_present: authority_present > 0,
- mint_authority: ai.data.readAddress(4),
- supply: ai.data.readUint64LE(36),
- decimals: uint8(ai.data[44]),
- is_initialized: ai.data[45] > 0,
- freeze_authority_present: freeze_authority_present > 0,
- freeze_authority: ai.data.readAddress(50)
- });
-
- return data;
- }
-
- // A mint account has an authority, whose type is one of the members of this struct.
- enum AuthorityType {
- MintTokens,
- FreezeAccount,
- AccountOwner,
- CloseAccount
- }
-
- /// Remove the mint authority from a mint account
- ///
- /// @param mintAccount the public key for the mint account
- /// @param mintAuthority the public for the mint authority
- function remove_mint_authority(address mintAccount, address mintAuthority) public {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: mintAccount, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: mintAuthority, is_signer: true, is_writable: false})
- ];
-
- bytes data = new bytes(9);
- data[0] = uint8(TokenInstruction.SetAuthority);
- data[1] = uint8(AuthorityType.MintTokens);
- data[3] = 0;
-
- tokenProgramId.call{accounts: metas}(data);
- }
-}
diff --git a/tokens/pda-mint-authority/solang/libraries/system_instruction.sol b/tokens/pda-mint-authority/solang/libraries/system_instruction.sol
deleted file mode 100644
index 0ba370c8c..000000000
--- a/tokens/pda-mint-authority/solang/libraries/system_instruction.sol
+++ /dev/null
@@ -1,300 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-// Disclaimer: This library provides a bridge for Solidity to interact with Solana's system instructions. Although it is production ready,
-// it has not been audited for security, so use it at your own risk.
-
-import 'solana';
-
-library SystemInstruction {
- address constant systemAddress = address"11111111111111111111111111111111";
- address constant recentBlockHashes = address"SysvarRecentB1ockHashes11111111111111111111";
- address constant rentAddress = address"SysvarRent111111111111111111111111111111111";
- uint64 constant state_size = 80;
-
- enum Instruction {
- CreateAccount,
- Assign,
- Transfer,
- CreateAccountWithSeed,
- AdvanceNounceAccount,
- WithdrawNonceAccount,
- InitializeNonceAccount,
- AuthorizeNonceAccount,
- Allocate,
- AllocateWithSeed,
- AssignWithSeed,
- TransferWithSeed,
- UpgradeNonceAccount // This is not available on Solana v1.9.15
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to public key for the account to be created
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account(address from, address to, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.CreateAccount), lamports, space, owner);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param to the public key for the account to be created. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'to' address using the seed
- /// @param seed the string utilized to created the 'to' public key
- /// @param lamports amount of lamports to be transfered to the new account
- /// @param space the size in bytes that is going to be made available for the account
- /// @param owner public key for the program that will own the account being created
- function create_account_with_seed(address from, address to, address base, string seed, uint64 lamports, uint64 space, address owner) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- uint32 buffer_size = 92 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.CreateAccountWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- uint32 offset = seed.length + 44;
- bincode.writeUint64LE(lamports, offset);
- offset += 8;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Assign account to a program (owner)
- ///
- /// @param pubkey the public key for the account whose owner is going to be reassigned
- /// @param owner the public key for the new account owner
- function assign(address pubkey, address owner) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pubkey, is_signer: true, is_writable: true})
- ];
- bytes bincode = abi.encode(uint32(Instruction.Assign), owner);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Assign account to a program (owner) based on a seed
- ///
- /// @param addr the public key for the account whose owner is going to be reassigned. The public key must match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to created the 'addr' public key
- /// @param owner the public key for the new program owner
- function assign_with_seed(address addr, address base, string seed, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
-
- uint32 buffer_size = 76 + seed.length;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.AssignWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(uint64(seed.length), 36);
- bincode.writeString(seed, 44);
- bincode.writeAddress(owner, 44 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports between accounts
- ///
- /// @param from public key for the funding account
- /// @param to public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer(address from, address to, uint64 lamports) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: from, is_signer: true, is_writable: true}),
- AccountMeta({pubkey: to, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Transfer), lamports);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Transfer lamports from a derived address
- ///
- /// @param from_pubkey The funding account public key. It should match create_with_seed(from_base, seed, from_owner)
- /// @param from_base the base address that derived the 'from_pubkey' key using the seed
- /// @param seed the string utilized to create the 'from_pubkey' public key
- /// @param from_owner owner to use to derive the funding account address
- /// @param to_pubkey the public key for the recipient account
- /// @param lamports amount of lamports to transfer
- function transfer_with_seed(address from_pubkey, address from_base, string seed, address from_owner, address to_pubkey, uint64 lamports) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: from_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: from_base, is_signer: true, is_writable: false}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true})
- ];
-
- uint32 buffer_size = seed.length + 52;
- bytes bincode = new bytes(buffer_size);
- bincode.writeUint32LE(uint32(Instruction.TransferWithSeed), 0);
- bincode.writeUint64LE(lamports, 4);
- bincode.writeUint64LE(seed.length, 12);
- bincode.writeString(seed, 20);
- bincode.writeAddress(from_owner, 20 + seed.length);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Allocate space in a (possibly new) account without funding
- ///
- /// @param pub_key account for which to allocate space
- /// @param space number of bytes of memory to allocate
- function allocate(address pub_key, uint64 space) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: pub_key, is_signer: true, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.Allocate), space);
-
- systemAddress.call{accounts: meta}(bincode);
- }
-
- /// Allocate space for an assign an account at an address derived from a base public key and a seed
- ///
- /// @param addr account for which to allocate space. It should match create_with_seed(base, seed, owner)
- /// @param base the base address that derived the 'addr' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param space number of bytes of memory to allocate
- /// @param owner owner to use to derive the 'addr' account address
- function allocate_with_seed(address addr, address base, string seed, uint64 space, address owner) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: addr, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: base, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = new bytes(seed.length + 84);
- bincode.writeUint32LE(uint32(Instruction.AllocateWithSeed), 0);
- bincode.writeAddress(base, 4);
- bincode.writeUint64LE(seed.length, 36);
- bincode.writeString(seed, 44);
- uint32 offset = 44 + seed.length;
- bincode.writeUint64LE(space, offset);
- offset += 8;
- bincode.writeAddress(owner, offset);
-
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new nonce account on Solana using a public key derived from a seed
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the account to be created. The public key must match create_with_seed(base, seed, systemAddress)
- /// @param base the base address that derived the 'nonce' key using the seed
- /// @param seed the string utilized to create the 'addr' public key
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account_with_seed(address from, address nonce, address base, string seed, address authority, uint64 lamports) internal {
- create_account_with_seed(from, nonce, base, seed, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Create a new account on Solana
- ///
- /// @param from public key for the account from which to transfer lamports to the new account
- /// @param nonce the public key for the nonce account to be created
- /// @param authority The entity authorized to execute nonce instructions on the account
- /// @param lamports amount of lamports to be transfered to the new account
- function create_nonce_account(address from, address nonce, address authority, uint64 lamports) internal {
- create_account(from, nonce, lamports, state_size, systemAddress);
-
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.InitializeNonceAccount), authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Consumes a stored nonce, replacing it with a successor
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the publick key for the entity authorized to execute instructins on the account
- function advance_nonce_account(address nonce_pubkey, address authorized_pubkey) internal {
- AccountMeta[3] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AdvanceNounceAccount));
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Withdraw funds from a nonce account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param to_pubkey the recipient account
- /// @param lamports the number of lamports to withdraw
- function withdraw_nonce_account(address nonce_pubkey, address authorized_pubkey, address to_pubkey, uint64 lamports) internal {
- AccountMeta[5] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: to_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: recentBlockHashes, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: rentAddress, is_signer: false, is_writable: false}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.WithdrawNonceAccount), lamports);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// Change the entity authorized to execute nonce instructions on the account
- ///
- /// @param nonce_pubkey the public key for the nonce account
- /// @param authorized_pubkey the public key for the entity authorized to execute instructins on the account
- /// @param new_authority
- function authorize_nonce_account(address nonce_pubkey, address authorized_pubkey, address new_authority) internal {
- AccountMeta[2] metas = [
- AccountMeta({pubkey: nonce_pubkey, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: authorized_pubkey, is_signer: true, is_writable: false})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.AuthorizeNonceAccount), new_authority);
- systemAddress.call{accounts: metas}(bincode);
- }
-
- /// One-time idempotent upgrade of legacy nonce version in order to bump them out of chain domain.
- ///
- /// @param nonce the public key for the nonce account
- // This is not available on Solana v1.9.15
- function upgrade_nonce_account(address nonce) internal {
- AccountMeta[1] meta = [
- AccountMeta({pubkey: nonce, is_signer: false, is_writable: true})
- ];
-
- bytes bincode = abi.encode(uint32(Instruction.UpgradeNonceAccount));
- systemAddress.call{accounts: meta}(bincode);
- }
-}
diff --git a/tokens/pda-mint-authority/solang/package.json b/tokens/pda-mint-authority/solang/package.json
deleted file mode 100644
index 7fa094e46..000000000
--- a/tokens/pda-mint-authority/solang/package.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "scripts": {
- "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
- "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
- },
- "dependencies": {
- "@coral-xyz/anchor": "^0.28.0",
- "@metaplex-foundation/js": "^0.19.4",
- "@project-serum/anchor": "^0.26.0",
- "@solana/spl-token": "^0.3.8"
- },
- "devDependencies": {
- "@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"
- }
-}
diff --git a/tokens/pda-mint-authority/solang/solidity/pda-mint-authority.sol b/tokens/pda-mint-authority/solang/solidity/pda-mint-authority.sol
deleted file mode 100644
index e55dc698f..000000000
--- a/tokens/pda-mint-authority/solang/solidity/pda-mint-authority.sol
+++ /dev/null
@@ -1,185 +0,0 @@
-
-import "../libraries/spl_token.sol";
-import "solana";
-
-@program_id("J2eUKE878XKXJZaP7vXwxgWnWnNQMqHSkMPoRFQwa86b")
-contract pda_mint_authority {
- bytes1 bump; // stores the bump for the pda address
-
- @payer(payer)
- @seed("mint_authority") // hard-coded seed
- constructor(
- @bump bytes1 _bump // bump for the pda address
- ) {
- // Independently derive the PDA address from the seeds, bump, and programId
- (address pda, bytes1 pdaBump) = try_find_program_address(["mint_authority"], type(pda_mint_authority).program_id);
-
- // Verify that the bump passed to the constructor matches the bump derived from the seeds and programId
- // This ensures that only the canonical pda address can be used to create the account (first bump that generates a valid pda address)
- require(pdaBump == _bump, 'INVALID_BUMP');
-
- bump = _bump;
- }
-
- function createTokenMint(
- address payer, // payer account
- address mint, // mint account to be created
- address mintAuthority, // mint authority for the mint account
- address freezeAuthority, // freeze authority for the mint account
- address metadata, // metadata account to be created
- uint8 decimals, // decimals for the mint account
- string name, // name for the metadata account
- string symbol, // symbol for the metadata account
- string uri // uri for the metadata account
- ) public {
- // Invoke System Program to create a new account for the mint account and,
- // Invoke Token Program to initialize the mint account
- // Set mint authority, freeze authority, and decimals for the mint account
- SplToken.create_mint(
- payer, // payer account
- mint, // mint account
- mintAuthority, // mint authority
- freezeAuthority, // freeze authority
- decimals // decimals
- );
-
- // Invoke Metadata Program to create a new account for the metadata account
- _createMetadataAccount(
- metadata, // metadata account
- mint, // mint account
- mintAuthority, // mint authority
- payer, // payer
- payer, // update authority (of the metadata account)
- name, // name
- symbol, // symbol
- uri // uri (off-chain metadata json)
- );
- }
-
- // Create metadata account, must reimplement manually to sign with PDA, which is the mint authority
- function _createMetadataAccount(
- address metadata, // metadata account address
- address mint, // mint account address
- address mintAuthority, // mint authority
- address payer, // payer
- address updateAuthority, // update authority for the metadata account
- string name, // token name
- string symbol, // token symbol
- string uri // token uri
- ) private {
- // // Independently derive the PDA address from the seeds, bump, and programId
- (address pda, bytes1 _bump) = try_find_program_address(["mint_authority"], type(pda_mint_authority).program_id);
-
- require(address(this) == pda, 'INVALID_PDA');
-
- DataV2 data = DataV2({
- name: name,
- symbol: symbol,
- uri: uri,
- sellerFeeBasisPoints: 0,
- creatorsPresent: false,
- collectionPresent: false,
- usesPresent: false
- });
-
- CreateMetadataAccountArgsV3 args = CreateMetadataAccountArgsV3({
- data: data,
- isMutable: true,
- collectionDetailsPresent: false
- });
-
- AccountMeta[7] metas = [
- AccountMeta({pubkey: metadata, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: mint, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: mintAuthority, is_writable: false, is_signer: true}),
- AccountMeta({pubkey: payer, is_writable: true, is_signer: true}),
- AccountMeta({pubkey: updateAuthority, is_writable: false, is_signer: false}),
- AccountMeta({pubkey: address"11111111111111111111111111111111", is_writable: false, is_signer: false}),
- AccountMeta({pubkey: address"SysvarRent111111111111111111111111111111111", is_writable: false, is_signer: false})
- ];
-
- bytes1 discriminator = 33;
- bytes instructionData = abi.encode(discriminator, args);
-
- address"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s".call{accounts: metas, seeds: [["mint_authority", abi.encode(_bump)]]}(instructionData);
- }
-
- struct CreateMetadataAccountArgsV3 {
- DataV2 data;
- bool isMutable;
- bool collectionDetailsPresent; // To handle Rust Option<> in Solidity
- }
-
- struct DataV2 {
- string name;
- string symbol;
- string uri;
- uint16 sellerFeeBasisPoints;
- bool creatorsPresent; // To handle Rust Option<> in Solidity
- bool collectionPresent; // To handle Rust Option<> in Solidity
- bool usesPresent; // To handle Rust Option<> in Solidity
- }
-
- function mintTo(address payer, address tokenAccount, address mint, address owner) public {
- // Create an associated token account for the owner to receive the minted token
- SplToken.create_associated_token_account(
- payer, // payer account
- tokenAccount, // associated token account address
- mint, // mint account
- owner // owner account
- );
-
- // Mint 1 token to the associated token account
- _mintTo(
- mint, // mint account
- tokenAccount, // token account
- 1 // amount
- );
-
- // Remove mint authority from mint account
- _removeMintAuthority(
- mint // mint
- );
- }
-
- // Invoke the token program to mint tokens to a token account, using a PDA as the mint authority
- function _mintTo(address mint, address account, uint64 amount) private {
- // Independently derive the PDA address from the seeds, bump, and programId
- (address pda, bytes1 _bump) = try_find_program_address(["mint_authority"], type(pda_mint_authority).program_id);
- require(address(this) == pda, 'INVALID_PDA');
-
- // Prepare instruction data
- bytes instructionData = new bytes(9);
- instructionData[0] = uint8(7); // MintTo instruction index
- instructionData.writeUint64LE(amount, 1); // Amount to mint
-
- // Prepare accounts required by instruction
- AccountMeta[3] metas = [
- AccountMeta({pubkey: mint, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: account, is_writable: true, is_signer: false}),
- AccountMeta({pubkey: pda, is_writable: true, is_signer: true}) // mint authority
- ];
-
- // Invoke the token program with prepared accounts and instruction data
- SplToken.tokenProgramId.call{accounts: metas, seeds: [["mint_authority", abi.encode(_bump)]]}(instructionData);
- }
-
- function _removeMintAuthority(address mintAccount) private {
- // Independently derive the PDA address from the seeds, bump, and programId
- (address pda, bytes1 _bump) = try_find_program_address(["mint_authority"], type(pda_mint_authority).program_id);
- require(address(this) == pda, 'INVALID_PDA');
-
- AccountMeta[2] metas = [
- AccountMeta({pubkey: mintAccount, is_signer: false, is_writable: true}),
- AccountMeta({pubkey: pda, is_signer: true, is_writable: false}) // mint authority
- ];
-
- bytes instructionData = new bytes(9);
- instructionData[0] = uint8(6); // SetAuthority instruction index
- instructionData[1] = uint8(0); // AuthorityType::MintTokens
- instructionData[3] = 0;
-
- // Invoke the token program with prepared accounts and instruction data
- SplToken.tokenProgramId.call{accounts: metas, seeds: [["mint_authority", abi.encode(_bump)]]}(instructionData);
- }
-}
diff --git a/tokens/pda-mint-authority/solang/tests/pda-mint-authority.ts b/tokens/pda-mint-authority/solang/tests/pda-mint-authority.ts
deleted file mode 100644
index 79b136e8e..000000000
--- a/tokens/pda-mint-authority/solang/tests/pda-mint-authority.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-import * as anchor from "@coral-xyz/anchor";
-import { Program } from "@coral-xyz/anchor";
-import { PdaMintAuthority } from "../target/types/pda_mint_authority";
-import { PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY } from "@solana/web3.js";
-import { Metaplex } from "@metaplex-foundation/js";
-import {
- ASSOCIATED_TOKEN_PROGRAM_ID,
- getAssociatedTokenAddressSync,
- TOKEN_PROGRAM_ID,
-} from "@solana/spl-token";
-
-describe("pda-mint-authority", () => {
- // Configure the client to use the local cluster.
- const provider = anchor.AnchorProvider.env();
- anchor.setProvider(provider);
-
- const mintKeypair = anchor.web3.Keypair.generate();
- const wallet = provider.wallet;
- const connection = provider.connection;
-
- const program = anchor.workspace
- .PdaMintAuthority as Program;
-
- // Derive the PDA that will be used to initialize the dataAccount.
- const [dataAccountPDA, bump] = PublicKey.findProgramAddressSync(
- [Buffer.from("mint_authority")],
- program.programId
- );
-
- const nftTitle = "Homer NFT";
- const nftSymbol = "HOMR";
- const nftUri =
- "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json";
-
- it("Is initialized!", async () => {
- // Add your test here.
- const tx = await program.methods
- .new([bump])
- .accounts({ dataAccount: dataAccountPDA })
- .rpc();
- console.log("Your transaction signature", tx);
- });
-
- it("Create an NFT!", async () => {
- const metaplex = Metaplex.make(connection);
- const metadataAddress = await metaplex
- .nfts()
- .pdas()
- .metadata({ mint: mintKeypair.publicKey });
-
- // Add your test here.
- const tx = await program.methods
- .createTokenMint(
- wallet.publicKey, // payer
- mintKeypair.publicKey, // mint
- dataAccountPDA, // mint authority
- dataAccountPDA, // freeze authority
- metadataAddress, // metadata address
- 0, // 0 decimals for NFT
- nftTitle, // NFT name
- nftSymbol, // NFT symbol
- nftUri // NFT URI
- )
- .accounts({ dataAccount: dataAccountPDA })
- .remainingAccounts([
- {
- pubkey: wallet.publicKey,
- isWritable: true,
- isSigner: true,
- },
- { pubkey: mintKeypair.publicKey, isWritable: true, isSigner: true },
- {
- pubkey: new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),
- isWritable: false,
- isSigner: false,
- },
- { pubkey: metadataAddress, isWritable: true, isSigner: false },
- { pubkey: SystemProgram.programId, isWritable: false, isSigner: false },
- { pubkey: SYSVAR_RENT_PUBKEY, isWritable: false, isSigner: false },
- ])
- .signers([mintKeypair])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
- });
-
- it("Mint the NFT to your wallet!", async () => {
- // Derive wallet's associated token account address for mint
- const tokenAccount = getAssociatedTokenAddressSync(
- mintKeypair.publicKey,
- wallet.publicKey
- );
-
- const tx = await program.methods
- .mintTo(
- wallet.publicKey, // payer
- tokenAccount, // associated token account address
- mintKeypair.publicKey, // mint
- wallet.publicKey // owner of token account
- )
- .accounts({ dataAccount: dataAccountPDA })
- .remainingAccounts([
- {
- pubkey: wallet.publicKey,
- isWritable: true,
- isSigner: true,
- },
- { pubkey: mintKeypair.publicKey, isWritable: true, isSigner: false },
- { pubkey: tokenAccount, isWritable: true, isSigner: false },
- { pubkey: dataAccountPDA, isWritable: true, isSigner: false },
- {
- pubkey: SystemProgram.programId,
- isWritable: false,
- isSigner: false,
- },
- { pubkey: TOKEN_PROGRAM_ID, isWritable: false, isSigner: false },
- {
- pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,
- isWritable: false,
- isSigner: false,
- },
- ])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", tx);
- });
-});
diff --git a/tokens/pda-mint-authority/solang/tsconfig.json b/tokens/pda-mint-authority/solang/tsconfig.json
deleted file mode 100644
index 5436e66f2..000000000
--- a/tokens/pda-mint-authority/solang/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "types": ["mocha", "chai"],
- "typeRoots": ["./node_modules/@types"],
- "lib": ["es2015"],
- "module": "commonjs",
- "target": "es6",
- "esModuleInterop": true
- }
-}
-
\ No newline at end of file
diff --git a/tokens/pda-mint-authority/steel/.gitignore b/tokens/pda-mint-authority/steel/.gitignore
new file mode 100644
index 000000000..052739dbc
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/.gitignore
@@ -0,0 +1,2 @@
+target
+test-ledger
diff --git a/tokens/pda-mint-authority/steel/Cargo.toml b/tokens/pda-mint-authority/steel/Cargo.toml
new file mode 100644
index 000000000..4c407217f
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/Cargo.toml
@@ -0,0 +1,27 @@
+[workspace]
+resolver = "2"
+members = ["api", "program"]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+homepage = ""
+documentation = ""
+repository = ""
+readme = "./README.md"
+keywords = ["solana"]
+
+[workspace.dependencies]
+pda-mint-authority-api = { path = "./api", version = "0.1.0" }
+bytemuck = "1.14"
+num_enum = "0.7"
+solana-program = "2.1"
+steel = { version = "3.0", features = ["spl"] }
+thiserror = "1.0"
+mpl-token-metadata = { version = "4.1.2" }
+spl-token = "^4"
+const-crypto = "0.1.0"
+spl-associated-token-account = { version = "^2.3", features = [
+ "no-entrypoint",
+] }
diff --git a/tokens/pda-mint-authority/steel/README.md b/tokens/pda-mint-authority/steel/README.md
new file mode 100644
index 000000000..4f4fe2a54
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/README.md
@@ -0,0 +1,22 @@
+# Steel
+
+**Steel** is a ...
+
+## API
+- [`Consts`](api/src/consts.rs) – Program constants.
+- [`Error`](api/src/error.rs) – Custom program errors.
+- [`Event`](api/src/event.rs) – Custom program events.
+- [`Instruction`](api/src/instruction.rs) – Declared instructions.
+
+## Instructions
+- [`Hello`](program/src/hello.rs) – Hello ...
+
+## State
+- [`User`](api/src/state/user.rs) – User ...
+
+## Tests
+
+To run the test suit, use the Solana toolchain:
+```
+cargo test-sbf
+```
diff --git a/tokens/pda-mint-authority/steel/api/Cargo.toml b/tokens/pda-mint-authority/steel/api/Cargo.toml
new file mode 100644
index 000000000..d7cf41056
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/api/Cargo.toml
@@ -0,0 +1,15 @@
+[package]
+name = "pda-mint-authority-api"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+bytemuck.workspace = true
+num_enum.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+thiserror.workspace = true
+spl-token.workspace = true
+mpl-token-metadata.workspace = true
+const-crypto.workspace = true
+spl-associated-token-account.workspace = true
diff --git a/tokens/pda-mint-authority/steel/api/src/consts.rs b/tokens/pda-mint-authority/steel/api/src/consts.rs
new file mode 100644
index 000000000..00688fe0e
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/api/src/consts.rs
@@ -0,0 +1,5 @@
+/// The seed of the mint authority account PDA.
+pub const MINT_AUTHORITY: &[u8] = b"mint_authority";
+
+/// The seed of the metadata account PDA.
+pub const METADATA: &[u8] = b"metadata";
diff --git a/tokens/pda-mint-authority/steel/api/src/instruction.rs b/tokens/pda-mint-authority/steel/api/src/instruction.rs
new file mode 100644
index 000000000..0c70cea5d
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/api/src/instruction.rs
@@ -0,0 +1,31 @@
+use steel::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
+pub enum SteelInstruction {
+ Init = 0,
+ Create = 1,
+ Mint = 2,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Init {}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Create {
+ pub token_name: [u8; 32],
+ pub token_symbol: [u8; 8],
+ pub token_uri: [u8; 64],
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, Pod, Zeroable)]
+pub struct Mint {
+ pub amount: [u8; 8],
+}
+
+instruction!(SteelInstruction, Init);
+instruction!(SteelInstruction, Create);
+instruction!(SteelInstruction, Mint);
diff --git a/tokens/pda-mint-authority/steel/api/src/lib.rs b/tokens/pda-mint-authority/steel/api/src/lib.rs
new file mode 100644
index 000000000..6db8ac73d
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/api/src/lib.rs
@@ -0,0 +1,16 @@
+pub mod consts;
+pub mod instruction;
+pub mod sdk;
+pub mod state;
+
+pub mod prelude {
+ pub use crate::consts::*;
+ pub use crate::instruction::*;
+ pub use crate::sdk::*;
+ pub use crate::state::*;
+}
+
+use steel::*;
+
+// TODO Set program id
+declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
diff --git a/tokens/pda-mint-authority/steel/api/src/sdk.rs b/tokens/pda-mint-authority/steel/api/src/sdk.rs
new file mode 100644
index 000000000..7099778f5
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/api/src/sdk.rs
@@ -0,0 +1,76 @@
+use steel::*;
+
+use crate::prelude::*;
+
+pub fn init(payer: Pubkey) -> Instruction {
+ let mint_authority_pda = mint_authority_pda();
+
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(mint_authority_pda.0, false),
+ AccountMeta::new(payer, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: Init {}.to_bytes(),
+ }
+}
+
+pub fn create(
+ payer: Pubkey,
+ mint: Pubkey,
+ token_name: [u8; 32],
+ token_symbol: [u8; 8],
+ token_uri: [u8; 64],
+) -> Instruction {
+ let metadata_pda = Pubkey::find_program_address(
+ &[METADATA, mpl_token_metadata::ID.as_ref(), mint.as_ref()],
+ &mpl_token_metadata::ID,
+ );
+ let mint_authority_pda = mint_authority_pda();
+
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(mint, true),
+ AccountMeta::new(mint_authority_pda.0, false),
+ AccountMeta::new(metadata_pda.0, false),
+ AccountMeta::new(payer, true),
+ AccountMeta::new_readonly(system_program::ID, false),
+ AccountMeta::new_readonly(spl_token::ID, false),
+ AccountMeta::new_readonly(mpl_token_metadata::ID, false),
+ AccountMeta::new_readonly(sysvar::rent::ID, false),
+ ],
+ data: Create {
+ token_name,
+ token_symbol,
+ token_uri,
+ }
+ .to_bytes(),
+ }
+}
+pub fn mint(
+ payer: Pubkey,
+ mint: Pubkey,
+ associated_token_account: Pubkey,
+ amount: u64,
+) -> Instruction {
+ let mint_authority_pda = mint_authority_pda();
+
+ Instruction {
+ program_id: crate::ID,
+ accounts: vec![
+ AccountMeta::new(payer, true),
+ AccountMeta::new(mint, false),
+ AccountMeta::new(associated_token_account, false),
+ AccountMeta::new(mint_authority_pda.0, false),
+ AccountMeta::new_readonly(spl_token::ID, false),
+ AccountMeta::new_readonly(spl_associated_token_account::ID, false),
+ AccountMeta::new_readonly(system_program::ID, false),
+ ],
+ data: Mint {
+ amount: amount.to_le_bytes(),
+ }
+ .to_bytes(),
+ }
+}
diff --git a/tokens/pda-mint-authority/steel/api/src/state/mint_authority.rs b/tokens/pda-mint-authority/steel/api/src/state/mint_authority.rs
new file mode 100644
index 000000000..bd0a7704c
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/api/src/state/mint_authority.rs
@@ -0,0 +1,11 @@
+use steel::*;
+
+use super::SteelAccount;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
+pub struct MintAuthorityPda {
+ pub bump: u8,
+}
+
+account!(SteelAccount, MintAuthorityPda);
diff --git a/tokens/pda-mint-authority/steel/api/src/state/mod.rs b/tokens/pda-mint-authority/steel/api/src/state/mod.rs
new file mode 100644
index 000000000..c29fb1862
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/api/src/state/mod.rs
@@ -0,0 +1,18 @@
+mod mint_authority;
+
+pub use mint_authority::*;
+
+use steel::*;
+
+use crate::consts::*;
+
+#[repr(u8)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
+pub enum SteelAccount {
+ MintAuthorityPda = 0,
+}
+
+/// Fetch PDA of the mint authority account.
+pub fn mint_authority_pda() -> (Pubkey, u8) {
+ Pubkey::find_program_address(&[MINT_AUTHORITY], &crate::id())
+}
diff --git a/tokens/pda-mint-authority/steel/cicd.sh b/tokens/pda-mint-authority/steel/cicd.sh
new file mode 100644
index 000000000..8a16e0387
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/cicd.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This script is for quick building & deploying of the program.
+# It also serves as a reference for the commands used for building & deploying Solana programs.
+# Run this bad boy with "bash cicd.sh" or "./cicd.sh"
+
+cargo build-sbf --manifest-path=./program/Cargo.toml
+solana program deploy ./program/target/deploy/program.so
diff --git a/tokens/pda-mint-authority/steel/package.json b/tokens/pda-mint-authority/steel/package.json
new file mode 100644
index 000000000..b1e1d3fa4
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/package.json
@@ -0,0 +1,28 @@
+{
+ "scripts": {
+ "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/tests.ts",
+ "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",
+ "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
+ "deploy": "solana program deploy ./program/target/so/pda_mint_authority_program.so",
+ "postinstall": "zx prepare.mjs"
+ },
+ "dependencies": {
+ "@metaplex-foundation/mpl-token-metadata": "^2.5.2",
+ "@solana/spl-token": "^0.3.7",
+ "@solana/web3.js": "^1.73.0",
+ "borsh": "^0.7.0",
+ "buffer": "^6.0.3",
+ "fs": "^0.0.1-security"
+ },
+ "devDependencies": {
+ "@types/bn.js": "^5.1.0",
+ "@types/chai": "^4.3.1",
+ "@types/mocha": "^9.1.1",
+ "chai": "^4.3.4",
+ "mocha": "^9.0.3",
+ "ts-mocha": "^10.0.0",
+ "typescript": "^4.3.5",
+ "solana-bankrun": "^0.4.0",
+ "zx": "^8.1.4"
+ }
+}
diff --git a/tokens/pda-mint-authority/steel/pnpm-lock.yaml b/tokens/pda-mint-authority/steel/pnpm-lock.yaml
new file mode 100644
index 000000000..787a11db3
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/pnpm-lock.yaml
@@ -0,0 +1,1860 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@metaplex-foundation/mpl-token-metadata':
+ specifier: ^2.5.2
+ version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.3.7
+ version: 0.3.11(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/web3.js':
+ specifier: ^1.73.0
+ version: 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ borsh:
+ specifier: ^0.7.0
+ version: 0.7.0
+ buffer:
+ specifier: ^6.0.3
+ version: 6.0.3
+ fs:
+ specifier: ^0.0.1-security
+ version: 0.0.1-security
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.6
+ '@types/chai':
+ specifier: ^4.3.1
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^9.1.1
+ version: 9.1.1
+ chai:
+ specifier: ^4.3.4
+ version: 4.5.0
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.4.0
+ version: 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+ zx:
+ specifier: ^8.1.4
+ version: 8.1.9
+
+packages:
+
+ '@babel/runtime@7.26.0':
+ resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
+ engines: {node: '>=6.9.0'}
+
+ '@metaplex-foundation/beet-solana@0.4.1':
+ resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==}
+
+ '@metaplex-foundation/beet@0.7.2':
+ resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==}
+
+ '@metaplex-foundation/cusper@0.0.2':
+ resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0':
+ resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==}
+
+ '@noble/curves@1.6.0':
+ resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.5.0':
+ resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-rc.1':
+ resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-data-structures@2.0.0-rc.1':
+ resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.0.0-rc.1':
+ resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-strings@2.0.0-rc.1':
+ resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+ typescript: '>=5'
+
+ '@solana/codecs@2.0.0-rc.1':
+ resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.0.0-rc.1':
+ resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/options@2.0.0-rc.1':
+ resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/spl-token-metadata@0.1.6':
+ resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.95.3
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/web3.js@1.95.4':
+ resolution: {integrity: sha512-sdewnNEA42ZSMxqkzdwEWi6fDgzwtJHaQa5ndUGEJYtoOnM6X5cvPmjoTUp7/k7bRrVAxfBgDnvQQHD6yhlLYw==}
+
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+
+ '@types/bn.js@5.1.6':
+ resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==}
+
+ '@types/chai@4.3.20':
+ resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.8.4':
+ resolution: {integrity: sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@types/ws@8.5.12':
+ resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansicolors@0.3.2:
+ resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assert@2.1.0:
+ resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.10:
+ resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==}
+
+ base-x@4.0.0:
+ resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@5.0.0:
+ resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
+ engines: {node: '>=0.3.1'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fs@0.0.1-security:
+ resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-arguments@1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-nan@1.3.2:
+ resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+ engines: {node: '>= 0.4'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.2:
+ resolution: {integrity: sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@9.0.4:
+ resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ serialize-javascript@6.0.0:
+ resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ resolution: {integrity: sha512-6dz78Teoz7ez/3lpRLDjktYLJb79FcmJk2me4/YaB8WiO6W43OdExU4h+d2FyuAryO2DgBPXaBoBNY/8J1HJmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.4.0:
+ resolution: {integrity: sha512-zSSw/Jx3KNU42pPMmrEWABd0nOwGJfsj7nm9chVZ3ae7WQg3Uty0hHAkn5NSDCj3OOiN0py9Dr1l9vmRJpOOxg==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.4.0:
+ resolution: {integrity: sha512-LWjs5fsgHFtyr7YdJR6r0Ho5zrtzI6CY4wvwPXr8H2m3b4pZe6RLIZjQtabCav4cguc14G0K8yQB2PTMuGub8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ resolution: {integrity: sha512-SrlVrb82UIxt21Zr/XZFHVV/h9zd2/nP25PMpLJVLD7Pgl2yhkhfi82xj3OjxoQqWe+zkBJ+uszA0EEKr67yNw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ resolution: {integrity: sha512-Nv328ZanmURdYfcLL+jwB1oMzX4ZzK57NwIcuJjGlf0XSNLq96EoaO5buEiUTo4Ls7MqqMyLbClHcrPE7/aKyA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.4.0:
+ resolution: {integrity: sha512-NMmXUipPBkt8NgnyNO3SCnPERP6xT/AMNMBooljGA3+rG6NN8lmXJsKeLqQTiFsDeWD74U++QM/DgcueSWvrIg==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@2.0.2:
+ resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.8.0:
+ resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zx@8.1.9:
+ resolution: {integrity: sha512-UHuLHphHmsBYKkAchkSrEN4nzDyagafqC9HUxtc1J7eopaScW6H9dsLJ1lmkAntnLtDTGoM8fa+jrJrXiIfKFA==}
+ engines: {node: '>= 12.17.0'}
+ hasBin: true
+
+snapshots:
+
+ '@babel/runtime@7.26.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 5.0.0
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ '@metaplex-foundation/beet@0.7.2':
+ dependencies:
+ ansicolors: 0.3.2
+ assert: 2.1.0
+ bn.js: 5.2.1
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@metaplex-foundation/cusper@0.0.2': {}
+
+ '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@metaplex-foundation/beet': 0.7.2
+ '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@metaplex-foundation/cusper': 0.0.2
+ '@solana/spl-token': 0.3.11(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ '@noble/curves@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.5.0
+
+ '@noble/hashes@1.5.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-data-structures@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ fastestsmallesttextencoderdecoder: 1.0.22
+ typescript: 4.9.5
+
+ '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-rc.1(typescript@4.9.5)':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+ typescript: 4.9.5
+
+ '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.0.0-rc.1(typescript@4.9.5)
+ '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/errors': 2.0.0-rc.1(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - typescript
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@4.9.5)
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - typescript
+ - utf-8-validate
+
+ '@solana/web3.js@1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.26.0
+ '@noble/curves': 1.6.0
+ '@noble/hashes': 1.5.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 9.0.4
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@swc/helpers@0.5.13':
+ dependencies:
+ tslib: 2.8.0
+
+ '@types/bn.js@5.1.6':
+ dependencies:
+ '@types/node': 22.8.4
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 22.8.4
+ optional: true
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 22.8.4
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.8.4':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.5.12':
+ dependencies:
+ '@types/node': 22.8.4
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansicolors@0.3.2: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assert@2.1.0:
+ dependencies:
+ call-bind: 1.0.7
+ is-nan: 1.3.2
+ object-is: 1.1.6
+ object.assign: 4.1.5
+ util: 0.12.5
+
+ assertion-error@1.1.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.10:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.10
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.0
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ call-bind@1.0.7:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ camelcase@6.3.0: {}
+
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ debug@4.3.3(supports-color@8.1.1):
+ dependencies:
+ ms: 2.1.2
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ debug@4.3.7:
+ dependencies:
+ ms: 2.1.3
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ diff@5.0.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ es-define-property@1.0.0:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@5.0.1: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ fs.realpath@1.0.0: {}
+
+ fs@0.0.1-security: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-intrinsic@1.2.4:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ gopd@1.0.1:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.0
+
+ has-proto@1.0.3: {}
+
+ has-symbols@1.0.3: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.0.3
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-arguments@1.1.1:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-callable@1.2.7: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.0.10:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-nan@1.3.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-typed-array@1.1.13:
+ dependencies:
+ which-typed-array: 1.1.15
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ make-error@1.3.6: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.1: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.2:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ possible-typed-array-names@1.0.0: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@9.0.4:
+ dependencies:
+ '@swc/helpers': 0.5.13
+ '@types/uuid': 8.3.4
+ '@types/ws': 8.5.12
+ buffer: 6.0.3
+ eventemitter3: 5.0.1
+ uuid: 8.3.2
+ ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ dependencies:
+ randombytes: 2.1.0
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+
+ solana-bankrun-darwin-arm64@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-universal@0.4.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.4.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.4.0:
+ optional: true
+
+ solana-bankrun@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.4.0
+ solana-bankrun-darwin-universal: 0.4.0
+ solana-bankrun-darwin-x64: 0.4.0
+ solana-bankrun-linux-x64-gnu: 0.4.0
+ solana-bankrun-linux-x64-musl: 0.4.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.8.0: {}
+
+ type-detect@4.1.0: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@6.19.8: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.2
+ optional: true
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.13
+ which-typed-array: 1.1.15
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-typed-array@1.1.15:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
+
+ zx@8.1.9:
+ optionalDependencies:
+ '@types/fs-extra': 11.0.4
+ '@types/node': 22.8.4
diff --git a/tokens/pda-mint-authority/steel/prepare.mjs b/tokens/pda-mint-authority/steel/prepare.mjs
new file mode 100644
index 000000000..7c5ec464b
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/prepare.mjs
@@ -0,0 +1,34 @@
+#!/usr/bin/env zx
+
+import { mkdir, rm } from 'node:fs/promises';
+import { join } from 'node:path';
+import { $ } from 'zx';
+
+const programs = [
+ {
+ id: 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',
+ name: 'token_metadata.so',
+ },
+];
+
+const outputDir = 'tests/fixtures';
+const overwrite = true;
+
+try {
+ for (const program of programs) {
+ const { id, name } = program;
+ const outputFile = join(outputDir, name);
+ await $`solana config set -um`;
+
+ try {
+ await mkdir(outputDir, { recursive: true });
+ if (overwrite) await rm(outputFile, { force: true });
+ await $`solana program dump ${id} ${outputFile}`;
+ console.log(`Program ${id} dumped to ${outputFile}`);
+ } catch (error) {
+ console.error(`Error dumping ${id}: ${error.message}`);
+ }
+ }
+} catch (error) {
+ console.error(`Error preparing programs: ${error.message}`);
+}
diff --git a/tokens/pda-mint-authority/steel/program/Cargo.toml b/tokens/pda-mint-authority/steel/program/Cargo.toml
new file mode 100644
index 000000000..117641116
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/program/Cargo.toml
@@ -0,0 +1,22 @@
+[package]
+name = "pda-mint-authority-program"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "lib"]
+
+[dependencies]
+pda-mint-authority-api.workspace = true
+solana-program.workspace = true
+steel.workspace = true
+spl-token.workspace = true
+mpl-token-metadata.workspace = true
+spl-associated-token-account.workspace = true
+
+[dev-dependencies]
+base64 = "0.21"
+rand = "0.8.5"
+solana-program-test = "1.18"
+solana-sdk = "1.18"
+tokio = { version = "1.35", features = ["full"] }
diff --git a/tokens/pda-mint-authority/steel/program/build.rs b/tokens/pda-mint-authority/steel/program/build.rs
new file mode 100644
index 000000000..2c8fdeb01
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/program/build.rs
@@ -0,0 +1,43 @@
+// build.rs
+use std::fs;
+use std::process::Command;
+
+fn check_solana_installation() -> Result<(), String> {
+ match Command::new("solana").arg("--version").output() {
+ Ok(output) => {
+ if output.status.success() {
+ Ok(())
+ } else {
+ Err("Solana CLI is available but returned an error".to_string())
+ }
+ }
+ Err(e) => Err(format!("Solana CLI is not installed or not in PATH: {}", e)),
+ }
+}
+
+fn main() {
+ println!("cargo:rerun-if-changed=build.rs");
+
+ // Check if Solana is installed
+ if let Err(err) = check_solana_installation() {
+ println!("cargo:warning=Solana check failed: {}", err);
+ return;
+ }
+
+ // Create the fixtures directory path
+ fs::create_dir_all("tests/fixtures").expect("Failed to create fixtures directory");
+
+ let status = Command::new("solana")
+ .args([
+ "program",
+ "dump",
+ "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s",
+ "tests/fixtures/token_metadata.so",
+ ])
+ .status()
+ .expect("Failed to run solana program dump command");
+
+ if !status.success() {
+ panic!("Failed to dump Solana program");
+ }
+}
diff --git a/tokens/pda-mint-authority/steel/program/src/create.rs b/tokens/pda-mint-authority/steel/program/src/create.rs
new file mode 100644
index 000000000..01cb9b585
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/program/src/create.rs
@@ -0,0 +1,107 @@
+use pda_mint_authority_api::prelude::*;
+use solana_program::msg;
+use solana_program::program_pack::Pack;
+use spl_token::state::Mint;
+use steel::*;
+
+pub fn process_create(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ // parse args.
+ let args = Create::try_from_bytes(data)?;
+ let token_name = String::from_utf8(args.token_name.to_vec()).expect("Invalid UTF-8");
+ let token_symbol = String::from_utf8(args.token_symbol.to_vec()).expect("Invalid UTF-8");
+ let token_uri = String::from_utf8(args.token_uri.to_vec()).expect("Invalid UTF-8");
+
+ // Load accounts.
+ let [mint_info, mint_authority_info, metadata_info, payer_info, system_program, token_program, token_metadata_program, rent_sysvar] =
+ accounts
+ else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+ // validation
+ payer_info.is_signer()?;
+ mint_info.is_empty()?.is_writable()?;
+ rent_sysvar.is_sysvar(&sysvar::rent::ID)?;
+ system_program.is_program(&system_program::ID)?;
+ token_program.is_program(&spl_token::ID)?;
+ msg!("{:?}", token_metadata_program.is_executable());
+
+ let (mint_authority_pda, bump) = mint_authority_pda();
+ assert!(&mint_authority_pda.eq(mint_authority_info.key));
+
+ mint_authority_info
+ .is_writable()?
+ .has_seeds(&[MINT_AUTHORITY], &pda_mint_authority_api::ID)?;
+
+ // First create the account for the Mint
+ //
+ msg!("Creating mint account...");
+ msg!("Mint: {}", mint_info.key);
+ solana_program::program::invoke(
+ &solana_program::system_instruction::create_account(
+ payer_info.key,
+ mint_info.key,
+ (solana_program::rent::Rent::get()?).minimum_balance(Mint::LEN),
+ Mint::LEN as u64,
+ token_program.key,
+ ),
+ &[
+ mint_info.clone(),
+ payer_info.clone(),
+ system_program.clone(),
+ token_program.clone(),
+ ],
+ )?;
+
+ // Now initialize that account as a Mint (standard Mint)
+ //
+ msg!("Initializing mint account...");
+ msg!("Mint: {}", mint_info.key);
+ solana_program::program::invoke(
+ &spl_token::instruction::initialize_mint(
+ token_program.key,
+ mint_info.key,
+ mint_authority_info.key,
+ Some(mint_authority_info.key),
+ 9, // 9 Decimals for the default SPL Token standard,
+ )?,
+ &[
+ token_program.clone(),
+ mint_info.clone(),
+ mint_authority_info.clone(),
+ rent_sysvar.clone(),
+ ],
+ )?;
+
+ // Now create the account for that Mint's metadata
+ //
+ msg!("Creating metadata account...");
+ msg!("Metadata account address: {}", metadata_info.key);
+ mpl_token_metadata::instructions::CreateMetadataAccountV3Cpi {
+ __program: token_metadata_program,
+ metadata: metadata_info,
+ mint: mint_info,
+ mint_authority: mint_authority_info,
+ payer: payer_info,
+ update_authority: (mint_authority_info, true),
+ system_program,
+ rent: Some(rent_sysvar),
+ __args: mpl_token_metadata::instructions::CreateMetadataAccountV3InstructionArgs {
+ data: mpl_token_metadata::types::DataV2 {
+ name: token_name,
+ symbol: token_symbol,
+ uri: token_uri,
+ seller_fee_basis_points: 0,
+ creators: None,
+ collection: None,
+ uses: None,
+ },
+ is_mutable: true,
+ collection_details: None,
+ },
+ }
+ .invoke_signed(&[&[MINT_AUTHORITY, &[bump]]])?;
+
+ msg!("Token mint created successfully.");
+
+ Ok(())
+}
diff --git a/tokens/pda-mint-authority/steel/program/src/init.rs b/tokens/pda-mint-authority/steel/program/src/init.rs
new file mode 100644
index 000000000..4d2bc4da9
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/program/src/init.rs
@@ -0,0 +1,35 @@
+use pda_mint_authority_api::prelude::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_init(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult {
+ // Load accounts.
+ let [mint_authority_info, payer_info, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ // validation
+ payer_info.is_signer()?;
+ mint_authority_info
+ .is_empty()?
+ .is_writable()?
+ .has_seeds(&[MINT_AUTHORITY], &pda_mint_authority_api::ID)?;
+ system_program.is_program(&system_program::ID)?;
+
+ msg!("Creating mint authority PDA...");
+ msg!("Mint Authority: {}", &mint_authority_info.key);
+ create_account::(
+ mint_authority_info,
+ system_program,
+ payer_info,
+ &pda_mint_authority_api::ID,
+ &[MINT_AUTHORITY],
+ )?;
+
+ let mint_authority =
+ mint_authority_info.as_account_mut::(&pda_mint_authority_api::ID)?;
+ let mint_authority_bump = mint_authority_pda().1;
+ mint_authority.bump = mint_authority_bump;
+
+ Ok(())
+}
diff --git a/tokens/pda-mint-authority/steel/program/src/lib.rs b/tokens/pda-mint-authority/steel/program/src/lib.rs
new file mode 100644
index 000000000..59a3bfac1
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/program/src/lib.rs
@@ -0,0 +1,28 @@
+mod create;
+mod init;
+mod mint;
+
+pub use create::*;
+pub use init::*;
+pub use mint::*;
+
+use pda_mint_authority_api::prelude::*;
+use steel::*;
+
+pub fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ data: &[u8],
+) -> ProgramResult {
+ let (ix, data) = parse_instruction(&pda_mint_authority_api::ID, program_id, data)?;
+
+ match ix {
+ SteelInstruction::Create => process_create(accounts, data)?,
+ SteelInstruction::Mint => process_mint(accounts, data)?,
+ SteelInstruction::Init => process_init(accounts, data)?,
+ }
+
+ Ok(())
+}
+
+entrypoint!(process_instruction);
diff --git a/tokens/pda-mint-authority/steel/program/src/mint.rs b/tokens/pda-mint-authority/steel/program/src/mint.rs
new file mode 100644
index 000000000..e26ff544f
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/program/src/mint.rs
@@ -0,0 +1,74 @@
+use pda_mint_authority_api::prelude::*;
+use solana_program::msg;
+use steel::*;
+
+pub fn process_mint(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
+ // parse args.
+ let args = Mint::try_from_bytes(data)?;
+ let amount = u64::from_le_bytes(args.amount);
+
+ // Load accounts.
+ let [payer_info, mint_info, ata_info, mint_authority_info, token_program, associated_token_program, system_program] =
+ accounts
+ else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ msg!("Minting tokens to associated token account...");
+ msg!("Mint: {:?}", mint_info);
+ msg!("Token Address: {:?}", &ata_info);
+
+ // validation
+ payer_info.is_signer()?;
+ mint_info.as_mint()?;
+ token_program.is_program(&spl_token::ID)?;
+
+ if ata_info.lamports() == 0 {
+ msg!("Creating associated token account...");
+ create_associated_token_account(
+ payer_info,
+ payer_info,
+ ata_info,
+ mint_info,
+ system_program,
+ token_program,
+ associated_token_program,
+ )?;
+ msg!("Associated Token Address: {}", ata_info.key);
+ } else {
+ msg!("Associated token account exists.");
+ }
+
+ mint_authority_info
+ .is_writable()?
+ .has_seeds(&[MINT_AUTHORITY], &pda_mint_authority_api::ID)?;
+ ata_info
+ .is_writable()?
+ .as_associated_token_account(payer_info.key, mint_info.key)?;
+
+ msg!("Minting token to associated token account...");
+ msg!("Mint: {}", mint_info.key);
+ msg!("Token Address: {}", ata_info.key);
+
+ solana_program::program::invoke_signed(
+ &spl_token::instruction::mint_to(
+ &spl_token::id(),
+ mint_info.key,
+ ata_info.key,
+ mint_authority_info.key,
+ &[mint_authority_info.key],
+ amount,
+ )?,
+ &[
+ token_program.clone(),
+ mint_info.clone(),
+ ata_info.clone(),
+ mint_authority_info.clone(),
+ ],
+ &[&[MINT_AUTHORITY, &[mint_authority_pda().1]]],
+ )?;
+
+ msg!("Token minted successfully.");
+
+ Ok(())
+}
diff --git a/tokens/pda-mint-authority/steel/program/tests/test.rs b/tokens/pda-mint-authority/steel/program/tests/test.rs
new file mode 100644
index 000000000..c80dd2751
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/program/tests/test.rs
@@ -0,0 +1,69 @@
+use pda_mint_authority_api::prelude::*;
+use solana_program::hash::Hash;
+use solana_program_test::{processor, BanksClient, ProgramTest};
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
+
+async fn setup() -> (BanksClient, Keypair, Hash) {
+ let mut program_test = ProgramTest::new(
+ "pda_mint_authority_program",
+ pda_mint_authority_api::ID,
+ processor!(pda_mint_authority_program::process_instruction),
+ );
+
+ program_test.add_program("token_metadata", mpl_token_metadata::ID, None);
+
+ program_test.prefer_bpf(true);
+ program_test.start().await
+}
+
+#[tokio::test]
+async fn run_test() {
+ // Setup test
+ let (mut banks, payer, blockhash) = setup().await;
+ let token_mint_keypair = Keypair::new();
+
+ let name = str_to_bytes::<32>("Solana Gold");
+ let symbol = str_to_bytes::<8>("GOLDSOL");
+ let uri = str_to_bytes::<64>("https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json");
+
+ // Submit init transaction.
+ let ix = init(payer.pubkey());
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ // Submit create transaction for spl token.
+ let ix = create(
+ payer.pubkey(),
+ token_mint_keypair.pubkey(),
+ name,
+ symbol,
+ uri,
+ );
+ let tx = Transaction::new_signed_with_payer(
+ &[ix],
+ Some(&payer.pubkey()),
+ &[&payer, &token_mint_keypair],
+ blockhash,
+ );
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+
+ let to_ata = spl_associated_token_account::get_associated_token_address(
+ &payer.pubkey(),
+ &token_mint_keypair.pubkey(),
+ );
+
+ // Submit mint transaction.
+ let ix = mint(payer.pubkey(), token_mint_keypair.pubkey(), to_ata, 100);
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
+ let res = banks.process_transaction(tx).await;
+ assert!(res.is_ok());
+}
+
+pub fn str_to_bytes(str: &str) -> [u8; N] {
+ let mut str_bytes = [0u8; N];
+ let copy_len = str.len().min(N);
+ str_bytes[..copy_len].copy_from_slice(&str.as_bytes()[..copy_len]);
+ str_bytes
+}
diff --git a/tokens/pda-mint-authority/steel/tests/instructions.ts b/tokens/pda-mint-authority/steel/tests/instructions.ts
new file mode 100644
index 000000000..b96a79567
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/tests/instructions.ts
@@ -0,0 +1,91 @@
+import { BN } from 'bn.js';
+
+class Assignable {
+ constructor(properties) {
+ for (const [key, value] of Object.entries(properties)) {
+ this[key] = value;
+ }
+ }
+}
+
+// Helper function to pad strings to fixed length buffers
+function strToBytes(str: string, length: number): Buffer {
+ const buffer = Buffer.alloc(length);
+ buffer.write(str);
+ return buffer;
+}
+
+export enum PDAMintAuthorityInstruction {
+ Init = 0,
+ Create = 1,
+ Mint = 2,
+}
+
+export class InitArgs {
+ instruction: number;
+
+ constructor() {
+ this.instruction = PDAMintAuthorityInstruction.Init;
+ }
+
+ toBuffer(): Buffer {
+ // Only need 1 byte for the instruction as there are no other fields
+ const buffer = Buffer.alloc(1);
+ buffer.writeUInt8(this.instruction, 0);
+ return buffer;
+ }
+}
+
+export class CreateTokenArgs {
+ instruction: number;
+ name: Buffer;
+ symbol: Buffer;
+ uri: Buffer;
+
+ constructor(name: string, symbol: string, uri: string) {
+ this.instruction = PDAMintAuthorityInstruction.Create;
+ this.name = strToBytes(name, 32);
+ this.symbol = strToBytes(symbol, 8);
+ this.uri = strToBytes(uri, 64);
+ }
+
+ toBuffer(): Buffer {
+ const buffer = Buffer.alloc(1 + 32 + 8 + 64);
+ let offset = 0;
+
+ buffer.writeUInt8(this.instruction, offset);
+ offset += 1;
+
+ this.name.copy(buffer, offset);
+ offset += 32;
+ this.symbol.copy(buffer, offset);
+ offset += 8;
+ this.uri.copy(buffer, offset);
+
+ return buffer;
+ }
+}
+
+export class MintToArgs {
+ instruction: number;
+ quantity: BN;
+
+ constructor(quantity: number) {
+ this.instruction = PDAMintAuthorityInstruction.Mint;
+ this.quantity = new BN(quantity);
+ }
+
+ toBuffer(): Buffer {
+ const buffer = Buffer.alloc(9); // 1 byte for instruction + 8 bytes for u64 quantity
+ let offset = 0;
+
+ // Write instruction
+ buffer.writeUInt8(this.instruction, offset);
+ offset += 1;
+
+ // Write quantity as u64 LE (8 bytes)
+ this.quantity.toBuffer('le', 8).copy(buffer, offset);
+
+ return buffer;
+ }
+}
diff --git a/tokens/pda-mint-authority/steel/tests/tests.ts b/tokens/pda-mint-authority/steel/tests/tests.ts
new file mode 100644
index 000000000..eb821822f
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/tests/tests.ts
@@ -0,0 +1,142 @@
+import { Buffer } from 'node:buffer';
+import { describe, test } from 'node:test';
+import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata';
+import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { Keypair, PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { start } from 'solana-bankrun';
+import { CreateTokenArgs, InitArgs, MintToArgs } from './instructions';
+
+describe('PDA MINT AUTHORITY', async () => {
+ const PROGRAM_ID = new PublicKey('z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35');
+ const context = await start(
+ [
+ { name: 'pda_mint_authority_program', programId: PROGRAM_ID },
+ { name: 'token_metadata', programId: TOKEN_METADATA_PROGRAM_ID },
+ ],
+ [],
+ );
+ const client = context.banksClient;
+ const payer = context.payer;
+
+ const mintKeypair: Keypair = Keypair.generate();
+ const mintAuthorityPublicKey = PublicKey.findProgramAddressSync([Buffer.from('mint_authority')], PROGRAM_ID)[0];
+
+ test('Init mint authority PDA!', async () => {
+ const metadataPDA = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+
+ const initArgs = new InitArgs();
+
+ const initIx = new TransactionInstruction({
+ keys: [
+ { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true },
+ { pubkey: payer.publicKey, isSigner: false, isWritable: true },
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: initArgs.toBuffer(),
+ });
+
+ const tx = new Transaction();
+ const [blockhash, _] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockhash;
+ tx.add(initIx).sign(payer);
+
+ await client.processTransaction(tx);
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ });
+
+ test('Create a SPL Token with PDA!', async () => {
+ const metadataPDA = PublicKey.findProgramAddressSync(
+ [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()],
+ TOKEN_METADATA_PROGRAM_ID,
+ )[0];
+
+ // SPL Token default = 9 decimals
+ //
+ const createArgs = new CreateTokenArgs(
+ 'Solana Gold',
+ 'GOLDSOL',
+ 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json',
+ );
+
+ const createTokenIx = new TransactionInstruction({
+ keys: [
+ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true },
+ { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true },
+ { pubkey: metadataPDA, isSigner: false, isWritable: true },
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true },
+ {
+ pubkey: SystemProgram.programId,
+ isSigner: false,
+ isWritable: false,
+ },
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
+ {
+ pubkey: TOKEN_METADATA_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ },
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
+ ],
+ programId: PROGRAM_ID,
+ data: createArgs.toBuffer(),
+ });
+
+ const tx = new Transaction();
+ const [blockhash, _] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockhash;
+ tx.add(createTokenIx).sign(payer, mintKeypair);
+
+ await client.processTransaction(tx);
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ });
+
+ test('Mint some tokens to your wallet with PDA!', async () => {
+ const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, payer.publicKey);
+
+ const mintArgs = new MintToArgs(100);
+
+ const mintToIx = new TransactionInstruction({
+ keys: [
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // payer
+ { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // mint_pda must be writable
+ {
+ pubkey: associatedTokenAccountAddress,
+ isSigner: false,
+ isWritable: true,
+ }, // ATA
+ { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true },
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // spl_token::ID
+ {
+ pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,
+ isSigner: false,
+ isWritable: false,
+ }, // spl_associated_token_account::ID
+ {
+ pubkey: SystemProgram.programId,
+ isSigner: false,
+ isWritable: false,
+ }, // system_program::ID
+ ],
+ programId: PROGRAM_ID,
+ data: mintArgs.toBuffer(),
+ });
+
+ const tx = new Transaction();
+ const [blockhash, _] = await client.getLatestBlockhash();
+ tx.recentBlockhash = blockhash;
+ tx.add(mintToIx).sign(payer);
+
+ await client.processTransaction(tx);
+
+ console.log('Success!');
+ console.log(` ATA Address: ${associatedTokenAccountAddress}`);
+ });
+});
diff --git a/tokens/pda-mint-authority/steel/tsconfig.json b/tokens/pda-mint-authority/steel/tsconfig.json
new file mode 100644
index 000000000..cd5d2e3d0
--- /dev/null
+++ b/tokens/pda-mint-authority/steel/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "types": ["mocha", "chai"],
+ "typeRoots": ["./node_modules/@types"],
+ "lib": ["es2015"],
+ "module": "commonjs",
+ "target": "es6",
+ "esModuleInterop": true
+ }
+}
diff --git a/tokens/spl-token-minter/anchor/Anchor.toml b/tokens/spl-token-minter/anchor/Anchor.toml
index cedc500f5..7b3d4e968 100644
--- a/tokens/spl-token-minter/anchor/Anchor.toml
+++ b/tokens/spl-token-minter/anchor/Anchor.toml
@@ -1,20 +1,26 @@
+[toolchain]
+
[features]
-seeds = false
+resolution = true
skip-lint = false
[programs.localnet]
-spl_token_minter = "77p9WmpzQW29RUEzTEef2ym7AHePBE9yNWJ9acikXfZS"
+spl_token_minter = "3of89Z9jwek9zrFgpCWc9jZvQvitpVMxpZNsrAD2vQUD"
+
+[registry]
+url = "https://api.apr.dev/"
[provider]
cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
-test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
+test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
[test]
startup_wait = 5000
shutdown_wait = 2000
+upgradeable = false
[test.validator]
bind_address = "0.0.0.0"
diff --git a/tokens/spl-token-minter/anchor/Cargo.toml b/tokens/spl-token-minter/anchor/Cargo.toml
index ef17a63c0..f39770481 100644
--- a/tokens/spl-token-minter/anchor/Cargo.toml
+++ b/tokens/spl-token-minter/anchor/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"programs/*"
]
+resolver = "2"
[profile.release]
overflow-checks = true
diff --git a/tokens/spl-token-minter/anchor/package.json b/tokens/spl-token-minter/anchor/package.json
index a50bb4200..c48b56368 100644
--- a/tokens/spl-token-minter/anchor/package.json
+++ b/tokens/spl-token-minter/anchor/package.json
@@ -1,16 +1,21 @@
{
"dependencies": {
- "@coral-xyz/anchor": "^0.28.1-beta.2",
- "@metaplex-foundation/mpl-token-metadata": "^2.5.2",
+ "@coral-xyz/anchor": "^0.30.0",
"@solana/spl-token": "^0.3.8"
},
+ "scripts": {
+ "postinstall": "zx prepare.mjs"
+ },
"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"
+ "typescript": "^4.3.5",
+ "zx": "^8.1.4"
}
}
diff --git a/tokens/spl-token-minter/anchor/pnpm-lock.yaml b/tokens/spl-token-minter/anchor/pnpm-lock.yaml
new file mode 100644
index 000000000..c4f54089e
--- /dev/null
+++ b/tokens/spl-token-minter/anchor/pnpm-lock.yaml
@@ -0,0 +1,1598 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@coral-xyz/anchor':
+ specifier: ^0.30.0
+ version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token':
+ specifier: ^0.3.8
+ version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
+ devDependencies:
+ '@types/bn.js':
+ specifier: ^5.1.0
+ version: 5.1.5
+ '@types/chai':
+ specifier: ^4.3.0
+ version: 4.3.16
+ '@types/mocha':
+ specifier: ^9.0.0
+ 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.91.8(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
+ mocha:
+ specifier: ^9.0.3
+ version: 9.2.2
+ solana-bankrun:
+ specifier: ^0.3.0
+ version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ ts-mocha:
+ specifier: ^10.0.0
+ version: 10.0.0(mocha@9.2.2)
+ typescript:
+ specifier: ^4.3.5
+ version: 4.9.5
+ zx:
+ specifier: ^8.1.4
+ version: 8.1.4
+
+packages:
+
+ '@babel/runtime@7.24.5':
+ resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==}
+ engines: {node: '>=6.9.0'}
+
+ '@coral-xyz/anchor@0.30.0':
+ resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==}
+ engines: {node: '>=11'}
+
+ '@coral-xyz/borsh@0.30.0':
+ resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.68.0
+
+ '@noble/curves@1.4.0':
+ resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@solana/buffer-layout-utils@0.2.0':
+ resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==}
+ engines: {node: '>= 10'}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==}
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==}
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
+
+ '@solana/codecs-strings@2.0.0-preview.2':
+ resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+
+ '@solana/codecs@2.0.0-preview.2':
+ resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==}
+
+ '@solana/errors@2.0.0-preview.2':
+ resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
+ hasBin: true
+
+ '@solana/options@2.0.0-preview.2':
+ resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==}
+
+ '@solana/spl-token-metadata@0.1.4':
+ resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.91.6
+
+ '@solana/spl-token@0.3.11':
+ resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@solana/web3.js': ^1.88.0
+
+ '@solana/spl-type-length-value@0.1.0':
+ resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+ engines: {node: '>=16'}
+
+ '@solana/web3.js@1.91.8':
+ resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==}
+
+ '@types/bn.js@5.1.5':
+ resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
+
+ '@types/chai@4.3.16':
+ resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/mocha@9.1.1':
+ resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.12.11':
+ resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
+
+ '@types/ws@7.4.7':
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+
+ '@ungap/promise-all-settled@1.1.2':
+ resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+
+ anchor-bankrun@0.4.0:
+ resolution: {integrity: sha512-s+K7E0IGAlmkhuo8nbiqVsQf2yJ+3l9GjNQJSmkRDe25dQj4Yef9rJh77FH6EQ5H6yQYfzuhgm/5GD6JMjdTZg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ '@coral-xyz/anchor': ^0.30.0
+ '@solana/web3.js': ^1.78.4
+ solana-bankrun: ^0.2.0
+
+ ansi-colors@4.1.1:
+ resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bigint-buffer@1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+
+ bignumber.js@9.1.2:
+ resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bn.js@5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ browser-stdout@1.3.1:
+ resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-layout@1.2.2:
+ resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==}
+ engines: {node: '>=4.5'}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@12.0.0:
+ resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ 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'}
+
+ debug@4.3.3:
+ resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@4.0.0:
+ resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ delay@5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+
+ diff@3.5.0:
+ resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.0.0:
+ 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==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat@5.0.2:
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+ hasBin: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@7.2.0:
+ resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
+
+ growl@1.10.5:
+ resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
+ engines: {node: '>=4.x'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ jayson@4.1.0:
+ resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ 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==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@4.2.1:
+ resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==}
+ engines: {node: '>=10'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mocha@9.2.2:
+ resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
+ engines: {node: '>= 12.0.0'}
+ hasBin: true
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.1:
+ resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
+ 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}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ pako@2.1.0:
+ resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ rpc-websockets@7.11.0:
+ resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ 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'}
+ cpu: [arm64]
+ os: [darwin]
+
+ solana-bankrun-darwin-universal@0.3.0:
+ resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
+ engines: {node: '>= 10'}
+ os: [darwin]
+
+ solana-bankrun-darwin-x64@0.3.0:
+ resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ solana-bankrun@0.3.0:
+ resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
+ engines: {node: '>= 10'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ superstruct@0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+
+ superstruct@0.15.5:
+ resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-mocha@10.0.0:
+ resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+
+ ts-node@7.0.1:
+ resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ utf-8-validate@5.0.10:
+ resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
+ engines: {node: '>=6.14.2'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ workerpool@6.2.0:
+ resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@20.2.4:
+ resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
+ engines: {node: '>=10'}
+
+ yargs-unparser@2.0.0:
+ resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
+ engines: {node: '>=10'}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yn@2.0.0:
+ resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==}
+ engines: {node: '>=4'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zx@8.1.4:
+ resolution: {integrity: sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==}
+ engines: {node: '>= 12.17.0'}
+ hasBin: true
+
+snapshots:
+
+ '@babel/runtime@7.24.5':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ '@noble/hashes': 1.4.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ buffer-layout: 1.2.2
+ camelcase: 6.3.0
+ cross-fetch: 3.1.8
+ crypto-hash: 1.3.0
+ eventemitter3: 4.0.7
+ pako: 2.1.0
+ snake-case: 3.0.4
+ superstruct: 0.15.5
+ toml: 3.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bn.js: 5.2.1
+ buffer-layout: 1.2.2
+
+ '@noble/curves@1.4.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/hashes@1.4.0': {}
+
+ '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bigint-buffer: 1.1.5
+ bignumber.js: 9.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@solana/buffer-layout@4.0.1':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/codecs-core@2.0.0-preview.2':
+ dependencies:
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-data-structures@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-numbers@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+
+ '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/errors': 2.0.0-preview.2
+ fastestsmallesttextencoderdecoder: 1.0.22
+
+ '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-data-structures': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+ '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/options': 2.0.0-preview.2
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/errors@2.0.0-preview.2':
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.0.0
+
+ '@solana/options@2.0.0-preview.2':
+ dependencies:
+ '@solana/codecs-core': 2.0.0-preview.2
+ '@solana/codecs-numbers': 2.0.0-preview.2
+
+ '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)':
+ dependencies:
+ '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/spl-type-length-value': 0.1.0
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@solana/buffer-layout': 4.0.1
+ '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - fastestsmallesttextencoderdecoder
+ - utf-8-validate
+
+ '@solana/spl-type-length-value@0.1.0':
+ dependencies:
+ buffer: 6.0.3
+
+ '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)':
+ dependencies:
+ '@babel/runtime': 7.24.5
+ '@noble/curves': 1.4.0
+ '@noble/hashes': 1.4.0
+ '@solana/buffer-layout': 4.0.1
+ agentkeepalive: 4.5.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: 1.0.0
+ jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ node-fetch: 2.7.0
+ rpc-websockets: 7.11.0
+ superstruct: 0.14.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@types/bn.js@5.1.5':
+ dependencies:
+ '@types/node': 20.12.11
+
+ '@types/chai@4.3.16': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 20.12.11
+ optional: true
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 20.12.11
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@20.12.11':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@ungap/promise-all-settled@1.1.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ agentkeepalive@4.5.0:
+ 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.91.8(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)
+ '@solana/web3.js': 1.91.8(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)
+
+ ansi-colors@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@2.0.1: {}
+
+ arrify@1.0.1: {}
+
+ assertion-error@1.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.9:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base64-js@1.5.1: {}
+
+ bigint-buffer@1.1.5:
+ dependencies:
+ bindings: 1.5.0
+
+ bignumber.js@9.1.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bn.js@5.2.1: {}
+
+ borsh@0.7.0:
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browser-stdout@1.3.1: {}
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.9
+
+ buffer-from@1.1.2: {}
+
+ buffer-layout@1.2.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ camelcase@6.3.0: {}
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@12.0.0: {}
+
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ cross-fetch@3.1.8:
+ 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
+ optionalDependencies:
+ supports-color: 8.1.1
+
+ decamelize@4.0.0: {}
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ delay@5.0.0: {}
+
+ diff@3.5.0: {}
+
+ 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: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eventemitter3@4.0.7: {}
+
+ eyes@0.1.8: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat@5.0.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@7.2.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ growl@1.10.5: {}
+
+ has-flag@4.0.0: {}
+
+ he@1.2.0: {}
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-unicode-supported@0.1.0: {}
+
+ isexe@2.0.0: {}
+
+ isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)):
+ dependencies:
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+
+ jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))
+ json-stringify-safe: 5.0.1
+ uuid: 8.3.2
+ ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+ optional: true
+
+ jsonparse@1.3.1: {}
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ loupe@2.3.7:
+ 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:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@4.2.1:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimist@1.2.8: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mocha@9.2.2:
+ dependencies:
+ '@ungap/promise-all-settled': 1.1.2
+ ansi-colors: 4.1.1
+ browser-stdout: 1.3.1
+ chokidar: 3.5.3
+ debug: 4.3.3(supports-color@8.1.1)
+ diff: 5.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 7.2.0
+ growl: 1.10.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 4.2.1
+ ms: 2.1.3
+ nanoid: 3.3.1
+ serialize-javascript: 6.0.0
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ which: 2.0.2
+ workerpool: 6.2.0
+ yargs: 16.2.0
+ yargs-parser: 20.2.4
+ yargs-unparser: 2.0.0
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ 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
+
+ node-gyp-build@4.8.1:
+ optional: true
+
+ normalize-path@3.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ pako@2.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ pathval@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.14.1: {}
+
+ require-directory@2.1.1: {}
+
+ rpc-websockets@7.11.0:
+ dependencies:
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ safe-buffer@5.2.1: {}
+
+ serialize-javascript@6.0.0:
+ 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
+
+ solana-bankrun-darwin-universal@0.3.0:
+ optional: true
+
+ solana-bankrun-darwin-x64@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-gnu@0.3.0:
+ optional: true
+
+ solana-bankrun-linux-x64-musl@0.3.0:
+ optional: true
+
+ solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ dependencies:
+ '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)
+ bs58: 4.0.1
+ optionalDependencies:
+ solana-bankrun-darwin-arm64: 0.3.0
+ solana-bankrun-darwin-universal: 0.3.0
+ solana-bankrun-darwin-x64: 0.3.0
+ solana-bankrun-linux-x64-gnu: 0.3.0
+ solana-bankrun-linux-x64-musl: 0.3.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-bom@3.0.0:
+ optional: true
+
+ strip-json-comments@3.1.1: {}
+
+ superstruct@0.14.2: {}
+
+ superstruct@0.15.5: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ text-encoding-utf-8@1.0.2: {}
+
+ through@2.3.8: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ ts-mocha@10.0.0(mocha@9.2.2):
+ dependencies:
+ mocha: 9.2.2
+ ts-node: 7.0.1
+ optionalDependencies:
+ tsconfig-paths: 3.15.0
+
+ ts-node@7.0.1:
+ dependencies:
+ arrify: 1.0.1
+ buffer-from: 1.1.2
+ diff: 3.5.0
+ make-error: 1.3.6
+ minimist: 1.2.8
+ mkdirp: 0.5.6
+ source-map-support: 0.5.21
+ yn: 2.0.0
+
+ tsconfig-paths@3.15.0:
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ optional: true
+
+ tslib@2.6.2: {}
+
+ type-detect@4.0.8: {}
+
+ typescript@4.9.5: {}
+
+ undici-types@5.26.5: {}
+
+ utf-8-validate@5.0.10:
+ dependencies:
+ node-gyp-build: 4.8.1
+ optional: true
+
+ uuid@8.3.2: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ workerpool@6.2.0: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 5.0.10
+
+ y18n@5.0.8: {}
+
+ yargs-parser@20.2.4: {}
+
+ yargs-unparser@2.0.0:
+ dependencies:
+ camelcase: 6.3.0
+ decamelize: 4.0.0
+ flat: 5.0.2
+ is-plain-obj: 2.1.0
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.4
+
+ yn@2.0.0: {}
+
+ yocto-queue@0.1.0: {}
+
+ zx@8.1.4:
+ optionalDependencies:
+ '@types/fs-extra': 11.0.4
+ '@types/node': 20.12.11
diff --git a/tokens/spl-token-minter/anchor/prepare.mjs b/tokens/spl-token-minter/anchor/prepare.mjs
new file mode 100644
index 000000000..7c5ec464b
--- /dev/null
+++ b/tokens/spl-token-minter/anchor/prepare.mjs
@@ -0,0 +1,34 @@
+#!/usr/bin/env zx
+
+import { mkdir, rm } from 'node:fs/promises';
+import { join } from 'node:path';
+import { $ } from 'zx';
+
+const programs = [
+ {
+ id: 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',
+ name: 'token_metadata.so',
+ },
+];
+
+const outputDir = 'tests/fixtures';
+const overwrite = true;
+
+try {
+ for (const program of programs) {
+ const { id, name } = program;
+ const outputFile = join(outputDir, name);
+ await $`solana config set -um`;
+
+ try {
+ await mkdir(outputDir, { recursive: true });
+ if (overwrite) await rm(outputFile, { force: true });
+ await $`solana program dump ${id} ${outputFile}`;
+ console.log(`Program ${id} dumped to ${outputFile}`);
+ } catch (error) {
+ console.error(`Error dumping ${id}: ${error.message}`);
+ }
+ }
+} catch (error) {
+ console.error(`Error preparing programs: ${error.message}`);
+}
diff --git a/tokens/spl-token-minter/anchor/programs/spl-token-minter/Cargo.toml b/tokens/spl-token-minter/anchor/programs/spl-token-minter/Cargo.toml
index 6090bd533..5ee2e910f 100644
--- a/tokens/spl-token-minter/anchor/programs/spl-token-minter/Cargo.toml
+++ b/tokens/spl-token-minter/anchor/programs/spl-token-minter/Cargo.toml
@@ -9,13 +9,13 @@ crate-type = ["cdylib", "lib"]
name = "spl_token_minter"
[features]
+default = []
+cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
-cpi = ["no-entrypoint"]
-default = []
+idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
[dependencies]
-anchor-lang = { version = "0.28.0", features = ["init-if-needed"] }
-anchor-spl = { version = "0.28.0", features = ["metadata"] }
-mpl-token-metadata = { version = "1.13.1", features = ["no-entrypoint"] }
+anchor-lang = { version = "0.31.1", features = ["init-if-needed"] }
+anchor-spl = { version = "0.31.1", features = ["metadata"] }
diff --git a/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/create.rs b/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/create.rs
index d394ef27b..ac29e64f5 100644
--- a/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/create.rs
+++ b/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/create.rs
@@ -1,10 +1,12 @@
use {
anchor_lang::prelude::*,
anchor_spl::{
- metadata::{create_metadata_accounts_v3, CreateMetadataAccountsV3, Metadata},
+ metadata::{
+ create_metadata_accounts_v3, mpl_token_metadata::types::DataV2,
+ CreateMetadataAccountsV3, Metadata,
+ },
token::{Mint, Token},
},
- mpl_token_metadata::{pda::find_metadata_account, state::DataV2},
};
#[derive(Accounts)]
@@ -21,10 +23,12 @@ pub struct CreateToken<'info> {
)]
pub mint_account: Account<'info, Mint>,
- /// CHECK: Address validated using constraint
+ /// CHECK: Validate address by deriving pda
#[account(
mut,
- address=find_metadata_account(&mint_account.key()).0
+ seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref()],
+ bump,
+ seeds::program = token_metadata_program.key(),
)]
pub metadata_account: UncheckedAccount<'info>,
diff --git a/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/mint.rs b/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/mint.rs
index 0f02af2f3..cd345471a 100644
--- a/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/mint.rs
+++ b/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/mint.rs
@@ -11,14 +11,14 @@ pub struct MintToken<'info> {
#[account(mut)]
pub mint_authority: Signer<'info>,
- pub recepient: SystemAccount<'info>,
+ pub recipient: SystemAccount<'info>,
#[account(mut)]
pub mint_account: Account<'info, Mint>,
#[account(
init_if_needed,
payer = mint_authority,
associated_token::mint = mint_account,
- associated_token::authority = recepient,
+ associated_token::authority = recipient,
)]
pub associated_token_account: Account<'info, TokenAccount>,
diff --git a/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/lib.rs b/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/lib.rs
index 152d4f291..57fc1e03a 100644
--- a/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/lib.rs
+++ b/tokens/spl-token-minter/anchor/programs/spl-token-minter/src/lib.rs
@@ -5,7 +5,7 @@ use anchor_lang::prelude::*;
pub mod instructions;
use instructions::*;
-declare_id!("77p9WmpzQW29RUEzTEef2ym7AHePBE9yNWJ9acikXfZS");
+declare_id!("3of89Z9jwek9zrFgpCWc9jZvQvitpVMxpZNsrAD2vQUD");
#[program]
pub mod spl_token_minter {
diff --git a/tokens/spl-token-minter/anchor/tests/bankrun.test.ts b/tokens/spl-token-minter/anchor/tests/bankrun.test.ts
new file mode 100644
index 000000000..82fc03781
--- /dev/null
+++ b/tokens/spl-token-minter/anchor/tests/bankrun.test.ts
@@ -0,0 +1,75 @@
+import { describe, it } from 'node:test';
+import * as anchor from '@coral-xyz/anchor';
+import { getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { Keypair } from '@solana/web3.js';
+import { PublicKey } from '@solana/web3.js';
+import { BankrunProvider } from 'anchor-bankrun';
+import { startAnchor } from 'solana-bankrun';
+import type { SplTokenMinter } from '../target/types/spl_token_minter';
+
+const IDL = require('../target/idl/spl_token_minter.json');
+const PROGRAM_ID = new PublicKey(IDL.address);
+const METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
+
+describe('SPL Token Minter', async () => {
+ const context = await startAnchor(
+ '',
+ [
+ { name: 'spl_token_minter', programId: PROGRAM_ID },
+ { name: 'token_metadata', programId: METADATA_PROGRAM_ID },
+ ],
+ [],
+ );
+
+ const provider = new BankrunProvider(context);
+ anchor.setProvider(provider);
+ const payer = provider.wallet as anchor.Wallet;
+ const program = new anchor.Program(IDL, provider);
+
+ const metadata = {
+ name: 'Solana Gold',
+ symbol: 'GOLDSOL',
+ uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json',
+ };
+
+ // Generate new keypair to use as address for mint account.
+ const mintKeypair = new Keypair();
+
+ it('Create an SPL Token!', async () => {
+ const transactionSignature = await program.methods
+ .createToken(metadata.name, metadata.symbol, metadata.uri)
+ .accounts({
+ payer: payer.publicKey,
+ mintAccount: mintKeypair.publicKey,
+ })
+ .signers([mintKeypair])
+ .rpc();
+
+ console.log('Success!');
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
+ console.log(` Transaction Signature: ${transactionSignature}`);
+ });
+
+ it('Mint some tokens to your wallet!', async () => {
+ // Derive the associated token address account for the mint and payer.
+ const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, payer.publicKey);
+
+ // Amount of tokens to mint.
+ const amount = new anchor.BN(100);
+
+ // Mint the tokens to the associated token account.
+ const transactionSignature = await program.methods
+ .mintToken(amount)
+ .accounts({
+ mintAuthority: payer.publicKey,
+ recipient: payer.publicKey,
+ mintAccount: mintKeypair.publicKey,
+ associatedTokenAccount: associatedTokenAccountAddress,
+ })
+ .rpc();
+
+ console.log('Success!');
+ console.log(` Associated Token Account Address: ${associatedTokenAccountAddress}`);
+ console.log(` Transaction Signature: ${transactionSignature}`);
+ });
+});
diff --git a/tokens/spl-token-minter/anchor/tests/test.ts b/tokens/spl-token-minter/anchor/tests/test.ts
index eb3c47fb7..130ebc867 100644
--- a/tokens/spl-token-minter/anchor/tests/test.ts
+++ b/tokens/spl-token-minter/anchor/tests/test.ts
@@ -1,70 +1,41 @@
-import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
-import * as anchor from "@coral-xyz/anchor";
-import { SplTokenMinter } from "../target/types/spl_token_minter";
-import {
- PublicKey,
- Keypair,
- SYSVAR_RENT_PUBKEY,
- SystemProgram,
-} from "@solana/web3.js";
-import {
- getAssociatedTokenAddressSync,
- ASSOCIATED_TOKEN_PROGRAM_ID,
- TOKEN_PROGRAM_ID,
-} from "@solana/spl-token";
+import * as anchor from '@coral-xyz/anchor';
+import { getAssociatedTokenAddressSync } from '@solana/spl-token';
+import { Keypair } from '@solana/web3.js';
+import type { SplTokenMinter } from '../target/types/spl_token_minter';
-describe("SPL Token Minter", () => {
+describe('SPL Token Minter', () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const payer = provider.wallet as anchor.Wallet;
- const program = anchor.workspace
- .SplTokenMinter as anchor.Program