diff --git a/.github/workflows/solana-pinocchio.yml b/.github/workflows/solana-pinocchio.yml
new file mode 100644
index 000000000..f6cb1e7bf
--- /dev/null
+++ b/.github/workflows/solana-pinocchio.yml
@@ -0,0 +1,268 @@
+name: Pinocchio
+
+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: |
+ pinocchio:
+ - added|modified: '**/pinocchio/**'
+ workflow:
+ - added|modified: '.github/workflows/solana-pinocchio.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 "pinocchio" | 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.pinocchio }}" == "true" ]]; then
+ changed_files=(${{ steps.changes.outputs.pinocchio_files }})
+ projects=$(for file in "${changed_files[@]}"; do dirname "${file}" | grep pinocchio | sed 's#/pinocchio/.*#/pinocchio#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
+
+ # Run Rust unit tests
+ if [ -d "program" ]; then
+ echo "Running Rust unit tests for $project"
+ if ! cargo test --manifest-path=./program/Cargo.toml; then
+ echo "::error::Rust unit tests failed for $project"
+ echo "$project: Rust unit tests 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
+
+ # 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 "## Pinocchio 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/Cargo.lock b/Cargo.lock
index d47474bc0..b2ffac0de 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -26,6 +26,23 @@ dependencies = [
"solana-transaction",
]
+[[package]]
+name = "account-data-pinocchio-program"
+version = "0.1.0"
+dependencies = [
+ "litesvm",
+ "pinocchio",
+ "pinocchio-log",
+ "pinocchio-system",
+ "solana-keypair",
+ "solana-message 3.0.1",
+ "solana-native-token 3.0.0",
+ "solana-pubkey 3.0.0",
+ "solana-signer",
+ "solana-system-interface 2.0.0",
+ "solana-transaction",
+]
+
[[package]]
name = "aead"
version = "0.5.2"
@@ -2102,9 +2119,9 @@ dependencies = [
[[package]]
name = "pinocchio"
-version = "0.8.1"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "530596fa307103e53257f2cf064815919ee7fbc4c7ab999f6f13cc7067c3aff1"
+checksum = "5b971851087bc3699b001954ad02389d50c41405ece3548cbcafc88b3e20017a"
[[package]]
name = "pinocchio-log"
@@ -2126,6 +2143,27 @@ dependencies = [
"syn 1.0.109",
]
+[[package]]
+name = "pinocchio-pubkey"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0225638cadcbebae8932cb7f49cb5da7c15c21beb19f048f05a5ca7d93f065"
+dependencies = [
+ "five8_const",
+ "pinocchio",
+ "sha2-const-stable",
+]
+
+[[package]]
+name = "pinocchio-system"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4be2a6dad40b5e75d1486f021619c4bd504c34c1362c9b94ed7fa525b1cc63cc"
+dependencies = [
+ "pinocchio",
+ "pinocchio-pubkey",
+]
+
[[package]]
name = "pkcs8"
version = "0.10.2"
@@ -2613,6 +2651,12 @@ dependencies = [
"digest 0.10.7",
]
+[[package]]
+name = "sha2-const-stable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f179d4e11094a893b82fff208f74d448a7512f99f5a0acbd5c679b705f83ed9"
+
[[package]]
name = "sha3"
version = "0.10.8"
diff --git a/Cargo.toml b/Cargo.toml
index ad05f929c..6e76fa061 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -2,6 +2,7 @@
members = [
#basics
"basics/account-data/native/program",
+ "basics/account-data/pinocchio/program",
"basics/account-data/anchor/programs/anchor-program-example",
"basics/checking-accounts/native/program",
"basics/checking-accounts/anchor/programs/anchor-program-example",
@@ -65,8 +66,9 @@ spl-associated-token-account-interface = "2.0.0"
spl-token-2022-interface = "2.0.0"
# pinocchio
-pinocchio = "=0.8.1"
+pinocchio = "0.9.2"
pinocchio-log = "0.4.0"
+pinocchio-system = "0.4.0"
# testing
litesvm = "0.8.1"
diff --git a/basics/account-data/pinocchio/cicd.sh b/basics/account-data/pinocchio/cicd.sh
new file mode 100644
index 000000000..b2407c75f
--- /dev/null
+++ b/basics/account-data/pinocchio/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 --sbf-out-dir=./program/target/so
+solana program deploy ./program/target/so/program.so
diff --git a/basics/account-data/pinocchio/package.json b/basics/account-data/pinocchio/package.json
new file mode 100644
index 000000000..0423bc543
--- /dev/null
+++ b/basics/account-data/pinocchio/package.json
@@ -0,0 +1,23 @@
+{
+ "type": "module",
+ "scripts": {
+ "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/index.test.ts",
+ "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",
+ "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_pinocchio.so"
+ },
+ "dependencies": {
+ "@solana/web3.js": "^1.47.3"
+ },
+ "devDependencies": {
+ "@types/bn.js": "^5.1.0",
+ "@types/chai": "^4.3.1",
+ "@types/mocha": "^9.1.1",
+ "@types/node": "^22.15.2",
+ "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/pinocchio/pnpm-lock.yaml b/basics/account-data/pinocchio/pnpm-lock.yaml
new file mode 100644
index 000000000..187e1e651
--- /dev/null
+++ b/basics/account-data/pinocchio/pnpm-lock.yaml
@@ -0,0 +1,1352 @@
+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
+ '@types/node':
+ specifier: ^22.15.2
+ version: 22.15.2
+ 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.0':
+ resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@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}
+
+ '@solana/buffer-layout@4.0.1':
+ resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
+ engines: {node: '>=5.10'}
+
+ '@solana/codecs-core@2.1.0':
+ resolution: {integrity: sha512-SR7pKtmJBg2mhmkel2NeHA1pz06QeQXdMv8WJoIR9m8F/hw80K/612uaYbwTt2nkK0jg/Qn/rNSd7EcJ4SBGjw==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/codecs-numbers@2.1.0':
+ resolution: {integrity: sha512-XMu4yw5iCgQnMKsxSWPPOrGgtaohmupN3eyAtYv3K3C/MJEc5V90h74k5B1GUCiHvcrdUDO9RclNjD9lgbjFag==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5'
+
+ '@solana/errors@2.1.0':
+ resolution: {integrity: sha512-l+GxAv0Ar4d3c3PlZdA9G++wFYZREEbbRyAFP8+n8HSg0vudCuzogh/13io6hYuUhG/9Ve8ARZNamhV7UScKNw==}
+ engines: {node: '>=20.18.0'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5'
+
+ '@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.2':
+ resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==}
+
+ '@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.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.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'}
+
+ 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==}
+
+ 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.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'}
+
+snapshots:
+
+ '@babel/runtime@7.27.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@noble/curves@1.9.0':
+ 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.0(typescript@4.9.5)':
+ dependencies:
+ '@solana/errors': 2.1.0(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/codecs-numbers@2.1.0(typescript@4.9.5)':
+ dependencies:
+ '@solana/codecs-core': 2.1.0(typescript@4.9.5)
+ '@solana/errors': 2.1.0(typescript@4.9.5)
+ typescript: 4.9.5
+
+ '@solana/errors@2.1.0(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.0
+ '@noble/curves': 1.9.0
+ '@noble/hashes': 1.8.0
+ '@solana/buffer-layout': 4.0.1
+ '@solana/codecs-numbers': 2.1.0(typescript@4.9.5)
+ agentkeepalive: 4.6.0
+ 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.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.2
+
+ '@types/chai@4.3.20': {}
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.15.2
+
+ '@types/json5@0.0.29':
+ optional: true
+
+ '@types/mocha@9.1.1': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.15.2':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 22.15.2
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.15.2
+
+ '@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.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
+
+ 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
+
+ regenerator-runtime@0.14.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.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: {}
+
+ 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.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: {}
diff --git a/basics/account-data/pinocchio/program/Cargo.toml b/basics/account-data/pinocchio/program/Cargo.toml
new file mode 100644
index 000000000..c79283770
--- /dev/null
+++ b/basics/account-data/pinocchio/program/Cargo.toml
@@ -0,0 +1,29 @@
+[package]
+name = "account-data-pinocchio-program"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+pinocchio.workspace = true
+pinocchio-log.workspace = true
+pinocchio-system.workspace = true
+
+[dev-dependencies]
+litesvm = "0.8.1"
+solana-keypair = "3.0.1"
+solana-message = "3.0.1"
+solana-native-token = "3.0.0"
+solana-pubkey = "3.0.0"
+solana-signer = "3.0.0"
+solana-transaction = "3.0.1"
+solana-system-interface.workspace = true
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[features]
+custom-heap = []
+custom-panic = []
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }
diff --git a/basics/account-data/pinocchio/program/src/lib.rs b/basics/account-data/pinocchio/program/src/lib.rs
new file mode 100644
index 000000000..f5aec58d9
--- /dev/null
+++ b/basics/account-data/pinocchio/program/src/lib.rs
@@ -0,0 +1,88 @@
+#![no_std]
+#![allow(deprecated)]
+
+use pinocchio::{
+ account_info::AccountInfo,
+ entrypoint, nostd_panic_handler,
+ program_error::ProgramError,
+ pubkey::Pubkey,
+ sysvars::rent::{
+ Rent, DEFAULT_BURN_PERCENT, DEFAULT_EXEMPTION_THRESHOLD, DEFAULT_LAMPORTS_PER_BYTE_YEAR,
+ },
+ ProgramResult,
+};
+use pinocchio_system::instructions::CreateAccount;
+
+entrypoint!(process_instruction);
+nostd_panic_handler!();
+
+fn process_instruction(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ instruction_data: &[u8],
+) -> ProgramResult {
+ match instruction_data.split_first() {
+ Some((0, data)) => process_create(program_id, accounts, data),
+ _ => Err(ProgramError::InvalidInstructionData),
+ }
+}
+
+pub struct AddressInfo<'a> {
+ pub name: &'a [u8],
+ pub house_number: u8,
+ pub street: &'a [u8],
+ pub city: &'a [u8],
+}
+
+impl<'a> AddressInfo<'a> {
+ const LEN: usize = 51;
+}
+
+fn process_create(
+ program_id: &Pubkey,
+ accounts: &[AccountInfo],
+ instruction_data: &[u8],
+) -> ProgramResult {
+ let [address_info, payer, system_program] = accounts else {
+ return Err(ProgramError::NotEnoughAccountKeys);
+ };
+
+ if !payer.is_signer() {
+ return Err(ProgramError::InvalidAccountOwner);
+ }
+
+ if address_info.lamports().ne(&0) {
+ return Err(ProgramError::InvalidAccountData);
+ };
+
+ if !pinocchio_system::check_id(system_program.key()) {
+ return Err(ProgramError::InvalidAccountData);
+ }
+
+ if instruction_data.len() < AddressInfo::LEN {
+ return Err(ProgramError::InvalidInstructionData);
+ }
+
+ let rent = Rent {
+ lamports_per_byte_year: DEFAULT_LAMPORTS_PER_BYTE_YEAR,
+ exemption_threshold: DEFAULT_EXEMPTION_THRESHOLD,
+ burn_percent: DEFAULT_BURN_PERCENT,
+ };
+
+ let account_span = AddressInfo::LEN;
+ let lamports_required = rent.minimum_balance(account_span);
+
+ CreateAccount {
+ from: payer,
+ to: address_info,
+ lamports: lamports_required,
+ space: account_span as u64,
+ owner: program_id,
+ }
+ .invoke()?;
+
+ let mut address_info_data = address_info.try_borrow_mut_data()?;
+ address_info_data.copy_from_slice(instruction_data);
+
+ Ok(())
+}
diff --git a/basics/account-data/pinocchio/program/tests/tests.rs b/basics/account-data/pinocchio/program/tests/tests.rs
new file mode 100644
index 000000000..e6a93e3a3
--- /dev/null
+++ b/basics/account-data/pinocchio/program/tests/tests.rs
@@ -0,0 +1,113 @@
+use account_data_pinocchio_program::AddressInfo;
+use litesvm::LiteSVM;
+
+use solana_keypair::Keypair;
+use solana_message::{AccountMeta, Instruction};
+use solana_native_token::LAMPORTS_PER_SOL;
+use solana_pubkey::Pubkey;
+use solana_signer::Signer;
+use solana_transaction::Transaction;
+
+#[test]
+fn test_account_data() {
+ let mut svm = LiteSVM::new();
+
+ let address_info_account = Keypair::new();
+ let payer = Keypair::new();
+ let program_id = Pubkey::new_unique();
+
+ svm.airdrop(&payer.pubkey(), LAMPORTS_PER_SOL * 10).unwrap();
+
+ let program_bytes = include_bytes!("../../tests/fixtures/account_data_pinocchio_program.so");
+
+ svm.add_program(program_id, program_bytes).unwrap();
+
+ let accounts = vec![
+ AccountMeta::new(address_info_account.pubkey(), true),
+ AccountMeta::new(payer.pubkey(), true),
+ AccountMeta::new(solana_system_interface::program::ID, false),
+ ];
+
+ let data = AddressInfo {
+ name: "Joe C".as_bytes(),
+ house_number: 136,
+ street: "Mile High Dr.".as_bytes(),
+ city: "Solana Beach".as_bytes(),
+ };
+
+ let ix = Instruction {
+ program_id,
+ accounts,
+ data: to_bytes(&data),
+ };
+
+ let tx = Transaction::new_signed_with_payer(
+ &[ix],
+ Some(&payer.pubkey()),
+ &[&payer, &address_info_account],
+ svm.latest_blockhash(),
+ );
+
+ let res = svm.send_transaction(tx);
+ assert!(res.is_ok());
+
+ let address_info_account_data = &svm
+ .get_account(&address_info_account.pubkey())
+ .unwrap()
+ .data;
+
+ let address_info = AddressInfo {
+ name: &address_info_account_data[0..16],
+ house_number: address_info_account_data[17],
+ street: &address_info_account_data[18..34],
+ city: &address_info_account_data[35..51],
+ };
+
+ let mut name_str = String::from_utf8(address_info.name.to_vec()).unwrap();
+ name_str.retain(|c| c != '\0');
+
+ let mut street_str = String::from_utf8(address_info.street.to_vec()).unwrap();
+ street_str.retain(|c| c != '\0');
+
+ let mut city_str = String::from_utf8(address_info.city.to_vec()).unwrap();
+ city_str.retain(|c| c != '\0');
+
+ assert_eq!(name_str, String::from_utf8(data.name.to_vec()).unwrap());
+ assert_eq!(street_str, String::from_utf8(data.street.to_vec()).unwrap());
+ assert_eq!(city_str, String::from_utf8(data.city.to_vec()).unwrap());
+}
+
+fn to_bytes(address_info_data: &AddressInfo) -> Vec {
+ let mut data = Vec::new();
+
+ data.push(0);
+
+ // Pad name to 16 bytes (data[0..16])
+ let mut name = [0u8; 16];
+ let name_len = address_info_data.name.len().min(16);
+ name[..name_len].copy_from_slice(&address_info_data.name[..name_len]);
+ data.extend_from_slice(&name);
+
+ // Add 1 byte padding at index 16
+ data.push(0);
+
+ // Add house_number at index 17
+ data.push(address_info_data.house_number);
+
+ // Pad street to 16 bytes (data[18..34])
+ let mut street = [0u8; 16];
+ let street_len = address_info_data.street.len().min(16);
+ street[..street_len].copy_from_slice(&address_info_data.street[..street_len]);
+ data.extend_from_slice(&street);
+
+ // Add 1 byte padding at index 34
+ data.push(0);
+
+ // Pad city to 16 bytes (data[35..51])
+ let mut city = [0u8; 16];
+ let city_len = address_info_data.city.len().min(16);
+ city[..city_len].copy_from_slice(&address_info_data.city[..city_len]);
+ data.extend_from_slice(&city);
+
+ data
+}
diff --git a/basics/account-data/pinocchio/tests/index.test.ts b/basics/account-data/pinocchio/tests/index.test.ts
new file mode 100644
index 000000000..07be2d7d5
--- /dev/null
+++ b/basics/account-data/pinocchio/tests/index.test.ts
@@ -0,0 +1,130 @@
+import { Buffer } from "node:buffer";
+import { describe, test } from "node:test";
+import {
+ Keypair,
+ PublicKey,
+ SystemProgram,
+ Transaction,
+ TransactionInstruction,
+} from "@solana/web3.js";
+import { start } from "solana-bankrun";
+
+interface AddressInfo {
+ name: string;
+ house_number: number;
+ street: string;
+ city: string;
+}
+
+function toBytes(addressInfo: AddressInfo): Buffer {
+ const data: number[] = [];
+
+ // Add instruction discriminator
+ data.push(0);
+
+ // Pad name to 16 bytes (data[1..17])
+ const nameBytes = Buffer.from(addressInfo.name, "utf-8");
+ const namePadded = Buffer.alloc(16);
+ nameBytes.copy(namePadded, 0, 0, Math.min(nameBytes.length, 16));
+ data.push(...namePadded);
+
+ // Add 1 byte padding at index 17
+ data.push(0);
+
+ // Add house_number at index 18
+ data.push(addressInfo.house_number);
+
+ // Pad street to 16 bytes (data[19..35])
+ const streetBytes = Buffer.from(addressInfo.street, "utf-8");
+ const streetPadded = Buffer.alloc(16);
+ streetBytes.copy(streetPadded, 0, 0, Math.min(streetBytes.length, 16));
+ data.push(...streetPadded);
+
+ // Add 1 byte padding at index 35
+ data.push(0);
+
+ // Pad city to 16 bytes (data[36..52])
+ const cityBytes = Buffer.from(addressInfo.city, "utf-8");
+ const cityPadded = Buffer.alloc(16);
+ cityBytes.copy(cityPadded, 0, 0, Math.min(cityBytes.length, 16));
+ data.push(...cityPadded);
+
+ return Buffer.from(data);
+}
+
+function fromBytes(buffer: Buffer): AddressInfo {
+ // name: bytes 0..16
+ const nameBytes = buffer.subarray(0, 16);
+ const name = nameBytes.toString("utf-8").replace(/\0/g, "");
+
+ // house_number: byte 17
+ const house_number = buffer[17];
+
+ // street: bytes 18..34
+ const streetBytes = buffer.subarray(18, 34);
+ const street = streetBytes.toString("utf-8").replace(/\0/g, "");
+
+ // city: bytes 35..51
+ const cityBytes = buffer.subarray(35, 51);
+ const city = cityBytes.toString("utf-8").replace(/\0/g, "");
+
+ return { name, house_number, street, city };
+}
+
+describe("Account Data!", async () => {
+ const addressInfoAccount = Keypair.generate();
+ const PROGRAM_ID = PublicKey.unique();
+ const context = await start(
+ [{ name: "account_data_pinocchio_program", programId: PROGRAM_ID }],
+ [],
+ );
+ const client = context.banksClient;
+
+ test("Create the address info account", async () => {
+ const payer = context.payer;
+
+ console.log(`Program Address : ${PROGRAM_ID}`);
+ console.log(`Payer Address : ${payer.publicKey}`);
+ console.log(`Address Info Acct : ${addressInfoAccount.publicKey}`);
+
+ const addressInfo: AddressInfo = {
+ name: "Joe C",
+ house_number: 136,
+ street: "Mile High Dr.",
+ city: "Solana Beach",
+ };
+
+ 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: toBytes(addressInfo),
+ });
+
+ const blockhash = context.lastBlockhash;
+
+ const tx = new Transaction();
+ tx.recentBlockhash = blockhash;
+ tx.add(ix).sign(payer, addressInfoAccount);
+ await client.processTransaction(tx);
+ });
+
+ test("Read the new account's data", async () => {
+ const accountInfo = await client.getAccount(addressInfoAccount.publicKey);
+
+ const readAddressInfo = fromBytes(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/pinocchio/tsconfig.json b/basics/account-data/pinocchio/tsconfig.json
new file mode 100644
index 000000000..8c20b2236
--- /dev/null
+++ b/basics/account-data/pinocchio/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/hello-solana/pinocchio/package.json b/basics/hello-solana/pinocchio/package.json
index 0423bc543..2db96c483 100644
--- a/basics/hello-solana/pinocchio/package.json
+++ b/basics/hello-solana/pinocchio/package.json
@@ -7,17 +7,17 @@
"deploy": "solana program deploy ./program/target/so/hello_solana_program_pinocchio.so"
},
"dependencies": {
- "@solana/web3.js": "^1.47.3"
+ "@solana/web3.js": "^1.98.4"
},
"devDependencies": {
- "@types/bn.js": "^5.1.0",
- "@types/chai": "^4.3.1",
+ "@types/bn.js": "^5.2.0",
+ "@types/chai": "^4.3.20",
"@types/mocha": "^9.1.1",
- "@types/node": "^22.15.2",
- "chai": "^4.3.4",
- "mocha": "^9.0.3",
- "solana-bankrun": "^0.3.0",
- "ts-mocha": "^10.0.0",
- "typescript": "^4.3.5"
+ "@types/node": "^22.19.1",
+ "chai": "^4.5.0",
+ "mocha": "^9.2.2",
+ "solana-bankrun": "^0.3.1",
+ "ts-mocha": "^10.1.0",
+ "typescript": "^4.9.5"
}
}
diff --git a/basics/hello-solana/pinocchio/pnpm-lock.yaml b/basics/hello-solana/pinocchio/pnpm-lock.yaml
index 271cefb5f..736d9d29e 100644
--- a/basics/hello-solana/pinocchio/pnpm-lock.yaml
+++ b/basics/hello-solana/pinocchio/pnpm-lock.yaml
@@ -9,45 +9,45 @@ 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)
- '@types/node':
- specifier: ^22.15.2
- version: 22.15.2
+ specifier: ^1.98.4
+ version: 1.98.4(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
+ specifier: ^5.2.0
+ version: 5.2.0
'@types/chai':
- specifier: ^4.3.1
+ specifier: ^4.3.20
version: 4.3.20
'@types/mocha':
specifier: ^9.1.1
version: 9.1.1
+ '@types/node':
+ specifier: ^22.19.1
+ version: 22.19.1
chai:
- specifier: ^4.3.4
+ specifier: ^4.5.0
version: 4.5.0
mocha:
- specifier: ^9.0.3
+ specifier: ^9.2.2
version: 9.2.2
solana-bankrun:
- specifier: ^0.3.0
+ specifier: ^0.3.1
version: 0.3.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)
ts-mocha:
- specifier: ^10.0.0
+ specifier: ^10.1.0
version: 10.1.0(mocha@9.2.2)
typescript:
- specifier: ^4.3.5
+ specifier: ^4.9.5
version: 4.9.5
packages:
- '@babel/runtime@7.27.0':
- resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
+ '@babel/runtime@7.28.4':
+ resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
engines: {node: '>=6.9.0'}
- '@noble/curves@1.9.0':
- resolution: {integrity: sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg==}
+ '@noble/curves@1.9.7':
+ resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==}
engines: {node: ^14.21.3 || >=16}
'@noble/hashes@1.8.0':
@@ -58,33 +58,33 @@ packages:
resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
engines: {node: '>=5.10'}
- '@solana/codecs-core@2.1.0':
- resolution: {integrity: sha512-SR7pKtmJBg2mhmkel2NeHA1pz06QeQXdMv8WJoIR9m8F/hw80K/612uaYbwTt2nkK0jg/Qn/rNSd7EcJ4SBGjw==}
+ '@solana/codecs-core@2.3.0':
+ resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==}
engines: {node: '>=20.18.0'}
peerDependencies:
- typescript: '>=5'
+ typescript: '>=5.3.3'
- '@solana/codecs-numbers@2.1.0':
- resolution: {integrity: sha512-XMu4yw5iCgQnMKsxSWPPOrGgtaohmupN3eyAtYv3K3C/MJEc5V90h74k5B1GUCiHvcrdUDO9RclNjD9lgbjFag==}
+ '@solana/codecs-numbers@2.3.0':
+ resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==}
engines: {node: '>=20.18.0'}
peerDependencies:
- typescript: '>=5'
+ typescript: '>=5.3.3'
- '@solana/errors@2.1.0':
- resolution: {integrity: sha512-l+GxAv0Ar4d3c3PlZdA9G++wFYZREEbbRyAFP8+n8HSg0vudCuzogh/13io6hYuUhG/9Ve8ARZNamhV7UScKNw==}
+ '@solana/errors@2.3.0':
+ resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==}
engines: {node: '>=20.18.0'}
hasBin: true
peerDependencies:
- typescript: '>=5'
+ typescript: '>=5.3.3'
- '@solana/web3.js@1.98.2':
- resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==}
+ '@solana/web3.js@1.98.4':
+ resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==}
'@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/bn.js@5.2.0':
+ resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==}
'@types/chai@4.3.20':
resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==}
@@ -101,8 +101,8 @@ packages:
'@types/node@12.20.55':
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
- '@types/node@22.15.2':
- resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==}
+ '@types/node@22.19.1':
+ resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==}
'@types/uuid@8.3.4':
resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
@@ -159,14 +159,14 @@ packages:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
- bn.js@5.2.1:
- resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
borsh@0.7.0:
resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@@ -200,8 +200,8 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
- chalk@5.4.1:
- resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
check-error@1.0.3:
@@ -221,9 +221,9 @@ packages:
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@14.0.2:
+ resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
+ engines: {node: '>=20'}
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@@ -493,15 +493,12 @@ packages:
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==}
+ rpc-websockets@9.3.1:
+ resolution: {integrity: sha512-bY6a+i/lEtBJ/mUxwsCTgevoV1P0foXTVA7UoThzaIWbM+3NDqorf8NBWs5DmqKTFeA1IoNzgvkWjFCPgnzUiQ==}
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
@@ -664,8 +661,8 @@ packages:
utf-8-validate:
optional: true
- ws@8.18.1:
- resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
+ ws@8.18.3:
+ resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -702,11 +699,9 @@ packages:
snapshots:
- '@babel/runtime@7.27.0':
- dependencies:
- regenerator-runtime: 0.14.1
+ '@babel/runtime@7.28.4': {}
- '@noble/curves@1.9.0':
+ '@noble/curves@1.9.7':
dependencies:
'@noble/hashes': 1.8.0
@@ -716,39 +711,39 @@ snapshots:
dependencies:
buffer: 6.0.3
- '@solana/codecs-core@2.1.0(typescript@4.9.5)':
+ '@solana/codecs-core@2.3.0(typescript@4.9.5)':
dependencies:
- '@solana/errors': 2.1.0(typescript@4.9.5)
+ '@solana/errors': 2.3.0(typescript@4.9.5)
typescript: 4.9.5
- '@solana/codecs-numbers@2.1.0(typescript@4.9.5)':
+ '@solana/codecs-numbers@2.3.0(typescript@4.9.5)':
dependencies:
- '@solana/codecs-core': 2.1.0(typescript@4.9.5)
- '@solana/errors': 2.1.0(typescript@4.9.5)
+ '@solana/codecs-core': 2.3.0(typescript@4.9.5)
+ '@solana/errors': 2.3.0(typescript@4.9.5)
typescript: 4.9.5
- '@solana/errors@2.1.0(typescript@4.9.5)':
+ '@solana/errors@2.3.0(typescript@4.9.5)':
dependencies:
- chalk: 5.4.1
- commander: 13.1.0
+ chalk: 5.6.2
+ commander: 14.0.2
typescript: 4.9.5
- '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
+ '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)':
dependencies:
- '@babel/runtime': 7.27.0
- '@noble/curves': 1.9.0
+ '@babel/runtime': 7.28.4
+ '@noble/curves': 1.9.7
'@noble/hashes': 1.8.0
'@solana/buffer-layout': 4.0.1
- '@solana/codecs-numbers': 2.1.0(typescript@4.9.5)
+ '@solana/codecs-numbers': 2.3.0(typescript@4.9.5)
agentkeepalive: 4.6.0
- bn.js: 5.2.1
+ 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
+ rpc-websockets: 9.3.1
superstruct: 2.0.2
transitivePeerDependencies:
- bufferutil
@@ -760,15 +755,15 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@types/bn.js@5.1.6':
+ '@types/bn.js@5.2.0':
dependencies:
- '@types/node': 22.15.2
+ '@types/node': 22.19.1
'@types/chai@4.3.20': {}
'@types/connect@3.4.38':
dependencies:
- '@types/node': 22.15.2
+ '@types/node': 22.19.1
'@types/json5@0.0.29':
optional: true
@@ -777,7 +772,7 @@ snapshots:
'@types/node@12.20.55': {}
- '@types/node@22.15.2':
+ '@types/node@22.19.1':
dependencies:
undici-types: 6.21.0
@@ -785,11 +780,11 @@ snapshots:
'@types/ws@7.4.7':
dependencies:
- '@types/node': 22.15.2
+ '@types/node': 22.19.1
'@types/ws@8.18.1':
dependencies:
- '@types/node': 22.15.2
+ '@types/node': 22.19.1
'@ungap/promise-all-settled@1.1.2': {}
@@ -826,15 +821,15 @@ snapshots:
binary-extensions@2.3.0: {}
- bn.js@5.2.1: {}
+ bn.js@5.2.2: {}
borsh@0.7.0:
dependencies:
- bn.js: 5.2.1
+ bn.js: 5.2.2
bs58: 4.0.1
text-encoding-utf-8: 1.0.2
- brace-expansion@1.1.11:
+ brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
@@ -878,7 +873,7 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
- chalk@5.4.1: {}
+ chalk@5.6.2: {}
check-error@1.0.3:
dependencies:
@@ -908,7 +903,7 @@ snapshots:
color-name@1.1.4: {}
- commander@13.1.0: {}
+ commander@14.0.2: {}
commander@2.20.3: {}
@@ -1072,11 +1067,11 @@ snapshots:
minimatch@3.1.2:
dependencies:
- brace-expansion: 1.1.11
+ brace-expansion: 1.1.12
minimatch@4.2.1:
dependencies:
- brace-expansion: 1.1.11
+ brace-expansion: 1.1.12
minimist@1.2.8: {}
@@ -1154,11 +1149,9 @@ snapshots:
dependencies:
picomatch: 2.3.1
- regenerator-runtime@0.14.1: {}
-
require-directory@2.1.1: {}
- rpc-websockets@9.1.1:
+ rpc-websockets@9.3.1:
dependencies:
'@swc/helpers': 0.5.17
'@types/uuid': 8.3.4
@@ -1166,7 +1159,7 @@ snapshots:
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)
+ ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)
optionalDependencies:
bufferutil: 4.0.9
utf-8-validate: 5.0.10
@@ -1194,7 +1187,7 @@ snapshots:
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)
+ '@solana/web3.js': 1.98.4(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
@@ -1321,7 +1314,7 @@ snapshots:
bufferutil: 4.0.9
utf-8-validate: 5.0.10
- ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10):
+ ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10):
optionalDependencies:
bufferutil: 4.0.9
utf-8-validate: 5.0.10
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/Cargo.toml b/tokens/token-2022/transfer-hook/pblock-list/pino/Cargo.toml
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/Cargo.toml
rename to tokens/token-2022/transfer-hook/pblock-list/pino/Cargo.toml
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/cli/Cargo.toml b/tokens/token-2022/transfer-hook/pblock-list/pino/cli/Cargo.toml
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/cli/Cargo.toml
rename to tokens/token-2022/transfer-hook/pblock-list/pino/cli/Cargo.toml
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/cli/src/main.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/cli/src/main.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/cli/src/main.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/cli/src/main.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/codama.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/codama.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/codama.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/codama.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/package.json b/tokens/token-2022/transfer-hook/pblock-list/pino/package.json
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/package.json
rename to tokens/token-2022/transfer-hook/pblock-list/pino/package.json
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/Cargo.toml b/tokens/token-2022/transfer-hook/pblock-list/pino/program/Cargo.toml
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/Cargo.toml
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/Cargo.toml
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/error.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/error.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/error.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/error.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/block_wallet.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/block_wallet.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/block_wallet.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/block_wallet.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/init.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/init.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/init.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/init.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/mod.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/mod.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/mod.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/mod.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/setup_extra_metas.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/setup_extra_metas.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/setup_extra_metas.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/setup_extra_metas.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/tx_hook.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/tx_hook.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/tx_hook.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/tx_hook.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/unblock_wallet.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/unblock_wallet.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/instructions/unblock_wallet.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/instructions/unblock_wallet.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/lib.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/lib.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/lib.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/lib.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/state/config.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/state/config.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/state/config.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/state/config.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/state/mod.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/state/mod.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/state/mod.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/state/mod.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/state/wallet_block.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/state/wallet_block.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/state/wallet_block.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/state/wallet_block.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/token2022_utils.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/program/src/token2022_utils.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/program/src/token2022_utils.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/program/src/token2022_utils.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/readme.md b/tokens/token-2022/transfer-hook/pblock-list/pino/readme.md
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/readme.md
rename to tokens/token-2022/transfer-hook/pblock-list/pino/readme.md
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/Cargo.toml b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/Cargo.toml
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/Cargo.toml
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/Cargo.toml
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/accounts/config.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/accounts/config.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/accounts/config.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/accounts/config.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/accounts/extra_metas.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/accounts/extra_metas.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/accounts/extra_metas.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/accounts/extra_metas.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/accounts/mod.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/accounts/mod.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/accounts/mod.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/accounts/mod.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/accounts/wallet_block.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/accounts/wallet_block.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/accounts/wallet_block.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/accounts/wallet_block.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/errors/mod.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/errors/mod.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/errors/mod.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/errors/mod.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/block_wallet.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/block_wallet.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/block_wallet.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/block_wallet.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/init.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/init.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/init.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/init.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/mod.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/mod.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/mod.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/mod.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/setup_extra_metas.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/setup_extra_metas.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/setup_extra_metas.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/setup_extra_metas.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/unblock_wallet.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/unblock_wallet.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/instructions/unblock_wallet.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/instructions/unblock_wallet.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/mod.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/mod.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/mod.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/mod.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/programs.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/programs.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/programs.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/programs.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/shared.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/shared.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/client/shared.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/client/shared.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/lib.rs b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/lib.rs
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/rust/src/lib.rs
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/rust/src/lib.rs
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/accounts/config.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/accounts/config.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/accounts/config.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/accounts/config.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/accounts/extraMetas.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/accounts/extraMetas.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/accounts/extraMetas.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/accounts/extraMetas.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/accounts/index.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/accounts/index.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/accounts/index.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/accounts/index.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/accounts/walletBlock.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/accounts/walletBlock.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/accounts/walletBlock.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/accounts/walletBlock.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/index.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/index.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/index.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/index.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/blockWallet.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/blockWallet.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/blockWallet.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/blockWallet.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/index.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/index.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/index.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/index.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/init.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/init.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/init.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/init.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/setupExtraMetas.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/setupExtraMetas.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/setupExtraMetas.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/setupExtraMetas.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/unblockWallet.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/unblockWallet.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/instructions/unblockWallet.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/instructions/unblockWallet.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/pdas/config.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/pdas/config.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/pdas/config.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/pdas/config.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/pdas/extraMetas.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/pdas/extraMetas.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/pdas/extraMetas.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/pdas/extraMetas.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/pdas/index.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/pdas/index.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/pdas/index.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/pdas/index.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/pdas/walletBlock.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/pdas/walletBlock.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/pdas/walletBlock.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/pdas/walletBlock.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/programs/blockList.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/programs/blockList.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/programs/blockList.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/programs/blockList.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/programs/index.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/programs/index.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/programs/index.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/programs/index.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/shared/index.ts b/tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/shared/index.ts
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/sdk/ts/src/shared/index.ts
rename to tokens/token-2022/transfer-hook/pblock-list/pino/sdk/ts/src/shared/index.ts
diff --git a/tokens/token-2022/transfer-hook/pblock-list/pinocchio/tsconfig.json b/tokens/token-2022/transfer-hook/pblock-list/pino/tsconfig.json
similarity index 100%
rename from tokens/token-2022/transfer-hook/pblock-list/pinocchio/tsconfig.json
rename to tokens/token-2022/transfer-hook/pblock-list/pino/tsconfig.json