From 16efac9ba8f61189518d3cd627bd8980d7d5a39e Mon Sep 17 00:00:00 2001 From: Ayush Date: Sun, 2 Jun 2024 10:31:24 +0530 Subject: [PATCH] tokens native, formatter, trigger action on project changes --- .github/.ghaignore | 36 + .github/CONTRIBUTING.md | 17 +- .github/workflows/anchor.yml | 203 +- .github/workflows/biome.yml | 21 + .github/workflows/rust.yml | 6 +- .github/workflows/solana-native.yml | 49 +- .gitignore | 1 + .husky/pre-commit | 4 + Cargo.lock | 1082 ++++- Cargo.toml | 8 + basics/account-data/anchor/tests/test.ts | 62 +- basics/account-data/native/pnpm-lock.yaml | 1423 ++++--- basics/account-data/native/tests/test.ts | 24 +- basics/checking-accounts/anchor/tests/test.ts | 49 +- basics/checking-accounts/native/tests/test.ts | 17 +- .../close-account/anchor/migrations/deploy.ts | 4 +- .../anchor/tests/close-account.ts | 56 +- .../native/tests/close-account.test.ts | 27 +- .../native/ts/instructions/close.ts | 92 +- .../native/ts/instructions/create.ts | 15 +- .../native/ts/instructions/index.ts | 6 +- basics/close-account/native/ts/state/index.ts | 51 +- basics/counter/anchor/migrations/deploy.ts | 4 +- basics/counter/anchor/tests/counter_anchor.ts | 69 +- basics/counter/mpl-stack/.solitarc.js | 18 +- .../mpl-stack/idl/counter_mpl_stack.json | 2 +- .../mpl-stack/idl/counter_solana_native.json | 2 +- basics/counter/mpl-stack/jest.config.js | 10 +- .../counter/mpl-stack/tests/counter.test.ts | 206 +- .../ts/generated/accounts/Counter.ts | 76 +- .../mpl-stack/ts/generated/accounts/index.ts | 6 +- .../counter/mpl-stack/ts/generated/index.ts | 10 +- .../ts/generated/instructions/Increment.ts | 24 +- .../ts/generated/instructions/index.ts | 2 +- basics/counter/mpl-stack/ts/index.ts | 2 +- basics/counter/native/tests/counter.test.ts | 35 +- basics/counter/native/ts/accounts/counter.ts | 16 +- basics/counter/native/ts/accounts/index.ts | 2 +- basics/counter/native/ts/index.ts | 2 +- .../createIncrementInstruction.ts | 38 +- .../counter/native/ts/instructions/index.ts | 2 +- basics/counter/seahorse/migrations/deploy.ts | 4 +- .../seahorse/tests/counter_seahorse.ts | 25 +- basics/create-account/anchor/tests/test.ts | 39 +- basics/create-account/native/tests/test.ts | 15 +- .../anchor/migrations/deploy.ts | 4 +- .../anchor/tests/cpi.ts | 20 +- .../native/tests/test.ts | 153 +- basics/hello-solana/anchor/tests/test.ts | 8 +- basics/hello-solana/native/tests/test.ts | 30 +- .../hello_solana/migrations/deploy.ts | 4 +- .../hello_solana/tests/hello_solana.ts | 8 +- basics/pda-rent-payer/anchor/tests/test.ts | 57 +- basics/pda-rent-payer/native/tests/test.ts | 183 +- .../anchor/tests/test.ts | 15 +- .../native/tests/test.ts | 113 +- .../anchor/tests/test.ts | 50 +- .../native/tests/test.ts | 266 +- basics/realloc/anchor/migrations/deploy.ts | 4 +- basics/realloc/anchor/package.json | 34 +- basics/realloc/anchor/tests/anchor-realloc.ts | 68 +- basics/realloc/anchor/tsconfig.json | 19 +- basics/realloc/native/tests/realloc.test.ts | 50 +- basics/realloc/native/ts/index.ts | 3 +- .../realloc/native/ts/instructions/create.ts | 126 +- .../realloc/native/ts/instructions/index.ts | 2 +- .../native/ts/instructions/instruction.ts | 8 +- .../native/ts/instructions/reallocate.ts | 231 +- .../realloc/native/ts/state/address-info.ts | 71 +- .../native/ts/state/enhanced-address-info.ts | 83 +- basics/realloc/native/ts/state/index.ts | 2 +- basics/realloc/native/ts/state/work-info.ts | 71 +- basics/realloc/native/ts/util/index.ts | 2 +- basics/realloc/native/ts/util/util.ts | 8 +- basics/rent/anchor/tests/test.ts | 20 +- basics/rent/native/tests/test.ts | 18 +- basics/repository-layout/anchor/tests/test.ts | 56 +- basics/repository-layout/native/tests/test.ts | 24 +- basics/transfer-sol/anchor/tests/test.ts | 88 +- .../transfer-sol/native/tests/instruction.ts | 103 +- basics/transfer-sol/native/tests/test.ts | 54 +- .../seahorse/migrations/deploy.ts | 4 +- basics/transfer-sol/seahorse/package.json | 34 +- .../transfer-sol/seahorse/tests/seahorse.ts | 19 +- basics/transfer-sol/seahorse/tsconfig.json | 19 +- biome.json | 56 + compression/cnft-burn/{ => anchor}/.gitignore | 0 .../cnft-burn/{ => anchor}/.prettierignore | 0 .../cnft-burn/{ => anchor}/Anchor.toml | 0 compression/cnft-burn/{ => anchor}/Cargo.toml | 0 compression/cnft-burn/{ => anchor}/README.md | 0 .../{ => anchor}/migrations/deploy.ts | 4 +- .../cnft-burn/{ => anchor}/package.json | 0 compression/cnft-burn/anchor/pnpm-lock.yaml | 3731 ++++++++++++++++ .../programs/cnft-burn/Cargo.toml | 0 .../programs/cnft-burn/Xargo.toml | 0 .../programs/cnft-burn/src/lib.rs | 0 .../tests/ReadApi/WrapperConnection.ts | 110 +- .../{ => anchor}/tests/ReadApi/types.ts | 36 +- .../cnft-burn/{ => anchor}/tests/cnft-burn.ts | 52 +- .../{ => anchor}/tests/createAndMint.ts | 71 +- .../tests/fetchNFTsByCollection.ts | 33 +- .../cnft-burn/{ => anchor}/tests/readApi.ts | 21 +- .../cnft-burn/{ => anchor}/tests/utils.ts | 14 +- .../{ => anchor}/tests/utils/compression.ts | 179 +- .../{ => anchor}/tests/utils/helpers.ts | 135 +- .../cnft-burn/anchor}/tsconfig.json | 0 compression/cnft-burn/tsconfig.json | 11 - compression/cnft-vault/anchor/pnpm-lock.yaml | 1993 +++++++++ .../cnft-vault/anchor/tests/readAPI.ts | 94 +- .../anchor/tests/scripts/constants.ts | 18 +- .../anchor/tests/scripts/withdraw.ts | 35 +- .../anchor/tests/scripts/withdrawTwo.ts | 62 +- .../tests/scripts/withdrawWithLookup.ts | 360 +- compression/cnft-vault/anchor/tests/tests.ts | 94 +- compression/cnft-vault/anchor/tests/utils.ts | 69 +- compression/cnft-vault/anchor/tsconfig.json | 15 +- compression/cutils/{ => anchor}/.gitignore | 0 compression/cutils/{ => anchor}/Anchor.toml | 0 compression/cutils/{ => anchor}/Cargo.toml | 0 compression/cutils/{ => anchor}/README.md | 0 compression/cutils/anchor/package.json | 26 + compression/cutils/anchor/pnpm-lock.yaml | 3775 +++++++++++++++++ .../{ => anchor}/programs/cutils/Cargo.toml | 0 .../{ => anchor}/programs/cutils/Xargo.toml | 0 .../programs/cutils/src/actions/mint.rs | 0 .../programs/cutils/src/actions/mod.rs | 0 .../programs/cutils/src/actions/verify.rs | 0 .../{ => anchor}/programs/cutils/src/lib.rs | 0 .../programs/cutils/src/state/data.rs | 0 .../programs/cutils/src/state/mod.rs | 0 compression/cutils/anchor/tests/setup.ts | 57 + compression/cutils/anchor/tests/tests.ts | 79 + .../cutils/anchor/tests/utils/compression.ts | 346 ++ .../cutils/anchor/tests/utils/helpers.ts | 259 ++ .../{ => anchor}/tests/utils/readAPI.ts | 94 +- .../cutils/{ => anchor}/tests/utils/utils.ts | 138 +- compression/cutils/anchor/tsconfig.json | 9 + compression/cutils/package.json | 26 - compression/cutils/tests/setup.ts | 57 - compression/cutils/tests/tests.ts | 77 - compression/cutils/tests/utils/compression.ts | 382 -- compression/cutils/tests/utils/helpers.ts | 284 -- compression/cutils/tsconfig.json | 14 - oracles/pyth/anchor/migrations/deploy.ts | 4 +- oracles/pyth/anchor/package.json | 34 +- oracles/pyth/anchor/pnpm-lock.yaml | 1355 ++++++ oracles/pyth/anchor/tests/pythexample.ts | 19 +- oracles/pyth/anchor/tsconfig.json | 19 +- oracles/pyth/seahorse/migrations/deploy.ts | 4 +- oracles/pyth/seahorse/package.json | 34 +- oracles/pyth/seahorse/tests/seahorse.ts | 16 +- oracles/pyth/seahorse/tsconfig.json | 19 +- package.json | 13 +- pnpm-lock.yaml | 275 ++ scripts/lib/change-package-version.ts | 18 +- scripts/lib/command-check.ts | 44 +- scripts/lib/command-help.ts | 48 +- scripts/lib/command-list.ts | 8 +- scripts/lib/command-set.ts | 40 +- scripts/lib/command-update.ts | 48 +- scripts/lib/get-deps-count.ts | 32 +- scripts/lib/get-recursive-file-list.ts | 22 +- scripts/lib/index.ts | 10 +- scripts/sync-package-json.ts | 25 +- tokens/.assets/nft.json | 10 +- tokens/.assets/spl-token.json | 10 +- tokens/create-token/anchor/Anchor.toml | 2 +- tokens/create-token/anchor/tests/test.ts | 22 +- tokens/create-token/native/package.json | 5 +- tokens/create-token/native/tests/test.ts | 266 +- tokens/create-token/native/tsconfig.json | 2 +- tokens/nft-minter/anchor/Anchor.toml | 2 +- tokens/nft-minter/anchor/tests/test.ts | 25 +- .../nft-minter/native/tests/instructions.ts | 75 +- tokens/nft-minter/native/tests/test.ts | 233 +- tokens/nft-minter/native/tsconfig.json | 2 +- tokens/pda-mint-authority/anchor/Anchor.toml | 2 +- .../pda-mint-authority/anchor/tests/test.ts | 38 +- tokens/pda-mint-authority/native/package.json | 6 +- .../pda-mint-authority/native/pnpm-lock.yaml | 1780 ++++++++ .../native/tests/instructions.ts | 98 +- .../pda-mint-authority/native/tests/test.ts | 294 +- .../pda-mint-authority/native/tsconfig.json | 2 +- tokens/spl-token-minter/anchor/Anchor.toml | 2 +- tokens/spl-token-minter/anchor/tests/test.ts | 36 +- .../native/tests/instructions.ts | 79 +- tokens/spl-token-minter/native/tests/test.ts | 198 +- tokens/spl-token-minter/native/tsconfig.json | 2 +- .../basics/anchor/migrations/deploy.ts | 4 +- .../token-2022/basics/anchor/tests/anchor.ts | 82 +- tokens/token-2022/basics/anchor/tsconfig.json | 19 +- .../cpi-guard/anchor/migrations/deploy.ts | 4 +- .../cpi-guard/anchor/tests/cpi-guard.ts | 74 +- .../anchor/migrations/deploy.ts | 4 +- .../anchor/tests/default-account-state.ts | 39 +- .../default-account-state/native/package.json | 8 +- .../native/pnpm-lock.yaml | 1780 ++++++++ .../native/program/Cargo.toml | 2 +- .../native/tests/test.ts | 71 +- .../group/anchor/migrations/deploy.ts | 4 +- tokens/token-2022/group/anchor/tests/group.ts | 17 +- .../anchor/migrations/deploy.ts | 4 +- .../anchor/tests/immutable-owner.ts | 27 +- .../anchor/migrations/deploy.ts | 4 +- .../anchor/tests/interest-bearing.ts | 29 +- .../memo-transfer/anchor/migrations/deploy.ts | 4 +- .../anchor/tests/memo-transfer.ts | 107 +- .../metadata/anchor/migrations/deploy.ts | 4 +- .../metadata/anchor/tests/metadata.ts | 86 +- .../anchor/migrations/deploy.ts | 4 +- .../anchor/tests/mint-close-authority.ts | 36 +- .../mint-close-authority/native/package.json | 8 +- .../native/pnpm-lock.yaml | 1780 ++++++++ .../mint-close-authority/native/tests/test.ts | 74 +- .../multiple-extensions/native/package.json | 8 +- .../multiple-extensions/native/pnpm-lock.yaml | 1780 ++++++++ .../native/program/Cargo.toml | 2 +- .../multiple-extensions/native/tests/test.ts | 68 +- .../{anchor => anchor-example}/README.md | 108 +- .../anchor}/.gitignore | 0 .../anchor}/.prettierignore | 0 .../anchor}/Anchor.toml | 2 +- .../anchor-example/anchor}/Cargo.toml | 0 .../anchor}/README.md | 0 .../anchor}/migrations/deploy.ts | 4 +- .../anchor-example/anchor/package.json | 23 + .../anchor-example/anchor/pnpm-lock.yaml | 1802 ++++++++ .../anchor}/programs/extension_nft/Cargo.toml | 4 +- .../anchor}/programs/extension_nft/Xargo.toml | 0 .../programs/extension_nft/src/constants.rs | 0 .../programs/extension_nft/src/errors.rs | 0 .../src/instructions/chop_tree.rs | 0 .../src/instructions/init_player.rs | 0 .../src/instructions/mint_nft.rs | 0 .../extension_nft/src/instructions/mod.rs | 0 .../anchor}/programs/extension_nft/src/lib.rs | 0 .../extension_nft/src/state/game_data.rs | 0 .../programs/extension_nft/src/state/mod.rs | 0 .../extension_nft/src/state/player_data.rs | 0 .../anchor}/rustfmt.toml | 0 .../anchor-example/anchor/tests/lumberjack.ts | 53 + .../anchor-example/anchor/tsconfig.json | 10 + .../app/.eslintrc.json | 0 .../{anchor => anchor-example}/app/.gitignore | 0 .../{anchor => anchor-example}/app/README.md | 0 .../app/components/ChopTreeButton.tsx | 0 .../app/components/DisplayGameState.tsx | 0 .../app/components/DisplayNfts.tsx | 0 .../app/components/InitPlayerButton.tsx | 0 .../app/components/MintNftButton.tsx | 0 .../app/components/RequestAirdrop.tsx | 0 .../app/components/SessionKeyButton.tsx | 0 .../app/components/WalletMultiButton.tsx | 0 .../app/contexts/GameStateProvider.tsx | 0 .../app/contexts/NftProvider.tsx | 0 .../app/contexts/SessionProvider.tsx | 0 .../app/contexts/WalletContextProvider.tsx | 0 .../anchor-example/app/idl/extension_nft.ts | 425 ++ .../app/next.config.js | 10 +- .../app/package.json | 0 .../app/pages/_app.tsx | 0 .../app/pages/_document.tsx | 0 .../anchor-example/app/pages/api/hello.ts | 10 + .../app/pages/index.tsx | 0 .../app/public/Beaver.png | Bin .../app/public/Tree.png | Bin .../app/public/Wood.png | Bin .../app/public/energy.png | Bin .../app/public/favicon.ico | Bin .../app/public/next.svg | 0 .../app/public/vercel.svg | 0 .../app/styles/Home.module.css | 0 .../app/styles/globals.css | 0 .../app/tsconfig.json | 0 .../anchor-example/app/utils/anchor.ts | 34 + .../app/utils/wrappedConnection.ts | 99 +- .../anchor-example/nx.json | 22 + .../{anchor => anchor-example}/package.json | 0 .../unity/ExtensionNft/.gitattributes | 0 .../unity/ExtensionNft/.gitignore | 0 .../unity/ExtensionNft/Assets/DOTween 4.meta | 0 .../ExtensionNft/Assets/DOTween 4/DOTween.XML | 0 .../Assets/DOTween 4/DOTween.XML.meta | 0 .../ExtensionNft/Assets/DOTween 4/DOTween.dll | Bin .../Assets/DOTween 4/DOTween.dll.mdb | Bin .../Assets/DOTween 4/DOTween.dll.mdb.meta | 0 .../Assets/DOTween 4/DOTween.dll.meta | 0 .../ExtensionNft/Assets/DOTween 4/Editor.meta | 0 .../Assets/DOTween 4/Editor/DOTweenEditor.XML | 0 .../DOTween 4/Editor/DOTweenEditor.XML.meta | 0 .../Assets/DOTween 4/Editor/DOTweenEditor.dll | Bin .../DOTween 4/Editor/DOTweenEditor.dll.mdb | Bin .../Editor/DOTweenEditor.dll.mdb.meta | 0 .../DOTween 4/Editor/DOTweenEditor.dll.meta | 0 .../Assets/DOTween 4/Editor/Imgs.meta | 0 .../DOTween 4/Editor/Imgs/DOTweenIcon.png | Bin .../Editor/Imgs/DOTweenIcon.png.meta | 0 .../DOTween 4/Editor/Imgs/DOTweenMiniIcon.png | Bin .../Editor/Imgs/DOTweenMiniIcon.png.meta | 0 .../Assets/DOTween 4/Editor/Imgs/Footer.png | Bin .../DOTween 4/Editor/Imgs/Footer.png.meta | 0 .../DOTween 4/Editor/Imgs/Footer_dark.png | Bin .../Editor/Imgs/Footer_dark.png.meta | 0 .../Assets/DOTween 4/Editor/Imgs/Header.jpg | Bin .../DOTween 4/Editor/Imgs/Header.jpg.meta | 0 .../Assets/DOTween 4/Modules.meta | 0 .../DOTween 4/Modules/DOTweenModuleAudio.cs | 0 .../Modules/DOTweenModuleAudio.cs.meta | 0 .../Modules/DOTweenModuleEPOOutline.cs | 0 .../Modules/DOTweenModuleEPOOutline.cs.meta | 0 .../DOTween 4/Modules/DOTweenModulePhysics.cs | 0 .../Modules/DOTweenModulePhysics.cs.meta | 0 .../Modules/DOTweenModulePhysics2D.cs | 0 .../Modules/DOTweenModulePhysics2D.cs.meta | 0 .../DOTween 4/Modules/DOTweenModuleSprite.cs | 0 .../Modules/DOTweenModuleSprite.cs.meta | 0 .../DOTween 4/Modules/DOTweenModuleUI.cs | 0 .../DOTween 4/Modules/DOTweenModuleUI.cs.meta | 0 .../Modules/DOTweenModuleUnityVersion.cs | 0 .../Modules/DOTweenModuleUnityVersion.cs.meta | 0 .../DOTween 4/Modules/DOTweenModuleUtils.cs | 0 .../Modules/DOTweenModuleUtils.cs.meta | 0 .../ExtensionNft/Assets/DOTween 4/readme.txt | 0 .../Assets/DOTween 4/readme.txt.meta | 0 .../ExtensionNft/Assets/Frictionless.meta | 0 .../Frictionless/IMultiSceneSingleton.cs | 0 .../Frictionless/IMultiSceneSingleton.cs.meta | 0 .../IReinitializingMultiSceneSingleton.cs | 0 ...IReinitializingMultiSceneSingleton.cs.meta | 0 .../Assets/Frictionless/MessageRouter.cs | 0 .../Assets/Frictionless/MessageRouter.cs.meta | 0 .../Assets/Frictionless/ServiceFactory.cs | 0 .../Frictionless/ServiceFactory.cs.meta | 0 .../unity/ExtensionNft/Assets/Game.meta | 0 .../ExtensionNft/Assets/Game/Materials.meta | 0 .../Assets/Game/Materials/WoodParticles.mat | 0 .../Game/Materials/WoodParticles.mat.meta | 0 .../ExtensionNft/Assets/Game/Prefabs.meta | 0 .../Assets/Game/Prefabs/DefaultButton.prefab | 0 .../Game/Prefabs/DefaultButton.prefab.meta | 0 .../Game/Prefabs/InteractionBlocker.prefab | 0 .../Prefabs/InteractionBlocker.prefab.meta | 0 .../Assets/Game/Prefabs/NftItemView.prefab | 0 .../Game/Prefabs/NftItemView.prefab.meta | 0 .../Assets/Game/Prefabs/NftListPopup.prefab | 0 .../Game/Prefabs/NftListPopup.prefab.meta | 0 .../Assets/Game/Prefabs/SessionPopup.prefab | 0 .../Game/Prefabs/SessionPopup.prefab.meta | 0 .../Game/Prefabs/SolBalanceWidget.prefab | 0 .../Game/Prefabs/SolBalanceWidget.prefab.meta | 0 .../Game/Prefabs/TokenBalanceWidget.prefab | 0 .../Prefabs/TokenBalanceWidget.prefab.meta | 0 .../Assets/Game/Prefabs/WoodParticles.prefab | 0 .../Game/Prefabs/WoodParticles.prefab.meta | 0 .../ExtensionNft/Assets/Game/Scenes.meta | 0 .../Assets/Game/Scenes/GameScene.unity | 0 .../Assets/Game/Scenes/GameScene.unity.meta | 0 .../Assets/Game/Scenes/LoginScene.unity | 0 .../Assets/Game/Scenes/LoginScene.unity.meta | 0 .../ExtensionNft/Assets/Game/Scripts.meta | 0 .../Assets/Game/Scripts/SimpleRotate.cs | 0 .../Assets/Game/Scripts/SimpleRotate.cs.meta | 0 .../Assets/Game/Scripts/Solana.meta | 0 .../Game/Scripts/Solana/AnchorService.cs | 0 .../Game/Scripts/Solana/AnchorService.cs.meta | 0 .../Game/Scripts/Solana/ExtensionNft.cs | 0 .../Game/Scripts/Solana/ExtensionNft.cs.meta | 0 .../Game/Scripts/Solana/NftMintingService.cs | 0 .../Scripts/Solana/NftMintingService.cs.meta | 0 .../Assets/Game/Scripts/Solana/NftService.cs | 0 .../Game/Scripts/Solana/NftService.cs.meta | 0 .../Assets/Game/Scripts/Solana/SolanaUtils.cs | 0 .../Game/Scripts/Solana/SolanaUtils.cs.meta | 0 .../ExtensionNft/Assets/Game/Scripts/Ui.meta | 0 .../Assets/Game/Scripts/Ui/BasePopup.cs | 0 .../Assets/Game/Scripts/Ui/BasePopup.cs.meta | 0 .../Assets/Game/Scripts/Ui/GameScreen.cs | 0 .../Assets/Game/Scripts/Ui/GameScreen.cs.meta | 0 .../Game/Scripts/Ui/InteractionBlocker.cs | 0 .../Scripts/Ui/InteractionBlocker.cs.meta | 0 .../Assets/Game/Scripts/Ui/LoginScreen.cs | 0 .../Game/Scripts/Ui/LoginScreen.cs.meta | 0 .../Assets/Game/Scripts/Ui/NftContextMenu.cs | 0 .../Game/Scripts/Ui/NftContextMenu.cs.meta | 0 .../Assets/Game/Scripts/Ui/NftItemListView.cs | 0 .../Game/Scripts/Ui/NftItemListView.cs.meta | 0 .../Assets/Game/Scripts/Ui/NftItemView.cs | 0 .../Game/Scripts/Ui/NftItemView.cs.meta | 0 .../Assets/Game/Scripts/Ui/NftListPopup.cs | 0 .../Game/Scripts/Ui/NftListPopup.cs.meta | 0 .../Game/Scripts/Ui/NftListPopupUiData.cs | 0 .../Scripts/Ui/NftListPopupUiData.cs.meta | 0 .../Assets/Game/Scripts/Ui/SafeArea.cs | 0 .../Assets/Game/Scripts/Ui/SafeArea.cs.meta | 0 .../Assets/Game/Scripts/Ui/SelectedNft.cs | 0 .../Game/Scripts/Ui/SelectedNft.cs.meta | 0 .../Assets/Game/Scripts/Ui/SessionPopup.cs | 0 .../Game/Scripts/Ui/SessionPopup.cs.meta | 0 .../Game/Scripts/Ui/SessionPopupUiData.cs | 0 .../Scripts/Ui/SessionPopupUiData.cs.meta | 0 .../Game/Scripts/Ui/SolBalanceWidget.cs | 0 .../Game/Scripts/Ui/SolBalanceWidget.cs.meta | 0 .../Assets/Game/Scripts/Ui/TokenPanel.cs | 0 .../Assets/Game/Scripts/Ui/TokenPanel.cs.meta | 0 .../Assets/Game/Scripts/Ui/UiService.cs | 0 .../Assets/Game/Scripts/Ui/UiService.cs.meta | 0 .../ExtensionNft/Assets/Game/Sprites.meta | 0 .../Assets/Game/Sprites/background.png | Bin .../Assets/Game/Sprites/background.png.meta | 0 .../Assets/Game/Sprites/beaver.png | Bin .../Assets/Game/Sprites/beaver.png.meta | 0 .../Assets/Game/Sprites/icon_energy.png | Bin .../Assets/Game/Sprites/icon_energy.png.meta | 0 .../Assets/Game/Sprites/icon_solana.png | Bin .../Assets/Game/Sprites/icon_solana.png.meta | 0 .../Assets/Game/Sprites/icon_usdc.png | Bin .../Assets/Game/Sprites/icon_usdc.png.meta | 0 .../Assets/Game/Sprites/icon_wood.png | Bin .../Assets/Game/Sprites/icon_wood.png.meta | 0 .../ExtensionNft/Assets/Game/Sprites/tree.png | Bin .../Assets/Game/Sprites/tree.png.meta | 0 .../Assets/Game/Sprites/ui_close_button.png | Bin .../Game/Sprites/ui_close_button.png.meta | 0 .../Assets/Game/Sprites/ui_default_button.png | Bin .../Game/Sprites/ui_default_button.png.meta | 0 .../Game/Sprites/ui_element_panel_rect.png | Bin .../Sprites/ui_element_panel_rect.png.meta | 0 .../Assets/Game/Sprites/ui_panel.png | Bin .../Assets/Game/Sprites/ui_panel.png.meta | 0 .../Assets/Game/Sprites/ui_spinner.png | Bin .../Assets/Game/Sprites/ui_spinner.png.meta | 0 .../unity/ExtensionNft/Assets/Resources.meta | 0 .../Assets/Resources/DOTweenSettings.asset | 0 .../Resources/DOTweenSettings.asset.meta | 0 .../Assets/Resources/SolanaUnitySDK.meta | 0 .../SolanaUnitySDK/WalletAdapterButton.prefab | 0 .../WalletAdapterButton.prefab.meta | 0 .../SolanaUnitySDK/WalletAdapterUI.prefab | 0 .../WalletAdapterUI.prefab.meta | 0 .../SolanaUnitySDK/[WalletController].prefab | 0 .../[WalletController].prefab.meta | 0 .../unity/ExtensionNft/Assets/Socket.meta | 0 .../Assets/Socket/SocketStatusWidget.cs | 0 .../Assets/Socket/SocketStatusWidget.cs.meta | 0 .../ExtensionNft/Assets/TextMesh Pro.meta | 0 .../Assets/TextMesh Pro/Documentation.meta | 0 .../TextMesh Pro User Guide 2016.pdf | Bin .../TextMesh Pro User Guide 2016.pdf.meta | 0 .../Assets/TextMesh Pro/Fonts.meta | 0 .../Fonts/LiberationSans - OFL.txt | 0 .../Fonts/LiberationSans - OFL.txt.meta | 0 .../TextMesh Pro/Fonts/LiberationSans.ttf | Bin .../Fonts/LiberationSans.ttf.meta | 0 .../Assets/TextMesh Pro/Resources.meta | 0 .../Resources/Fonts & Materials.meta | 0 .../LiberationSans SDF - Drop Shadow.mat | 0 .../LiberationSans SDF - Drop Shadow.mat.meta | 0 .../LiberationSans SDF - Fallback.asset | 0 .../LiberationSans SDF - Fallback.asset.meta | 0 .../LiberationSans SDF - Outline.mat | 0 .../LiberationSans SDF - Outline.mat.meta | 0 .../LiberationSans SDF.asset | 0 .../LiberationSans SDF.asset.meta | 0 .../LineBreaking Following Characters.txt | 0 ...LineBreaking Following Characters.txt.meta | 0 .../LineBreaking Leading Characters.txt | 0 .../LineBreaking Leading Characters.txt.meta | 0 .../TextMesh Pro/Resources/Sprite Assets.meta | 0 .../Resources/Sprite Assets/EmojiOne.asset | 0 .../Sprite Assets/EmojiOne.asset.meta | 0 .../TextMesh Pro/Resources/Style Sheets.meta | 0 .../Style Sheets/Default Style Sheet.asset | 0 .../Default Style Sheet.asset.meta | 0 .../TextMesh Pro/Resources/TMP Settings.asset | 0 .../Resources/TMP Settings.asset.meta | 0 .../Assets/TextMesh Pro/Shaders.meta | 0 .../Shaders/TMP_Bitmap-Custom-Atlas.shader | 0 .../TMP_Bitmap-Custom-Atlas.shader.meta | 0 .../Shaders/TMP_Bitmap-Mobile.shader | 0 .../Shaders/TMP_Bitmap-Mobile.shader.meta | 0 .../TextMesh Pro/Shaders/TMP_Bitmap.shader | 0 .../Shaders/TMP_Bitmap.shader.meta | 0 .../Shaders/TMP_SDF Overlay.shader | 0 .../Shaders/TMP_SDF Overlay.shader.meta | 0 .../TextMesh Pro/Shaders/TMP_SDF SSD.shader | 0 .../Shaders/TMP_SDF SSD.shader.meta | 0 .../Shaders/TMP_SDF-Mobile Masking.shader | 0 .../TMP_SDF-Mobile Masking.shader.meta | 0 .../Shaders/TMP_SDF-Mobile Overlay.shader | 0 .../TMP_SDF-Mobile Overlay.shader.meta | 0 .../Shaders/TMP_SDF-Mobile SSD.shader | 0 .../Shaders/TMP_SDF-Mobile SSD.shader.meta | 0 .../Shaders/TMP_SDF-Mobile.shader | 0 .../Shaders/TMP_SDF-Mobile.shader.meta | 0 .../Shaders/TMP_SDF-Surface-Mobile.shader | 0 .../TMP_SDF-Surface-Mobile.shader.meta | 0 .../Shaders/TMP_SDF-Surface.shader | 0 .../Shaders/TMP_SDF-Surface.shader.meta | 0 .../TextMesh Pro/Shaders/TMP_SDF.shader | 0 .../TextMesh Pro/Shaders/TMP_SDF.shader.meta | 0 .../TextMesh Pro/Shaders/TMP_Sprite.shader | 0 .../Shaders/TMP_Sprite.shader.meta | 0 .../Assets/TextMesh Pro/Shaders/TMPro.cginc | 0 .../TextMesh Pro/Shaders/TMPro.cginc.meta | 0 .../TextMesh Pro/Shaders/TMPro_Mobile.cginc | 0 .../Shaders/TMPro_Mobile.cginc.meta | 0 .../Shaders/TMPro_Properties.cginc | 0 .../Shaders/TMPro_Properties.cginc.meta | 0 .../TextMesh Pro/Shaders/TMPro_Surface.cginc | 0 .../Shaders/TMPro_Surface.cginc.meta | 0 .../Assets/TextMesh Pro/Sprites.meta | 0 .../Sprites/EmojiOne Attribution.txt | 0 .../Sprites/EmojiOne Attribution.txt.meta | 0 .../Assets/TextMesh Pro/Sprites/EmojiOne.json | 157 + .../TextMesh Pro/Sprites/EmojiOne.json.meta | 0 .../Assets/TextMesh Pro/Sprites/EmojiOne.png | Bin .../TextMesh Pro/Sprites/EmojiOne.png.meta | 0 .../ExtensionNft/Assets/WebGLTemplates.meta | 0 .../WebGLTemplates/SolanaWebGlTemplate.meta | 0 .../SolanaWebGlTemplate/TemplateData.meta | 0 .../TemplateData/favicon.ico | Bin .../TemplateData/favicon.ico.meta | 0 .../TemplateData/fullscreen-button.png | Bin .../TemplateData/fullscreen-button.png.meta | 0 .../TemplateData/progress-bar-empty-dark.png | Bin .../progress-bar-empty-dark.png.meta | 0 .../TemplateData/progress-bar-empty-light.png | Bin .../progress-bar-empty-light.png.meta | 0 .../TemplateData/progress-bar-full-dark.png | Bin .../progress-bar-full-dark.png.meta | 0 .../TemplateData/progress-bar-full-light.png | Bin .../progress-bar-full-light.png.meta | 0 .../TemplateData/style.css | 0 .../TemplateData/style.css.meta | 0 .../TemplateData/unity-logo-dark.png | Bin .../TemplateData/unity-logo-dark.png.meta | 0 .../TemplateData/unity-logo-light.png | Bin .../TemplateData/unity-logo-light.png.meta | 0 .../TemplateData/webgl-logo.png | Bin .../TemplateData/webgl-logo.png.meta | 0 .../SolanaWebGlTemplate/index.html | 0 .../SolanaWebGlTemplate/index.html.meta | 0 .../SolanaWebGlTemplate/thumbnail.png | Bin .../SolanaWebGlTemplate/thumbnail.png.meta | 0 .../Assets/WebGLTemplates/xNFT.meta | 0 .../Assets/WebGLTemplates/xNFT/index.html | 0 .../WebGLTemplates/xNFT/index.html.meta | 0 .../Assets/WebGLTemplates/xNFT/thumbnail.png | Bin .../WebGLTemplates/xNFT/thumbnail.png.meta | 0 .../unity/ExtensionNft/Packages/manifest.json | 0 .../ExtensionNft/Packages/packages-lock.json | 0 .../ProjectSettings/AudioManager.asset | 0 .../ProjectSettings/ClusterInputManager.asset | 0 .../ProjectSettings/DynamicsManager.asset | 0 .../ProjectSettings/EditorBuildSettings.asset | 0 .../ProjectSettings/EditorSettings.asset | 0 .../ProjectSettings/GraphicsSettings.asset | 0 .../ProjectSettings/InputManager.asset | 0 .../ProjectSettings/MemorySettings.asset | 0 .../ProjectSettings/NavMeshAreas.asset | 0 .../PackageManagerSettings.asset | 0 .../Settings.json | 7 + .../ProjectSettings/Physics2DSettings.asset | 0 .../ProjectSettings/PresetManager.asset | 0 .../ProjectSettings/ProjectSettings.asset | 0 .../ProjectSettings/ProjectVersion.txt | 0 .../ProjectSettings/QualitySettings.asset | 0 .../SceneTemplateSettings.json | 167 + .../ProjectSettings/TagManager.asset | 0 .../ProjectSettings/TimeManager.asset | 0 .../UnityConnectSettings.asset | 0 .../ProjectSettings/VFXManager.asset | 0 .../VersionControlSettings.asset | 0 .../ProjectSettings/XRSettings.asset | 0 .../ExtensionNft/ProjectSettings/boot.config | 0 .../UserSettings/EditorUserSettings.asset | 0 .../UserSettings/Layouts/default-2021.dwlt | 0 .../ExtensionNft/UserSettings/Search.settings | 0 .../anchor/app/idl/extension_nft.ts | 425 -- .../anchor/app/pages/api/hello.ts | 13 - .../anchor/app/utils/anchor.ts | 37 - .../nft-meta-data-pointer/anchor/nx.json | 37 - .../anchor/program/migrations/deploy.ts | 12 - .../anchor/program/package.json | 23 - .../anchor/program/tests/lumberjack.ts | 66 - .../Assets/TextMesh Pro/Sprites/EmojiOne.json | 156 - .../Settings.json | 7 - .../SceneTemplateSettings.json | 167 - .../anchor/migrations/deploy.ts | 4 +- .../anchor/tests/non-transferable.ts | 32 +- .../non-transferable/native/package.json | 8 +- .../non-transferable/native/pnpm-lock.yaml | 1780 ++++++++ .../native/program/Cargo.toml | 2 +- .../non-transferable/native/tests/test.ts | 68 +- .../anchor/migrations/deploy.ts | 4 +- .../anchor/tests/permanent-delegate.ts | 42 +- .../transfer-fee/anchor/migrations/deploy.ts | 4 +- .../transfer-fee/anchor/tests/transfer-fee.ts | 71 +- .../transfer-fee/native/package.json | 8 +- .../transfer-fee/native/pnpm-lock.yaml | 1780 ++++++++ .../transfer-fee/native/program/Cargo.toml | 4 +- .../transfer-fee/native/tests/test.ts | 68 +- .../anchor/TransferHookCounter/package.json | 21 - .../anchor/TransferHookCounter/tsconfig.json | 11 - .../TransferHookHelloWorld/package.json | 20 - .../TransferHookHelloWorld/tsconfig.json | 11 - .../TransferHookTransferCost/package.json | 20 - .../TransferHookTransferCost/tsconfig.json | 11 - .../migrations/deploy.ts | 12 - .../anchor/TransferHookWhitelist/package.json | 20 - .../TransferHookWhitelist/tsconfig.json | 11 - .../anchor}/.gitignore | 0 .../anchor}/.prettierignore | 0 .../anchor}/Anchor.toml | 0 .../anchor}/Cargo.toml | 0 .../anchor}/migrations/deploy.ts | 4 +- .../transfer-hook/counter/anchor/package.json | 21 + .../anchor}/pnpm-lock.yaml | 0 .../anchor}/programs/transfer-hook/Cargo.toml | 0 .../anchor}/programs/transfer-hook/Xargo.toml | 0 .../anchor}/programs/transfer-hook/src/lib.rs | 0 .../anchor}/tests/transfer-hook.ts | 148 +- .../counter/anchor/tsconfig.json | 10 + .../anchor}/.gitignore | 0 .../anchor}/.prettierignore | 0 .../anchor}/Anchor.toml | 2 +- .../anchor}/Cargo.toml | 0 .../anchor}/migrations/deploy.ts | 4 +- .../hello-world/anchor/package.json | 20 + .../anchor}/pnpm-lock.yaml | 0 .../anchor}/programs/transfer-hook/Cargo.toml | 0 .../anchor}/programs/transfer-hook/Xargo.toml | 0 .../anchor}/programs/transfer-hook/src/lib.rs | 0 .../anchor}/tests/transfer-hook.ts | 101 +- .../hello-world/anchor/tsconfig.json | 10 + .../anchor}/.gitignore | 0 .../anchor}/.prettierignore | 0 .../anchor}/Anchor.toml | 0 .../anchor}/Cargo.toml | 0 .../transfer-cost/anchor/migrations/deploy.ts | 12 + .../transfer-cost/anchor/package.json | 20 + .../anchor}/pnpm-lock.yaml | 0 .../anchor}/programs/transfer-hook/Cargo.toml | 0 .../anchor}/programs/transfer-hook/Xargo.toml | 0 .../anchor}/programs/transfer-hook/src/lib.rs | 0 .../anchor}/tests/transfer-hook.ts | 214 +- .../transfer-cost/anchor/tsconfig.json | 10 + .../anchor}/.gitignore | 0 .../anchor}/.prettierignore | 0 .../anchor}/Anchor.toml | 0 .../whitelist/anchor}/Cargo.toml | 1 - .../whitelist/anchor/migrations/deploy.ts | 12 + .../whitelist/anchor/package.json | 20 + .../anchor}/pnpm-lock.yaml | 0 .../anchor}/programs/transfer-hook/Cargo.toml | 0 .../anchor}/programs/transfer-hook/Xargo.toml | 0 .../anchor}/programs/transfer-hook/src/lib.rs | 0 .../anchor}/tests/transfer-hook.ts | 134 +- .../whitelist/anchor/tsconfig.json | 10 + tokens/token-swap/anchor/Anchor.toml | 6 +- tokens/token-swap/anchor/pnpm-lock.yaml | 1670 ++++---- .../anchor/programs/token-swap/Cargo.toml | 6 +- tokens/token-swap/anchor/tests/create-amm.ts | 32 +- tokens/token-swap/anchor/tests/create-pool.ts | 40 +- .../anchor/tests/deposit-liquidity.ts | 42 +- tokens/token-swap/anchor/tests/swap.ts | 41 +- tokens/token-swap/anchor/tests/utils.ts | 140 +- .../anchor/tests/withdraw-liquidity.ts | 49 +- tokens/token-swap/anchor/tsconfig.json | 19 +- tokens/transfer-tokens/anchor/Anchor.toml | 4 +- tokens/transfer-tokens/anchor/pnpm-lock.yaml | 1655 ++++---- tokens/transfer-tokens/anchor/tests/test.ts | 41 +- .../native/tests/instructions.ts | 135 +- tokens/transfer-tokens/native/tests/test.ts | 590 ++- tokens/transfer-tokens/native/tsconfig.json | 2 +- .../seahorse/migrations/deploy.ts | 4 +- tokens/transfer-tokens/seahorse/package.json | 34 +- tokens/transfer-tokens/seahorse/tsconfig.json | 19 +- .../native/.crates/.crates2.json | 15 +- tools/shank-and-solita/native/.solitarc.js | 4 +- .../program/idl/car_rental_service.json | 2 +- .../native/tests/generated/accounts/Car.ts | 69 +- .../tests/generated/accounts/RentalOrder.ts | 102 +- .../native/tests/generated/accounts/index.ts | 10 +- .../native/tests/generated/index.ts | 12 +- .../tests/generated/instructions/AddCar.ts | 36 +- .../generated/instructions/BookRental.ts | 38 +- .../tests/generated/instructions/PickUpCar.ts | 28 +- .../tests/generated/instructions/ReturnCar.ts | 28 +- .../tests/generated/instructions/index.ts | 8 +- .../tests/generated/types/AddCarArgs.ts | 14 +- .../tests/generated/types/BookRentalArgs.ts | 31 +- .../generated/types/RentalOrderStatus.ts | 12 +- .../native/tests/generated/types/index.ts | 6 +- tools/shank-and-solita/native/tests/test.ts | 302 +- .../native/tests/tsconfig.test.json | 18 +- 697 files changed, 33935 insertions(+), 10195 deletions(-) create mode 100644 .github/.ghaignore create mode 100644 .github/workflows/biome.yml create mode 100644 .husky/pre-commit create mode 100644 biome.json rename compression/cnft-burn/{ => anchor}/.gitignore (100%) rename compression/cnft-burn/{ => anchor}/.prettierignore (100%) rename compression/cnft-burn/{ => anchor}/Anchor.toml (100%) rename compression/cnft-burn/{ => anchor}/Cargo.toml (100%) rename compression/cnft-burn/{ => anchor}/README.md (100%) rename compression/cnft-burn/{ => anchor}/migrations/deploy.ts (77%) rename compression/cnft-burn/{ => anchor}/package.json (100%) create mode 100644 compression/cnft-burn/anchor/pnpm-lock.yaml rename compression/cnft-burn/{ => anchor}/programs/cnft-burn/Cargo.toml (100%) rename compression/cnft-burn/{ => anchor}/programs/cnft-burn/Xargo.toml (100%) rename compression/cnft-burn/{ => anchor}/programs/cnft-burn/src/lib.rs (100%) rename compression/cnft-burn/{ => anchor}/tests/ReadApi/WrapperConnection.ts (66%) rename compression/cnft-burn/{ => anchor}/tests/ReadApi/types.ts (83%) rename compression/cnft-burn/{ => anchor}/tests/cnft-burn.ts (60%) rename compression/cnft-burn/{ => anchor}/tests/createAndMint.ts (72%) rename compression/cnft-burn/{ => anchor}/tests/fetchNFTsByCollection.ts (68%) rename compression/cnft-burn/{ => anchor}/tests/readApi.ts (75%) rename compression/cnft-burn/{ => anchor}/tests/utils.ts (74%) rename compression/cnft-burn/{ => anchor}/tests/utils/compression.ts (72%) rename compression/cnft-burn/{ => anchor}/tests/utils/helpers.ts (61%) rename {tokens/token-2022/nft-meta-data-pointer/anchor/program => compression/cnft-burn/anchor}/tsconfig.json (100%) delete mode 100644 compression/cnft-burn/tsconfig.json create mode 100644 compression/cnft-vault/anchor/pnpm-lock.yaml rename compression/cutils/{ => anchor}/.gitignore (100%) rename compression/cutils/{ => anchor}/Anchor.toml (100%) rename compression/cutils/{ => anchor}/Cargo.toml (100%) rename compression/cutils/{ => anchor}/README.md (100%) create mode 100644 compression/cutils/anchor/package.json create mode 100644 compression/cutils/anchor/pnpm-lock.yaml rename compression/cutils/{ => anchor}/programs/cutils/Cargo.toml (100%) rename compression/cutils/{ => anchor}/programs/cutils/Xargo.toml (100%) rename compression/cutils/{ => anchor}/programs/cutils/src/actions/mint.rs (100%) rename compression/cutils/{ => anchor}/programs/cutils/src/actions/mod.rs (100%) rename compression/cutils/{ => anchor}/programs/cutils/src/actions/verify.rs (100%) rename compression/cutils/{ => anchor}/programs/cutils/src/lib.rs (100%) rename compression/cutils/{ => anchor}/programs/cutils/src/state/data.rs (100%) rename compression/cutils/{ => anchor}/programs/cutils/src/state/mod.rs (100%) create mode 100644 compression/cutils/anchor/tests/setup.ts create mode 100644 compression/cutils/anchor/tests/tests.ts create mode 100644 compression/cutils/anchor/tests/utils/compression.ts create mode 100644 compression/cutils/anchor/tests/utils/helpers.ts rename compression/cutils/{ => anchor}/tests/utils/readAPI.ts (74%) rename compression/cutils/{ => anchor}/tests/utils/utils.ts (52%) create mode 100644 compression/cutils/anchor/tsconfig.json delete mode 100644 compression/cutils/package.json delete mode 100644 compression/cutils/tests/setup.ts delete mode 100644 compression/cutils/tests/tests.ts delete mode 100644 compression/cutils/tests/utils/compression.ts delete mode 100644 compression/cutils/tests/utils/helpers.ts delete mode 100644 compression/cutils/tsconfig.json create mode 100644 oracles/pyth/anchor/pnpm-lock.yaml create mode 100644 pnpm-lock.yaml create mode 100644 tokens/pda-mint-authority/native/pnpm-lock.yaml create mode 100644 tokens/token-2022/default-account-state/native/pnpm-lock.yaml create mode 100644 tokens/token-2022/mint-close-authority/native/pnpm-lock.yaml create mode 100644 tokens/token-2022/multiple-extensions/native/pnpm-lock.yaml rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/README.md (92%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/.gitignore (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/.prettierignore (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/Anchor.toml (77%) rename tokens/token-2022/{transfer-hook/anchor/TransferHookCounter => nft-meta-data-pointer/anchor-example/anchor}/Cargo.toml (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/README.md (100%) rename tokens/token-2022/{transfer-hook/anchor/TransferHookTransferCost => nft-meta-data-pointer/anchor-example/anchor}/migrations/deploy.ts (77%) create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/package.json create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/pnpm-lock.yaml rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/Cargo.toml (95%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/Xargo.toml (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/constants.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/errors.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/instructions/chop_tree.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/instructions/init_player.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/instructions/mint_nft.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/instructions/mod.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/lib.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/state/game_data.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/state/mod.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/programs/extension_nft/src/state/player_data.rs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor/program => anchor-example/anchor}/rustfmt.toml (100%) create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/tests/lumberjack.ts create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/tsconfig.json rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/.eslintrc.json (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/.gitignore (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/README.md (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/components/ChopTreeButton.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/components/DisplayGameState.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/components/DisplayNfts.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/components/InitPlayerButton.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/components/MintNftButton.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/components/RequestAirdrop.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/components/SessionKeyButton.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/components/WalletMultiButton.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/contexts/GameStateProvider.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/contexts/NftProvider.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/contexts/SessionProvider.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/contexts/WalletContextProvider.tsx (100%) create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/app/idl/extension_nft.ts rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/next.config.js (76%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/package.json (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/pages/_app.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/pages/_document.tsx (100%) create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/api/hello.ts rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/pages/index.tsx (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/public/Beaver.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/public/Tree.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/public/Wood.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/public/energy.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/public/favicon.ico (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/public/next.svg (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/public/vercel.svg (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/styles/Home.module.css (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/styles/globals.css (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/tsconfig.json (100%) create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/app/utils/anchor.ts rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/app/utils/wrappedConnection.ts (66%) create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/nx.json rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/package.json (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/.gitattributes (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/.gitignore (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/readme.txt (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/DOTween 4/readme.txt.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Frictionless.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Materials.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scenes.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/background.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/background.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/beaver.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/beaver.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/tree.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/tree.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Socket.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Documentation.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Fonts.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Sprites.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta (100%) create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/xNFT.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png.meta (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Packages/manifest.json (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/Packages/packages-lock.json (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/AudioManager.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/ClusterInputManager.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/DynamicsManager.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/EditorBuildSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/EditorSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/GraphicsSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/InputManager.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/MemorySettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/NavMeshAreas.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/PackageManagerSettings.asset (100%) create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/Physics2DSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/PresetManager.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/ProjectSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/ProjectVersion.txt (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/QualitySettings.asset (100%) create mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/SceneTemplateSettings.json rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/TagManager.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/TimeManager.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/UnityConnectSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/VFXManager.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/VersionControlSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/XRSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/ProjectSettings/boot.config (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/UserSettings/EditorUserSettings.asset (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/UserSettings/Layouts/default-2021.dwlt (100%) rename tokens/token-2022/nft-meta-data-pointer/{anchor => anchor-example}/unity/ExtensionNft/UserSettings/Search.settings (100%) delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/app/idl/extension_nft.ts delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/api/hello.ts delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/app/utils/anchor.ts delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/nx.json delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/program/migrations/deploy.ts delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/program/package.json delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/program/tests/lumberjack.ts delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json delete mode 100644 tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/SceneTemplateSettings.json create mode 100644 tokens/token-2022/non-transferable/native/pnpm-lock.yaml create mode 100644 tokens/token-2022/transfer-fee/native/pnpm-lock.yaml delete mode 100644 tokens/token-2022/transfer-hook/anchor/TransferHookCounter/package.json delete mode 100644 tokens/token-2022/transfer-hook/anchor/TransferHookCounter/tsconfig.json delete mode 100644 tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/package.json delete mode 100644 tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/tsconfig.json delete mode 100644 tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/package.json delete mode 100644 tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/tsconfig.json delete mode 100644 tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/migrations/deploy.ts delete mode 100644 tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/package.json delete mode 100644 tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/tsconfig.json rename tokens/token-2022/transfer-hook/{anchor/TransferHookCounter => counter/anchor}/.gitignore (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookCounter => counter/anchor}/.prettierignore (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookCounter => counter/anchor}/Anchor.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => counter/anchor}/Cargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => counter/anchor}/migrations/deploy.ts (77%) create mode 100644 tokens/token-2022/transfer-hook/counter/anchor/package.json rename tokens/token-2022/transfer-hook/{anchor/TransferHookCounter => counter/anchor}/pnpm-lock.yaml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookCounter => counter/anchor}/programs/transfer-hook/Cargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookCounter => counter/anchor}/programs/transfer-hook/Xargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookCounter => counter/anchor}/programs/transfer-hook/src/lib.rs (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookCounter => counter/anchor}/tests/transfer-hook.ts (54%) create mode 100644 tokens/token-2022/transfer-hook/counter/anchor/tsconfig.json rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => hello-world/anchor}/.gitignore (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => hello-world/anchor}/.prettierignore (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => hello-world/anchor}/Anchor.toml (88%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookTransferCost => hello-world/anchor}/Cargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookCounter => hello-world/anchor}/migrations/deploy.ts (77%) create mode 100644 tokens/token-2022/transfer-hook/hello-world/anchor/package.json rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => hello-world/anchor}/pnpm-lock.yaml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => hello-world/anchor}/programs/transfer-hook/Cargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => hello-world/anchor}/programs/transfer-hook/Xargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => hello-world/anchor}/programs/transfer-hook/src/lib.rs (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookHelloWorld => hello-world/anchor}/tests/transfer-hook.ts (56%) create mode 100644 tokens/token-2022/transfer-hook/hello-world/anchor/tsconfig.json rename tokens/token-2022/transfer-hook/{anchor/TransferHookTransferCost => transfer-cost/anchor}/.gitignore (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookTransferCost => transfer-cost/anchor}/.prettierignore (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookTransferCost => transfer-cost/anchor}/Anchor.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookWhitelist => transfer-cost/anchor}/Cargo.toml (100%) create mode 100644 tokens/token-2022/transfer-hook/transfer-cost/anchor/migrations/deploy.ts create mode 100644 tokens/token-2022/transfer-hook/transfer-cost/anchor/package.json rename tokens/token-2022/transfer-hook/{anchor/TransferHookTransferCost => transfer-cost/anchor}/pnpm-lock.yaml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookTransferCost => transfer-cost/anchor}/programs/transfer-hook/Cargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookTransferCost => transfer-cost/anchor}/programs/transfer-hook/Xargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookTransferCost => transfer-cost/anchor}/programs/transfer-hook/src/lib.rs (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookTransferCost => transfer-cost/anchor}/tests/transfer-hook.ts (54%) create mode 100644 tokens/token-2022/transfer-hook/transfer-cost/anchor/tsconfig.json rename tokens/token-2022/transfer-hook/{anchor/TransferHookWhitelist => whitelist/anchor}/.gitignore (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookWhitelist => whitelist/anchor}/.prettierignore (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookWhitelist => whitelist/anchor}/Anchor.toml (100%) rename tokens/token-2022/{nft-meta-data-pointer/anchor/program => transfer-hook/whitelist/anchor}/Cargo.toml (99%) create mode 100644 tokens/token-2022/transfer-hook/whitelist/anchor/migrations/deploy.ts create mode 100644 tokens/token-2022/transfer-hook/whitelist/anchor/package.json rename tokens/token-2022/transfer-hook/{anchor/TransferHookWhitelist => whitelist/anchor}/pnpm-lock.yaml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookWhitelist => whitelist/anchor}/programs/transfer-hook/Cargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookWhitelist => whitelist/anchor}/programs/transfer-hook/Xargo.toml (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookWhitelist => whitelist/anchor}/programs/transfer-hook/src/lib.rs (100%) rename tokens/token-2022/transfer-hook/{anchor/TransferHookWhitelist => whitelist/anchor}/tests/transfer-hook.ts (56%) create mode 100644 tokens/token-2022/transfer-hook/whitelist/anchor/tsconfig.json diff --git a/.github/.ghaignore b/.github/.ghaignore new file mode 100644 index 000000000..829c23522 --- /dev/null +++ b/.github/.ghaignore @@ -0,0 +1,36 @@ +# build and test error +basics/realloc/native +basics/cross-program-invocation/native + +# uses generated client from shank, can't rewrite to solana-bankrun +tools/shank-and-solita/native + +# can't test on localnet +tokens/pda-mint-authority/native +tokens/nft-minter/native +tokens/transfer-tokens/native +tokens/spl-token-minter/native +tokens/create-token/native +tokens/create-token/anchor +tokens/nft-minter/anchor +tokens/pda-mint-authority/anchor +tokens/spl-token-minter/anchor +tokens/token-swap/anchor +tokens/transfer-tokens/anchor + +# not building with stable solana +tokens/token-2022/mint-close-authority/native +tokens/token-2022/non-transferable/native +tokens/token-2022/default-account-state/native +tokens/token-2022/transfer-fee/native +tokens/token-2022/multiple-extensions/native + +# not building +oracles/pyth/anchor + +# not building +compression/cutils/anchor +compression/cnft-vault/anchor +# builds but need to test on localhost +compression/cnft-burn/anchor +tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 1e30d3378..e5e1f8513 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -17,11 +17,13 @@ When contributing code examples, please follow these guidelines to ensure progra 1. Use pnpm as the default package manager for the project. You can install pnpm by following the instructions [here](https://pnpm.io/installation). Commit pnpm-lock.yaml to the repository. -2. Tests for Solana native and Anchor programs should be written with [ts-mocha](https://github.com/piotrwitek/ts-mocha). +2. Programs written for Solana Native should be in directory `native` and Anchor programs should be in directory `anchor`. -3. Tests for solana native programs should be written with [solana-bankrun](https://kevinheavey.github.io/solana-bankrun) +3. Tests for Solana native and Anchor programs should be written with [ts-mocha](https://github.com/piotrwitek/ts-mocha). -4. here are some helpful scripts to add to your `package.json` file: +4. Tests for solana native programs should be written with [solana-bankrun](https://kevinheavey.github.io/solana-bankrun) + +5. For Solana native programs ensure adding these mandatory pnpm run scripts to your `package.json`. file for successful ci/cd builds: ```json "scripts": { @@ -32,7 +34,14 @@ When contributing code examples, please follow these guidelines to ensure progra }, ``` -5. Test command for anchor should execute `pnpm test` instead of `yarn run test` for anchor programs. Replace `yarn` with `pnpm` in `[script]` table inside [Anchor.toml file.](https://www.anchor-lang.com/docs/manifest#scripts-required-for-testing) +6. Test command for anchor should execute `pnpm test` instead of `yarn run test` for anchor programs. Replace `yarn` with `pnpm` in `[script]` table inside [Anchor.toml file.](https://www.anchor-lang.com/docs/manifest#scripts-required-for-testing) + +7. TypeScript, JavaScript and JSON files are formatted and linted using +[Biome](https://biomejs.dev/). Execute the following command to format and lint your code at the root of this project before submitting a pull request: + +```bash +pnpm check:fix +``` ## Code of Conduct We are committed to providing a friendly, safe, and welcoming environment for all contributors, regardless of their background, experience level, or personal characteristics. As a contributor, you are expected to: diff --git a/.github/workflows/anchor.yml b/.github/workflows/anchor.yml index 18778c03d..cfaf55143 100644 --- a/.github/workflows/anchor.yml +++ b/.github/workflows/anchor.yml @@ -14,6 +14,8 @@ on: jobs: build: runs-on: ubuntu-latest + permissions: + pull-requests: read strategy: matrix: node-version: [20.x] @@ -21,57 +23,83 @@ jobs: anchor-version: [0.30.0] steps: - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - check-latest: true - - uses: heyAyushh/setup-solana@v5.1 + - name: Setup Anchor + uses: heyAyushh/setup-anchor@v3.10 with: + anchor-version: ${{ matrix.anchor-version }} solana-cli-version: ${{ matrix.solana-version }} - - run: solana block - shell: bash - - name: Install Anchor + node-version: ${{ matrix.node-version }} + - name: Display versions run: | solana -V + solana-keygen new --no-bip39-passphrase rustc -V - cargo install --git https://github.com/coral-xyz/anchor avm --locked --force - avm install ${{ matrix.anchor-version }} - avm use ${{ matrix.anchor-version }} - npm install --global pnpm - - name: Build Anchor programs + anchor -V + npm i -g pnpm + # Run only if it's triggered by PR to main, + # Build the changed programs + - uses: dorny/paths-filter@v3 + if: github.event_name == 'pull_request' + id: changes + with: + list-files: shell + filters: | + anchor: + - added|modified: '**/anchor/**' + - name: Build Changed Anchor programs + if: ${{ steps.changes.outputs.anchor == 'true' }} + run: | + changed_files=(${{ steps.changes.outputs.anchor_files }}) + + # Read ignored projects from .github/.ghaignore, ignoring empty lines and comments + ignored_projects=($(grep . .github/.ghaignore | grep -v '^$')) + + # Find anchor projects and remove ignored projects + ProjectDirs=($(for file in "${changed_files[@]}"; do + anchor_path=$(dirname "${file}" | grep anchor | sed 's#/anchor/.*#/anchor#g') + if [[ ! " ${ignored_projects[*]} " =~ " ${anchor_path} " ]]; then + echo "$anchor_path" + fi + done | sort -u)) + + # Build anchor projects + echo "Projects to Build:" + printf "%s\n" "${ProjectDirs[@]}" + for projectDir in "${ProjectDirs[@]}"; do + echo " + ******** + Building $projectDir + ********" + cd $projectDir + if anchor build; then + echo "Build succeeded for $projectDir." + rm -rf target + else + failed=true + failed_builds+=($projectDir) + echo "Build failed for $projectDir. Continuing with the next program." + fi + cd - > /dev/null + done + if [ "$failed" = true ]; then + echo "Programs that failed building:" + printf "%s\n" "${failed_builds[@]}" + exit 1 + else + echo "All programs built successfully." + fi + shell: bash + # Skip Building all Programs if it's a PR to main branch + - name: Build All Anchor programs + if: github.event_name != 'pull_request' run: | - declare -a ProjectDirs=( - "basics/account-data/anchor" - "basics/checking-accounts/anchor" - "basics/close-account/anchor" - "basics/counter/anchor" - "basics/create-account/anchor" - "basics/hello-solana/anchor" - "basics/pda-rent-payer/anchor" - "basics/processing-instructions/anchor" - "basics/program-derived-addresses/anchor" - "basics/realloc/anchor" - "basics/rent/anchor" - "basics/repository-layout/anchor" - "basics/transfer-sol/anchor" - "tokens/token-2022/basics/anchor" - "tokens/token-2022/cpi-guard/anchor" - "tokens/token-2022/default-account-state/anchor" - "tokens/token-2022/group/anchor" - "tokens/token-2022/immutable-owner/anchor" - "tokens/token-2022/interest-bearing/anchor" - "tokens/token-2022/memo-transfer/anchor" - "tokens/token-2022/metadata/anchor" - "tokens/token-2022/mint-close-authority/anchor" - "tokens/token-2022/non-transferable/anchor" - "tokens/token-2022/permanent-delegate/anchor" - "tokens/token-2022/transfer-fee/anchor" - "tokens/token-2022/transfer-hook/anchor/TransferHookCounter" - "tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld" - "tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost" - "tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist" - ) + # Find all anchor projects and remove ignored projects + declare -a ProjectDirs=($(find . -type d -name 'anchor' | sed 's|^\./||'| grep -v -f <(grep . .github/.ghaignore | grep -v '^$'))) + + echo "Projects to Build:" + printf "%s\n" "${ProjectDirs[@]}" + + # Build anchor projects for projectDir in "${ProjectDirs[@]}"; do echo " ******** @@ -99,6 +127,8 @@ jobs: test: runs-on: ubuntu-latest + permissions: + pull-requests: read strategy: matrix: node-version: [20.x] @@ -107,7 +137,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Setup Anchor - uses: heyAyushh/setup-anchor@v2.2 + uses: heyAyushh/setup-anchor@v3.10 with: anchor-version: ${{ matrix.anchor-version }} solana-cli-version: ${{ matrix.solana-version }} @@ -119,39 +149,56 @@ jobs: rustc -V anchor -V npm i -g pnpm - - name: Test anchor programs + # Run only if it's triggered by PR to main, + # Test the changed programs (if any) + - uses: dorny/paths-filter@v3 + if: github.event_name == 'pull_request' + id: changes + with: + list-files: shell + filters: | + anchor: + - added|modified: '**/anchor/**' + - name: Test Changed Anchor Programs + if: ${{ steps.changes.outputs.anchor == 'true' }} + run: | + changed_files=(${{ steps.changes.outputs.anchor_files }}) + ProjectDirs=($(for file in "${changed_files[@]}"; do dirname "${file}" | grep anchor | sed 's#/anchor/.*#/anchor#g'; done | grep -v -f <(grep . .github/.ghaignore | grep -v '^$') | sort -u)) + echo "Projects to Test:" + printf "%s\n" "${ProjectDirs[@]}" + for projectDir in "${ProjectDirs[@]}"; do + echo " + ******** + Testing $projectDir + ********" + cd $projectDir + pnpm install --frozen-lockfile + if anchor test; then + echo "Tests succeeded for $projectDir." + rm -rf target node_modules + else + failed=true + failed_tests+=($projectDir) + echo "Tests failed for $val. Continuing with the next program." + fi + cd - > /dev/null + done + if [ "$failed" = true ]; then + echo "*****************************" + echo "Programs that failed testing:" + printf "%s\n" "${failed_tests[@]}" + exit 1 + else + echo "All tests passed." + fi + shell: bash + # Skip Testing all Programs if it's a PR to main branch + - name: Test All Anchor Programs + if: github.event_name != 'pull_request' run: | - declare -a ProjectDirs=( - "basics/account-data/anchor" - "basics/checking-accounts/anchor" - "basics/close-account/anchor" - "basics/counter/anchor" - "basics/create-account/anchor" - "basics/hello-solana/anchor" - "basics/pda-rent-payer/anchor" - "basics/processing-instructions/anchor" - "basics/program-derived-addresses/anchor" - "basics/realloc/anchor" - "basics/rent/anchor" - "basics/repository-layout/anchor" - "basics/transfer-sol/anchor" - "tokens/token-2022/basics/anchor" - "tokens/token-2022/cpi-guard/anchor" - "tokens/token-2022/default-account-state/anchor" - "tokens/token-2022/group/anchor" - "tokens/token-2022/immutable-owner/anchor" - "tokens/token-2022/interest-bearing/anchor" - "tokens/token-2022/memo-transfer/anchor" - "tokens/token-2022/metadata/anchor" - "tokens/token-2022/mint-close-authority/anchor" - "tokens/token-2022/non-transferable/anchor" - "tokens/token-2022/permanent-delegate/anchor" - "tokens/token-2022/transfer-fee/anchor" - "tokens/token-2022/transfer-hook/anchor/TransferHookCounter" - "tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld" - "tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost" - "tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist" - ) + declare -a ProjectDirs=($(find . -type d -name "anchor"| grep -v -f <(grep . .github/.ghaignore | grep -v '^$'))) + echo "Projects to Test:" + printf "%s\n" "${ProjectDirs[@]}" for projectDir in "${ProjectDirs[@]}"; do echo " ******** diff --git a/.github/workflows/biome.yml b/.github/workflows/biome.yml new file mode 100644 index 000000000..410f2e224 --- /dev/null +++ b/.github/workflows/biome.yml @@ -0,0 +1,21 @@ +name: Typescript Code quality + +on: + push: + branches: + - main + pull_request: + types: [ opened, synchronize, reopened ] + branches: + - main +jobs: + quality: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Biome + uses: biomejs/setup-biome@v2 + - name: Run Biome + run: | + biome ci ./ --config-path biome.json diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 38ac18a5f..62a219d39 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -29,7 +29,7 @@ jobs: # The uses keyword specifies that this step will run v3 of the actions/checkout action. # This is an action that checks out your repository onto the runner, allowing you to run scripts or other actions against your code (such as build and test tools). # You should use the checkout action any time your workflow will run against the repository's code. - uses: actions/checkout@v3 + uses: actions/checkout@v4 # This GitHub Action installs a Rust toolchain using rustup. It is designed for one-line concise usage and good defaults. - name: Install the Rust toolchain @@ -43,7 +43,7 @@ jobs: name: Rustfmt runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: # Specific to dtolnay/rust-toolchain: Comma-separated string of additional components to install @@ -56,7 +56,7 @@ jobs: name: Clippy runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: clippy diff --git a/.github/workflows/solana-native.yml b/.github/workflows/solana-native.yml index 5d52f1536..0213b020c 100644 --- a/.github/workflows/solana-native.yml +++ b/.github/workflows/solana-native.yml @@ -17,15 +17,15 @@ jobs: strategy: matrix: node-version: [20.x] - solana-version: [1.17.25, stable, beta] + solana-version: [stable, beta] steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} check-latest: true - - uses: heyAyushh/setup-solana@v5.1 + - uses: heyAyushh/setup-solana@v5.2 with: solana-cli-version: ${{ matrix.solana-version }} - run: solana block @@ -35,28 +35,16 @@ jobs: npm install --global pnpm - name: Build Native programs run: | - declare -a ProjectDirs=( - "basics/account-data/native/program" - "basics/checking-accounts/native/program" - "basics/close-account/native/program" - "basics/counter/native/program" - "basics/create-account/native/program" - "basics/hello-solana/native/program" - "basics/pda-rent-payer/native/program" - "basics/processing-instructions/native/program" - "basics/program-derived-addresses/native/program" - "basics/realloc/native/program" - "basics/rent/native/program" - "basics/repository-layout/native/program" - "basics/transfer-sol/native/program" - ) + declare -a ProjectDirs=($(find . -type d -name "native"| grep -v -f <(grep . .github/.ghaignore | grep -v '^$'))) + echo "Projects to Build:" + printf "%s\n" "${ProjectDirs[@]}" for projectDir in "${ProjectDirs[@]}"; do echo " ******** Building $projectDir ********" cd $projectDir - if cargo-build-sbf --verbose; then + if pnpm build; then echo "Build succeeded for $projectDir." else failed=true @@ -83,11 +71,11 @@ jobs: steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} check-latest: true - - uses: heyAyushh/setup-solana@v5.1 + - uses: heyAyushh/setup-solana@v5.2 with: solana-cli-version: ${{ matrix.solana-version }} - run: solana block @@ -99,20 +87,9 @@ jobs: run: | solana -V rustc -V - declare -a ProjectDirs=( - "basics/account-data/native/" - "basics/checking-accounts/native/" - "basics/close-account/native/" - "basics/counter/native/" - "basics/create-account/native/" - "basics/hello-solana/native/" - "basics/pda-rent-payer/native/" - "basics/processing-instructions/native/" - "basics/program-derived-addresses/native/" - "basics/rent/native/" - "basics/repository-layout/native/" - "basics/transfer-sol/native/" - ) + declare -a ProjectDirs=($(find . -type d -name "native"| grep -v -f <(grep . .github/.ghaignore | grep -v '^$'))) + echo "Projects to Test:" + printf "%s\n" "${ProjectDirs[@]}" for projectDir in "${ProjectDirs[@]}"; do echo " ******** @@ -120,7 +97,7 @@ jobs: ********" cd $projectDir pnpm install --frozen-lockfile - if (cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test); then + if pnpm build-and-test; then echo "Tests succeeded for $projectDir." else failed=true diff --git a/.gitignore b/.gitignore index d81ccd31d..4a859951f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ .DS_Store test-ledger/ +node_modules/ **/*/node_modules **/*/package-lock.json diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 000000000..a16d8b1d5 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname "$0")/_/husky.sh" + +npx lint-staged diff --git a/Cargo.lock b/Cargo.lock index e088112c3..52daf5519 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,6 +18,42 @@ dependencies = [ "solana-program", ] +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "opaque-debug", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle", + "zeroize", +] + [[package]] name = "ahash" version = "0.7.8" @@ -236,9 +272,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "ark-bn254" @@ -369,6 +405,23 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "1.3.0" @@ -434,6 +487,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ + "block-padding", "generic-array", ] @@ -446,6 +500,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + [[package]] name = "borsh" version = "0.9.3" @@ -474,7 +534,7 @@ checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" dependencies = [ "borsh-derive-internal 0.9.3", "borsh-schema-derive-internal 0.9.3", - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro2", "syn 1.0.109", ] @@ -487,7 +547,7 @@ checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" dependencies = [ "borsh-derive-internal 0.10.3", "borsh-schema-derive-internal 0.10.3", - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro2", "syn 1.0.109", ] @@ -569,22 +629,22 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" +checksum = "369cfaf2a5bed5d8f8202073b2e093c9f508251de1551a0deb4253e4c7d80909" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -600,7 +660,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a98356df42a2eb1bd8f1793ae4ee4de48e384dd974ce5eac8eee802edb7492be" dependencies = [ "serde", - "toml 0.8.12", + "toml 0.8.13", ] [[package]] @@ -612,9 +672,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" dependencies = [ "jobserver", "libc", @@ -641,6 +701,24 @@ dependencies = [ "solana-program", ] +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "num-traits", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + [[package]] name = "close-account-native-program" version = "0.1.0" @@ -770,9 +848,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -800,6 +878,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher", +] + [[package]] name = "curve25519-dalek" version = "3.2.1" @@ -814,6 +901,47 @@ dependencies = [ "zeroize", ] +[[package]] +name = "darling" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.66", +] + +[[package]] +name = "darling_macro" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + [[package]] name = "derivative" version = "2.2.0" @@ -845,11 +973,59 @@ dependencies = [ "subtle", ] +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek-bip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" +dependencies = [ + "derivation-path", + "ed25519-dalek", + "hmac 0.12.1", + "sha2 0.10.8", +] + [[package]] name = "either" -version = "1.11.0" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + +[[package]] +name = "env_logger" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] [[package]] name = "equivalent" @@ -863,6 +1039,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "generic-array" version = "0.14.7" @@ -954,6 +1136,15 @@ dependencies = [ "solana-program", ] +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hmac" version = "0.8.1" @@ -964,6 +1155,15 @@ dependencies = [ "digest 0.9.0", ] +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "hmac-drbg" version = "0.3.0" @@ -972,9 +1172,21 @@ checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", "generic-array", - "hmac", + "hmac 0.8.1", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "im" version = "15.1.0" @@ -1058,9 +1270,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.154" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libsecp256k1" @@ -1162,6 +1374,18 @@ dependencies = [ "autocfg", ] +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + [[package]] name = "num-bigint" version = "0.4.5" @@ -1183,6 +1407,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -1201,6 +1436,48 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive 0.7.2", +] + +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "once_cell" version = "1.19.0" @@ -1215,9 +1492,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -1251,6 +1528,15 @@ dependencies = [ "crypto-mac", ] +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "pda-rent-payer" version = "0.1.0" @@ -1267,6 +1553,24 @@ dependencies = [ "solana-program", ] +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1282,11 +1586,30 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + [[package]] name = "proc-macro2" -version = "1.0.82" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +checksum = "ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6" dependencies = [ "unicode-ident", ] @@ -1325,6 +1648,26 @@ dependencies = [ "solana-program", ] +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "qualifier_attr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "quote" version = "1.0.36" @@ -1514,9 +1857,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092474d1a01ea8278f69e6a358998405fae5b8b963ddaeb2b0b04a128bf1dfb0" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" @@ -1538,9 +1881,9 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.200" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] @@ -1556,20 +1899,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.200" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -1578,11 +1921,33 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_with" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" dependencies = [ "serde", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.66", ] [[package]] @@ -1609,6 +1974,18 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + [[package]] name = "sha3" version = "0.10.8" @@ -1653,6 +2030,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + [[package]] name = "sized-chunks" version = "0.6.5" @@ -1708,20 +2091,31 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] -name = "solana-program" +name = "solana-logger" version = "1.17.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd3bcc37b433d7e8d45236a0f5aa68df462c4d5c6a709a6efd916988ce3ac08" +checksum = "f6959774302d4407c77d5fbdd4d5e31c2696f5ac1c74bf0cdcac704b474bc6fd" dependencies = [ - "ark-bn254", - "ark-ec", - "ark-ff", - "ark-serialize", - "base64 0.21.7", + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-program" +version = "1.17.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd3bcc37b433d7e8d45236a0f5aa68df462c4d5c6a709a6efd916988ce3ac08" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.21.7", "bincode", "bitflags", "blake3", @@ -1744,7 +2138,7 @@ dependencies = [ "log", "memoffset", "num-bigint", - "num-derive", + "num-derive 0.3.3", "num-traits", "parking_lot", "rand 0.8.5", @@ -1755,7 +2149,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.8", - "sha3", + "sha3 0.10.8", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-sdk-macro", @@ -1765,6 +2159,60 @@ dependencies = [ "zeroize", ] +[[package]] +name = "solana-sdk" +version = "1.17.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1de78b8c4fa09e4b90d720b2aa3ef3c80c4b956aa3d14616261a7f4bdf64c04" +dependencies = [ + "assert_matches", + "base64 0.21.7", + "bincode", + "bitflags", + "borsh 0.10.3", + "bs58 0.4.0", + "bytemuck", + "byteorder", + "chrono", + "derivation-path", + "digest 0.10.7", + "ed25519-dalek", + "ed25519-dalek-bip32", + "generic-array", + "hmac 0.12.1", + "itertools", + "js-sys", + "lazy_static", + "libsecp256k1", + "log", + "memmap2", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "pbkdf2 0.11.0", + "qstring", + "qualifier_attr", + "rand 0.7.3", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "serde_with", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-program", + "solana-sdk-macro", + "thiserror", + "uriparse", + "wasm-bindgen", +] + [[package]] name = "solana-sdk-macro" version = "1.17.25" @@ -1775,14 +2223,357 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.61", + "syn 2.0.66", +] + +[[package]] +name = "solana-security-txt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" + +[[package]] +name = "solana-zk-token-sdk" +version = "1.17.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9e0b222c3aad3df370ae87e993b32419906f00827a1677b7c814c65c9682909" +dependencies = [ + "aes-gcm-siv", + "base64 0.21.7", + "bincode", + "bytemuck", + "byteorder", + "curve25519-dalek", + "getrandom 0.1.16", + "itertools", + "lazy_static", + "merlin", + "num-derive 0.3.3", + "num-traits", + "rand 0.7.3", + "serde", + "serde_json", + "sha3 0.9.1", + "solana-program", + "solana-sdk", + "subtle", + "thiserror", + "zeroize", +] + +[[package]] +name = "spl-associated-token-account" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4414117bead33f2a5cf059cefac0685592bdd36f31f3caac49b89bff7f6bbf32" +dependencies = [ + "assert_matches", + "borsh 0.10.3", + "num-derive 0.4.2", + "num-traits", + "solana-program", + "spl-token", + "spl-token-2022 2.0.1", + "thiserror", +] + +[[package]] +name = "spl-discriminator" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa600f2fe56f32e923261719bae640d873edadbc5237681a39b8e37bfd4d263" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator-derive", ] +[[package]] +name = "spl-discriminator-derive" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07fd7858fc4ff8fb0e34090e41d7eb06a823e1057945c26d480bfc21d2338a93" +dependencies = [ + "quote", + "spl-discriminator-syn", + "syn 2.0.66", +] + +[[package]] +name = "spl-discriminator-syn" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fea7be851bd98d10721782ea958097c03a0c2a07d8d4997041d0ece6319a63" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.66", + "thiserror", +] + +[[package]] +name = "spl-memo" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" +dependencies = [ + "solana-program", +] + +[[package]] +name = "spl-memo" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58e9bae02de3405079a057fe244c867a08f92d48327d231fc60da831f94caf0a" +dependencies = [ + "solana-program", +] + +[[package]] +name = "spl-pod" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a5db7e4efb1107b0b8e52a13f035437cdcb36ef99c58f6d467f089d9b2915a" +dependencies = [ + "borsh 0.10.3", + "bytemuck", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error 0.3.1", +] + +[[package]] +name = "spl-program-error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af92f74cd3b0fdfda59fef4b571a92123e4df0f67cc43f73163975d31118ef82" +dependencies = [ + "num-derive 0.3.3", + "num-traits", + "solana-program", + "spl-program-error-derive 0.2.0", + "thiserror", +] + +[[package]] +name = "spl-program-error" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e0657b6490196971d9e729520ba934911ff41fbb2cb9004463dbe23cf8b4b4f" +dependencies = [ + "num-derive 0.4.2", + "num-traits", + "solana-program", + "spl-program-error-derive 0.3.2", + "thiserror", +] + +[[package]] +name = "spl-program-error-derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173f3cc506847882189b3a5b67299f617fed2f9730f122dd197b82e1e213dee5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "spl-program-error-derive" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1845dfe71fd68f70382232742e758557afe973ae19e6c06807b2c30f5d5cb474" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.66", +] + +[[package]] +name = "spl-tlv-account-resolution" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82149a5a06b5f158d03904066375eaf0c8a2422557cc3d5a25d277260d9a3b16" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-program-error 0.2.0", + "spl-type-length-value 0.2.0", +] + +[[package]] +name = "spl-tlv-account-resolution" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f335787add7fa711819f9e7c573f8145a5358a709446fe2d24bf2a88117c90" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error 0.3.1", + "spl-type-length-value 0.3.1", +] + +[[package]] +name = "spl-token" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ae123223633a389f95d1da9d49c2d0a50d499e7060b9624626a69e536ad2a4" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.2", + "num-traits", + "num_enum 0.7.2", + "solana-program", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b24ac5786a3fefbf59f5606312c61abf87b23154e7a717e5d18216fbea4711db" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "solana-program", + "solana-zk-token-sdk", + "spl-memo 3.0.1", + "spl-token", + "spl-transfer-hook-interface 0.1.0", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9fec83597cf7be923c5c3bdfd2fcc08cdfacd2eeb6c4e413da06b6916f50827" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.2", + "num-traits", + "num_enum 0.7.2", + "solana-program", + "solana-security-txt", + "solana-zk-token-sdk", + "spl-memo 4.0.1", + "spl-pod", + "spl-token", + "spl-token-group-interface", + "spl-token-metadata-interface", + "spl-transfer-hook-interface 0.5.1", + "spl-type-length-value 0.3.1", + "thiserror", +] + +[[package]] +name = "spl-token-group-interface" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb67fbacd587377a400aba81718abe4424d0e9d5ea510034d3b7f130d102153" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error 0.3.1", +] + +[[package]] +name = "spl-token-metadata-interface" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16aa8f64b6e0eaab3f5034e84d867c8435d8216497b4543a4978a31f4b6e8a8" +dependencies = [ + "borsh 0.10.3", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error 0.3.1", + "spl-type-length-value 0.3.1", +] + +[[package]] +name = "spl-transfer-hook-interface" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a2326852adf88716fbac7f54cd6ee2c8a0b5a14ede24db3b4519c4ff13df04b" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "solana-program", + "spl-discriminator", + "spl-tlv-account-resolution 0.2.0", + "spl-type-length-value 0.2.0", + "thiserror", +] + +[[package]] +name = "spl-transfer-hook-interface" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6dfe329fcff44cbe2eea994bd8f737f0b0a69faed39e56f9b6ee03badf7e14" +dependencies = [ + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error 0.3.1", + "spl-tlv-account-resolution 0.5.2", + "spl-type-length-value 0.3.1", +] + +[[package]] +name = "spl-type-length-value" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1d085f426b33b8365fb98383d1b8b3925e21bdfe579c851ceaa7f511dbec191" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-program-error 0.2.0", +] + +[[package]] +name = "spl-type-length-value" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f9ebd75d29c5f48de5f6a9c114e08531030b75b8ac2c557600ac7da0b73b1e8" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error 0.3.1", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "subtle" -version = "2.5.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" @@ -1797,33 +2588,42 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.61" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "thiserror" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -1833,9 +2633,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" dependencies = [ "anyhow", - "hmac", + "hmac 0.8.1", "once_cell", - "pbkdf2", + "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", "sha2 0.9.9", @@ -1860,6 +2660,61 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "token-2022-default-account-state-program" +version = "0.1.0" +dependencies = [ + "borsh 0.9.3", + "borsh-derive 0.9.3", + "solana-program", + "spl-associated-token-account", + "spl-token-2022 0.7.0", +] + +[[package]] +name = "token-2022-mint-close-authority-program" +version = "0.1.0" +dependencies = [ + "borsh 0.9.3", + "borsh-derive 0.9.3", + "solana-program", + "spl-associated-token-account", + "spl-token-2022 0.7.0", +] + +[[package]] +name = "token-2022-multiple-extensions-program" +version = "0.1.0" +dependencies = [ + "borsh 0.9.3", + "borsh-derive 0.9.3", + "solana-program", + "spl-associated-token-account", + "spl-token-2022 0.7.0", +] + +[[package]] +name = "token-2022-non-transferable-program" +version = "0.1.0" +dependencies = [ + "borsh 0.9.3", + "borsh-derive 0.9.3", + "solana-program", + "spl-associated-token-account", + "spl-token-2022 0.7.0", +] + +[[package]] +name = "token-2022-transfer-fees-program" +version = "0.1.0" +dependencies = [ + "borsh 0.10.3", + "borsh-derive 0.9.3", + "solana-program", + "spl-associated-token-account", + "spl-token-2022 0.7.0", +] + [[package]] name = "toml" version = "0.5.11" @@ -1871,36 +2726,58 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.12" +version = "0.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.22.13", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.12" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.8", ] [[package]] @@ -1946,6 +2823,26 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "uriparse" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" +dependencies = [ + "fnv", + "lazy_static", +] + [[package]] name = "version_check" version = "0.9.4" @@ -1985,7 +2882,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -2007,7 +2904,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2028,6 +2925,46 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-targets" version = "0.52.5" @@ -2092,6 +3029,15 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + [[package]] name = "winnow" version = "0.6.8" @@ -2118,7 +3064,7 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -2138,5 +3084,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.61", + "syn 2.0.66", ] diff --git a/Cargo.toml b/Cargo.toml index 2d922e31f..73434c972 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,5 +30,13 @@ members = [ "basics/repository-layout/anchor/programs/*", "basics/transfer-sol/native/program", "basics/transfer-sol/anchor/programs/*", + "tokens/token-2022/mint-close-authority/native/program", + "tokens/token-2022/non-transferable/native/program", + "tokens/token-2022/default-account-state/native/program", + "tokens/token-2022/transfer-fee/native/program", + "tokens/token-2022/multiple-extensions/native/program" ] resolver = "2" + +[profile.release] +overflow-checks = true diff --git a/basics/account-data/anchor/tests/test.ts b/basics/account-data/anchor/tests/test.ts index 57e3ff6d8..885a0580e 100644 --- a/basics/account-data/anchor/tests/test.ts +++ b/basics/account-data/anchor/tests/test.ts @@ -1,51 +1,43 @@ -import * as anchor from "@coral-xyz/anchor" -import { AnchorProgramExample } from "../target/types/anchor_program_example" -import { Keypair } from "@solana/web3.js" +import * as anchor from '@coral-xyz/anchor'; +import { Keypair } from '@solana/web3.js'; +import type { AnchorProgramExample } from '../target/types/anchor_program_example'; -describe("Account Data!", () => { - const provider = anchor.AnchorProvider.env() - anchor.setProvider(provider) - const payer = provider.wallet as anchor.Wallet - const program = anchor.workspace - .AnchorProgramExample as anchor.Program +describe('Account Data!', () => { + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + const payer = provider.wallet as anchor.Wallet; + const program = anchor.workspace.AnchorProgramExample as anchor.Program; // Generate a new keypair for the addressInfo account - const addressInfoAccount = new Keypair() + const addressInfoAccount = new Keypair(); - it("Create the address info account", async () => { - console.log(`Payer Address : ${payer.publicKey}`) - console.log(`Address Info Acct : ${addressInfoAccount.publicKey}`) + it('Create the address info account', async () => { + console.log(`Payer Address : ${payer.publicKey}`); + console.log(`Address Info Acct : ${addressInfoAccount.publicKey}`); - // Instruction data + // Instruction Ix data const addressInfo = { - name: "Joe C", + name: 'Joe C', houseNumber: 136, - street: "Mile High Dr.", - city: "Solana Beach", - } + street: 'Mile High Dr.', + city: 'Solana Beach', + }; await program.methods - .createAddressInfo( - addressInfo.name, - addressInfo.houseNumber, - addressInfo.street, - addressInfo.city - ) + .createAddressInfo(addressInfo.name, addressInfo.houseNumber, addressInfo.street, addressInfo.city) .accounts({ addressInfo: addressInfoAccount.publicKey, payer: payer.publicKey, }) .signers([addressInfoAccount]) - .rpc() - }) + .rpc(); + }); it("Read the new account's data", async () => { - const addressInfo = await program.account.addressInfo.fetch( - addressInfoAccount.publicKey - ) - console.log(`Name : ${addressInfo.name}`) - console.log(`House Num: ${addressInfo.houseNumber}`) - console.log(`Street : ${addressInfo.street}`) - console.log(`City : ${addressInfo.city}`) - }) -}) + const addressInfo = await program.account.addressInfo.fetch(addressInfoAccount.publicKey); + console.log(`Name : ${addressInfo.name}`); + console.log(`House Num: ${addressInfo.houseNumber}`); + console.log(`Street : ${addressInfo.street}`); + console.log(`City : ${addressInfo.city}`); + }); +}); diff --git a/basics/account-data/native/pnpm-lock.yaml b/basics/account-data/native/pnpm-lock.yaml index 12f499f1a..fb92eed1d 100644 --- a/basics/account-data/native/pnpm-lock.yaml +++ b/basics/account-data/native/pnpm-lock.yaml @@ -1,336 +1,211 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@solana/web3.js': - specifier: ^1.47.3 - version: 1.91.8 - fs: - specifier: ^0.0.1-security - version: 0.0.1-security - -devDependencies: - '@types/bn.js': - specifier: ^5.1.0 - version: 5.1.5 - '@types/chai': - specifier: ^4.3.1 - version: 4.3.16 - '@types/mocha': - specifier: ^9.1.1 - version: 9.1.1 - chai: - specifier: ^4.3.4 - version: 4.4.1 - mocha: - specifier: ^9.0.3 - version: 9.2.2 - solana-bankrun: - specifier: ^0.3.0 - version: 0.3.0 - ts-mocha: - specifier: ^10.0.0 - version: 10.0.0(mocha@9.2.2) - typescript: - specifier: ^4.3.5 - version: 4.9.5 +importers: + + .: + dependencies: + '@solana/web3.js': + specifier: ^1.47.3 + version: 1.91.8 + fs: + specifier: ^0.0.1-security + version: 0.0.1-security + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.1 + version: 4.3.16 + '@types/mocha': + specifier: ^9.1.1 + version: 9.1.1 + chai: + specifier: ^4.3.4 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + solana-bankrun: + specifier: ^0.3.0 + version: 0.3.0 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 packages: - /@babel/runtime@7.24.5: + '@babel/runtime@7.24.5': resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - /@noble/curves@1.4.0: + '@noble/curves@1.4.0': resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} - dependencies: - '@noble/hashes': 1.4.0 - /@noble/hashes@1.4.0: + '@noble/hashes@1.4.0': resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} - /@solana/buffer-layout@4.0.1: + '@solana/buffer-layout@4.0.1': resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} engines: {node: '>=5.10'} - dependencies: - buffer: 6.0.3 - /@solana/web3.js@1.91.8: + '@solana/web3.js@1.91.8': resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} - dependencies: - '@babel/runtime': 7.24.5 - '@noble/curves': 1.4.0 - '@noble/hashes': 1.4.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.0 - node-fetch: 2.7.0 - rpc-websockets: 7.11.0 - superstruct: 0.14.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - /@types/bn.js@5.1.5: + '@types/bn.js@5.1.5': resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} - dependencies: - '@types/node': 20.12.11 - dev: true - /@types/chai@4.3.16: + '@types/chai@4.3.16': resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} - dev: true - /@types/connect@3.4.38: + '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 12.20.55 - /@types/json5@0.0.29: + '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - requiresBuild: true - dev: true - optional: true - /@types/mocha@9.1.1: + '@types/mocha@9.1.1': resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} - dev: true - /@types/node@12.20.55: + '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - /@types/node@20.12.11: + '@types/node@20.12.11': resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} - dependencies: - undici-types: 5.26.5 - dev: true - /@types/ws@7.4.7: + '@types/ws@7.4.7': resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - dependencies: - '@types/node': 12.20.55 - /@ungap/promise-all-settled@1.1.2: + '@ungap/promise-all-settled@1.1.2': resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - dev: true - /JSONStream@1.3.5: + JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - /agentkeepalive@4.5.0: + agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} - dependencies: - humanize-ms: 1.2.1 - /ansi-colors@4.1.1: + ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} - dev: true - /ansi-regex@5.0.1: + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true - /ansi-styles@4.3.0: + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - /anymatch@3.1.3: + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - /argparse@2.0.1: + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - /arrify@1.0.1: + arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} - dev: true - /assertion-error@1.1.0: + assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true - /balanced-match@1.0.2: + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - /base-x@3.0.9: + base-x@3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} - dependencies: - safe-buffer: 5.2.1 - /base64-js@1.5.1: + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - /bigint-buffer@1.1.5: + bigint-buffer@1.1.5: resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} engines: {node: '>= 10.0.0'} - requiresBuild: true - dependencies: - bindings: 1.5.0 - /binary-extensions@2.3.0: + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - dev: true - /bindings@1.5.0: + bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - dependencies: - file-uri-to-path: 1.0.0 - /bn.js@5.2.1: + bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - /borsh@0.7.0: + borsh@0.7.0: resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - dependencies: - bn.js: 5.2.1 - bs58: 4.0.1 - text-encoding-utf-8: 1.0.2 - /brace-expansion@1.1.11: + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - /braces@3.0.2: + braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - /browser-stdout@1.3.1: + browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true - /bs58@4.0.1: + bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} - dependencies: - base-x: 3.0.9 - /buffer-from@1.1.2: + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - /buffer@6.0.3: + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - /bufferutil@4.0.8: + bufferutil@4.0.8: resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.1 - /camelcase@6.3.0: + camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - dev: true - /chai@4.4.1: + chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 - dev: true - /chalk@4.1.2: + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - /check-error@1.0.3: + check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 - dev: true - /chokidar@3.5.3: + chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /cliui@7.0.4: + cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - /color-convert@2.0.1: + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - /color-name@1.1.4: + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - /commander@2.20.3: + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - /concat-map@0.0.1: + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - /debug@4.3.3(supports-color@8.1.1): + debug@4.3.3: resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} engines: {node: '>=6.0'} peerDependencies: @@ -338,357 +213,219 @@ packages: peerDependenciesMeta: supports-color: optional: true - dependencies: - ms: 2.1.2 - supports-color: 8.1.1 - dev: true - /decamelize@4.0.0: + decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} - dev: true - /deep-eql@4.1.3: + deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} - dependencies: - type-detect: 4.0.8 - dev: true - /delay@5.0.0: + delay@5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} - /diff@3.5.0: + diff@3.5.0: resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} engines: {node: '>=0.3.1'} - dev: true - /diff@5.0.0: + diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} - dev: true - /emoji-regex@8.0.0: + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - /es6-promise@4.2.8: + es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - /es6-promisify@5.0.0: + es6-promisify@5.0.0: resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - dependencies: - es6-promise: 4.2.8 - /escalade@3.1.2: + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - dev: true - /escape-string-regexp@4.0.0: + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true - /eventemitter3@4.0.7: + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - /eyes@0.1.8: + eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} - /fast-stable-stringify@1.0.0: + fast-stable-stringify@1.0.0: resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - /file-uri-to-path@1.0.0: + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - /fill-range@7.0.1: + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - /find-up@5.0.0: + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - /flat@5.0.2: + flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - dev: true - /fs.realpath@1.0.0: + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - /fs@0.0.1-security: + fs@0.0.1-security: resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} - dev: false - /fsevents@2.3.3: + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - requiresBuild: true - dev: true - optional: true - /get-caller-file@2.0.5: + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - dev: true - /get-func-name@2.0.2: + get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true - /glob-parent@5.1.2: + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - /glob@7.2.0: + glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - 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 - dev: true - /growl@1.10.5: + growl@1.10.5: resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} engines: {node: '>=4.x'} - dev: true - /has-flag@4.0.0: + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true - /he@1.2.0: + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - dev: true - /humanize-ms@1.2.1: + humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.3 - /ieee754@1.2.1: + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /inflight@1.0.6: + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - /inherits@2.0.4: + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - /is-binary-path@2.1.0: + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - dependencies: - binary-extensions: 2.3.0 - dev: true - /is-extglob@2.1.1: + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true - /is-fullwidth-code-point@3.0.0: + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true - /is-glob@4.0.3: + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - /is-number@7.0.0: + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true - /is-plain-obj@2.1.0: + is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} - dev: true - /is-unicode-supported@0.1.0: + is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - dev: true - /isexe@2.0.0: + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - /isomorphic-ws@4.0.1(ws@7.5.9): + isomorphic-ws@4.0.1: resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} peerDependencies: ws: '*' - dependencies: - ws: 7.5.9 - /jayson@4.1.0: + jayson@4.1.0: resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} engines: {node: '>=8'} hasBin: true - dependencies: - '@types/connect': 3.4.38 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - JSONStream: 1.3.5 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.9) - json-stringify-safe: 5.0.1 - uuid: 8.3.2 - ws: 7.5.9 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - /js-yaml@4.1.0: + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - /json-stringify-safe@5.0.1: + json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - /json5@1.0.2: + json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true - requiresBuild: true - dependencies: - minimist: 1.2.8 - dev: true - optional: true - /jsonparse@1.3.1: + jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - /locate-path@6.0.0: + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - /log-symbols@4.1.0: + log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - /loupe@2.3.7: + loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - dependencies: - get-func-name: 2.0.2 - dev: true - /make-error@1.3.6: + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - /minimatch@3.1.2: + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - /minimatch@4.2.1: + minimatch@4.2.1: resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} engines: {node: '>=10'} - dependencies: - brace-expansion: 1.1.11 - dev: true - /minimist@1.2.8: + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - /mkdirp@0.5.6: + mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - /mocha@9.2.2: + mocha@9.2.2: resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} engines: {node: '>= 12.0.0'} hasBin: true - 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 - dev: true - /ms@2.1.2: + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - /ms@2.1.3: + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /nanoid@3.3.1: + nanoid@3.3.1: resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true - /node-fetch@2.7.0: + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -696,333 +433,201 @@ packages: peerDependenciesMeta: encoding: optional: true - dependencies: - whatwg-url: 5.0.0 - /node-gyp-build@4.8.1: + node-gyp-build@4.8.1: resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} hasBin: true - requiresBuild: true - /normalize-path@3.0.0: + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true - /once@1.4.0: + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - /p-limit@3.1.0: + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - /path-exists@4.0.0: + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: true - /path-is-absolute@1.0.1: + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true - /pathval@1.1.1: + pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true - /picomatch@2.3.1: + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true - /randombytes@2.1.0: + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - /readdirp@3.6.0: + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - /regenerator-runtime@0.14.1: + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - /require-directory@2.1.1: + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: true - /rpc-websockets@7.11.0: + rpc-websockets@7.11.0: resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} - dependencies: - eventemitter3: 4.0.7 - uuid: 8.3.2 - ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - optionalDependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - /safe-buffer@5.2.1: + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /serialize-javascript@6.0.0: + serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - dependencies: - randombytes: 2.1.0 - dev: true - /solana-bankrun-darwin-arm64@0.3.0: + solana-bankrun-darwin-arm64@0.3.0: resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /solana-bankrun-darwin-universal@0.3.0: + solana-bankrun-darwin-universal@0.3.0: resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==} engines: {node: '>= 10'} os: [darwin] - requiresBuild: true - dev: true - optional: true - /solana-bankrun-darwin-x64@0.3.0: + solana-bankrun-darwin-x64@0.3.0: resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /solana-bankrun-linux-x64-gnu@0.3.0: + solana-bankrun-linux-x64-gnu@0.3.0: resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /solana-bankrun-linux-x64-musl@0.3.0: + solana-bankrun-linux-x64-musl@0.3.0: resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /solana-bankrun@0.3.0: + solana-bankrun@0.3.0: resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==} engines: {node: '>= 10'} - dependencies: - '@solana/web3.js': 1.91.8 - bs58: 4.0.1 - optionalDependencies: - solana-bankrun-darwin-arm64: 0.3.0 - solana-bankrun-darwin-universal: 0.3.0 - solana-bankrun-darwin-x64: 0.3.0 - solana-bankrun-linux-x64-gnu: 0.3.0 - solana-bankrun-linux-x64-musl: 0.3.0 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - /source-map-support@0.5.21: + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - /source-map@0.6.1: + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - dev: true - /string-width@4.2.3: + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - /strip-ansi@6.0.1: + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - /strip-bom@3.0.0: + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - requiresBuild: true - dev: true - optional: true - /strip-json-comments@3.1.1: + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: true - /superstruct@0.14.2: + superstruct@0.14.2: resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} - /supports-color@7.2.0: + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: + supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: true - /text-encoding-utf-8@1.0.2: + text-encoding-utf-8@1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - /through@2.3.8: + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - /to-regex-range@5.0.1: + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - /tr46@0.0.3: + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /ts-mocha@10.0.0(mocha@9.2.2): + ts-mocha@10.0.0: resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} engines: {node: '>= 6.X.X'} hasBin: true peerDependencies: mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X - dependencies: - mocha: 9.2.2 - ts-node: 7.0.1 - optionalDependencies: - tsconfig-paths: 3.15.0 - dev: true - /ts-node@7.0.1: + ts-node@7.0.1: resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} engines: {node: '>=4.2.0'} hasBin: true - 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 - dev: true - /tsconfig-paths@3.15.0: + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - requiresBuild: true - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - optional: true - /type-detect@4.0.8: + type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - dev: true - /typescript@4.9.5: + typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true - dev: true - /undici-types@5.26.5: + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - /utf-8-validate@5.0.10: + utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.1 - /uuid@8.3.2: + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - /webidl-conversions@3.0.1: + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /whatwg-url@5.0.0: + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - /which@2.0.2: + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /workerpool@6.2.0: + workerpool@6.2.0: resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} - dev: true - /wrap-ansi@7.0.0: + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - /ws@7.5.9: + ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -1034,7 +639,7 @@ packages: utf-8-validate: optional: true - /ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + ws@8.17.0: resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} engines: {node: '>=10.0.0'} peerDependencies: @@ -1045,33 +650,638 @@ packages: optional: true utf-8-validate: optional: true - dependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - /y18n@5.0.8: + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: true - /yargs-parser@20.2.4: + yargs-parser@20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} - dev: true - /yargs-unparser@2.0.0: + yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.5': + dependencies: + regenerator-runtime: 0.14.1 + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8': + dependencies: + '@babel/runtime': 7.24.5 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0 + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.11 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.11': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assertion-error@1.1.0: {} + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + emoji-regex@8.0.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + fs.realpath@1.0.0: {} + + fs@0.0.1-security: {} + + fsevents@2.3.3: + optional: true + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + he@1.2.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9): + dependencies: + ws: 7.5.9 + + jayson@4.1.0: + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + make-error@1.3.6: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: {} + + normalize-path@3.0.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + solana-bankrun-darwin-arm64@0.3.0: + optional: true + + solana-bankrun-darwin-universal@0.3.0: + optional: true + + solana-bankrun-darwin-x64@0.3.0: + optional: true + + solana-bankrun-linux-x64-gnu@0.3.0: + optional: true + + solana-bankrun-linux-x64-musl@0.3.0: + optional: true + + solana-bankrun@0.3.0: + dependencies: + '@solana/web3.js': 1.91.8 + bs58: 4.0.1 + optionalDependencies: + solana-bankrun-darwin-arm64: 0.3.0 + solana-bankrun-darwin-universal: 0.3.0 + solana-bankrun-darwin-x64: 0.3.0 + solana-bankrun-linux-x64-gnu: 0.3.0 + solana-bankrun-linux-x64-musl: 0.3.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + type-detect@4.0.8: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9: {} + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 decamelize: 4.0.0 flat: 5.0.2 is-plain-obj: 2.1.0 - dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.1.2 @@ -1080,14 +1290,7 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.4 - dev: true - /yn@2.0.0: - resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} - engines: {node: '>=4'} - dev: true + yn@2.0.0: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} diff --git a/basics/account-data/native/tests/test.ts b/basics/account-data/native/tests/test.ts index 3fe34d719..0a3ac7438 100644 --- a/basics/account-data/native/tests/test.ts +++ b/basics/account-data/native/tests/test.ts @@ -1,18 +1,12 @@ -import { start } from 'solana-bankrun'; -import { - Keypair, - PublicKey, - SystemProgram, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; -import * as borsh from 'borsh'; -import { Buffer } from 'buffer'; +import { Buffer } from 'node:buffer'; import { describe, test } from 'node:test'; +import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; +import { start } from 'solana-bankrun'; class Assignable { constructor(properties) { - Object.keys(properties).map(key => { + Object.keys(properties).map((key) => { return (this[key] = properties[key]); }); } @@ -49,7 +43,7 @@ const AddressInfoSchema = new Map([ describe('Account Data!', async () => { const addressInfoAccount = Keypair.generate(); const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'account_data_program', programId: PROGRAM_ID }],[]); + const context = await start([{ name: 'account_data_program', programId: PROGRAM_ID }], []); const client = context.banksClient; test('Create the address info account', async () => { @@ -59,7 +53,7 @@ describe('Account Data!', async () => { console.log(`Payer Address : ${payer.publicKey}`); console.log(`Address Info Acct : ${addressInfoAccount.publicKey}`); - let ix = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [ { pubkey: addressInfoAccount.publicKey, @@ -89,9 +83,7 @@ describe('Account Data!', async () => { test("Read the new account's data", async () => { const accountInfo = await client.getAccount(addressInfoAccount.publicKey); - const readAddressInfo = AddressInfo.fromBuffer( - Buffer.from(accountInfo.data) - ); + const readAddressInfo = AddressInfo.fromBuffer(Buffer.from(accountInfo.data)); console.log(`Name : ${readAddressInfo.name}`); console.log(`House Num: ${readAddressInfo.house_number}`); console.log(`Street : ${readAddressInfo.street}`); diff --git a/basics/checking-accounts/anchor/tests/test.ts b/basics/checking-accounts/anchor/tests/test.ts index 8b26b56fd..a9c9dcafb 100644 --- a/basics/checking-accounts/anchor/tests/test.ts +++ b/basics/checking-accounts/anchor/tests/test.ts @@ -1,43 +1,34 @@ -import * as anchor from "@coral-xyz/anchor" -import { AnchorProgramExample } from "../target/types/anchor_program_example" -import { - Keypair, - SystemProgram, - Transaction, - sendAndConfirmTransaction, -} from "@solana/web3.js" +import * as anchor from '@coral-xyz/anchor'; +import { Keypair, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; +import type { AnchorProgramExample } from '../target/types/anchor_program_example'; -describe("Anchor example", () => { - const provider = anchor.AnchorProvider.env() - anchor.setProvider(provider) - const program = anchor.workspace - .AnchorProgramExample as anchor.Program - const wallet = provider.wallet as anchor.Wallet +describe('Anchor example', () => { + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + const program = anchor.workspace.AnchorProgramExample as anchor.Program; + const wallet = provider.wallet as anchor.Wallet; // We'll create this ahead of time. // Our program will try to modify it. - const accountToChange = new Keypair() + const accountToChange = new Keypair(); // Our program will create this. - const accountToCreate = new Keypair() + const accountToCreate = new Keypair(); - it("Create an account owned by our program", async () => { - let instruction = SystemProgram.createAccount({ + it('Create an account owned by our program', async () => { + const instruction = SystemProgram.createAccount({ fromPubkey: provider.wallet.publicKey, newAccountPubkey: accountToChange.publicKey, lamports: await provider.connection.getMinimumBalanceForRentExemption(0), space: 0, programId: program.programId, // Our program - }) + }); - const transaction = new Transaction().add(instruction) + const transaction = new Transaction().add(instruction); - await sendAndConfirmTransaction(provider.connection, transaction, [ - wallet.payer, - accountToChange, - ]) - }) + await sendAndConfirmTransaction(provider.connection, transaction, [wallet.payer, accountToChange]); + }); - it("Check accounts", async () => { + it('Check accounts', async () => { await program.methods .checkAccounts() .accounts({ @@ -45,6 +36,6 @@ describe("Anchor example", () => { accountToCreate: accountToCreate.publicKey, accountToChange: accountToChange.publicKey, }) - .rpc() - }) -}) + .rpc(); + }); +}); diff --git a/basics/checking-accounts/native/tests/test.ts b/basics/checking-accounts/native/tests/test.ts index 243078b8c..d7102d4f2 100644 --- a/basics/checking-accounts/native/tests/test.ts +++ b/basics/checking-accounts/native/tests/test.ts @@ -1,19 +1,10 @@ -import { - Keypair, - PublicKey, - SystemProgram, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; import { describe, test } from 'node:test'; +import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js'; import { start } from 'solana-bankrun'; describe('Checking accounts', async () => { const PROGRAM_ID = PublicKey.unique(); - const context = await start( - [{ name: 'checking_accounts_program', programId: PROGRAM_ID }], - [] - ); + const context = await start([{ name: 'checking_accounts_program', programId: PROGRAM_ID }], []); const client = context.banksClient; const payer = context.payer; const rent = await client.getRent(); @@ -26,7 +17,7 @@ describe('Checking accounts', async () => { test('Create an account owned by our program', async () => { const blockhash = context.lastBlockhash; - let ix = SystemProgram.createAccount({ + const ix = SystemProgram.createAccount({ fromPubkey: payer.publicKey, newAccountPubkey: accountToChange.publicKey, lamports: Number(rent.minimumBalance(BigInt(0))), @@ -43,7 +34,7 @@ describe('Checking accounts', async () => { test('Check accounts', async () => { const blockhash = context.lastBlockhash; - let ix = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, { pubkey: accountToCreate.publicKey, isSigner: true, isWritable: true }, diff --git a/basics/close-account/anchor/migrations/deploy.ts b/basics/close-account/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/basics/close-account/anchor/migrations/deploy.ts +++ b/basics/close-account/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/basics/close-account/anchor/tests/close-account.ts b/basics/close-account/anchor/tests/close-account.ts index 1f3a5ebbb..eba6ac2d9 100644 --- a/basics/close-account/anchor/tests/close-account.ts +++ b/basics/close-account/anchor/tests/close-account.ts @@ -1,54 +1,46 @@ -import * as anchor from "@coral-xyz/anchor" -import { Program } from "@coral-xyz/anchor" -import { CloseAccountProgram } from "../target/types/close_account_program" -import { PublicKey } from "@solana/web3.js" -import assert from "assert" +import assert from 'node:assert'; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { PublicKey } from '@solana/web3.js'; +import type { CloseAccountProgram } from '../target/types/close_account_program'; -describe("close-an-account", () => { +describe('close-an-account', () => { // Configure the client to use the local cluster. - const provider = anchor.AnchorProvider.env() - anchor.setProvider(provider) + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); - const program = anchor.workspace - .CloseAccountProgram as Program - const payer = provider.wallet as anchor.Wallet + const program = anchor.workspace.CloseAccountProgram as Program; + const payer = provider.wallet as anchor.Wallet; // Derive the PDA for the user's account. - const [userAccountAddress] = PublicKey.findProgramAddressSync( - [Buffer.from("USER"), payer.publicKey.toBuffer()], - program.programId - ) + const [userAccountAddress] = PublicKey.findProgramAddressSync([Buffer.from('USER'), payer.publicKey.toBuffer()], program.programId); - it("Create Account", async () => { + it('Create Account', async () => { await program.methods - .createUser("John Doe") + .createUser('John Doe') .accounts({ user: payer.publicKey, userAccount: userAccountAddress, }) - .rpc() + .rpc(); // Fetch the account data - const userAccount = await program.account.userState.fetch( - userAccountAddress - ) - assert.equal(userAccount.name, "John Doe") - assert.equal(userAccount.user.toBase58(), payer.publicKey.toBase58()) - }) + const userAccount = await program.account.userState.fetch(userAccountAddress); + assert.equal(userAccount.name, 'John Doe'); + assert.equal(userAccount.user.toBase58(), payer.publicKey.toBase58()); + }); - it("Close Account", async () => { + it('Close Account', async () => { await program.methods .closeUser() .accounts({ user: payer.publicKey, userAccount: userAccountAddress, }) - .rpc() + .rpc(); // The account should no longer exist, returning null. - const userAccount = await program.account.userState.fetchNullable( - userAccountAddress - ) - assert.equal(userAccount, null) - }) -}) + const userAccount = await program.account.userState.fetchNullable(userAccountAddress); + assert.equal(userAccount, null); + }); +}); diff --git a/basics/close-account/native/tests/close-account.test.ts b/basics/close-account/native/tests/close-account.test.ts index c003fb52f..cb8640c3d 100644 --- a/basics/close-account/native/tests/close-account.test.ts +++ b/basics/close-account/native/tests/close-account.test.ts @@ -1,30 +1,19 @@ -import { PublicKey, Transaction } from '@solana/web3.js'; import { describe, test } from 'node:test'; -import { createCreateUserInstruction, createCloseUserInstruction } from '../ts'; +import { PublicKey, Transaction } from '@solana/web3.js'; import { start } from 'solana-bankrun'; +import { createCloseUserInstruction, createCreateUserInstruction } from '../ts'; describe('Close Account!', async () => { const PROGRAM_ID = PublicKey.unique(); - const context = await start( - [{ name: 'close_account_native_program', programId: PROGRAM_ID }], - [] - ); + const context = await start([{ name: 'close_account_native_program', programId: PROGRAM_ID }], []); const client = context.banksClient; const payer = context.payer; - const testAccountPublicKey = PublicKey.findProgramAddressSync( - [Buffer.from('USER'), payer.publicKey.toBuffer()], - PROGRAM_ID - )[0]; + const testAccountPublicKey = PublicKey.findProgramAddressSync([Buffer.from('USER'), payer.publicKey.toBuffer()], PROGRAM_ID)[0]; test('Create the account', async () => { const blockhash = context.lastBlockhash; - const ix = createCreateUserInstruction( - testAccountPublicKey, - payer.publicKey, - PROGRAM_ID, - 'Jacob' - ); + const ix = createCreateUserInstruction(testAccountPublicKey, payer.publicKey, PROGRAM_ID, 'Jacob'); const tx = new Transaction(); tx.recentBlockhash = blockhash; @@ -36,11 +25,7 @@ describe('Close Account!', async () => { test('Close the account', async () => { const blockhash = context.lastBlockhash; - const ix = createCloseUserInstruction( - testAccountPublicKey, - payer.publicKey, - PROGRAM_ID - ); + const ix = createCloseUserInstruction(testAccountPublicKey, payer.publicKey, PROGRAM_ID); const tx = new Transaction(); tx.recentBlockhash = blockhash; tx.add(ix).sign(payer); diff --git a/basics/close-account/native/ts/instructions/close.ts b/basics/close-account/native/ts/instructions/close.ts index 2a10b093b..697d347bf 100644 --- a/basics/close-account/native/ts/instructions/close.ts +++ b/basics/close-account/native/ts/instructions/close.ts @@ -1,60 +1,50 @@ -import * as borsh from "borsh"; -import { Buffer } from "buffer"; -import { - PublicKey, - SystemProgram, - TransactionInstruction -} from '@solana/web3.js'; -import { MyInstruction } from "."; - +import { Buffer } from 'node:buffer'; +import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; +import { MyInstruction } from '.'; export class Close { + instruction: MyInstruction; + constructor(props: { instruction: MyInstruction; + }) { + this.instruction = props.instruction; + } + + toBuffer() { + return Buffer.from(borsh.serialize(CloseSchema, this)); + } - constructor(props: { - instruction: MyInstruction, - }) { - this.instruction = props.instruction; - } - - toBuffer() { - return Buffer.from(borsh.serialize(CloseSchema, this)) - }; - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(CloseSchema, Close, buffer); - }; -}; + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(CloseSchema, Close, buffer); + } +} export const CloseSchema = new Map([ - [ Close, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ], - }] + [ + Close, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], ]); -export function createCloseUserInstruction( - target: PublicKey, - payer: PublicKey, - programId: PublicKey, -): TransactionInstruction { - - const instructionObject = new Close({ - instruction: MyInstruction.CloseUser, - }); - - const ix = new TransactionInstruction({ - keys: [ - {pubkey: target, isSigner: false, isWritable: true}, - {pubkey: payer, isSigner: true, isWritable: true}, - {pubkey: SystemProgram.programId, isSigner: false, isWritable: false} - ], - programId: programId, - data: instructionObject.toBuffer(), - }); - - return ix; -} \ No newline at end of file +export function createCloseUserInstruction(target: PublicKey, payer: PublicKey, programId: PublicKey): TransactionInstruction { + const instructionObject = new Close({ + instruction: MyInstruction.CloseUser, + }); + + const ix = new TransactionInstruction({ + keys: [ + { pubkey: target, isSigner: false, isWritable: true }, + { pubkey: payer, isSigner: true, isWritable: true }, + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, + ], + programId: programId, + data: instructionObject.toBuffer(), + }); + + return ix; +} diff --git a/basics/close-account/native/ts/instructions/create.ts b/basics/close-account/native/ts/instructions/create.ts index 6af2b157e..100b6cd68 100644 --- a/basics/close-account/native/ts/instructions/create.ts +++ b/basics/close-account/native/ts/instructions/create.ts @@ -1,10 +1,6 @@ +import { Buffer } from 'node:buffer'; +import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js'; import * as borsh from 'borsh'; -import { Buffer } from 'buffer'; -import { - PublicKey, - SystemProgram, - TransactionInstruction, -} from '@solana/web3.js'; import { MyInstruction } from '.'; export class Create { @@ -38,12 +34,7 @@ export const CreateSchema = new Map([ ], ]); -export function createCreateUserInstruction( - target: PublicKey, - payer: PublicKey, - programId: PublicKey, - name: string -): TransactionInstruction { +export function createCreateUserInstruction(target: PublicKey, payer: PublicKey, programId: PublicKey, name: string): TransactionInstruction { const instructionObject = new Create({ instruction: MyInstruction.CreateUser, name, diff --git a/basics/close-account/native/ts/instructions/index.ts b/basics/close-account/native/ts/instructions/index.ts index e7a8bf230..630b8a387 100644 --- a/basics/close-account/native/ts/instructions/index.ts +++ b/basics/close-account/native/ts/instructions/index.ts @@ -2,6 +2,6 @@ export * from './create'; export * from './close'; export enum MyInstruction { - CreateUser, - CloseUser, -} \ No newline at end of file + CreateUser = 0, + CloseUser = 1, +} diff --git a/basics/close-account/native/ts/state/index.ts b/basics/close-account/native/ts/state/index.ts index d8c67fddf..4dad1be41 100644 --- a/basics/close-account/native/ts/state/index.ts +++ b/basics/close-account/native/ts/state/index.ts @@ -1,35 +1,34 @@ -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - +import { Buffer } from 'node:buffer'; +import * as borsh from 'borsh'; export class User { + name: string; + constructor(props: { name: string; + }) { + this.name = props.name; + } - constructor(props: { - name: string, - }) { - this.name = props.name; - } + toBase58() { + return borsh.serialize(UserSchema, this).toString(); + } - toBase58() { - return borsh.serialize(UserSchema, this).toString() - }; + toBuffer() { + return Buffer.from(borsh.serialize(UserSchema, this)); + } - toBuffer() { - return Buffer.from(borsh.serialize(UserSchema, this)) - }; - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(UserSchema, User, buffer); - }; -}; + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(UserSchema, User, buffer); + } +} export const UserSchema = new Map([ - [ User, { - kind: 'struct', - fields: [ - ['name', 'string'], - ], - }] -]); \ No newline at end of file + [ + User, + { + kind: 'struct', + fields: [['name', 'string']], + }, + ], +]); diff --git a/basics/counter/anchor/migrations/deploy.ts b/basics/counter/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/basics/counter/anchor/migrations/deploy.ts +++ b/basics/counter/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/basics/counter/anchor/tests/counter_anchor.ts b/basics/counter/anchor/tests/counter_anchor.ts index b706d8f08..85901abb4 100644 --- a/basics/counter/anchor/tests/counter_anchor.ts +++ b/basics/counter/anchor/tests/counter_anchor.ts @@ -1,21 +1,21 @@ -import * as anchor from "@coral-xyz/anchor" -import { Program } from "@coral-xyz/anchor" -import { Keypair } from "@solana/web3.js" -import { assert } from "chai" -import { CounterAnchor } from "../target/types/counter_anchor" +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { Keypair } from '@solana/web3.js'; +import { assert } from 'chai'; +import type { CounterAnchor } from '../target/types/counter_anchor'; -describe("counter_anchor", () => { +describe('counter_anchor', () => { // Configure the client to use the local cluster. - const provider = anchor.AnchorProvider.env() - anchor.setProvider(provider) - const payer = provider.wallet as anchor.Wallet + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + const payer = provider.wallet as anchor.Wallet; - const program = anchor.workspace.CounterAnchor as Program + const program = anchor.workspace.CounterAnchor as Program; // Generate a new keypair for the counter account - const counterKeypair = new Keypair() + const counterKeypair = new Keypair(); - it("Initialize Counter", async () => { + it('Initialize Counter', async () => { await program.methods .initializeCounter() .accounts({ @@ -23,41 +23,26 @@ describe("counter_anchor", () => { payer: payer.publicKey, }) .signers([counterKeypair]) - .rpc() + .rpc(); - const currentCount = await program.account.counter.fetch( - counterKeypair.publicKey - ) + const currentCount = await program.account.counter.fetch(counterKeypair.publicKey); - assert( - currentCount.count.toNumber() === 0, - "Expected initialized count to be 0" - ) - }) + assert(currentCount.count.toNumber() === 0, 'Expected initialized count to be 0'); + }); - it("Increment Counter", async () => { - await program.methods - .increment() - .accounts({ counter: counterKeypair.publicKey }) - .rpc() + it('Increment Counter', async () => { + await program.methods.increment().accounts({ counter: counterKeypair.publicKey }).rpc(); - const currentCount = await program.account.counter.fetch( - counterKeypair.publicKey - ) + const currentCount = await program.account.counter.fetch(counterKeypair.publicKey); - assert(currentCount.count.toNumber() === 1, "Expected count to be 1") - }) + assert(currentCount.count.toNumber() === 1, 'Expected count to be 1'); + }); - it("Increment Counter Again", async () => { - await program.methods - .increment() - .accounts({ counter: counterKeypair.publicKey }) - .rpc() + it('Increment Counter Again', async () => { + await program.methods.increment().accounts({ counter: counterKeypair.publicKey }).rpc(); - const currentCount = await program.account.counter.fetch( - counterKeypair.publicKey - ) + const currentCount = await program.account.counter.fetch(counterKeypair.publicKey); - assert(currentCount.count.toNumber() === 2, "Expected count to be 2") - }) -}) + assert(currentCount.count.toNumber() === 2, 'Expected count to be 2'); + }); +}); diff --git a/basics/counter/mpl-stack/.solitarc.js b/basics/counter/mpl-stack/.solitarc.js index 4e9970bff..74dc762c5 100644 --- a/basics/counter/mpl-stack/.solitarc.js +++ b/basics/counter/mpl-stack/.solitarc.js @@ -1,16 +1,16 @@ // @ts-check -const path = require('path'); +const path = require('node:path'); const programDir = path.join(__dirname); const idlDir = path.join(__dirname, 'idl'); const sdkDir = path.join(__dirname, 'ts', 'generated'); const binaryInstallDir = path.join(__dirname, 'target', 'solita'); module.exports = { - idlGenerator: 'shank', - programName: 'counter_mpl_stack', - programId: 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS', - idlDir, - sdkDir, - binaryInstallDir, - programDir, -}; \ No newline at end of file + idlGenerator: 'shank', + programName: 'counter_mpl_stack', + programId: 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS', + idlDir, + sdkDir, + binaryInstallDir, + programDir, +}; diff --git a/basics/counter/mpl-stack/idl/counter_mpl_stack.json b/basics/counter/mpl-stack/idl/counter_mpl_stack.json index d18d8f646..3369f316c 100644 --- a/basics/counter/mpl-stack/idl/counter_mpl_stack.json +++ b/basics/counter/mpl-stack/idl/counter_mpl_stack.json @@ -39,4 +39,4 @@ "binaryVersion": "0.0.8", "libVersion": "0.0.8" } -} \ No newline at end of file +} diff --git a/basics/counter/mpl-stack/idl/counter_solana_native.json b/basics/counter/mpl-stack/idl/counter_solana_native.json index 478bde4a3..97b709b96 100644 --- a/basics/counter/mpl-stack/idl/counter_solana_native.json +++ b/basics/counter/mpl-stack/idl/counter_solana_native.json @@ -30,4 +30,4 @@ "origin": "shank", "address": "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS" } -} \ No newline at end of file +} diff --git a/basics/counter/mpl-stack/jest.config.js b/basics/counter/mpl-stack/jest.config.js index 4d51b2a32..3943c3dbb 100644 --- a/basics/counter/mpl-stack/jest.config.js +++ b/basics/counter/mpl-stack/jest.config.js @@ -1,6 +1,6 @@ module.exports = { - preset: 'ts-jest/presets/default', - testEnvironment: 'node', - testTimeout: 100000, - resolver: "ts-jest-resolver", -}; \ No newline at end of file + preset: 'ts-jest/presets/default', + testEnvironment: 'node', + testTimeout: 100000, + resolver: 'ts-jest-resolver', +}; diff --git a/basics/counter/mpl-stack/tests/counter.test.ts b/basics/counter/mpl-stack/tests/counter.test.ts index e1afed24a..16e283c14 100644 --- a/basics/counter/mpl-stack/tests/counter.test.ts +++ b/basics/counter/mpl-stack/tests/counter.test.ts @@ -1,119 +1,105 @@ +import type { bignum } from '@metaplex-foundation/beet'; import { - Connection, - Keypair, - LAMPORTS_PER_SOL, - Transaction, - TransactionInstruction, - sendAndConfirmTransaction, - SystemProgram + Connection, + Keypair, + LAMPORTS_PER_SOL, + SystemProgram, + Transaction, + type TransactionInstruction, + sendAndConfirmTransaction, } from '@solana/web3.js'; -import { - bignum -} from '@metaplex-foundation/beet'; -import { assert } from 'chai'; import { BN } from 'bn.js'; +import { assert } from 'chai'; -import { - createIncrementInstruction, - Counter, - PROGRAM_ID, -} from '../ts'; +import { Counter, PROGRAM_ID, createIncrementInstruction } from '../ts'; function convertBignumToNumber(bignum: bignum): number { - return new BN(bignum).toNumber(); + return new BN(bignum).toNumber(); } -describe("Counter Solana Native", () => { - const connection = new Connection("http://localhost:8899"); - - it("Test allocate counter + increment tx", async () => { - // Randomly generate our wallet - const payerKeypair = Keypair.generate(); - const payer = payerKeypair.publicKey; - - // Randomly generate the account key - // to sign for setting up the Counter state - const counterKeypair = Keypair.generate(); - const counter = counterKeypair.publicKey; - - // Airdrop our wallet 1 Sol - await connection.requestAirdrop(payer, LAMPORTS_PER_SOL); - - // Create a TransactionInstruction to interact with our counter program - const allocIx: TransactionInstruction = SystemProgram.createAccount({ - fromPubkey: payer, - newAccountPubkey: counter, - lamports: await connection.getMinimumBalanceForRentExemption(Counter.byteSize), - space: Counter.byteSize, - programId: PROGRAM_ID - }) - const incrementIx: TransactionInstruction = createIncrementInstruction({ counter }); - let tx = new Transaction().add(allocIx).add(incrementIx); - - // Explicitly set the feePayer to be our wallet (this is set to first signer by default) - tx.feePayer = payer; - - // Fetch a "timestamp" so validators know this is a recent transaction - tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash; - - // Send transaction to network (local network) - await sendAndConfirmTransaction( - connection, - tx, - [payerKeypair, counterKeypair], - { skipPreflight: true, commitment: 'confirmed' } - ); - - // Get the counter account info from network - let count = (await Counter.fromAccountAddress(connection, counter)).count; - assert((new BN(count)).toNumber() === 1, "Expected count to have been 1"); - console.log(`[alloc+increment] count is: ${count}`); +describe('Counter Solana Native', () => { + const connection = new Connection('http://localhost:8899'); + + it('Test allocate counter + increment tx', async () => { + // Randomly generate our wallet + const payerKeypair = Keypair.generate(); + const payer = payerKeypair.publicKey; + + // Randomly generate the account key + // to sign for setting up the Counter state + const counterKeypair = Keypair.generate(); + const counter = counterKeypair.publicKey; + + // Airdrop our wallet 1 Sol + await connection.requestAirdrop(payer, LAMPORTS_PER_SOL); + + // Create a TransactionInstruction to interact with our counter program + const allocIx: TransactionInstruction = SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: counter, + lamports: await connection.getMinimumBalanceForRentExemption(Counter.byteSize), + space: Counter.byteSize, + programId: PROGRAM_ID, + }); + const incrementIx: TransactionInstruction = createIncrementInstruction({ + counter, }); - it("Test allocate tx and increment tx", async () => { - const payerKeypair = Keypair.generate(); - const payer = payerKeypair.publicKey; - - const counterKeypair = Keypair.generate(); - const counter = counterKeypair.publicKey; - - await connection.requestAirdrop(payer, LAMPORTS_PER_SOL); - - // Check allocate tx - const allocIx: TransactionInstruction = SystemProgram.createAccount({ - fromPubkey: payer, - newAccountPubkey: counter, - lamports: await connection.getMinimumBalanceForRentExemption(Counter.byteSize), - space: Counter.byteSize, - programId: PROGRAM_ID - }) - let tx = new Transaction().add(allocIx); - tx.feePayer = payer; - tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash; - await sendAndConfirmTransaction( - connection, - tx, - [payerKeypair, counterKeypair], - { skipPreflight: true, commitment: 'confirmed' } - ); - - let count = (await Counter.fromAccountAddress(connection, counter)).count; - assert(convertBignumToNumber(count) === 0, "Expected count to have been 0"); - console.log(`[allocate] count is: ${count}`); - - // Check increment tx - const incrementIx: TransactionInstruction = createIncrementInstruction({ counter }); - tx = new Transaction().add(incrementIx); - tx.feePayer = payer; - tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash; - await sendAndConfirmTransaction( - connection, - tx, - [payerKeypair], - { skipPreflight: true, commitment: 'confirmed' } - ); - - count = (await Counter.fromAccountAddress(connection, counter)).count; - assert(convertBignumToNumber(count) === 1, "Expected count to have been 1"); - console.log(`[increment] count is: ${count}`); - }) -}) \ No newline at end of file + const tx = new Transaction().add(allocIx).add(incrementIx); + + // Explicitly set the feePayer to be our wallet (this is set to first signer by default) + tx.feePayer = payer; + + // Fetch a "timestamp" so validators know this is a recent transaction + tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash; + + // Send transaction to network (local network) + await sendAndConfirmTransaction(connection, tx, [payerKeypair, counterKeypair], { skipPreflight: true, commitment: 'confirmed' }); + + // Get the counter account info from network + const count = (await Counter.fromAccountAddress(connection, counter)).count; + assert(new BN(count).toNumber() === 1, 'Expected count to have been 1'); + console.log(`[alloc+increment] count is: ${count}`); + }); + it('Test allocate tx and increment tx', async () => { + const payerKeypair = Keypair.generate(); + const payer = payerKeypair.publicKey; + + const counterKeypair = Keypair.generate(); + const counter = counterKeypair.publicKey; + + await connection.requestAirdrop(payer, LAMPORTS_PER_SOL); + + // Check allocate tx + const allocIx: TransactionInstruction = SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: counter, + lamports: await connection.getMinimumBalanceForRentExemption(Counter.byteSize), + space: Counter.byteSize, + programId: PROGRAM_ID, + }); + let tx = new Transaction().add(allocIx); + tx.feePayer = payer; + tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash; + await sendAndConfirmTransaction(connection, tx, [payerKeypair, counterKeypair], { skipPreflight: true, commitment: 'confirmed' }); + + let count = (await Counter.fromAccountAddress(connection, counter)).count; + assert(convertBignumToNumber(count) === 0, 'Expected count to have been 0'); + console.log(`[allocate] count is: ${count}`); + + // Check increment tx + const incrementIx: TransactionInstruction = createIncrementInstruction({ + counter, + }); + tx = new Transaction().add(incrementIx); + tx.feePayer = payer; + tx.recentBlockhash = (await connection.getLatestBlockhash('confirmed')).blockhash; + await sendAndConfirmTransaction(connection, tx, [payerKeypair], { + skipPreflight: true, + commitment: 'confirmed', + }); + + count = (await Counter.fromAccountAddress(connection, counter)).count; + assert(convertBignumToNumber(count) === 1, 'Expected count to have been 1'); + console.log(`[increment] count is: ${count}`); + }); +}); diff --git a/basics/counter/mpl-stack/ts/generated/accounts/Counter.ts b/basics/counter/mpl-stack/ts/generated/accounts/Counter.ts index 3ae2bea18..8595a99e1 100644 --- a/basics/counter/mpl-stack/ts/generated/accounts/Counter.ts +++ b/basics/counter/mpl-stack/ts/generated/accounts/Counter.ts @@ -5,9 +5,9 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' -import * as web3 from '@solana/web3.js' -import * as beetSolana from '@metaplex-foundation/beet-solana' +import * as beet from '@metaplex-foundation/beet'; +import * as beetSolana from '@metaplex-foundation/beet-solana'; +import * as web3 from '@solana/web3.js'; /** * Arguments used to create {@link Counter} @@ -15,8 +15,8 @@ import * as beetSolana from '@metaplex-foundation/beet-solana' * @category generated */ export type CounterArgs = { - count: beet.bignum -} + count: beet.bignum; +}; /** * Holds the data for the {@link Counter} Account and provides de/serialization * functionality for that data @@ -25,24 +25,21 @@ export type CounterArgs = { * @category generated */ export class Counter implements CounterArgs { - private constructor(readonly count: beet.bignum) { } + private constructor(readonly count: beet.bignum) {} /** * Creates a {@link Counter} instance from the provided args. */ static fromArgs(args: CounterArgs) { - return new Counter(args.count) + return new Counter(args.count); } /** * Deserializes the {@link Counter} from the data of the provided {@link web3.AccountInfo}. * @returns a tuple of the account data and the offset up to which the buffer was read to obtain it. */ - static fromAccountInfo( - accountInfo: web3.AccountInfo, - offset = 0 - ): [Counter, number] { - return Counter.deserialize(accountInfo.data, offset) + static fromAccountInfo(accountInfo: web3.AccountInfo, offset = 0): [Counter, number] { + return Counter.deserialize(accountInfo.data, offset); } /** @@ -51,15 +48,14 @@ export class Counter implements CounterArgs { * * @throws Error if no account info is found at the address or if deserialization fails */ - static async fromAccountAddress( - connection: web3.Connection, - address: web3.PublicKey - ): Promise { - const accountInfo = await connection.getAccountInfo(address, { commitment: "confirmed" }); + static async fromAccountAddress(connection: web3.Connection, address: web3.PublicKey): Promise { + const accountInfo = await connection.getAccountInfo(address, { + commitment: 'confirmed', + }); if (accountInfo == null) { - throw new Error(`Unable to find Counter account at ${address}`) + throw new Error(`Unable to find Counter account at ${address}`); } - return Counter.fromAccountInfo(accountInfo, 0)[0] + return Counter.fromAccountInfo(accountInfo, 0)[0]; } /** @@ -68,12 +64,8 @@ export class Counter implements CounterArgs { * * @param programId - the program that owns the accounts we are filtering */ - static gpaBuilder( - programId: web3.PublicKey = new web3.PublicKey( - 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS' - ) - ) { - return beetSolana.GpaBuilder.fromStruct(programId, counterBeet) + static gpaBuilder(programId: web3.PublicKey = new web3.PublicKey('Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS')) { + return beetSolana.GpaBuilder.fromStruct(programId, counterBeet); } /** @@ -81,7 +73,7 @@ export class Counter implements CounterArgs { * @returns a tuple of the account data and the offset up to which the buffer was read to obtain it. */ static deserialize(buf: Buffer, offset = 0): [Counter, number] { - return counterBeet.deserialize(buf, offset) + return counterBeet.deserialize(buf, offset); } /** @@ -89,7 +81,7 @@ export class Counter implements CounterArgs { * @returns a tuple of the created Buffer and the offset up to which the buffer was written to store it. */ serialize(): [Buffer, number] { - return counterBeet.serialize(this) + return counterBeet.serialize(this); } /** @@ -97,7 +89,7 @@ export class Counter implements CounterArgs { * {@link Counter} */ static get byteSize() { - return counterBeet.byteSize + return counterBeet.byteSize; } /** @@ -106,14 +98,8 @@ export class Counter implements CounterArgs { * * @param connection used to retrieve the rent exemption information */ - static async getMinimumBalanceForRentExemption( - connection: web3.Connection, - commitment?: web3.Commitment - ): Promise { - return connection.getMinimumBalanceForRentExemption( - Counter.byteSize, - commitment - ) + static async getMinimumBalanceForRentExemption(connection: web3.Connection, commitment?: web3.Commitment): Promise { + return connection.getMinimumBalanceForRentExemption(Counter.byteSize, commitment); } /** @@ -121,7 +107,7 @@ export class Counter implements CounterArgs { * hold {@link Counter} data. */ static hasCorrectByteSize(buf: Buffer, offset = 0) { - return buf.byteLength - offset === Counter.byteSize + return buf.byteLength - offset === Counter.byteSize; } /** @@ -131,17 +117,17 @@ export class Counter implements CounterArgs { pretty() { return { count: (() => { - const x = <{ toNumber: () => number }>this.count + const x = <{ toNumber: () => number }>this.count; if (typeof x.toNumber === 'function') { try { - return x.toNumber() + return x.toNumber(); } catch (_) { - return x + return x; } } - return x + return x; })(), - } + }; } } @@ -149,8 +135,4 @@ export class Counter implements CounterArgs { * @category Accounts * @category generated */ -export const counterBeet = new beet.BeetStruct( - [['count', beet.u64]], - Counter.fromArgs, - 'Counter' -) +export const counterBeet = new beet.BeetStruct([['count', beet.u64]], Counter.fromArgs, 'Counter'); diff --git a/basics/counter/mpl-stack/ts/generated/accounts/index.ts b/basics/counter/mpl-stack/ts/generated/accounts/index.ts index 302ea1028..cea7bf897 100644 --- a/basics/counter/mpl-stack/ts/generated/accounts/index.ts +++ b/basics/counter/mpl-stack/ts/generated/accounts/index.ts @@ -1,5 +1,5 @@ -export * from './Counter' +export * from './Counter'; -import { Counter } from './Counter' +import { Counter } from './Counter'; -export const accountProviders = { Counter } +export const accountProviders = { Counter }; diff --git a/basics/counter/mpl-stack/ts/generated/index.ts b/basics/counter/mpl-stack/ts/generated/index.ts index d0c93cd6b..984f80fa3 100644 --- a/basics/counter/mpl-stack/ts/generated/index.ts +++ b/basics/counter/mpl-stack/ts/generated/index.ts @@ -1,6 +1,6 @@ -import { PublicKey } from '@solana/web3.js' -export * from './accounts' -export * from './instructions' +import { PublicKey } from '@solana/web3.js'; +export * from './accounts'; +export * from './instructions'; /** * Program address @@ -8,7 +8,7 @@ export * from './instructions' * @category constants * @category generated */ -export const PROGRAM_ADDRESS = 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS' +export const PROGRAM_ADDRESS = 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS'; /** * Program public key @@ -16,4 +16,4 @@ export const PROGRAM_ADDRESS = 'Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS' * @category constants * @category generated */ -export const PROGRAM_ID = new PublicKey(PROGRAM_ADDRESS) +export const PROGRAM_ID = new PublicKey(PROGRAM_ADDRESS); diff --git a/basics/counter/mpl-stack/ts/generated/instructions/Increment.ts b/basics/counter/mpl-stack/ts/generated/instructions/Increment.ts index 644fc7e84..9f9e542fa 100644 --- a/basics/counter/mpl-stack/ts/generated/instructions/Increment.ts +++ b/basics/counter/mpl-stack/ts/generated/instructions/Increment.ts @@ -5,8 +5,8 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' -import * as web3 from '@solana/web3.js' +import * as beet from '@metaplex-foundation/beet'; +import * as web3 from '@solana/web3.js'; /** * @category Instructions @@ -14,8 +14,8 @@ import * as web3 from '@solana/web3.js' * @category generated */ export const IncrementStruct = new beet.BeetArgsStruct<{ - instructionDiscriminator: number -}>([['instructionDiscriminator', beet.u8]], 'IncrementInstructionArgs') + instructionDiscriminator: number; +}>([['instructionDiscriminator', beet.u8]], 'IncrementInstructionArgs'); /** * Accounts required by the _Increment_ instruction * @@ -25,10 +25,10 @@ export const IncrementStruct = new beet.BeetArgsStruct<{ * @category generated */ export type IncrementInstructionAccounts = { - counter: web3.PublicKey -} + counter: web3.PublicKey; +}; -export const incrementInstructionDiscriminator = 0 +export const incrementInstructionDiscriminator = 0; /** * Creates a _Increment_ instruction. @@ -40,23 +40,23 @@ export const incrementInstructionDiscriminator = 0 */ export function createIncrementInstruction( accounts: IncrementInstructionAccounts, - programId = new web3.PublicKey('Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS') + programId = new web3.PublicKey('Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS'), ) { const [data] = IncrementStruct.serialize({ instructionDiscriminator: incrementInstructionDiscriminator, - }) + }); const keys: web3.AccountMeta[] = [ { pubkey: accounts.counter, isWritable: true, isSigner: false, }, - ] + ]; const ix = new web3.TransactionInstruction({ programId, keys, data, - }) - return ix + }); + return ix; } diff --git a/basics/counter/mpl-stack/ts/generated/instructions/index.ts b/basics/counter/mpl-stack/ts/generated/instructions/index.ts index c15f12dbd..b9941ec47 100644 --- a/basics/counter/mpl-stack/ts/generated/instructions/index.ts +++ b/basics/counter/mpl-stack/ts/generated/instructions/index.ts @@ -1 +1 @@ -export * from './Increment' +export * from './Increment'; diff --git a/basics/counter/mpl-stack/ts/index.ts b/basics/counter/mpl-stack/ts/index.ts index 96ef8122e..69e4e4eb8 100644 --- a/basics/counter/mpl-stack/ts/index.ts +++ b/basics/counter/mpl-stack/ts/index.ts @@ -1 +1 @@ -export * from './generated'; \ No newline at end of file +export * from './generated'; diff --git a/basics/counter/native/tests/counter.test.ts b/basics/counter/native/tests/counter.test.ts index e28e8c8f9..4f27cfb5e 100644 --- a/basics/counter/native/tests/counter.test.ts +++ b/basics/counter/native/tests/counter.test.ts @@ -1,23 +1,12 @@ -import { - Keypair, - PublicKey, - SystemProgram, - Transaction, - TransactionInstruction -} from '@solana/web3.js'; -import { assert } from 'chai'; import { describe, test } from 'node:test'; -import { start } from 'solana-bankrun'; -import { - COUNTER_ACCOUNT_SIZE, - createIncrementInstruction, - deserializeCounterAccount, - PROGRAM_ID -} from '../ts'; +import { Keypair, PublicKey, SystemProgram, Transaction, type TransactionInstruction } from '@solana/web3.js'; +import { assert } from 'chai'; +import { start } from 'solana-bankrun'; +import { COUNTER_ACCOUNT_SIZE, PROGRAM_ID, createIncrementInstruction, deserializeCounterAccount } from '../ts'; describe('Counter Solana Native', async () => { // Randomly generate the program keypair and load the program to solana-bankrun - const context = await start([{ name: 'counter_solana_native', programId: PROGRAM_ID }],[]); + const context = await start([{ name: 'counter_solana_native', programId: PROGRAM_ID }], []); const client = context.banksClient; // Get the payer keypair from the context, this will be used to sign transactions with enough lamports const payer = context.payer; @@ -38,8 +27,8 @@ describe('Counter Solana Native', async () => { space: COUNTER_ACCOUNT_SIZE, programId: PROGRAM_ID, }); - const incrementIx: TransactionInstruction = createIncrementInstruction({ counter },{}); - let tx = new Transaction().add(allocIx).add(incrementIx); + const incrementIx: TransactionInstruction = createIncrementInstruction({ counter }, {}); + const tx = new Transaction().add(allocIx).add(incrementIx); // Explicitly set the feePayer to be our wallet (this is set to first signer by default) tx.feePayer = payer.publicKey; @@ -60,7 +49,7 @@ describe('Counter Solana Native', async () => { // Deserialize the counter & check count has been incremented const counterAccount = deserializeCounterAccount(Buffer.from(counterAccountInfo.data)); - assert(counterAccount.count.toNumber() === 1,'Expected count to have been 1'); + assert(counterAccount.count.toNumber() === 1, 'Expected count to have been 1'); console.log(`[alloc+increment] count is: ${counterAccount.count.toNumber()}`); }); @@ -72,7 +61,7 @@ describe('Counter Solana Native', async () => { const allocIx: TransactionInstruction = SystemProgram.createAccount({ fromPubkey: payer.publicKey, newAccountPubkey: counter, - lamports:Number(rent.minimumBalance(BigInt(COUNTER_ACCOUNT_SIZE))), + lamports: Number(rent.minimumBalance(BigInt(COUNTER_ACCOUNT_SIZE))), space: COUNTER_ACCOUNT_SIZE, programId: PROGRAM_ID, }); @@ -88,11 +77,11 @@ describe('Counter Solana Native', async () => { assert(counterAccountInfo, 'Expected counter account to have been created'); let counterAccount = deserializeCounterAccount(Buffer.from(counterAccountInfo.data)); - assert(counterAccount.count.toNumber() === 0,'Expected count to have been 0'); + assert(counterAccount.count.toNumber() === 0, 'Expected count to have been 0'); console.log(`[allocate] count is: ${counterAccount.count.toNumber()}`); // Check increment tx - const incrementIx: TransactionInstruction = createIncrementInstruction({ counter },{}); + const incrementIx: TransactionInstruction = createIncrementInstruction({ counter }, {}); tx = new Transaction().add(incrementIx); tx.feePayer = payer.publicKey; tx.recentBlockhash = blockhash; @@ -104,7 +93,7 @@ describe('Counter Solana Native', async () => { assert(counterAccountInfo, 'Expected counter account to have been created'); counterAccount = deserializeCounterAccount(Buffer.from(counterAccountInfo.data)); - assert(counterAccount.count.toNumber() === 1,'Expected count to have been 1'); + assert(counterAccount.count.toNumber() === 1, 'Expected count to have been 1'); console.log(`[increment] count is: ${counterAccount.count.toNumber()}`); }); }); diff --git a/basics/counter/native/ts/accounts/counter.ts b/basics/counter/native/ts/accounts/counter.ts index a0da0f2b0..04b7f4844 100644 --- a/basics/counter/native/ts/accounts/counter.ts +++ b/basics/counter/native/ts/accounts/counter.ts @@ -1,17 +1,17 @@ import BN from 'bn.js'; export type Counter = { - count: BN -} + count: BN; +}; export const COUNTER_ACCOUNT_SIZE = 8; export function deserializeCounterAccount(data: Buffer): Counter { - if (data.byteLength !== 8) { - throw Error("Need exactly 8 bytes to deserialize counter") - } + if (data.byteLength !== 8) { + throw Error('Need exactly 8 bytes to deserialize counter'); + } - return { - count: new BN(data, 'le') - } + return { + count: new BN(data, 'le'), + }; } diff --git a/basics/counter/native/ts/accounts/index.ts b/basics/counter/native/ts/accounts/index.ts index ff26daca0..0ab63758b 100644 --- a/basics/counter/native/ts/accounts/index.ts +++ b/basics/counter/native/ts/accounts/index.ts @@ -1 +1 @@ -export * from './counter'; \ No newline at end of file +export * from './counter'; diff --git a/basics/counter/native/ts/index.ts b/basics/counter/native/ts/index.ts index 6db9b6846..49c999a6d 100644 --- a/basics/counter/native/ts/index.ts +++ b/basics/counter/native/ts/index.ts @@ -2,4 +2,4 @@ import { PublicKey } from '@solana/web3.js'; export * from './instructions'; export * from './accounts'; -export const PROGRAM_ID = new PublicKey("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"); \ No newline at end of file +export const PROGRAM_ID = new PublicKey('Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS'); diff --git a/basics/counter/native/ts/instructions/createIncrementInstruction.ts b/basics/counter/native/ts/instructions/createIncrementInstruction.ts index 024f8c036..05d436144 100644 --- a/basics/counter/native/ts/instructions/createIncrementInstruction.ts +++ b/basics/counter/native/ts/instructions/createIncrementInstruction.ts @@ -1,25 +1,21 @@ -import { PublicKey, TransactionInstruction } from '@solana/web3.js'; +import { type PublicKey, TransactionInstruction } from '@solana/web3.js'; import { PROGRAM_ID } from '../'; export type IncrementInstructionAccounts = { - counter: PublicKey, -} -export type IncrementInstructionArgs = { -} + counter: PublicKey; +}; +export type IncrementInstructionArgs = {}; -export function createIncrementInstruction( - accounts: IncrementInstructionAccounts, - args: IncrementInstructionArgs -): TransactionInstruction { - return new TransactionInstruction({ - programId: PROGRAM_ID, - keys: [ - { - pubkey: accounts.counter, - isSigner: false, - isWritable: true - } - ], - data: Buffer.from([0x0]) - }) -} \ No newline at end of file +export function createIncrementInstruction(accounts: IncrementInstructionAccounts, args: IncrementInstructionArgs): TransactionInstruction { + return new TransactionInstruction({ + programId: PROGRAM_ID, + keys: [ + { + pubkey: accounts.counter, + isSigner: false, + isWritable: true, + }, + ], + data: Buffer.from([0x0]), + }); +} diff --git a/basics/counter/native/ts/instructions/index.ts b/basics/counter/native/ts/instructions/index.ts index 749ba1656..a0249a40c 100644 --- a/basics/counter/native/ts/instructions/index.ts +++ b/basics/counter/native/ts/instructions/index.ts @@ -1 +1 @@ -export * from './createIncrementInstruction'; \ No newline at end of file +export * from './createIncrementInstruction'; diff --git a/basics/counter/seahorse/migrations/deploy.ts b/basics/counter/seahorse/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/basics/counter/seahorse/migrations/deploy.ts +++ b/basics/counter/seahorse/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/basics/counter/seahorse/tests/counter_seahorse.ts b/basics/counter/seahorse/tests/counter_seahorse.ts index 7d9c5a159..f0ee9574a 100644 --- a/basics/counter/seahorse/tests/counter_seahorse.ts +++ b/basics/counter/seahorse/tests/counter_seahorse.ts @@ -1,21 +1,18 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { Keypair, PublicKey, SystemProgram } from "@solana/web3.js"; -import { assert } from "chai"; -import { CounterSeahorse } from "../target/types/counter_seahorse"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { Keypair, PublicKey, SystemProgram } from '@solana/web3.js'; +import { assert } from 'chai'; +import type { CounterSeahorse } from '../target/types/counter_seahorse'; -describe("counter_seahorse", () => { +describe('counter_seahorse', () => { // Configure the client to use the local cluster. anchor.setProvider(anchor.AnchorProvider.env()); const program = anchor.workspace.CounterSeahorse as Program; - it("Increment counter", async () => { + it('Increment counter', async () => { const seed = 69; - const counter = PublicKey.findProgramAddressSync( - [Buffer.from([0x45])], - program.programId - )[0]; + const counter = PublicKey.findProgramAddressSync([Buffer.from([0x45])], program.programId)[0]; // Initialize counter await program.methods @@ -33,9 +30,7 @@ describe("counter_seahorse", () => { }) .rpc(); - const count = ( - await program.account.counter.fetch(counter) - ).count.toNumber(); - assert(count === 1, "Expected count to be 1"); + const count = (await program.account.counter.fetch(counter)).count.toNumber(); + assert(count === 1, 'Expected count to be 1'); }); }); diff --git a/basics/create-account/anchor/tests/test.ts b/basics/create-account/anchor/tests/test.ts index aff495ad2..6bc9800a9 100644 --- a/basics/create-account/anchor/tests/test.ts +++ b/basics/create-account/anchor/tests/test.ts @@ -1,19 +1,18 @@ -import * as anchor from "@coral-xyz/anchor" -import { CreateSystemAccount } from "../target/types/create_system_account" -import { Keypair, SystemProgram } from "@solana/web3.js" -import { assert } from "chai" +import * as anchor from '@coral-xyz/anchor'; +import { Keypair, SystemProgram } from '@solana/web3.js'; +import { assert } from 'chai'; +import type { CreateSystemAccount } from '../target/types/create_system_account'; -describe("Create a system account", () => { - const provider = anchor.AnchorProvider.env() - anchor.setProvider(provider) - const wallet = provider.wallet as anchor.Wallet - const connection = provider.connection - const program = anchor.workspace - .CreateSystemAccount as anchor.Program +describe('Create a system account', () => { + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + const wallet = provider.wallet as anchor.Wallet; + const connection = provider.connection; + const program = anchor.workspace.CreateSystemAccount as anchor.Program; - it("Create the account", async () => { + it('Create the account', async () => { // Generate a new keypair for the new account - const newKeypair = new Keypair() + const newKeypair = new Keypair(); await program.methods .createSystemAccount() @@ -22,14 +21,14 @@ describe("Create a system account", () => { newAccount: newKeypair.publicKey, }) .signers([newKeypair]) - .rpc() + .rpc(); // Minimum balance for rent exemption for new account - const lamports = await connection.getMinimumBalanceForRentExemption(0) + const lamports = await connection.getMinimumBalanceForRentExemption(0); // Check that the account was created - const accountInfo = await connection.getAccountInfo(newKeypair.publicKey) - assert((accountInfo.owner = SystemProgram.programId)) - assert(accountInfo.lamports === lamports) - }) -}) + const accountInfo = await connection.getAccountInfo(newKeypair.publicKey); + assert((accountInfo.owner = SystemProgram.programId)); + assert(accountInfo.lamports === lamports); + }); +}); diff --git a/basics/create-account/native/tests/test.ts b/basics/create-account/native/tests/test.ts index 52a3808a7..951aade69 100644 --- a/basics/create-account/native/tests/test.ts +++ b/basics/create-account/native/tests/test.ts @@ -1,17 +1,10 @@ -import { - Keypair, - LAMPORTS_PER_SOL, - PublicKey, - SystemProgram, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; -import { start } from 'solana-bankrun'; import { describe, test } from 'node:test'; +import { Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js'; +import { start } from 'solana-bankrun'; describe('Create a system account', async () => { const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'create_account_program', programId: PROGRAM_ID }],[]); + const context = await start([{ name: 'create_account_program', programId: PROGRAM_ID }], []); const client = context.banksClient; const payer = context.payer; @@ -19,7 +12,7 @@ describe('Create a system account', async () => { const newKeypair = Keypair.generate(); const blockhash = context.lastBlockhash; - let ix = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, { pubkey: newKeypair.publicKey, isSigner: true, isWritable: true }, diff --git a/basics/cross-program-invocation/anchor/migrations/deploy.ts b/basics/cross-program-invocation/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/basics/cross-program-invocation/anchor/migrations/deploy.ts +++ b/basics/cross-program-invocation/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/basics/cross-program-invocation/anchor/tests/cpi.ts b/basics/cross-program-invocation/anchor/tests/cpi.ts index 7547215cb..fc7e7088e 100644 --- a/basics/cross-program-invocation/anchor/tests/cpi.ts +++ b/basics/cross-program-invocation/anchor/tests/cpi.ts @@ -1,9 +1,9 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { Hand } from "../target/types/hand"; -import { Lever } from "../target/types/lever"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import type { Hand } from '../target/types/hand'; +import type { Lever } from '../target/types/lever'; -describe("cpi", () => { +describe('cpi', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); @@ -13,7 +13,7 @@ describe("cpi", () => { // Generate a new keypair for the power account const powerAccount = new anchor.web3.Keypair(); - it("Initialize the lever!", async () => { + it('Initialize the lever!', async () => { await lever.methods .initialize() .accounts({ @@ -24,18 +24,18 @@ describe("cpi", () => { .rpc(); }); - it("Pull the lever!", async () => { + it('Pull the lever!', async () => { await hand.methods - .pullLever("Chris") + .pullLever('Chris') .accounts({ power: powerAccount.publicKey, }) .rpc(); }); - it("Pull it again!", async () => { + it('Pull it again!', async () => { await hand.methods - .pullLever("Ashley") + .pullLever('Ashley') .accounts({ power: powerAccount.publicKey, }) diff --git a/basics/cross-program-invocation/native/tests/test.ts b/basics/cross-program-invocation/native/tests/test.ts index f5f10e14c..0c9ccaeaf 100644 --- a/basics/cross-program-invocation/native/tests/test.ts +++ b/basics/cross-program-invocation/native/tests/test.ts @@ -1,105 +1,78 @@ -import { - Connection, - Keypair, - sendAndConfirmTransaction, - SystemProgram, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; +import { Buffer } from 'node:buffer'; +import { Connection, Keypair, SystemProgram, Transaction, TransactionInstruction, sendAndConfirmTransaction } from '@solana/web3.js'; +import * as borsh from 'borsh'; function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8"))) - ) -}; + return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8')))); +} +describe('CPI Example', () => { + const connection = new Connection('http://localhost:8899', 'confirmed'); + const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`); + const hand = createKeypairFromFile('./target/so/hand-keypair.json'); + const lever = createKeypairFromFile('./target/so/lever-keypair.json'); -describe("CPI Example", () => { - - const connection = new Connection(`http://localhost:8899`, 'confirmed'); - const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json'); - const hand = createKeypairFromFile('./target/so/hand-keypair.json'); - const lever = createKeypairFromFile('./target/so/lever-keypair.json'); + class Assignable { + constructor(properties) { + Object.keys(properties).map((key) => { + return (this[key] = properties[key]); + }); + } + } - class Assignable { - constructor(properties) { - Object.keys(properties).map((key) => { - return (this[key] = properties[key]); - }); - }; - }; + class PowerStatus extends Assignable { + toBuffer() { + return Buffer.from(borsh.serialize(PowerStatusSchema, this)); + } + } + const PowerStatusSchema = new Map([[PowerStatus, { kind: 'struct', fields: [['is_on', 'u8']] }]]); - class PowerStatus extends Assignable { - toBuffer() { return Buffer.from(borsh.serialize(PowerStatusSchema, this)) } - }; - const PowerStatusSchema = new Map([[ PowerStatus, { kind: 'struct', fields: [ ['is_on', 'u8'] ]} ]]); - - class SetPowerStatus extends Assignable { - toBuffer() { return Buffer.from(borsh.serialize(SetPowerStatusSchema, this)) } - }; - const SetPowerStatusSchema = new Map([[ SetPowerStatus, { kind: 'struct', fields: [ ['name', 'string'] ]} ]]); - - const powerAccount = Keypair.generate(); - - it("Initialize the lever!", async () => { + class SetPowerStatus extends Assignable { + toBuffer() { + return Buffer.from(borsh.serialize(SetPowerStatusSchema, this)); + } + } + const SetPowerStatusSchema = new Map([[SetPowerStatus, { kind: 'struct', fields: [['name', 'string']] }]]); - let ix = new TransactionInstruction({ - keys: [ - {pubkey: powerAccount.publicKey, isSigner: true, isWritable: true}, - {pubkey: payer.publicKey, isSigner: true, isWritable: true}, - {pubkey: SystemProgram.programId, isSigner: false, isWritable: false} - ], - programId: lever.publicKey, - data: (new PowerStatus({is_on: true})).toBuffer(), - }); + const powerAccount = Keypair.generate(); - await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, powerAccount] - ); - + it('Initialize the lever!', async () => { + const ix = new TransactionInstruction({ + keys: [ + { pubkey: powerAccount.publicKey, isSigner: true, isWritable: true }, + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, + ], + programId: lever.publicKey, + data: new PowerStatus({ is_on: true }).toBuffer(), }); - - it("Pull the lever!", async () => { - let ix = new TransactionInstruction({ - keys: [ - {pubkey: powerAccount.publicKey, isSigner: false, isWritable: true}, - {pubkey: lever.publicKey, isSigner: false, isWritable: false}, - ], - programId: hand.publicKey, - data: new SetPowerStatus({name: "Chris"}).toBuffer(), - }); + await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, powerAccount]); + }); - await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer] - ); - + it('Pull the lever!', async () => { + const ix = new TransactionInstruction({ + keys: [ + { pubkey: powerAccount.publicKey, isSigner: false, isWritable: true }, + { pubkey: lever.publicKey, isSigner: false, isWritable: false }, + ], + programId: hand.publicKey, + data: new SetPowerStatus({ name: 'Chris' }).toBuffer(), }); - - it("Pull it again!", async () => { - - let ix = new TransactionInstruction({ - keys: [ - {pubkey: powerAccount.publicKey, isSigner: false, isWritable: true}, - {pubkey: lever.publicKey, isSigner: false, isWritable: false}, - ], - programId: hand.publicKey, - data: new SetPowerStatus({name: "Ashley"}).toBuffer(), - }); - await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer] - ); - + await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); + }); + + it('Pull it again!', async () => { + const ix = new TransactionInstruction({ + keys: [ + { pubkey: powerAccount.publicKey, isSigner: false, isWritable: true }, + { pubkey: lever.publicKey, isSigner: false, isWritable: false }, + ], + programId: hand.publicKey, + data: new SetPowerStatus({ name: 'Ashley' }).toBuffer(), }); + + await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); + }); }); - - \ No newline at end of file diff --git a/basics/hello-solana/anchor/tests/test.ts b/basics/hello-solana/anchor/tests/test.ts index 5ff886423..e422346ea 100644 --- a/basics/hello-solana/anchor/tests/test.ts +++ b/basics/hello-solana/anchor/tests/test.ts @@ -1,7 +1,7 @@ -import * as anchor from "@coral-xyz/anchor"; -import { HelloSolana } from "../target/types/hello_solana"; +import * as anchor from '@coral-xyz/anchor'; +import type { HelloSolana } from '../target/types/hello_solana'; -describe("hello-solana", () => { +describe('hello-solana', () => { // Configure the Anchor provider & load the program IDL // The IDL gives you a typescript module // @@ -9,7 +9,7 @@ describe("hello-solana", () => { anchor.setProvider(provider); const program = anchor.workspace.HelloSolana as anchor.Program; - it("Say hello!", async () => { + it('Say hello!', async () => { // Just run Anchor's IDL method to build a transaction! // await program.methods.hello().accounts({}).rpc(); diff --git a/basics/hello-solana/native/tests/test.ts b/basics/hello-solana/native/tests/test.ts index 0e61b19ef..ec7daa61e 100644 --- a/basics/hello-solana/native/tests/test.ts +++ b/basics/hello-solana/native/tests/test.ts @@ -1,23 +1,19 @@ -import { - PublicKey, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; -import { start } from 'solana-bankrun'; import { describe, test } from 'node:test'; -import { assert } from "chai"; +import { PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js'; +import { assert } from 'chai'; +import { start } from 'solana-bankrun'; describe('hello-solana', async () => { // load program in solana-bankrun const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'hello_solana_program', programId: PROGRAM_ID }],[]); + const context = await start([{ name: 'hello_solana_program', programId: PROGRAM_ID }], []); const client = context.banksClient; const payer = context.payer; test('Say hello!', async () => { const blockhash = context.lastBlockhash; // We set up our instruction first. - let ix = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }], programId: PROGRAM_ID, data: Buffer.alloc(0), // No data @@ -28,13 +24,13 @@ describe('hello-solana', async () => { tx.add(ix).sign(payer); // Now we process the transaction - let transaction = await client.processTransaction(tx); + const transaction = await client.processTransaction(tx); - assert(transaction.logMessages[0].startsWith("Program " + PROGRAM_ID)); - assert(transaction.logMessages[1] === "Program log: Hello, Solana!"); - assert(transaction.logMessages[2] === "Program log: Our program's Program ID: " + PROGRAM_ID); - assert(transaction.logMessages[3].startsWith("Program " + PROGRAM_ID + " consumed")); - assert(transaction.logMessages[4] === "Program " + PROGRAM_ID + " success"); - assert(transaction.logMessages.length == 5); -}); + assert(transaction.logMessages[0].startsWith(`Program ${PROGRAM_ID}`)); + assert(transaction.logMessages[1] === 'Program log: Hello, Solana!'); + assert(transaction.logMessages[2] === `Program log: Our program's Program ID: ${PROGRAM_ID}`); + assert(transaction.logMessages[3].startsWith(`Program ${PROGRAM_ID} consumed`)); + assert(transaction.logMessages[4] === `Program ${PROGRAM_ID} success`); + assert(transaction.logMessages.length === 5); + }); }); diff --git a/basics/hello-solana/seahorse/hello_solana/migrations/deploy.ts b/basics/hello-solana/seahorse/hello_solana/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/basics/hello-solana/seahorse/hello_solana/migrations/deploy.ts +++ b/basics/hello-solana/seahorse/hello_solana/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/basics/hello-solana/seahorse/hello_solana/tests/hello_solana.ts b/basics/hello-solana/seahorse/hello_solana/tests/hello_solana.ts index 4a1890b5d..b0f273827 100644 --- a/basics/hello-solana/seahorse/hello_solana/tests/hello_solana.ts +++ b/basics/hello-solana/seahorse/hello_solana/tests/hello_solana.ts @@ -1,14 +1,14 @@ -import * as anchor from "@coral-xyz/anchor"; -import { HelloSolana } from "../target/types/hello_solana"; +import * as anchor from '@coral-xyz/anchor'; +import type { HelloSolana } from '../target/types/hello_solana'; -describe("hello_solana", () => { +describe('hello_solana', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const program = anchor.workspace.HelloSolana as anchor.Program; const payer = provider.wallet as anchor.Wallet; - it("Say hello!", async () => { + it('Say hello!', async () => { // Just run Anchor's IDL method to build a transaction // and sign it via a signer. await program.methods diff --git a/basics/pda-rent-payer/anchor/tests/test.ts b/basics/pda-rent-payer/anchor/tests/test.ts index 28c373eb2..8aa73e72a 100644 --- a/basics/pda-rent-payer/anchor/tests/test.ts +++ b/basics/pda-rent-payer/anchor/tests/test.ts @@ -1,24 +1,21 @@ -import * as anchor from "@coral-xyz/anchor" -import { PdaRentPayer } from "../target/types/pda_rent_payer" -import { LAMPORTS_PER_SOL, PublicKey, Keypair } from "@solana/web3.js" -import { assert } from "chai" - -describe("PDA Rent-Payer", () => { - const provider = anchor.AnchorProvider.env() - anchor.setProvider(provider) - const wallet = provider.wallet as anchor.Wallet - const connection = provider.connection - const program = anchor.workspace.PdaRentPayer as anchor.Program +import * as anchor from '@coral-xyz/anchor'; +import { Keypair, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js'; +import { assert } from 'chai'; +import type { PdaRentPayer } from '../target/types/pda_rent_payer'; + +describe('PDA Rent-Payer', () => { + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + const wallet = provider.wallet as anchor.Wallet; + const connection = provider.connection; + const program = anchor.workspace.PdaRentPayer as anchor.Program; // PDA for the Rent Vault - const [rentVaultPDA] = PublicKey.findProgramAddressSync( - [Buffer.from("rent_vault")], - program.programId - ) + const [rentVaultPDA] = PublicKey.findProgramAddressSync([Buffer.from('rent_vault')], program.programId); - it("Initialize the Rent Vault", async () => { + it('Initialize the Rent Vault', async () => { // 1 SOL - const fundAmount = new anchor.BN(LAMPORTS_PER_SOL) + const fundAmount = new anchor.BN(LAMPORTS_PER_SOL); await program.methods .initRentVault(fundAmount) @@ -26,18 +23,16 @@ describe("PDA Rent-Payer", () => { payer: wallet.publicKey, rentVault: rentVaultPDA, }) - .rpc() + .rpc(); // Check rent vault balance - const accountInfo = await program.provider.connection.getAccountInfo( - rentVaultPDA - ) - assert(accountInfo.lamports === fundAmount.toNumber()) - }) + const accountInfo = await program.provider.connection.getAccountInfo(rentVaultPDA); + assert(accountInfo.lamports === fundAmount.toNumber()); + }); - it("Create a new account using the Rent Vault", async () => { + it('Create a new account using the Rent Vault', async () => { // Generate a new keypair for the new account - const newAccount = new Keypair() + const newAccount = new Keypair(); await program.methods .createNewAccount() @@ -46,13 +41,13 @@ describe("PDA Rent-Payer", () => { newAccount: newAccount.publicKey, }) .signers([newAccount]) - .rpc() + .rpc(); // Minimum balance for rent exemption for new account - const lamports = await connection.getMinimumBalanceForRentExemption(0) + const lamports = await connection.getMinimumBalanceForRentExemption(0); // Check that the account was created - const accountInfo = await connection.getAccountInfo(newAccount.publicKey) - assert(accountInfo.lamports === lamports) - }) -}) + const accountInfo = await connection.getAccountInfo(newAccount.publicKey); + assert(accountInfo.lamports === lamports); + }); +}); diff --git a/basics/pda-rent-payer/native/tests/test.ts b/basics/pda-rent-payer/native/tests/test.ts index 06fe7fb91..ea18e184a 100644 --- a/basics/pda-rent-payer/native/tests/test.ts +++ b/basics/pda-rent-payer/native/tests/test.ts @@ -1,104 +1,111 @@ -import { - Connection, - Keypair, - PublicKey, - sendAndConfirmTransaction, - SystemProgram, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; -import { start } from 'solana-bankrun'; +import { Buffer } from 'node:buffer'; import { describe, test } from 'node:test'; +import { Connection, Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction, sendAndConfirmTransaction } from '@solana/web3.js'; +import * as borsh from 'borsh'; +import { start } from 'solana-bankrun'; -describe("PDA Rent-Payer", async () => { - const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'pda_rent_payer_program', programId: PROGRAM_ID }],[]); - const client = context.banksClient; - const payer = context.payer; - - class Assignable { - constructor(properties) { - Object.keys(properties).map((key) => { - return (this[key] = properties[key]); - }); - }; - }; +describe('PDA Rent-Payer', async () => { + const PROGRAM_ID = PublicKey.unique(); + const context = await start([{ name: 'pda_rent_payer_program', programId: PROGRAM_ID }], []); + const client = context.banksClient; + const payer = context.payer; - enum MyInstruction { - InitRentVault, - CreateNewAccount, + class Assignable { + constructor(properties) { + Object.keys(properties).map((key) => { + return (this[key] = properties[key]); + }); } + } - class InitRentVault extends Assignable { - toBuffer() { return Buffer.from(borsh.serialize(InitRentVaultSchema, this)) } - }; - const InitRentVaultSchema = new Map([ - [InitRentVault, { - kind: 'struct', - fields: [ ['instruction', 'u8'], ['fund_lamports', 'u64'] ], - }] - ]); - - class CreateNewAccount extends Assignable { - toBuffer() { return Buffer.from(borsh.serialize(CreateNewAccountSchema, this)) } - }; - const CreateNewAccountSchema = new Map([ - [ CreateNewAccount, { - kind: 'struct', - fields: [ ['instruction', 'u8'] ], - }] - ]); + enum MyInstruction { + InitRentVault = 0, + CreateNewAccount = 1, + } - function deriveRentVaultPda() { - const pda = PublicKey.findProgramAddressSync( - [Buffer.from("rent_vault")], - PROGRAM_ID, - ) - console.log(`PDA: ${pda[0].toBase58()}`) - return pda + class InitRentVault extends Assignable { + toBuffer() { + return Buffer.from(borsh.serialize(InitRentVaultSchema, this)); } + } + const InitRentVaultSchema = new Map([ + [ + InitRentVault, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['fund_lamports', 'u64'], + ], + }, + ], + ]); - test("Initialize the Rent Vault", async () => { - const blockhash = context.lastBlockhash; - const [rentVaultPda, _] = deriveRentVaultPda(); - let ix = new TransactionInstruction({ - keys: [ - {pubkey: rentVaultPda, isSigner: false, isWritable: true}, - {pubkey: payer.publicKey, isSigner: true, isWritable: true}, - {pubkey: SystemProgram.programId, isSigner: false, isWritable: false} - ], - programId: PROGRAM_ID, - data: (new InitRentVault({ instruction: MyInstruction.InitRentVault, fund_lamports: 1000000000 })).toBuffer(), - }); + class CreateNewAccount extends Assignable { + toBuffer() { + return Buffer.from(borsh.serialize(CreateNewAccountSchema, this)); + } + } + const CreateNewAccountSchema = new Map([ + [ + CreateNewAccount, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + ]); - const tx = new Transaction(); - tx.recentBlockhash = blockhash; - tx.add(ix).sign(payer); + function deriveRentVaultPda() { + const pda = PublicKey.findProgramAddressSync([Buffer.from('rent_vault')], PROGRAM_ID); + console.log(`PDA: ${pda[0].toBase58()}`); + return pda; + } - await client.processTransaction(tx); + test('Initialize the Rent Vault', async () => { + const blockhash = context.lastBlockhash; + const [rentVaultPda, _] = deriveRentVaultPda(); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: rentVaultPda, isSigner: false, isWritable: true }, + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, + ], + programId: PROGRAM_ID, + data: new InitRentVault({ + instruction: MyInstruction.InitRentVault, + fund_lamports: 1000000000, + }).toBuffer(), }); - test("Create a new account using the Rent Vault", async () => { - const blockhash = context.lastBlockhash; - const newAccount = Keypair.generate(); - const [rentVaultPda, _] = deriveRentVaultPda(); - let ix = new TransactionInstruction({ - keys: [ - {pubkey: newAccount.publicKey, isSigner: true, isWritable: true}, - {pubkey: rentVaultPda, isSigner: false, isWritable: true}, - {pubkey: SystemProgram.programId, isSigner: false, isWritable: false} - ], - programId: PROGRAM_ID, - data: new CreateNewAccount({ instruction: MyInstruction.CreateNewAccount }).toBuffer(), - }); + const tx = new Transaction(); + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer); - const tx = new Transaction(); - tx.recentBlockhash = blockhash; - tx.add(ix).sign(payer, newAccount); // Add instruction and Sign the transaction + await client.processTransaction(tx); + }); - // Now we process the transaction - await client.processTransaction(tx); + test('Create a new account using the Rent Vault', async () => { + const blockhash = context.lastBlockhash; + const newAccount = Keypair.generate(); + const [rentVaultPda, _] = deriveRentVaultPda(); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: newAccount.publicKey, isSigner: true, isWritable: true }, + { pubkey: rentVaultPda, isSigner: false, isWritable: true }, + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, + ], + programId: PROGRAM_ID, + data: new CreateNewAccount({ + instruction: MyInstruction.CreateNewAccount, + }).toBuffer(), }); + + const tx = new Transaction(); + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer, newAccount); // Add instruction and Sign the transaction + + // Now we process the transaction + await client.processTransaction(tx); + }); }); diff --git a/basics/processing-instructions/anchor/tests/test.ts b/basics/processing-instructions/anchor/tests/test.ts index cb2ae1c8d..925d2fde7 100644 --- a/basics/processing-instructions/anchor/tests/test.ts +++ b/basics/processing-instructions/anchor/tests/test.ts @@ -1,16 +1,15 @@ -import * as anchor from "@coral-xyz/anchor"; -import { ProcessingInstructions } from "../target/types/processing_instructions"; +import * as anchor from '@coral-xyz/anchor'; +import type { ProcessingInstructions } from '../target/types/processing_instructions'; -describe("custom-instruction-data", () => { +describe('custom-instruction-data', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); - const program = anchor.workspace - .ProcessingInstructions as anchor.Program; + const program = anchor.workspace.ProcessingInstructions as anchor.Program; - it("Go to the park!", async () => { + it('Go to the park!', async () => { // Again, Anchor makes it super simple. // - await program.methods.goToPark("Jimmy", 3).accounts({}).rpc(); - await program.methods.goToPark("Mary", 10).accounts({}).rpc(); + await program.methods.goToPark('Jimmy', 3).accounts({}).rpc(); + await program.methods.goToPark('Mary', 10).accounts({}).rpc(); }); }); diff --git a/basics/processing-instructions/native/tests/test.ts b/basics/processing-instructions/native/tests/test.ts index 69dec0bc6..7d1c1de89 100644 --- a/basics/processing-instructions/native/tests/test.ts +++ b/basics/processing-instructions/native/tests/test.ts @@ -1,75 +1,70 @@ -import { - PublicKey, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; -import { start } from 'solana-bankrun'; +import { Buffer } from 'node:buffer'; import { describe, test } from 'node:test'; +import { PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; +import { start } from 'solana-bankrun'; -describe("custom-instruction-data", async () => { +describe('custom-instruction-data', async () => { const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'processing_instructions_program', programId: PROGRAM_ID }],[]); + const context = await start([{ name: 'processing_instructions_program', programId: PROGRAM_ID }], []); const client = context.banksClient; const payer = context.payer; - class Assignable { - constructor(properties) { - Object.keys(properties).map((key) => { - return (this[key] = properties[key]); - }); - }; - }; + class Assignable { + constructor(properties) { + Object.keys(properties).map((key) => { + return (this[key] = properties[key]); + }); + } + } - class InstructionData extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(InstructionDataSchema, this)); - } - }; + class InstructionData extends Assignable { + toBuffer() { + return Buffer.from(borsh.serialize(InstructionDataSchema, this)); + } + } - const InstructionDataSchema = new Map([ - [ - InstructionData, { - kind: 'struct', - fields: [ - ['name', 'string'], - ['height', 'u32'], - ] - } - ] - ]); + const InstructionDataSchema = new Map([ + [ + InstructionData, + { + kind: 'struct', + fields: [ + ['name', 'string'], + ['height', 'u32'], + ], + }, + ], + ]); - test("Go to the park!", async () => { - const blockhash = context.lastBlockhash; + test('Go to the park!', async () => { + const blockhash = context.lastBlockhash; - const jimmy = new InstructionData({ - name: "Jimmy", - height: 3 - }); + const jimmy = new InstructionData({ + name: 'Jimmy', + height: 3, + }); - const mary = new InstructionData({ - name: "Mary", - height: 10 - }); + const mary = new InstructionData({ + name: 'Mary', + height: 10, + }); - let ix1 = new TransactionInstruction({ - keys: [ - {pubkey: payer.publicKey, isSigner: true, isWritable: true} - ], - programId: PROGRAM_ID, - data: jimmy.toBuffer(), - }); + const ix1 = new TransactionInstruction({ + keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }], + programId: PROGRAM_ID, + data: jimmy.toBuffer(), + }); - let ix2 = new TransactionInstruction({ - ...ix1, - data: mary.toBuffer(), - }); + const ix2 = new TransactionInstruction({ + ...ix1, + data: mary.toBuffer(), + }); - const tx = new Transaction(); - tx.recentBlockhash = blockhash; - tx.add(ix1).add(ix2).sign(payer); + const tx = new Transaction(); + tx.recentBlockhash = blockhash; + tx.add(ix1).add(ix2).sign(payer); - await client.processTransaction(tx); - }); + await client.processTransaction(tx); }); +}); diff --git a/basics/program-derived-addresses/anchor/tests/test.ts b/basics/program-derived-addresses/anchor/tests/test.ts index 358ce5f9d..652e1f345 100644 --- a/basics/program-derived-addresses/anchor/tests/test.ts +++ b/basics/program-derived-addresses/anchor/tests/test.ts @@ -1,52 +1,48 @@ -import * as anchor from "@coral-xyz/anchor" -import { AnchorProgramExample } from "../target/types/anchor_program_example" -import { PublicKey } from "@solana/web3.js" +import * as anchor from '@coral-xyz/anchor'; +import { PublicKey } from '@solana/web3.js'; +import type { AnchorProgramExample } from '../target/types/anchor_program_example'; -describe("PDAs", () => { - const provider = anchor.AnchorProvider.env() - anchor.setProvider(provider) - const payer = provider.wallet as anchor.Wallet - const program = anchor.workspace - .AnchorProgramExample as anchor.Program +describe('PDAs', () => { + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + const payer = provider.wallet as anchor.Wallet; + const program = anchor.workspace.AnchorProgramExample as anchor.Program; // PDA for the page visits account - const [pageVisitPDA] = PublicKey.findProgramAddressSync( - [Buffer.from("page_visits"), payer.publicKey.toBuffer()], - program.programId - ) + const [pageVisitPDA] = PublicKey.findProgramAddressSync([Buffer.from('page_visits'), payer.publicKey.toBuffer()], program.programId); - it("Create the page visits tracking PDA", async () => { + it('Create the page visits tracking PDA', async () => { await program.methods .createPageVisits() .accounts({ payer: payer.publicKey, pageVisits: pageVisitPDA, }) - .rpc() - }) + .rpc(); + }); - it("Visit the page!", async () => { + it('Visit the page!', async () => { await program.methods .incrementPageVisits() .accounts({ user: payer.publicKey, pageVisits: pageVisitPDA, }) - .rpc() - }) + .rpc(); + }); - it("Visit the page!", async () => { + it('Visit the page!', async () => { await program.methods .incrementPageVisits() .accounts({ user: payer.publicKey, pageVisits: pageVisitPDA, }) - .rpc() - }) + .rpc(); + }); - it("View page visits", async () => { - const pageVisits = await program.account.pageVisits.fetch(pageVisitPDA) - console.log(`Number of page visits: ${pageVisits.pageVisits}`) - }) -}) + it('View page visits', async () => { + const pageVisits = await program.account.pageVisits.fetch(pageVisitPDA); + console.log(`Number of page visits: ${pageVisits.pageVisits}`); + }); +}); diff --git a/basics/program-derived-addresses/native/tests/test.ts b/basics/program-derived-addresses/native/tests/test.ts index 121aae3b1..dfc43b636 100644 --- a/basics/program-derived-addresses/native/tests/test.ts +++ b/basics/program-derived-addresses/native/tests/test.ts @@ -1,143 +1,147 @@ -import { - Keypair, - PublicKey, - SystemProgram, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; +import { Buffer } from 'node:buffer'; import { describe, test } from 'node:test'; +import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; import { start } from 'solana-bankrun'; -describe("PDAs", async () => { - const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'program_derived_addresses_program', programId: PROGRAM_ID }],[]); - const client = context.banksClient; - const payer = context.payer; - const rent = await client.getRent(); - - class Assignable { - constructor(properties) { - Object.keys(properties).map((key) => { - return (this[key] = properties[key]); - }); - }; - }; - - class PageVisits extends Assignable { - toBuffer() { return Buffer.from(borsh.serialize(PageVisitsSchema, this)) } - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(PageVisitsSchema, PageVisits, buffer); - }; - }; - const PageVisitsSchema = new Map([ - [ PageVisits, { - kind: 'struct', - fields: [ ['page_visits', 'u32'], ['bump', 'u8'] ], - }] - ]); - - class IncrementPageVisits extends Assignable { - toBuffer() { return Buffer.from(borsh.serialize(IncrementPageVisitsSchema, this)) } - }; - const IncrementPageVisitsSchema = new Map([ - [ IncrementPageVisits, { - kind: 'struct', - fields: [], - }] - ]); - - const testUser = Keypair.generate(); - - test("Create a test user", async () => { - let ix = SystemProgram.createAccount({ - fromPubkey: payer.publicKey, - lamports: Number(rent.minimumBalance(BigInt(0))), - newAccountPubkey: testUser.publicKey, - programId: SystemProgram.programId, - space: 0, - }); - - const tx = new Transaction(); - const blockhash = context.lastBlockhash; - tx.recentBlockhash = blockhash; - tx.add(ix).sign(payer, testUser); // Add instruction and Sign the transaction - - await client.processTransaction(tx); - console.log(`Local Wallet: ${payer.publicKey}`); - console.log(`Created User: ${testUser.publicKey}`); - }); +describe('PDAs', async () => { + const PROGRAM_ID = PublicKey.unique(); + const context = await start([{ name: 'program_derived_addresses_program', programId: PROGRAM_ID }], []); + const client = context.banksClient; + const payer = context.payer; + const rent = await client.getRent(); + + class Assignable { + constructor(properties) { + Object.keys(properties).map((key) => { + return (this[key] = properties[key]); + }); + } + } - function derivePageVisitsPda(userPubkey: PublicKey) { - return PublicKey.findProgramAddressSync( - [Buffer.from("page_visits"), userPubkey.toBuffer()], - PROGRAM_ID, - ) + class PageVisits extends Assignable { + toBuffer() { + return Buffer.from(borsh.serialize(PageVisitsSchema, this)); } - test("Create the page visits tracking PDA", async () => { - const [pageVisitsPda, pageVisitsBump] = derivePageVisitsPda(testUser.publicKey); - let ix = new TransactionInstruction({ - keys: [ - {pubkey: pageVisitsPda, isSigner: false, isWritable: true}, - {pubkey: testUser.publicKey, isSigner: false, isWritable: false}, - {pubkey: payer.publicKey, isSigner: true, isWritable: true}, - {pubkey: SystemProgram.programId, isSigner: false, isWritable: false} - ], - programId: PROGRAM_ID, - data: (new PageVisits({page_visits: 0, bump: pageVisitsBump})).toBuffer(), - }); - const tx = new Transaction(); - const blockhash = context.lastBlockhash; - tx.recentBlockhash = blockhash; - tx.add(ix).sign(payer); - - await client.processTransaction(tx); + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(PageVisitsSchema, PageVisits, buffer); + } + } + const PageVisitsSchema = new Map([ + [ + PageVisits, + { + kind: 'struct', + fields: [ + ['page_visits', 'u32'], + ['bump', 'u8'], + ], + }, + ], + ]); + + class IncrementPageVisits extends Assignable { + toBuffer() { + return Buffer.from(borsh.serialize(IncrementPageVisitsSchema, this)); + } + } + const IncrementPageVisitsSchema = new Map([ + [ + IncrementPageVisits, + { + kind: 'struct', + fields: [], + }, + ], + ]); + + const testUser = Keypair.generate(); + + test('Create a test user', async () => { + const ix = SystemProgram.createAccount({ + fromPubkey: payer.publicKey, + lamports: Number(rent.minimumBalance(BigInt(0))), + newAccountPubkey: testUser.publicKey, + programId: SystemProgram.programId, + space: 0, }); - test("Visit the page!", async () => { - const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey); - let ix = new TransactionInstruction({ - keys: [ - {pubkey: pageVisitsPda, isSigner: false, isWritable: true}, - {pubkey: payer.publicKey, isSigner: true, isWritable: true}, - ], - programId: PROGRAM_ID, - data: new IncrementPageVisits({}).toBuffer(), - }); - const tx = new Transaction(); - const blockhash = context.lastBlockhash; - tx.recentBlockhash = blockhash; - tx.add(ix).sign(payer); - - await client.processTransaction(tx); + const tx = new Transaction(); + const blockhash = context.lastBlockhash; + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer, testUser); // Add instruction and Sign the transaction + + await client.processTransaction(tx); + console.log(`Local Wallet: ${payer.publicKey}`); + console.log(`Created User: ${testUser.publicKey}`); + }); + + function derivePageVisitsPda(userPubkey: PublicKey) { + return PublicKey.findProgramAddressSync([Buffer.from('page_visits'), userPubkey.toBuffer()], PROGRAM_ID); + } + + test('Create the page visits tracking PDA', async () => { + const [pageVisitsPda, pageVisitsBump] = derivePageVisitsPda(testUser.publicKey); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: pageVisitsPda, isSigner: false, isWritable: true }, + { pubkey: testUser.publicKey, isSigner: false, isWritable: false }, + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, + ], + programId: PROGRAM_ID, + data: new PageVisits({ page_visits: 0, bump: pageVisitsBump }).toBuffer(), }); - - // commented because couldn't get different blockhash - test("Visit the page!", async () => { - const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey); - let ix = new TransactionInstruction({ - keys: [ - {pubkey: pageVisitsPda, isSigner: false, isWritable: true}, - {pubkey: payer.publicKey, isSigner: true, isWritable: true}, - ], - programId: PROGRAM_ID, - data: new IncrementPageVisits({}).toBuffer(), - }); - const tx = new Transaction(); - const [blockhash, _block_height] = await client.getLatestBlockhash(); - tx.recentBlockhash = blockhash; - tx.add(ix).sign(payer); - - await client.processTransaction(tx); + const tx = new Transaction(); + const blockhash = context.lastBlockhash; + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer); + + await client.processTransaction(tx); + }); + + test('Visit the page!', async () => { + const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: pageVisitsPda, isSigner: false, isWritable: true }, + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, + ], + programId: PROGRAM_ID, + data: new IncrementPageVisits({}).toBuffer(), }); - - test("Read page visits", async () => { - const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey); - const accountInfo = await client.getAccount(pageVisitsPda); - const readPageVisits = PageVisits.fromBuffer(Buffer.from(accountInfo.data)); - console.log(`Number of page visits: ${readPageVisits.page_visits}`); + const tx = new Transaction(); + const blockhash = context.lastBlockhash; + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer); + + await client.processTransaction(tx); + }); + + // commented because couldn't get different blockhash + test('Visit the page!', async () => { + const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: pageVisitsPda, isSigner: false, isWritable: true }, + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, + ], + programId: PROGRAM_ID, + data: new IncrementPageVisits({}).toBuffer(), }); + const tx = new Transaction(); + const [blockhash, _block_height] = await client.getLatestBlockhash(); + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer); + + await client.processTransaction(tx); + }); + + test('Read page visits', async () => { + const [pageVisitsPda, _] = derivePageVisitsPda(testUser.publicKey); + const accountInfo = await client.getAccount(pageVisitsPda); + const readPageVisits = PageVisits.fromBuffer(Buffer.from(accountInfo.data)); + console.log(`Number of page visits: ${readPageVisits.page_visits}`); + }); }); diff --git a/basics/realloc/anchor/migrations/deploy.ts b/basics/realloc/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/basics/realloc/anchor/migrations/deploy.ts +++ b/basics/realloc/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/basics/realloc/anchor/package.json b/basics/realloc/anchor/package.json index b2f2cc55a..814697ca9 100644 --- a/basics/realloc/anchor/package.json +++ b/basics/realloc/anchor/package.json @@ -1,19 +1,19 @@ { - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.30.0" - }, - "devDependencies": { - "chai": "^4.3.4", - "mocha": "^9.0.3", - "ts-mocha": "^10.0.0", - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "typescript": "^4.3.5", - "prettier": "^2.6.2" - } + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.0" + }, + "devDependencies": { + "chai": "^4.3.4", + "mocha": "^9.0.3", + "ts-mocha": "^10.0.0", + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "typescript": "^4.3.5", + "prettier": "^2.6.2" + } } diff --git a/basics/realloc/anchor/tests/anchor-realloc.ts b/basics/realloc/anchor/tests/anchor-realloc.ts index d3b4fc627..d08507646 100644 --- a/basics/realloc/anchor/tests/anchor-realloc.ts +++ b/basics/realloc/anchor/tests/anchor-realloc.ts @@ -1,37 +1,37 @@ -import * as anchor from "@coral-xyz/anchor" -import { Program } from "@coral-xyz/anchor" -import { AnchorRealloc } from "../target/types/anchor_realloc" -import { Keypair } from "@solana/web3.js" -import { assert } from "chai" +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { Keypair } from '@solana/web3.js'; +import { assert } from 'chai'; +import type { AnchorRealloc } from '../target/types/anchor_realloc'; -describe("anchor-realloc", () => { +describe('anchor-realloc', () => { // Configure the client to use the local cluster. - const provider = anchor.AnchorProvider.env() - anchor.setProvider(provider) - const payer = provider.wallet as anchor.Wallet - const connection = provider.connection + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + const payer = provider.wallet as anchor.Wallet; + const connection = provider.connection; - const program = anchor.workspace.AnchorRealloc as Program + const program = anchor.workspace.AnchorRealloc as Program; - const messageAccount = new Keypair() + const messageAccount = new Keypair(); // helper function to check the account data and message async function checkAccount(publicKey, expectedMessage) { - const accountInfo = await connection.getAccountInfo(publicKey) - const accountData = await program.account.message.fetch(publicKey) + const accountInfo = await connection.getAccountInfo(publicKey); + const accountData = await program.account.message.fetch(publicKey); // 8 bytes for the discriminator, // 4 bytes for the length of the message, // and the length of the message - assert.equal(accountInfo.data.length, 8 + 4 + expectedMessage.length) - assert.equal(accountData.message, expectedMessage) + assert.equal(accountInfo.data.length, 8 + 4 + expectedMessage.length); + assert.equal(accountData.message, expectedMessage); - console.log(`Account Data Length: ${accountInfo.data.length}`) - console.log(`Message: ${accountData.message}`) + console.log(`Account Data Length: ${accountInfo.data.length}`); + console.log(`Message: ${accountData.message}`); } - it("Is initialized!", async () => { - const input = "hello" + it('Is initialized!', async () => { + const input = 'hello'; await program.methods .initialize(input) @@ -40,13 +40,13 @@ describe("anchor-realloc", () => { messageAccount: messageAccount.publicKey, }) .signers([messageAccount]) - .rpc() + .rpc(); - await checkAccount(messageAccount.publicKey, input) - }) + await checkAccount(messageAccount.publicKey, input); + }); - it("Update", async () => { - const input = "hello world" + it('Update', async () => { + const input = 'hello world'; await program.methods .update(input) @@ -54,13 +54,13 @@ describe("anchor-realloc", () => { payer: payer.publicKey, messageAccount: messageAccount.publicKey, }) - .rpc() + .rpc(); - await checkAccount(messageAccount.publicKey, input) - }) + await checkAccount(messageAccount.publicKey, input); + }); - it("Update", async () => { - const input = "hi" + it('Update', async () => { + const input = 'hi'; await program.methods .update(input) @@ -68,8 +68,8 @@ describe("anchor-realloc", () => { payer: payer.publicKey, messageAccount: messageAccount.publicKey, }) - .rpc() + .rpc(); - await checkAccount(messageAccount.publicKey, input) - }) -}) + await checkAccount(messageAccount.publicKey, input); + }); +}); diff --git a/basics/realloc/anchor/tsconfig.json b/basics/realloc/anchor/tsconfig.json index 558b83e5e..cd5d2e3d0 100644 --- a/basics/realloc/anchor/tsconfig.json +++ b/basics/realloc/anchor/tsconfig.json @@ -1,11 +1,10 @@ { - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/basics/realloc/native/tests/realloc.test.ts b/basics/realloc/native/tests/realloc.test.ts index 20afb8822..690ee7015 100644 --- a/basics/realloc/native/tests/realloc.test.ts +++ b/basics/realloc/native/tests/realloc.test.ts @@ -1,22 +1,18 @@ +import { describe, test } from 'node:test'; +import { Keypair, PublicKey, Transaction } from '@solana/web3.js'; +import { start } from 'solana-bankrun'; import { - Keypair, - PublicKey, - Transaction, -} from '@solana/web3.js'; -import { - createCreateInstruction, - createReallocateWithoutZeroInitInstruction, - createReallocateZeroInitInstruction, AddressInfo, EnhancedAddressInfo, WorkInfo, + createCreateInstruction, + createReallocateWithoutZeroInitInstruction, + createReallocateZeroInitInstruction, } from '../ts'; -import { start } from 'solana-bankrun'; -import { describe, test } from 'node:test'; describe('Realloc!', async () => { const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'realloc_program', programId: PROGRAM_ID }],[]); + const context = await start([{ name: 'realloc_program', programId: PROGRAM_ID }], []); const client = context.banksClient; const payer = context.payer; @@ -24,15 +20,7 @@ describe('Realloc!', async () => { test('Create the account with data', async () => { console.log(`${testAccount.publicKey}`); - const ix = createCreateInstruction( - testAccount.publicKey, - payer.publicKey, - PROGRAM_ID, - 'Jacob', - 123, - 'Main St.', - 'Chicago' - ); + const ix = createCreateInstruction(testAccount.publicKey, payer.publicKey, PROGRAM_ID, 'Jacob', 123, 'Main St.', 'Chicago'); const tx = new Transaction(); tx.recentBlockhash = context.lastBlockhash; @@ -43,13 +31,7 @@ describe('Realloc!', async () => { }); test('Reallocate WITHOUT zero init', async () => { - const ix = createReallocateWithoutZeroInitInstruction( - testAccount.publicKey, - payer.publicKey, - PROGRAM_ID, - 'Illinois', - 12345 - ); + const ix = createReallocateWithoutZeroInitInstruction(testAccount.publicKey, payer.publicKey, PROGRAM_ID, 'Illinois', 12345); const tx = new Transaction(); const [blockHash, _blockHeight] = await client.getLatestBlockhash(); tx.recentBlockhash = blockHash; @@ -60,15 +42,7 @@ describe('Realloc!', async () => { }); test('Reallocate WITH zero init', async () => { - const ix = createReallocateZeroInitInstruction( - testAccount.publicKey, - payer.publicKey, - PROGRAM_ID, - 'Pete', - 'Engineer', - 'Solana Labs', - 2 - ); + const ix = createReallocateZeroInitInstruction(testAccount.publicKey, payer.publicKey, PROGRAM_ID, 'Pete', 'Engineer', 'Solana Labs', 2); const tx = new Transaction(); const [blockHash, _blockHeight] = await client.getLatestBlockhash(); tx.recentBlockhash = blockHash; @@ -121,7 +95,7 @@ describe('Realloc!', async () => { } function sleep(s: number) { - const SECONDS = 1000 - return new Promise(resolve => setTimeout(resolve, s * SECONDS)); + const SECONDS = 1000; + return new Promise((resolve) => setTimeout(resolve, s * SECONDS)); } }); diff --git a/basics/realloc/native/ts/index.ts b/basics/realloc/native/ts/index.ts index 0eca67361..70c7f3510 100644 --- a/basics/realloc/native/ts/index.ts +++ b/basics/realloc/native/ts/index.ts @@ -1,8 +1,7 @@ - export * from './instructions/create'; export * from './instructions/instruction'; export * from './instructions/reallocate'; export * from './state/address-info'; export * from './state/enhanced-address-info'; export * from './state/work-info'; -export * from './util/util'; \ No newline at end of file +export * from './util/util'; diff --git a/basics/realloc/native/ts/instructions/create.ts b/basics/realloc/native/ts/instructions/create.ts index 3de82e3f7..d60a9c800 100644 --- a/basics/realloc/native/ts/instructions/create.ts +++ b/basics/realloc/native/ts/instructions/create.ts @@ -1,84 +1,80 @@ -import * as borsh from "borsh"; -import { Buffer } from "buffer"; -import { - PublicKey, - SystemProgram, - TransactionInstruction -} from '@solana/web3.js'; +import { Buffer } from 'node:buffer'; +import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; import { ReallocInstruction } from './instruction'; - export class Create { + instruction: ReallocInstruction; + name: string; + house_number: number; + street: string; + city: string; + constructor(props: { instruction: ReallocInstruction; name: string; house_number: number; street: string; city: string; + }) { + this.instruction = props.instruction; + this.name = props.name; + this.house_number = props.house_number; + this.street = props.street; + this.city = props.city; + } - constructor(props: { - instruction: ReallocInstruction, - name: string, - house_number: number, - street: string, - city: string, - }) { - this.instruction = props.instruction; - this.name = props.name; - this.house_number = props.house_number; - this.street = props.street; - this.city = props.city; - } + toBuffer() { + return Buffer.from(borsh.serialize(CreateSchema, this)); + } - toBuffer() { - return Buffer.from(borsh.serialize(CreateSchema, this)) - }; - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(CreateSchema, Create, buffer); - }; -}; + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(CreateSchema, Create, buffer); + } +} export const CreateSchema = new Map([ - [ Create, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['name', 'string'], - ['house_number', 'u8'], - ['street', 'string'], - ['city', 'string'], - ], - }] + [ + Create, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['name', 'string'], + ['house_number', 'u8'], + ['street', 'string'], + ['city', 'string'], + ], + }, + ], ]); export function createCreateInstruction( - target: PublicKey, - payer: PublicKey, - programId: PublicKey, - name: string, - house_number: number, - street: string, - city: string, + target: PublicKey, + payer: PublicKey, + programId: PublicKey, + name: string, + house_number: number, + street: string, + city: string, ): TransactionInstruction { + const instructionObject = new Create({ + instruction: ReallocInstruction.Create, + name, + house_number, + street, + city, + }); - const instructionObject = new Create({ - instruction: ReallocInstruction.Create, - name, - house_number, - street, - city, - }); - - const ix = new TransactionInstruction({ - keys: [ - {pubkey: target, isSigner: false, isWritable: true}, - {pubkey: payer, isSigner: true, isWritable: true}, - {pubkey: SystemProgram.programId, isSigner: false, isWritable: false} - ], - programId: programId, - data: instructionObject.toBuffer(), - }); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: target, isSigner: false, isWritable: true }, + { pubkey: payer, isSigner: true, isWritable: true }, + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, + ], + programId: programId, + data: instructionObject.toBuffer(), + }); - return ix; -} \ No newline at end of file + return ix; +} diff --git a/basics/realloc/native/ts/instructions/index.ts b/basics/realloc/native/ts/instructions/index.ts index a972d4992..a0876a284 100644 --- a/basics/realloc/native/ts/instructions/index.ts +++ b/basics/realloc/native/ts/instructions/index.ts @@ -1,3 +1,3 @@ export * from './create'; export * from './instruction'; -export * from './reallocate'; \ No newline at end of file +export * from './reallocate'; diff --git a/basics/realloc/native/ts/instructions/instruction.ts b/basics/realloc/native/ts/instructions/instruction.ts index 6e4281173..31121a6f2 100644 --- a/basics/realloc/native/ts/instructions/instruction.ts +++ b/basics/realloc/native/ts/instructions/instruction.ts @@ -1,5 +1,5 @@ export enum ReallocInstruction { - Create, - ReallocateWithoutZeroInit, - ReallocateZeroInit, -} \ No newline at end of file + Create = 0, + ReallocateWithoutZeroInit = 1, + ReallocateZeroInit = 2, +} diff --git a/basics/realloc/native/ts/instructions/reallocate.ts b/basics/realloc/native/ts/instructions/reallocate.ts index ab4e8d721..1d7df1774 100644 --- a/basics/realloc/native/ts/instructions/reallocate.ts +++ b/basics/realloc/native/ts/instructions/reallocate.ts @@ -1,147 +1,140 @@ -import * as borsh from "borsh"; -import { Buffer } from "buffer"; -import { - PublicKey, - SystemProgram, - TransactionInstruction -} from '@solana/web3.js'; +import { Buffer } from 'node:buffer'; +import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; import { ReallocInstruction } from './instruction'; - export class ReallocateWithoutZeroInit { + instruction: ReallocInstruction; + state: string; + zip: number; + constructor(props: { instruction: ReallocInstruction; state: string; zip: number; - - constructor(props: { - instruction: ReallocInstruction, - state: string, - zip: number, - }) { - this.instruction = props.instruction; - this.state = props.state; - this.zip = props.zip; - } - - toBuffer() { - return Buffer.from(borsh.serialize(ReallocateWithoutZeroInitSchema, this)) - }; - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(ReallocateWithoutZeroInitSchema, ReallocateWithoutZeroInit, buffer); - }; -}; + }) { + this.instruction = props.instruction; + this.state = props.state; + this.zip = props.zip; + } + + toBuffer() { + return Buffer.from(borsh.serialize(ReallocateWithoutZeroInitSchema, this)); + } + + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(ReallocateWithoutZeroInitSchema, ReallocateWithoutZeroInit, buffer); + } +} export const ReallocateWithoutZeroInitSchema = new Map([ - [ ReallocateWithoutZeroInit, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['state', 'string'], - ['zip', 'u32'], - ], - }] + [ + ReallocateWithoutZeroInit, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['state', 'string'], + ['zip', 'u32'], + ], + }, + ], ]); export function createReallocateWithoutZeroInitInstruction( - target: PublicKey, - payer: PublicKey, - programId: PublicKey, - state: string, - zip: number, + target: PublicKey, + payer: PublicKey, + programId: PublicKey, + state: string, + zip: number, ): TransactionInstruction { - - const instructionObject = new ReallocateWithoutZeroInit({ - instruction: ReallocInstruction.ReallocateWithoutZeroInit, - state, - zip, - }); - - const ix = new TransactionInstruction({ - keys: [ - {pubkey: target, isSigner: false, isWritable: true}, - {pubkey: payer, isSigner: true, isWritable: true}, - {pubkey: SystemProgram.programId, isSigner: false, isWritable: false} - ], - programId: programId, - data: instructionObject.toBuffer(), - }); - - return ix; + const instructionObject = new ReallocateWithoutZeroInit({ + instruction: ReallocInstruction.ReallocateWithoutZeroInit, + state, + zip, + }); + + const ix = new TransactionInstruction({ + keys: [ + { pubkey: target, isSigner: false, isWritable: true }, + { pubkey: payer, isSigner: true, isWritable: true }, + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, + ], + programId: programId, + data: instructionObject.toBuffer(), + }); + + return ix; } - - export class ReallocateZeroInit { + instruction: ReallocInstruction; + name: string; + position: string; + company: string; + years_employed: number; + constructor(props: { instruction: ReallocInstruction; name: string; position: string; company: string; years_employed: number; - - constructor(props: { - instruction: ReallocInstruction, - name: string, - position: string, - company: string, - years_employed: number, - }) { - this.instruction = props.instruction; - this.name = props.name; - this.position = props.position; - this.company = props.company; - this.years_employed = props.years_employed; - } - - toBuffer() { - return Buffer.from(borsh.serialize(ReallocateZeroInitSchema, this)) - }; - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(ReallocateZeroInitSchema, ReallocateZeroInit, buffer); - }; -}; + }) { + this.instruction = props.instruction; + this.name = props.name; + this.position = props.position; + this.company = props.company; + this.years_employed = props.years_employed; + } + + toBuffer() { + return Buffer.from(borsh.serialize(ReallocateZeroInitSchema, this)); + } + + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(ReallocateZeroInitSchema, ReallocateZeroInit, buffer); + } +} export const ReallocateZeroInitSchema = new Map([ - [ ReallocateZeroInit, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['name', 'string'], - ['position', 'string'], - ['company', 'string'], - ['years_employed', 'u8'], - ], - }] + [ + ReallocateZeroInit, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['name', 'string'], + ['position', 'string'], + ['company', 'string'], + ['years_employed', 'u8'], + ], + }, + ], ]); export function createReallocateZeroInitInstruction( - target: PublicKey, - payer: PublicKey, - programId: PublicKey, - name: string, - position: string, - company: string, - years_employed: number, + target: PublicKey, + payer: PublicKey, + programId: PublicKey, + name: string, + position: string, + company: string, + years_employed: number, ): TransactionInstruction { - - const instructionObject = new ReallocateZeroInit({ - instruction: ReallocInstruction.ReallocateZeroInit, - name, - position, - company, - years_employed, - }); - - const ix = new TransactionInstruction({ - keys: [ - {pubkey: target, isSigner: false, isWritable: true}, - ], - programId: programId, - data: instructionObject.toBuffer(), - }); - - return ix; -} \ No newline at end of file + const instructionObject = new ReallocateZeroInit({ + instruction: ReallocInstruction.ReallocateZeroInit, + name, + position, + company, + years_employed, + }); + + const ix = new TransactionInstruction({ + keys: [{ pubkey: target, isSigner: false, isWritable: true }], + programId: programId, + data: instructionObject.toBuffer(), + }); + + return ix; +} diff --git a/basics/realloc/native/ts/state/address-info.ts b/basics/realloc/native/ts/state/address-info.ts index 134ddeb0d..d3a3e466f 100644 --- a/basics/realloc/native/ts/state/address-info.ts +++ b/basics/realloc/native/ts/state/address-info.ts @@ -1,47 +1,48 @@ -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - +import { Buffer } from 'node:buffer'; +import * as borsh from 'borsh'; export class AddressInfo { + name: string; + house_number: number; + street: string; + city: string; + constructor(props: { name: string; house_number: number; street: string; city: string; + }) { + this.name = props.name; + this.house_number = props.house_number; + this.street = props.street; + this.city = props.city; + } - constructor(props: { - name: string, - house_number: number, - street: string, - city: string, - }) { - this.name = props.name; - this.house_number = props.house_number; - this.street = props.street; - this.city = props.city; - } + toBase58() { + return borsh.serialize(AddressInfoSchema, this).toString(); + } - toBase58() { - return borsh.serialize(AddressInfoSchema, this).toString() - }; + toBuffer() { + return Buffer.from(borsh.serialize(AddressInfoSchema, this)); + } - toBuffer() { - return Buffer.from(borsh.serialize(AddressInfoSchema, this)) - }; - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(AddressInfoSchema, AddressInfo, buffer); - }; -}; + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(AddressInfoSchema, AddressInfo, buffer); + } +} export const AddressInfoSchema = new Map([ - [ AddressInfo, { - kind: 'struct', - fields: [ - ['name', 'string'], - ['house_number', 'u8'], - ['street', 'string'], - ['city', 'string'], - ], - }] -]); \ No newline at end of file + [ + AddressInfo, + { + kind: 'struct', + fields: [ + ['name', 'string'], + ['house_number', 'u8'], + ['street', 'string'], + ['city', 'string'], + ], + }, + ], +]); diff --git a/basics/realloc/native/ts/state/enhanced-address-info.ts b/basics/realloc/native/ts/state/enhanced-address-info.ts index 301f4649f..ba7f38b57 100644 --- a/basics/realloc/native/ts/state/enhanced-address-info.ts +++ b/basics/realloc/native/ts/state/enhanced-address-info.ts @@ -1,55 +1,56 @@ -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - +import { Buffer } from 'node:buffer'; +import * as borsh from 'borsh'; export class EnhancedAddressInfo { + name: string; + house_number: number; + street: string; + city: string; + state: string; + zip: number; + constructor(props: { name: string; house_number: number; street: string; city: string; state: string; zip: number; + }) { + this.name = props.name; + this.house_number = props.house_number; + this.street = props.street; + this.city = props.city; + this.state = props.state; + this.zip = props.zip; + } - constructor(props: { - name: string, - house_number: number, - street: string, - city: string, - state: string, - zip: number, - }) { - this.name = props.name; - this.house_number = props.house_number; - this.street = props.street; - this.city = props.city; - this.state = props.state; - this.zip = props.zip; - } + toBase58() { + return borsh.serialize(EnhancedAddressInfoSchema, this).toString(); + } - toBase58() { - return borsh.serialize(EnhancedAddressInfoSchema, this).toString() - }; + toBuffer() { + return Buffer.from(borsh.serialize(EnhancedAddressInfoSchema, this)); + } - toBuffer() { - return Buffer.from(borsh.serialize(EnhancedAddressInfoSchema, this)) - }; - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(EnhancedAddressInfoSchema, EnhancedAddressInfo, buffer); - }; -}; + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(EnhancedAddressInfoSchema, EnhancedAddressInfo, buffer); + } +} export const EnhancedAddressInfoSchema = new Map([ - [ EnhancedAddressInfo, { - kind: 'struct', - fields: [ - ['name', 'string'], - ['house_number', 'u8'], - ['street', 'string'], - ['city', 'string'], - ['state', 'string'], - ['zip', 'u32'], - ], - }] -]); \ No newline at end of file + [ + EnhancedAddressInfo, + { + kind: 'struct', + fields: [ + ['name', 'string'], + ['house_number', 'u8'], + ['street', 'string'], + ['city', 'string'], + ['state', 'string'], + ['zip', 'u32'], + ], + }, + ], +]); diff --git a/basics/realloc/native/ts/state/index.ts b/basics/realloc/native/ts/state/index.ts index 73bc44697..5b4330eb5 100644 --- a/basics/realloc/native/ts/state/index.ts +++ b/basics/realloc/native/ts/state/index.ts @@ -1,3 +1,3 @@ export * from './address-info'; export * from './enhanced-address-info'; -export * from './work-info'; \ No newline at end of file +export * from './work-info'; diff --git a/basics/realloc/native/ts/state/work-info.ts b/basics/realloc/native/ts/state/work-info.ts index b57717d9b..8275ba017 100644 --- a/basics/realloc/native/ts/state/work-info.ts +++ b/basics/realloc/native/ts/state/work-info.ts @@ -1,47 +1,48 @@ -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - +import { Buffer } from 'node:buffer'; +import * as borsh from 'borsh'; export class WorkInfo { + name: string; + position: string; + company: string; + years_employed: number; + constructor(props: { name: string; position: string; company: string; years_employed: number; + }) { + this.name = props.name; + this.position = props.position; + this.company = props.company; + this.years_employed = props.years_employed; + } - constructor(props: { - name: string, - position: string, - company: string, - years_employed: number, - }) { - this.name = props.name; - this.position = props.position; - this.company = props.company; - this.years_employed = props.years_employed; - } + toBase58() { + return borsh.serialize(WorkInfoSchema, this).toString(); + } - toBase58() { - return borsh.serialize(WorkInfoSchema, this).toString() - }; + toBuffer() { + return Buffer.from(borsh.serialize(WorkInfoSchema, this)); + } - toBuffer() { - return Buffer.from(borsh.serialize(WorkInfoSchema, this)) - }; - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(WorkInfoSchema, WorkInfo, buffer); - }; -}; + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(WorkInfoSchema, WorkInfo, buffer); + } +} export const WorkInfoSchema = new Map([ - [ WorkInfo, { - kind: 'struct', - fields: [ - ['name', 'string'], - ['position', 'string'], - ['company', 'string'], - ['years_employed', 'u8'], - ], - }] -]); \ No newline at end of file + [ + WorkInfo, + { + kind: 'struct', + fields: [ + ['name', 'string'], + ['position', 'string'], + ['company', 'string'], + ['years_employed', 'u8'], + ], + }, + ], +]); diff --git a/basics/realloc/native/ts/util/index.ts b/basics/realloc/native/ts/util/index.ts index 133b1de3f..bbebd88eb 100644 --- a/basics/realloc/native/ts/util/index.ts +++ b/basics/realloc/native/ts/util/index.ts @@ -1 +1 @@ -export * from './util'; \ No newline at end of file +export * from './util'; diff --git a/basics/realloc/native/ts/util/util.ts b/basics/realloc/native/ts/util/util.ts index aaae07dae..0e63c77df 100644 --- a/basics/realloc/native/ts/util/util.ts +++ b/basics/realloc/native/ts/util/util.ts @@ -1,9 +1,5 @@ import { Keypair } from '@solana/web3.js'; - export function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8"))) - ) -}; - + return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8')))); +} diff --git a/basics/rent/anchor/tests/test.ts b/basics/rent/anchor/tests/test.ts index 1cddaf407..e0f66b5bc 100644 --- a/basics/rent/anchor/tests/test.ts +++ b/basics/rent/anchor/tests/test.ts @@ -1,27 +1,25 @@ -import * as anchor from "@coral-xyz/anchor"; -import { RentExample } from "../target/types/rent_example"; -import Idl from "../target/idl/rent_example.json"; +import * as anchor from '@coral-xyz/anchor'; +import Idl from '../target/idl/rent_example.json'; +import type { RentExample } from '../target/types/rent_example'; -describe("Create a system account", () => { +describe('Create a system account', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const wallet = provider.wallet as anchor.Wallet; const program = anchor.workspace.RentExample as anchor.Program; - it("Create the account", async () => { + it('Create the account', async () => { const newKeypair = anchor.web3.Keypair.generate(); - const addressData: anchor.IdlTypes["addressData"] = { - name: "Marcus", - address: "123 Main St. San Francisco, CA", + const addressData: anchor.IdlTypes['addressData'] = { + name: 'Marcus', + address: '123 Main St. San Francisco, CA', }; // We're just going to serialize our object here so we can check // the size on the client side against the program logs // - const addressDataBuffer = new anchor.BorshCoder( - Idl as anchor.Idl - ).types.encode("AddressData", addressData); + const addressDataBuffer = new anchor.BorshCoder(Idl as anchor.Idl).types.encode('AddressData', addressData); console.log(`Address data buffer length: ${addressDataBuffer.length}`); await program.methods diff --git a/basics/rent/native/tests/test.ts b/basics/rent/native/tests/test.ts index 4f0dcc22a..59e1fe151 100644 --- a/basics/rent/native/tests/test.ts +++ b/basics/rent/native/tests/test.ts @@ -1,24 +1,18 @@ -import { - Keypair, - PublicKey, - SystemProgram, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; +import { Buffer } from 'node:buffer'; +import { describe, test } from 'node:test'; +import { Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js'; import * as borsh from 'borsh'; -import { Buffer } from 'buffer'; import { start } from 'solana-bankrun'; -import { describe, test } from 'node:test'; describe('Create a system account', async () => { const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'program', programId: PROGRAM_ID }],[]); + const context = await start([{ name: 'program', programId: PROGRAM_ID }], []); const client = context.banksClient; const payer = context.payer; class Assignable { constructor(properties) { - Object.keys(properties).map(key => { + Object.keys(properties).map((key) => { return (this[key] = properties[key]); }); } @@ -56,7 +50,7 @@ describe('Create a system account', async () => { const addressDataBuffer = addressData.toBuffer(); console.log(`Address data buffer length: ${addressDataBuffer.length}`); - let ix = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, { pubkey: newKeypair.publicKey, isSigner: true, isWritable: true }, diff --git a/basics/repository-layout/anchor/tests/test.ts b/basics/repository-layout/anchor/tests/test.ts index 44ea7482b..46d281a63 100644 --- a/basics/repository-layout/anchor/tests/test.ts +++ b/basics/repository-layout/anchor/tests/test.ts @@ -1,56 +1,44 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Carnival } from "../target/types/carnival"; +import * as anchor from '@coral-xyz/anchor'; +import type { Carnival } from '../target/types/carnival'; -describe("Carnival", () => { +describe('Carnival', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const wallet = provider.wallet as anchor.Wallet; const program = anchor.workspace.Carnival as anchor.Program; - async function sendCarnivalInstructions( - instructionsList: anchor.web3.TransactionInstruction[] - ) { - let tx = new anchor.web3.Transaction(); - for (var ix of instructionsList) { + async function sendCarnivalInstructions(instructionsList: anchor.web3.TransactionInstruction[]) { + const tx = new anchor.web3.Transaction(); + for (const ix of instructionsList) { tx.add(ix); } - await anchor.web3.sendAndConfirmTransaction(provider.connection, tx, [ - wallet.payer, - ]); + await anchor.web3.sendAndConfirmTransaction(provider.connection, tx, [wallet.payer]); } - it("Go on some rides!", async () => { + it('Go on some rides!', async () => { await sendCarnivalInstructions([ - await program.methods - .goOnRide("Jimmy", 36, 15, "Scrambler") - .instruction(), - await program.methods - .goOnRide("Mary", 52, 1, "Ferris Wheel") - .instruction(), - await program.methods - .goOnRide("Alice", 56, 15, "Scrambler") - .instruction(), - await program.methods - .goOnRide("Bob", 49, 6, "Tilt-a-Whirl") - .instruction(), + await program.methods.goOnRide('Jimmy', 36, 15, 'Scrambler').instruction(), + await program.methods.goOnRide('Mary', 52, 1, 'Ferris Wheel').instruction(), + await program.methods.goOnRide('Alice', 56, 15, 'Scrambler').instruction(), + await program.methods.goOnRide('Bob', 49, 6, 'Tilt-a-Whirl').instruction(), ]); }); - it("Play some games!", async () => { + it('Play some games!', async () => { await sendCarnivalInstructions([ - await program.methods.playGame("Jimmy", 15, "I Got It!").instruction(), - await program.methods.playGame("Mary", 1, "Ring Toss").instruction(), - await program.methods.playGame("Alice", 15, "Ladder Climb").instruction(), - await program.methods.playGame("Bob", 6, "Ring Toss").instruction(), + await program.methods.playGame('Jimmy', 15, 'I Got It!').instruction(), + await program.methods.playGame('Mary', 1, 'Ring Toss').instruction(), + await program.methods.playGame('Alice', 15, 'Ladder Climb').instruction(), + await program.methods.playGame('Bob', 6, 'Ring Toss').instruction(), ]); }); - it("Eat some food!", async () => { + it('Eat some food!', async () => { await sendCarnivalInstructions([ - await program.methods.eatFood("Jimmy", 15, "Taco Shack").instruction(), - await program.methods.eatFood("Mary", 1, "Larry's Pizza").instruction(), - await program.methods.eatFood("Alice", 15, "Dough Boy's").instruction(), - await program.methods.eatFood("Bob", 6, "Dough Boy's").instruction(), + await program.methods.eatFood('Jimmy', 15, 'Taco Shack').instruction(), + await program.methods.eatFood('Mary', 1, "Larry's Pizza").instruction(), + await program.methods.eatFood('Alice', 15, "Dough Boy's").instruction(), + await program.methods.eatFood('Bob', 6, "Dough Boy's").instruction(), ]); }); }); diff --git a/basics/repository-layout/native/tests/test.ts b/basics/repository-layout/native/tests/test.ts index 42f09bbea..d99b91be0 100644 --- a/basics/repository-layout/native/tests/test.ts +++ b/basics/repository-layout/native/tests/test.ts @@ -1,22 +1,18 @@ -import { - PublicKey, - Transaction, - TransactionInstruction, -} from '@solana/web3.js'; +import { Buffer } from 'node:buffer'; +import { describe, test } from 'node:test'; +import { PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js'; import * as borsh from 'borsh'; -import { Buffer } from 'buffer'; import { start } from 'solana-bankrun'; -import { describe, test } from 'node:test'; describe('Carnival', async () => { const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'repository_layout_program', programId: PROGRAM_ID }],[]); + const context = await start([{ name: 'repository_layout_program', programId: PROGRAM_ID }], []); const client = context.banksClient; const payer = context.payer; class Assignable { constructor(properties) { - Object.keys(properties).map(key => { + Object.keys(properties).map((key) => { return (this[key] = properties[key]); }); } @@ -44,18 +40,16 @@ describe('Carnival', async () => { ], ]); - async function sendCarnivalInstructions( - instructionsList: CarnivalInstruction[] - ) { - let tx = new Transaction(); - for (var ix of instructionsList) { + async function sendCarnivalInstructions(instructionsList: CarnivalInstruction[]) { + const tx = new Transaction(); + for (const ix of instructionsList) { tx.recentBlockhash = context.lastBlockhash; tx.add( new TransactionInstruction({ keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }], programId: PROGRAM_ID, data: ix.toBuffer(), - }) + }), ).sign(payer); } await client.processTransaction(tx); diff --git a/basics/transfer-sol/anchor/tests/test.ts b/basics/transfer-sol/anchor/tests/test.ts index ead6fc476..f411ad2d6 100644 --- a/basics/transfer-sol/anchor/tests/test.ts +++ b/basics/transfer-sol/anchor/tests/test.ts @@ -1,30 +1,23 @@ -import * as anchor from "@coral-xyz/anchor" -import { TransferSol } from "../target/types/transfer_sol" -import { - Keypair, - PublicKey, - LAMPORTS_PER_SOL, - SystemProgram, - Transaction, - sendAndConfirmTransaction, -} from "@solana/web3.js" -describe("transfer-sol", () => { - const provider = anchor.AnchorProvider.env() - anchor.setProvider(provider) - const payer = provider.wallet as anchor.Wallet - const program = anchor.workspace.TransferSol as anchor.Program +import * as anchor from '@coral-xyz/anchor'; +import { Keypair, LAMPORTS_PER_SOL, type PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; +import type { TransferSol } from '../target/types/transfer_sol'; +describe('transfer-sol', () => { + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + const payer = provider.wallet as anchor.Wallet; + const program = anchor.workspace.TransferSol as anchor.Program; // 1 SOL - const transferAmount = 1 * LAMPORTS_PER_SOL + const transferAmount = 1 * LAMPORTS_PER_SOL; // Generate a new keypair for the recipient - const recipient = new Keypair() + const recipient = new Keypair(); // Generate a new keypair to create an account owned by our program - const programOwnedAccount = new Keypair() + const programOwnedAccount = new Keypair(); - it("Transfer SOL with CPI", async () => { - await getBalances(payer.publicKey, recipient.publicKey, "Beginning") + it('Transfer SOL with CPI', async () => { + await getBalances(payer.publicKey, recipient.publicKey, 'Beginning'); await program.methods .transferSolWithCpi(new anchor.BN(transferAmount)) @@ -32,34 +25,27 @@ describe("transfer-sol", () => { payer: payer.publicKey, recipient: recipient.publicKey, }) - .rpc() + .rpc(); - await getBalances(payer.publicKey, recipient.publicKey, "Resulting") - }) + await getBalances(payer.publicKey, recipient.publicKey, 'Resulting'); + }); - it("Create and fund account owned by our program", async () => { + it('Create and fund account owned by our program', async () => { const instruction = SystemProgram.createAccount({ fromPubkey: payer.publicKey, newAccountPubkey: programOwnedAccount.publicKey, space: 0, lamports: 1 * LAMPORTS_PER_SOL, // 1 SOL programId: program.programId, // Program Owner, our program's address - }) + }); - const transaction = new Transaction().add(instruction) + const transaction = new Transaction().add(instruction); - await sendAndConfirmTransaction(provider.connection, transaction, [ - payer.payer, - programOwnedAccount, - ]) - }) + await sendAndConfirmTransaction(provider.connection, transaction, [payer.payer, programOwnedAccount]); + }); - it("Transfer SOL with Program", async () => { - await getBalances( - programOwnedAccount.publicKey, - payer.publicKey, - "Beginning" - ) + it('Transfer SOL with Program', async () => { + await getBalances(programOwnedAccount.publicKey, payer.publicKey, 'Beginning'); await program.methods .transferSolWithProgram(new anchor.BN(transferAmount)) @@ -67,24 +53,16 @@ describe("transfer-sol", () => { payer: programOwnedAccount.publicKey, recipient: payer.publicKey, }) - .rpc() + .rpc(); - await getBalances( - programOwnedAccount.publicKey, - payer.publicKey, - "Resulting" - ) - }) + await getBalances(programOwnedAccount.publicKey, payer.publicKey, 'Resulting'); + }); - async function getBalances( - payerPubkey: PublicKey, - recipientPubkey: PublicKey, - timeframe: string - ) { - let payerBalance = await provider.connection.getBalance(payerPubkey) - let recipientBalance = await provider.connection.getBalance(recipientPubkey) - console.log(`${timeframe} balances:`) - console.log(` Payer: ${payerBalance / LAMPORTS_PER_SOL}`) - console.log(` Recipient: ${recipientBalance / LAMPORTS_PER_SOL}`) + async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) { + const payerBalance = await provider.connection.getBalance(payerPubkey); + const recipientBalance = await provider.connection.getBalance(recipientPubkey); + console.log(`${timeframe} balances:`); + console.log(` Payer: ${payerBalance / LAMPORTS_PER_SOL}`); + console.log(` Recipient: ${recipientBalance / LAMPORTS_PER_SOL}`); } -}) +}); diff --git a/basics/transfer-sol/native/tests/instruction.ts b/basics/transfer-sol/native/tests/instruction.ts index 2edb32dbb..d8a74bf60 100644 --- a/basics/transfer-sol/native/tests/instruction.ts +++ b/basics/transfer-sol/native/tests/instruction.ts @@ -1,72 +1,67 @@ -import * as borsh from "borsh"; -import { Buffer } from "buffer"; -import { - PublicKey, - SystemProgram, - TransactionInstruction -} from '@solana/web3.js'; - +import { Buffer } from 'node:buffer'; +import { type PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; export enum InstructionType { - CpiTransfer, - ProgramTransfer, + CpiTransfer = 0, + ProgramTransfer = 1, } - export class TransferInstruction { + instruction: InstructionType; + amount: number; + constructor(props: { instruction: InstructionType; amount: number; + }) { + this.instruction = props.instruction; + this.amount = props.amount; + } - constructor(props: { - instruction: InstructionType, - amount: number, - }) { - this.instruction = props.instruction; - this.amount = props.amount; - } + toBuffer() { + return Buffer.from(borsh.serialize(TransferInstructionSchema, this)); + } - toBuffer() { - return Buffer.from(borsh.serialize(TransferInstructionSchema, this)) - }; - - static fromBuffer(buffer: Buffer) { - return borsh.deserialize(TransferInstructionSchema, TransferInstruction, buffer); - }; -}; + static fromBuffer(buffer: Buffer) { + return borsh.deserialize(TransferInstructionSchema, TransferInstruction, buffer); + } +} export const TransferInstructionSchema = new Map([ - [ TransferInstruction, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['amount', 'u64'], - ], - }] + [ + TransferInstruction, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['amount', 'u64'], + ], + }, + ], ]); export function createTransferInstruction( - payerPubkey: PublicKey, - recipientPubkey: PublicKey, - programId: PublicKey, - instruction: InstructionType, - amount: number, + payerPubkey: PublicKey, + recipientPubkey: PublicKey, + programId: PublicKey, + instruction: InstructionType, + amount: number, ): TransactionInstruction { + const instructionObject = new TransferInstruction({ + instruction, + amount, + }); - const instructionObject = new TransferInstruction({ - instruction, - amount, - }); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: payerPubkey, isSigner: true, isWritable: true }, + { pubkey: recipientPubkey, isSigner: false, isWritable: true }, + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, + ], + programId, + data: instructionObject.toBuffer(), + }); - const ix = new TransactionInstruction({ - keys: [ - {pubkey: payerPubkey, isSigner: true, isWritable: true}, - {pubkey: recipientPubkey, isSigner: false, isWritable: true}, - {pubkey: SystemProgram.programId, isSigner: false, isWritable: false} - ], - programId, - data: instructionObject.toBuffer(), - }); - - return ix; -} \ No newline at end of file + return ix; +} diff --git a/basics/transfer-sol/native/tests/test.ts b/basics/transfer-sol/native/tests/test.ts index b470628e4..734bb7eb2 100644 --- a/basics/transfer-sol/native/tests/test.ts +++ b/basics/transfer-sol/native/tests/test.ts @@ -1,17 +1,11 @@ -import { - Keypair, - LAMPORTS_PER_SOL, - PublicKey, - SystemProgram, - Transaction, -} from '@solana/web3.js'; -import { createTransferInstruction, InstructionType } from './instruction'; -import { start } from 'solana-bankrun'; import { describe, test } from 'node:test'; +import { Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction } from '@solana/web3.js'; +import { start } from 'solana-bankrun'; +import { InstructionType, createTransferInstruction } from './instruction'; describe('transfer-sol', async () => { const PROGRAM_ID = PublicKey.unique(); - const context = await start([{ name: 'transfer_sol_program', programId: PROGRAM_ID }],[]); + const context = await start([{ name: 'transfer_sol_program', programId: PROGRAM_ID }], []); const client = context.banksClient; const payer = context.payer; @@ -23,16 +17,10 @@ describe('transfer-sol', async () => { test('Transfer between accounts using the system program', async () => { await getBalances(payer.publicKey, test1Recipient.publicKey, 'Beginning'); - let ix = createTransferInstruction( - payer.publicKey, - test1Recipient.publicKey, - PROGRAM_ID, - InstructionType.CpiTransfer, - transferAmount - ); + const ix = createTransferInstruction(payer.publicKey, test1Recipient.publicKey, PROGRAM_ID, InstructionType.CpiTransfer, transferAmount); const tx = new Transaction(); - const [blockhash,_] = await client.getLatestBlockhash(); + const [blockhash, _] = await client.getLatestBlockhash(); tx.recentBlockhash = blockhash; tx.add(ix).sign(payer); @@ -55,26 +43,20 @@ describe('transfer-sol', async () => { const tx = new Transaction(); const [blockhash, _] = await client.getLatestBlockhash(); tx.recentBlockhash = blockhash; - tx.add(ix(test2Recipient1.publicKey)) - .add(ix(test2Recipient2.publicKey)) - .sign(payer, test2Recipient1, test2Recipient2); + tx.add(ix(test2Recipient1.publicKey)).add(ix(test2Recipient2.publicKey)).sign(payer, test2Recipient1, test2Recipient2); await client.processTransaction(tx); }); test('Transfer between accounts using our program', async () => { - await getBalances( - test2Recipient1.publicKey, - test2Recipient2.publicKey, - 'Beginning' - ); + await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, 'Beginning'); - let ix = createTransferInstruction( + const ix = createTransferInstruction( test2Recipient1.publicKey, test2Recipient2.publicKey, PROGRAM_ID, InstructionType.ProgramTransfer, - transferAmount + transferAmount, ); const tx = new Transaction(); @@ -84,20 +66,12 @@ describe('transfer-sol', async () => { await client.processTransaction(tx); - await getBalances( - test2Recipient1.publicKey, - test2Recipient2.publicKey, - 'Resulting' - ); + await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, 'Resulting'); }); - async function getBalances( - payerPubkey: PublicKey, - recipientPubkey: PublicKey, - timeframe: string - ) { - let payerBalance = await client.getBalance(payerPubkey); - let recipientBalance = await client.getBalance(recipientPubkey); + async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) { + const payerBalance = await client.getBalance(payerPubkey); + const recipientBalance = await client.getBalance(recipientPubkey); console.log(`${timeframe} balances:`); console.log(` Payer: ${payerBalance}`); diff --git a/basics/transfer-sol/seahorse/migrations/deploy.ts b/basics/transfer-sol/seahorse/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/basics/transfer-sol/seahorse/migrations/deploy.ts +++ b/basics/transfer-sol/seahorse/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/basics/transfer-sol/seahorse/package.json b/basics/transfer-sol/seahorse/package.json index 4de1ab3c2..b5355136b 100644 --- a/basics/transfer-sol/seahorse/package.json +++ b/basics/transfer-sol/seahorse/package.json @@ -1,19 +1,19 @@ { - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.27.0" - }, - "devDependencies": { - "chai": "^4.3.4", - "mocha": "^9.0.3", - "ts-mocha": "^10.0.0", - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "typescript": "^4.3.5", - "prettier": "^2.6.2" - } + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.27.0" + }, + "devDependencies": { + "chai": "^4.3.4", + "mocha": "^9.0.3", + "ts-mocha": "^10.0.0", + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "typescript": "^4.3.5", + "prettier": "^2.6.2" + } } diff --git a/basics/transfer-sol/seahorse/tests/seahorse.ts b/basics/transfer-sol/seahorse/tests/seahorse.ts index f6fc02149..9b8d6d99e 100644 --- a/basics/transfer-sol/seahorse/tests/seahorse.ts +++ b/basics/transfer-sol/seahorse/tests/seahorse.ts @@ -1,19 +1,16 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { Seahorse } from "../target/types/seahorse"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import type { Seahorse } from '../target/types/seahorse'; -describe("seahorse", () => { +describe('seahorse', () => { // Configure the client to use the local cluster. anchor.setProvider(anchor.AnchorProvider.env()); const program = anchor.workspace.Seahorse as Program; - const mockReceiverAccount = anchor.web3.PublicKey.findProgramAddressSync( - [Buffer.from("mock_account")], - program.programId - ); + const mockReceiverAccount = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('mock_account')], program.programId); - it("Initialize the Mock account to send our SOL to", async () => { + it('Initialize the Mock account to send our SOL to', async () => { const tx = await program.methods .initMockAccount() .accounts({ @@ -22,7 +19,7 @@ describe("seahorse", () => { }) .rpc(); }); - it("Send SOL To Mock account", async () => { + it('Send SOL To Mock account', async () => { const transferAmount = 1; // Convert to lamport. const lamports: number = anchor.web3.LAMPORTS_PER_SOL * transferAmount; @@ -33,6 +30,6 @@ describe("seahorse", () => { sender: program.provider.publicKey, }) .rpc(); - console.log("Your transaction signature: ", tx); + console.log('Your transaction signature: ', tx); }); }); diff --git a/basics/transfer-sol/seahorse/tsconfig.json b/basics/transfer-sol/seahorse/tsconfig.json index 558b83e5e..cd5d2e3d0 100644 --- a/basics/transfer-sol/seahorse/tsconfig.json +++ b/basics/transfer-sol/seahorse/tsconfig.json @@ -1,11 +1,10 @@ { - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/biome.json b/biome.json new file mode 100644 index 000000000..49ddd5545 --- /dev/null +++ b/biome.json @@ -0,0 +1,56 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.7.3/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "suspicious": { + "noExplicitAny": "off", + "noAssignInExpressions": "warn", + "noExportsInTest": "warn" + }, + "style": { + "noParameterAssign": "warn" + }, + "complexity": { + "noForEach": "warn", + "noUselessCatch": "warn", + "noBannedTypes": "warn" + } + } + }, + "formatter": { + "enabled": true, + "formatWithErrors": false, + "indentStyle": "space", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 150, + "attributePosition": "auto" + }, + "javascript": { + "formatter": { + "jsxQuoteStyle": "double", + "quoteProperties": "asNeeded", + "trailingComma": "all", + "semicolons": "always", + "arrowParentheses": "always", + "bracketSpacing": true, + "bracketSameLine": false, + "quoteStyle": "single", + "attributePosition": "auto" + } + }, + "json": { + "formatter": { + "trailingCommas": "none" + } + }, + "files": { + "ignore": ["node_modules"], + "include": ["**/*.ts", "**/*.js", "**/*.json"] + } +} diff --git a/compression/cnft-burn/.gitignore b/compression/cnft-burn/anchor/.gitignore similarity index 100% rename from compression/cnft-burn/.gitignore rename to compression/cnft-burn/anchor/.gitignore diff --git a/compression/cnft-burn/.prettierignore b/compression/cnft-burn/anchor/.prettierignore similarity index 100% rename from compression/cnft-burn/.prettierignore rename to compression/cnft-burn/anchor/.prettierignore diff --git a/compression/cnft-burn/Anchor.toml b/compression/cnft-burn/anchor/Anchor.toml similarity index 100% rename from compression/cnft-burn/Anchor.toml rename to compression/cnft-burn/anchor/Anchor.toml diff --git a/compression/cnft-burn/Cargo.toml b/compression/cnft-burn/anchor/Cargo.toml similarity index 100% rename from compression/cnft-burn/Cargo.toml rename to compression/cnft-burn/anchor/Cargo.toml diff --git a/compression/cnft-burn/README.md b/compression/cnft-burn/anchor/README.md similarity index 100% rename from compression/cnft-burn/README.md rename to compression/cnft-burn/anchor/README.md diff --git a/compression/cnft-burn/migrations/deploy.ts b/compression/cnft-burn/anchor/migrations/deploy.ts similarity index 77% rename from compression/cnft-burn/migrations/deploy.ts rename to compression/cnft-burn/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/compression/cnft-burn/migrations/deploy.ts +++ b/compression/cnft-burn/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/compression/cnft-burn/package.json b/compression/cnft-burn/anchor/package.json similarity index 100% rename from compression/cnft-burn/package.json rename to compression/cnft-burn/anchor/package.json diff --git a/compression/cnft-burn/anchor/pnpm-lock.yaml b/compression/cnft-burn/anchor/pnpm-lock.yaml new file mode 100644 index 000000000..a9d5bd59f --- /dev/null +++ b/compression/cnft-burn/anchor/pnpm-lock.yaml @@ -0,0 +1,3731 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: ^0.30.0 + version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/js': + specifier: ^0.19.4 + version: 0.19.5(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-bubblegum': + specifier: ^0.7.0 + version: 0.7.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-token-metadata': + specifier: ^2.12.0 + version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/umi': + specifier: ^0.9.0 + version: 0.9.1 + '@solana/spl-account-compression': + specifier: ^0.2.0 + version: 0.2.1(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: ^1.89.0 + version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + axios: + specifier: ^1.6.5 + version: 1.7.2 + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.16 + '@types/mocha': + specifier: ^9.0.0 + version: 9.1.1 + chai: + specifier: ^4.3.4 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + prettier: + specifier: ^2.6.2 + version: 2.8.8 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@bundlr-network/client@0.8.9': + resolution: {integrity: sha512-SJ7BAt/KhONeFQ0+nbqrw2DUWrsev6y6cmlXt+3x7fPCkw7OJwudtxV/h2nBteZd65NXjqw8yzkmLiLfZ7CCRA==} + deprecated: Bundlr is now Irys - please switch to @irys/sdk - this package will remain compatible with Irys for the foreseeable future. + hasBin: true + + '@coral-xyz/anchor@0.30.0': + resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.30.0': + resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@ethereumjs/rlp@4.0.1': + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + + '@ethereumjs/util@8.1.0': + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + + '@ethersproject/abi@5.7.0': + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + + '@ethersproject/abstract-provider@5.7.0': + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + + '@ethersproject/abstract-signer@5.7.0': + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/base64@5.7.0': + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + + '@ethersproject/basex@5.7.0': + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/constants@5.7.0': + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + + '@ethersproject/contracts@5.7.0': + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + + '@ethersproject/hash@5.7.0': + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + + '@ethersproject/hdnode@5.7.0': + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + + '@ethersproject/json-wallets@5.7.0': + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/networks@5.7.1': + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + + '@ethersproject/pbkdf2@5.7.0': + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + + '@ethersproject/properties@5.7.0': + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + + '@ethersproject/providers@5.7.2': + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + + '@ethersproject/random@5.7.0': + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + + '@ethersproject/sha2@5.7.0': + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + + '@ethersproject/signing-key@5.7.0': + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + + '@ethersproject/solidity@5.7.0': + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + + '@ethersproject/strings@5.7.0': + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + + '@ethersproject/transactions@5.7.0': + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + + '@ethersproject/units@5.7.0': + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + + '@ethersproject/wallet@5.7.0': + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + + '@ethersproject/web@5.7.1': + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + + '@ethersproject/wordlists@5.7.0': + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + + '@metaplex-foundation/beet-solana@0.3.1': + resolution: {integrity: sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==} + + '@metaplex-foundation/beet-solana@0.4.0': + resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==} + + '@metaplex-foundation/beet-solana@0.4.1': + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + + '@metaplex-foundation/beet@0.4.0': + resolution: {integrity: sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==} + + '@metaplex-foundation/beet@0.6.1': + resolution: {integrity: sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==} + + '@metaplex-foundation/beet@0.7.1': + resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==} + + '@metaplex-foundation/beet@0.7.2': + resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==} + + '@metaplex-foundation/cusper@0.0.2': + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + + '@metaplex-foundation/js@0.19.5': + resolution: {integrity: sha512-OXGX0zr4rpr4vpFt6+tO+bEQ7yN5fqyKpAWYzxPb0yGM0Rj6JKlvj0Eaiymvwmm5XtLPK+98M8y9jxZiQEtsEA==} + + '@metaplex-foundation/mpl-auction-house@2.5.1': + resolution: {integrity: sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==} + + '@metaplex-foundation/mpl-bubblegum@0.6.2': + resolution: {integrity: sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==} + + '@metaplex-foundation/mpl-bubblegum@0.7.0': + resolution: {integrity: sha512-HCo6q+nh8M3KRv9/aUaZcJo5/vPJEeZwPGRDWkqN7lUXoMIvhd83fZi7MB1rIg1gwpVHfHqim0A02LCYKisWFg==} + + '@metaplex-foundation/mpl-candy-guard@0.3.2': + resolution: {integrity: sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==} + + '@metaplex-foundation/mpl-candy-machine-core@0.1.2': + resolution: {integrity: sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==} + + '@metaplex-foundation/mpl-candy-machine@5.1.0': + resolution: {integrity: sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==} + + '@metaplex-foundation/mpl-token-metadata@2.13.0': + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + + '@metaplex-foundation/umi-options@0.8.9': + resolution: {integrity: sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A==} + + '@metaplex-foundation/umi-public-keys@0.8.9': + resolution: {integrity: sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q==} + + '@metaplex-foundation/umi-serializers-core@0.8.9': + resolution: {integrity: sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w==} + + '@metaplex-foundation/umi-serializers-encodings@0.8.9': + resolution: {integrity: sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q==} + + '@metaplex-foundation/umi-serializers-numbers@0.8.9': + resolution: {integrity: sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg==} + + '@metaplex-foundation/umi-serializers@0.9.0': + resolution: {integrity: sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg==} + + '@metaplex-foundation/umi@0.9.1': + resolution: {integrity: sha512-IhHoOvp4vfO/++YL+78+iVuLM53+FDwUOZDYgH6lx0jYXyQ27BeaieeR5i+q3A9dz4KxQo5Nzc5aCA1109QGCQ==} + + '@noble/curves@1.3.0': + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/ed25519@1.7.3': + resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@randlabs/communication-bridge@1.0.1': + resolution: {integrity: sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==} + + '@randlabs/myalgo-connect@1.4.2': + resolution: {integrity: sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==} + + '@scure/base@1.1.6': + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + + '@scure/bip32@1.3.3': + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + + '@scure/bip39@1.2.2': + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-account-compression@0.1.10': + resolution: {integrity: sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.50.1 + + '@solana/spl-account-compression@0.2.1': + resolution: {integrity: sha512-GIf/euXN/ZJMfiH3DNiIcolNBZ5pga+usGVxEAyt6Iucv0EXsbxefHCePqRr3ryldFpFm4mjJPz5sm+FzZuDnw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.1.8': + resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} + engines: {node: '>= 10'} + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/wallet-adapter-base@0.9.23': + resolution: {integrity: sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.77.3 + + '@solana/wallet-standard-features@1.2.0': + resolution: {integrity: sha512-tUd9srDLkRpe1BYg7we+c4UhRQkq+XQWswsr/L1xfGmoRDF47BPSXf4zE7ZU2GRBGvxtGt7lwJVAufQyQYhxTQ==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@supercharge/promise-pool@2.4.0': + resolution: {integrity: sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w==} + engines: {node: '>=8'} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@11.11.6': + resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + '@wallet-standard/base@1.0.1': + resolution: {integrity: sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w==} + engines: {node: '>=16'} + + '@wallet-standard/features@1.0.3': + resolution: {integrity: sha512-m8475I6W5LTatTZuUz5JJNK42wFRgkJTB0I9tkruMwfqBF2UN2eomkYNVf9RbrsROelCRzSFmugqjKZBFaubsA==} + engines: {node: '>=16'} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + algo-msgpack-with-bigint@2.1.1: + resolution: {integrity: sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==} + engines: {node: '>= 10'} + + algosdk@1.24.1: + resolution: {integrity: sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==} + engines: {node: '>=14.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arbundles@0.6.23: + resolution: {integrity: sha512-+gr93F3fivN+6dhiImT6BQNaXz4oECPn2GYjCZjS2yEoq7hM78FRvVp6kQyjEdhnuBFQr/q4oS/nkjnQlHdj9Q==} + + arconnect@0.4.2: + resolution: {integrity: sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + arweave-stream-tx@1.2.2: + resolution: {integrity: sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==} + peerDependencies: + arweave: ^1.10.0 + + arweave@1.15.1: + resolution: {integrity: sha512-rT7FOwqdudd5npqp4xOYdDT2035LtpcqePjwirh4wjRiEtVsz1FZkRiM2Yj+fOAwYzOm/hNG0GDOipDSaiEGGQ==} + engines: {node: '>=18'} + + asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + avsc@https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef: + resolution: {tarball: https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef} + version: 5.4.7 + engines: {node: '>=0.11'} + + axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + + axios@0.25.0: + resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} + + axios@1.7.2: + resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + base64url@3.0.1: + resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} + engines: {node: '>=6.0.0'} + + bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bip39-light@1.0.7: + resolution: {integrity: sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==} + + bip39@3.0.2: + resolution: {integrity: sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bn.js@4.11.6: + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + bn.js@5.2.0: + resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.6.0: + resolution: {integrity: sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer-reverse@1.0.1: + resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + capability@0.2.5: + resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + crypto-js@3.3.0: + resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==} + + csv-generate@4.4.1: + resolution: {integrity: sha512-O/einO0v4zPmXaOV+sYqGa02VkST4GP5GLpWBNHEouIU7pF3kpGf3D0kCCvX82ydIY4EKkOK+R8b1BYsRXravg==} + + csv-parse@5.5.6: + resolution: {integrity: sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==} + + csv-stringify@6.5.0: + resolution: {integrity: sha512-edlXFVKcUx7r8Vx5zQucsuMg4wb/xT6qyz+Sr1vnLrdXqlLD1+UKyWNyZ9zn6mUW1ewmGxrpVwAcChGF0HQ/2Q==} + + csv@6.3.9: + resolution: {integrity: sha512-eiN+Qu8NwSLxZYia6WzB8xlX/rAQ/8EgK5A4dIF7Bz96mzcr5dW1jlcNmjG0QWySWKfPdCerH3RQ96ZqqsE8cA==} + engines: {node: '>= 0.1.90'} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + + elliptic@6.5.5: + resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + error-polyfill@0.1.3: + resolution: {integrity: sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + ethereum-bloom-filters@1.1.0: + resolution: {integrity: sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==} + + ethereum-cryptography@2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + + ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + + ethjs-unit@0.1.6: + resolution: {integrity: sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=} + engines: {node: '>=6.5.0', npm: '>=3'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hi-base32@0.5.1: + resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hex-prefixed@1.0.0: + resolution: {integrity: sha1-fY035q135dEnFIkTxXPggtd39VQ=} + engines: {node: '>=6.5.0', npm: '>=3'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-sha256@0.9.0: + resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-sha3@0.9.3: + resolution: {integrity: sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==} + + js-sha512@0.8.0: + resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + merkletreejs@0.2.32: + resolution: {integrity: sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ==} + engines: {node: '>= 7.6.0'} + + micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multistream@4.1.0: + resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==} + + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + near-api-js@0.44.2: + resolution: {integrity: sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg==} + + near-hd-key@1.2.1: + resolution: {integrity: sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==} + + near-seed-phrase@0.2.0: + resolution: {integrity: sha512-NpmrnejpY1AdlRpDZ0schJQJtfBaoUheRfiYtQpcq9TkwPgqKZCRULV5L3hHmLc0ep7KRtikbPQ9R2ztN/3cyQ==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + number-to-bn@1.7.0: + resolution: {integrity: sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=} + engines: {node: '>=6.5.0', npm: '>=3'} + + o3@1.0.3: + resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + secp256k1@4.0.3: + resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} + engines: {node: '>=10.0.0'} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + stream-transform@3.3.2: + resolution: {integrity: sha512-v64PUnPy9Qw94NGuaEMo+9RHQe4jTBYf+NkTtqkCgeuiNo8NlL0LtLR7fkKWNVFtp3RhIm5Dlxkgm5uz7TDimQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-hex-prefix@1.0.0: + resolution: {integrity: sha1-DF8VX+8RUTczd96du1iNoFUA428=} + engines: {node: '>=6.5.0', npm: '>=3'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + treeify@1.1.0: + resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} + engines: {node: '>=0.6'} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typescript-collections@1.3.3: + resolution: {integrity: sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + u3@0.1.1: + resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + vlq@2.0.4: + resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web3-utils@1.10.4: + resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} + engines: {node: '>=8.0.0'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@bundlr-network/client@0.8.9(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10)': + dependencies: + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@supercharge/promise-pool': 2.4.0 + algosdk: 1.24.1 + arbundles: 0.6.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10) + arweave: 1.15.1 + async-retry: 1.3.3 + axios: 0.25.0(debug@4.3.4) + base64url: 3.0.1 + bignumber.js: 9.1.2 + bs58: 4.0.1 + commander: 8.3.0 + csv: 6.3.9 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + inquirer: 8.2.6 + js-sha256: 0.9.0 + mime-types: 2.1.35 + near-api-js: 0.44.2 + near-seed-phrase: 0.2.0 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - utf-8-validate + + '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.4.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.1.8 + crypto-hash: 1.3.0 + eventemitter3: 4.0.7 + pako: 2.1.0 + snake-case: 3.0.4 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer-layout: 1.2.2 + + '@ethereumjs/rlp@4.0.1': {} + + '@ethereumjs/util@8.1.0': + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.1.3 + micro-ftch: 0.3.1 + + '@ethersproject/abi@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/abstract-provider@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + + '@ethersproject/abstract-signer@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/base64@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + + '@ethersproject/basex@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + + '@ethersproject/contracts@5.7.0': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + + '@ethersproject/hash@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/hdnode@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/json-wallets@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/pbkdf2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@ethersproject/random@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/sha2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + + '@ethersproject/signing-key@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + + '@ethersproject/solidity@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/transactions@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + + '@ethersproject/units@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/wallet@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/web@5.7.1': + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/wordlists@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@metaplex-foundation/beet-solana@0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet-solana@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet@0.4.0': + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/beet@0.6.1': + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/beet@0.7.1': + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/beet@0.7.2': + dependencies: + ansicolors: 0.3.2 + assert: 2.1.0 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/cusper@0.0.2': {} + + '@metaplex-foundation/js@0.19.5(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@bundlr-network/client': 0.8.9(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10) + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/mpl-auction-house': 2.5.1(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-bubblegum': 0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-candy-guard': 0.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-candy-machine': 5.1.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-candy-machine-core': 0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@noble/ed25519': 1.7.3 + '@noble/hashes': 1.4.0 + '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bignumber.js: 9.1.2 + bn.js: 5.2.1 + bs58: 5.0.0 + buffer: 6.0.3 + debug: 4.3.4 + eventemitter3: 4.0.7 + lodash.clonedeep: 4.5.0 + lodash.isequal: 4.5.0 + merkletreejs: 0.2.32 + mime: 3.0.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-auction-house@2.5.1(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.6.1 + '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-bubblegum@0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + js-sha3: 0.8.0 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-bubblegum@0.7.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + js-sha3: 0.8.0 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-candy-guard@0.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.4.0 + '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-candy-machine-core@0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.4.0 + '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-candy-machine@5.1.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/umi-options@0.8.9': {} + + '@metaplex-foundation/umi-public-keys@0.8.9': + dependencies: + '@metaplex-foundation/umi-serializers-encodings': 0.8.9 + + '@metaplex-foundation/umi-serializers-core@0.8.9': {} + + '@metaplex-foundation/umi-serializers-encodings@0.8.9': + dependencies: + '@metaplex-foundation/umi-serializers-core': 0.8.9 + + '@metaplex-foundation/umi-serializers-numbers@0.8.9': + dependencies: + '@metaplex-foundation/umi-serializers-core': 0.8.9 + + '@metaplex-foundation/umi-serializers@0.9.0': + dependencies: + '@metaplex-foundation/umi-options': 0.8.9 + '@metaplex-foundation/umi-public-keys': 0.8.9 + '@metaplex-foundation/umi-serializers-core': 0.8.9 + '@metaplex-foundation/umi-serializers-encodings': 0.8.9 + '@metaplex-foundation/umi-serializers-numbers': 0.8.9 + + '@metaplex-foundation/umi@0.9.1': + dependencies: + '@metaplex-foundation/umi-options': 0.8.9 + '@metaplex-foundation/umi-public-keys': 0.8.9 + '@metaplex-foundation/umi-serializers': 0.9.0 + + '@noble/curves@1.3.0': + dependencies: + '@noble/hashes': 1.3.3 + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/ed25519@1.7.3': {} + + '@noble/hashes@1.3.3': {} + + '@noble/hashes@1.4.0': {} + + '@randlabs/communication-bridge@1.0.1': {} + + '@randlabs/myalgo-connect@1.4.2': + dependencies: + '@randlabs/communication-bridge': 1.0.1 + + '@scure/base@1.1.6': {} + + '@scure/bip32@1.3.3': + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@scure/bip39@1.2.2': + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-account-compression@0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + borsh: 0.7.0 + js-sha3: 0.8.0 + typescript-collections: 1.3.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@solana/spl-account-compression@0.2.1(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + js-sha3: 0.9.3 + typescript-collections: 1.3.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer: 6.0.3 + buffer-layout: 1.2.2 + dotenv: 10.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@solana/wallet-standard-features': 1.2.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@wallet-standard/base': 1.0.1 + '@wallet-standard/features': 1.0.3 + eventemitter3: 4.0.7 + + '@solana/wallet-standard-features@1.2.0': + dependencies: + '@wallet-standard/base': 1.0.1 + '@wallet-standard/features': 1.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@supercharge/promise-pool@2.4.0': {} + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@11.11.6': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + '@wallet-standard/base@1.0.1': {} + + '@wallet-standard/features@1.0.3': + dependencies: + '@wallet-standard/base': 1.0.1 + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + aes-js@3.0.0: {} + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + algo-msgpack-with-bigint@2.1.1: {} + + algosdk@1.24.1: + dependencies: + algo-msgpack-with-bigint: 2.1.1 + buffer: 6.0.3 + cross-fetch: 3.1.8 + hi-base32: 0.5.1 + js-sha256: 0.9.0 + js-sha3: 0.8.0 + js-sha512: 0.8.0 + json-bigint: 1.0.0 + tweetnacl: 1.0.3 + vlq: 2.0.4 + transitivePeerDependencies: + - encoding + + ansi-colors@4.1.1: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arbundles@0.6.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10): + dependencies: + '@noble/ed25519': 1.7.3 + '@randlabs/myalgo-connect': 1.4.2 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + algosdk: 1.24.1 + arweave: 1.15.1 + arweave-stream-tx: 1.2.2(arweave@1.15.1) + avsc: https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef + axios: 0.21.4(debug@4.3.4) + base64url: 3.0.1 + bs58: 4.0.1 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + keccak: 3.0.4 + multistream: 4.1.0 + process: 0.11.10 + secp256k1: 4.0.3 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - '@solana/web3.js' + - bufferutil + - debug + - encoding + - utf-8-validate + + arconnect@0.4.2: + dependencies: + arweave: 1.15.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + arweave-stream-tx@1.2.2(arweave@1.15.1): + dependencies: + arweave: 1.15.1 + exponential-backoff: 3.1.1 + + arweave@1.15.1: + dependencies: + arconnect: 0.4.2 + asn1.js: 5.4.1 + base64-js: 1.5.1 + bignumber.js: 9.1.2 + + asn1.js@5.4.1: + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@1.1.0: {} + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + avsc@https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef: {} + + axios@0.21.4(debug@4.3.4): + dependencies: + follow-redirects: 1.15.6(debug@4.3.4) + transitivePeerDependencies: + - debug + + axios@0.25.0(debug@4.3.4): + dependencies: + follow-redirects: 1.15.6(debug@4.3.4) + transitivePeerDependencies: + - debug + + axios@1.7.2: + dependencies: + follow-redirects: 1.15.6(debug@4.3.4) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base64-js@1.5.1: {} + + base64url@3.0.1: {} + + bech32@1.1.4: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bip39-light@1.0.7: + dependencies: + create-hash: 1.2.0 + pbkdf2: 3.1.2 + + bip39@3.0.2: + dependencies: + '@types/node': 11.11.6 + create-hash: 1.2.0 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + bn.js@4.11.6: {} + + bn.js@4.12.0: {} + + bn.js@5.2.0: {} + + bn.js@5.2.1: {} + + borsh@0.6.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + buffer-from@1.1.2: {} + + buffer-layout@1.2.2: {} + + buffer-reverse@1.0.1: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + capability@0.2.5: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + chardet@0.7.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cipher-base@1.0.4: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-width@3.0.0: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@12.1.0: {} + + commander@2.20.3: {} + + commander@8.3.0: {} + + concat-map@0.0.1: {} + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + cross-fetch@3.1.8: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + crypto-hash@1.3.0: {} + + crypto-js@3.3.0: {} + + csv-generate@4.4.1: {} + + csv-parse@5.5.6: {} + + csv-stringify@6.5.0: {} + + csv@6.3.9: + dependencies: + csv-generate: 4.4.1 + csv-parse: 5.5.6 + csv-stringify: 6.5.0 + stream-transform: 3.3.2 + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + delayed-stream@1.0.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + + dotenv@10.0.0: {} + + elliptic@6.5.4: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + elliptic@6.5.5: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emoji-regex@8.0.0: {} + + error-polyfill@0.1.3: + dependencies: + capability: 0.2.5 + o3: 1.0.3 + u3: 0.1.1 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + ethereum-bloom-filters@1.1.0: + dependencies: + '@noble/hashes': 1.4.0 + + ethereum-cryptography@2.1.3: + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 + + ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethjs-unit@0.1.6: + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + + eventemitter3@4.0.7: {} + + exponential-backoff@3.1.1: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + follow-redirects@1.15.6(debug@4.3.4): + optionalDependencies: + debug: 4.3.4 + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hash-base@3.1.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + hi-base32@0.5.1: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + http-errors@1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hex-prefixed@1.0.0: {} + + is-interactive@1.0.0: {} + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-sha256@0.9.0: {} + + js-sha3@0.8.0: {} + + js-sha3@0.9.3: {} + + js-sha512@0.8.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.1.2 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.1 + readable-stream: 3.6.2 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.clonedeep@4.5.0: {} + + lodash.isequal@4.5.0: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lower-case@2.0.2: + dependencies: + tslib: 2.6.2 + + make-error@1.3.6: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + merkletreejs@0.2.32: + dependencies: + bignumber.js: 9.1.2 + buffer-reverse: 1.0.1 + crypto-js: 3.3.0 + treeify: 1.1.0 + web3-utils: 1.10.4 + + micro-ftch@0.3.1: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@3.0.0: {} + + mimic-fn@2.1.0: {} + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + multistream@4.1.0: + dependencies: + once: 1.4.0 + readable-stream: 3.6.2 + + mustache@4.2.0: {} + + mute-stream@0.0.8: {} + + nanoid@3.3.1: {} + + near-api-js@0.44.2: + dependencies: + bn.js: 5.2.0 + borsh: 0.6.0 + bs58: 4.0.1 + depd: 2.0.0 + error-polyfill: 0.1.3 + http-errors: 1.8.1 + js-sha256: 0.9.0 + mustache: 4.2.0 + node-fetch: 2.7.0 + text-encoding-utf-8: 1.0.2 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - encoding + + near-hd-key@1.2.1: + dependencies: + bip39: 3.0.2 + create-hmac: 1.1.7 + tweetnacl: 1.0.3 + + near-seed-phrase@0.2.0: + dependencies: + bip39-light: 1.0.7 + bs58: 4.0.1 + near-hd-key: 1.2.1 + tweetnacl: 1.0.3 + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + + node-addon-api@2.0.2: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: {} + + normalize-path@3.0.0: {} + + number-to-bn@1.7.0: + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 + + o3@1.0.3: + dependencies: + capability: 0.2.5 + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-tmpdir@1.0.2: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + pako@2.1.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + pbkdf2@3.1.2: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + prettier@2.8.8: {} + + process@0.11.10: {} + + proxy-from-env@1.1.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry@0.13.1: {} + + ripemd160@2.0.2: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + run-async@2.4.1: {} + + rxjs@7.8.1: + dependencies: + tslib: 2.6.2 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + scrypt-js@3.0.1: {} + + secp256k1@4.0.3: + dependencies: + elliptic: 6.5.5 + node-addon-api: 2.0.2 + node-gyp-build: 4.8.1 + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + signal-exit@3.0.7: {} + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + statuses@1.5.0: {} + + stream-transform@3.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-hex-prefix@1.0.0: + dependencies: + is-hex-prefixed: 1.0.0 + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + superstruct@0.15.5: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.3 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmp@0.2.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + toml@3.0.0: {} + + tr46@0.0.3: {} + + treeify@1.1.0: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + tslib@2.6.2: {} + + tweetnacl@1.0.3: {} + + type-detect@4.0.8: {} + + type-fest@0.21.3: {} + + typescript-collections@1.3.3: {} + + typescript@4.9.5: {} + + u3@0.1.1: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + utf8@3.0.0: {} + + util-deprecate@1.0.2: {} + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + uuid@8.3.2: {} + + vlq@2.0.4: {} + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + web3-utils@1.10.4: + dependencies: + '@ethereumjs/util': 8.1.0 + bn.js: 5.2.1 + ethereum-bloom-filters: 1.1.0 + ethereum-cryptography: 2.1.3 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/compression/cnft-burn/programs/cnft-burn/Cargo.toml b/compression/cnft-burn/anchor/programs/cnft-burn/Cargo.toml similarity index 100% rename from compression/cnft-burn/programs/cnft-burn/Cargo.toml rename to compression/cnft-burn/anchor/programs/cnft-burn/Cargo.toml diff --git a/compression/cnft-burn/programs/cnft-burn/Xargo.toml b/compression/cnft-burn/anchor/programs/cnft-burn/Xargo.toml similarity index 100% rename from compression/cnft-burn/programs/cnft-burn/Xargo.toml rename to compression/cnft-burn/anchor/programs/cnft-burn/Xargo.toml diff --git a/compression/cnft-burn/programs/cnft-burn/src/lib.rs b/compression/cnft-burn/anchor/programs/cnft-burn/src/lib.rs similarity index 100% rename from compression/cnft-burn/programs/cnft-burn/src/lib.rs rename to compression/cnft-burn/anchor/programs/cnft-burn/src/lib.rs diff --git a/compression/cnft-burn/tests/ReadApi/WrapperConnection.ts b/compression/cnft-burn/anchor/tests/ReadApi/WrapperConnection.ts similarity index 66% rename from compression/cnft-burn/tests/ReadApi/WrapperConnection.ts rename to compression/cnft-burn/anchor/tests/ReadApi/WrapperConnection.ts index 8a36954d3..b990da31c 100644 --- a/compression/cnft-burn/tests/ReadApi/WrapperConnection.ts +++ b/compression/cnft-burn/anchor/tests/ReadApi/WrapperConnection.ts @@ -1,4 +1,3 @@ -import { Commitment, Connection, ConnectionConfig, PublicKey } from "@solana/web3.js"; // local imports for the ReadApi types import type { GetAssetProofRpcInput, @@ -8,14 +7,15 @@ import type { GetAssetsByOwnerRpcInput, ReadApiAsset, ReadApiAssetList, -} from "@/ReadApi/types"; -import type { Metadata, Mint, NftOriginalEdition, SplTokenCurrency } from "@metaplex-foundation/js"; +} from '@/ReadApi/types'; +import type { Metadata, Mint, NftOriginalEdition, SplTokenCurrency } from '@metaplex-foundation/js'; // import from the `@metaplex-foundation/js` -import { MetaplexError, Pda, amount, toBigNumber } from "@metaplex-foundation/js"; +import { MetaplexError, Pda, amount, toBigNumber } from '@metaplex-foundation/js'; +import { type Commitment, Connection, type ConnectionConfig, PublicKey } from '@solana/web3.js'; -import BN from "bn.js"; -import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum"; -import { TokenStandard } from "@metaplex-foundation/mpl-token-metadata"; +import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum'; +import { TokenStandard } from '@metaplex-foundation/mpl-token-metadata'; +import BN from 'bn.js'; type JsonRpcParams = { method: string; @@ -29,9 +29,9 @@ type JsonRpcOutput = { /** @group Errors */ export class ReadApiError extends MetaplexError { - readonly name: string = "ReadApiError"; + readonly name: string = 'ReadApiError'; constructor(message: string, cause?: Error) { - super(message, "rpc", undefined, cause); + super(message, 'rpc', undefined, cause); } } @@ -40,7 +40,7 @@ export class ReadApiError extends MetaplexError { */ export const toNftEditionFromReadApiAsset = (input: ReadApiAsset): NftOriginalEdition => { return { - model: "nftEdition", + model: 'nftEdition', isOriginal: true, address: new PublicKey(input.id), supply: toBigNumber(input.supply.print_current_supply), @@ -53,13 +53,13 @@ export const toNftEditionFromReadApiAsset = (input: ReadApiAsset): NftOriginalEd */ export const toMintFromReadApiAsset = (input: ReadApiAsset): Mint => { const currency: SplTokenCurrency = { - symbol: "Token", + symbol: 'Token', decimals: 0, - namespace: "spl-token", + namespace: 'spl-token', }; return { - model: "mint", + model: 'mint', address: new PublicKey(input.id), mintAuthorityAddress: new PublicKey(input.id), freezeAuthorityAddress: new PublicKey(input.id), @@ -74,26 +74,26 @@ export const toMintFromReadApiAsset = (input: ReadApiAsset): Mint => { * Convert a ReadApi asset's data into standard Metaplex `Metadata` */ export const toMetadataFromReadApiAsset = (input: ReadApiAsset): Metadata => { - const updateAuthority = input.authorities?.find(authority => authority.scopes.includes("full")); + const updateAuthority = input.authorities?.find((authority) => authority.scopes.includes('full')); - const collection = input.grouping.find(({ group_key }) => group_key === "collection"); + const collection = input.grouping.find(({ group_key }) => group_key === 'collection'); return { - model: "metadata", + model: 'metadata', /** * We technically don't have a metadata address anymore. * So we are using the asset's id as the address */ address: Pda.find(BUBBLEGUM_PROGRAM_ID, [ - Buffer.from("asset", "utf-8"), + Buffer.from('asset', 'utf-8'), new PublicKey(input.compression.tree).toBuffer(), - Uint8Array.from(new BN(input.compression.leaf_id).toArray("le", 8)), + Uint8Array.from(new BN(input.compression.leaf_id).toArray('le', 8)), ]), mintAddress: new PublicKey(input.id), - updateAuthorityAddress: new PublicKey(updateAuthority!.address), + updateAuthorityAddress: new PublicKey(updateAuthority?.address), - name: input.content.metadata?.name ?? "", - symbol: input.content.metadata?.symbol ?? "", + name: input.content.metadata?.name ?? '', + symbol: input.content.metadata?.symbol ?? '', json: input.content.metadata, jsonLoaded: true, @@ -107,9 +107,7 @@ export const toMetadataFromReadApiAsset = (input: ReadApiAsset): Metadata => { editionNonce: input.supply.edition_nonce, tokenStandard: TokenStandard.NonFungible, - collection: collection - ? { address: new PublicKey(collection.group_value), verified: false } - : null, + collection: collection ? { address: new PublicKey(collection.group_value), verified: false } : null, // Current regular `Metadata` does not currently have a `compression` value // @ts-ignore @@ -130,40 +128,36 @@ export const toMetadataFromReadApiAsset = (input: ReadApiAsset): Metadata => { * for state compression and compressed NFTs */ export class WrapperConnection extends Connection { - constructor(endpoint: string, commitmentOrConfig?: Commitment | ConnectionConfig) { - super(endpoint, commitmentOrConfig); - } - private callReadApi = async ( jsonRpcParams: JsonRpcParams, ): Promise> => { const response = await fetch(this.rpcEndpoint, { - method: "POST", + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", + jsonrpc: '2.0', method: jsonRpcParams.method, - id: jsonRpcParams.id ?? "rpd-op-123", + id: jsonRpcParams.id ?? 'rpd-op-123', params: jsonRpcParams.params, }), }); - return await response.json() as JsonRpcOutput; + return (await response.json()) as JsonRpcOutput; }; // Asset id can be calculated via Bubblegum#getLeafAssetId // It is a PDA with the following seeds: ["asset", tree, leafIndex] async getAsset(assetId: PublicKey): Promise { const { result: asset } = await this.callReadApi({ - method: "getAsset", + method: 'getAsset', params: { id: assetId.toBase58(), }, }); - if (!asset) throw new ReadApiError("No asset returned"); + if (!asset) throw new ReadApiError('No asset returned'); return asset; } @@ -171,41 +165,27 @@ export class WrapperConnection extends Connection { // Asset id can be calculated via Bubblegum#getLeafAssetId // It is a PDA with the following seeds: ["asset", tree, leafIndex] async getAssetProof(assetId: PublicKey): Promise { - const { result: proof } = await this.callReadApi< - GetAssetProofRpcInput, - GetAssetProofRpcResponse - >({ - method: "getAssetProof", + const { result: proof } = await this.callReadApi({ + method: 'getAssetProof', params: { id: assetId.toBase58(), }, }); - if (!proof) throw new ReadApiError("No asset proof returned"); + if (!proof) throw new ReadApiError('No asset proof returned'); return proof; } // - async getAssetsByGroup({ - groupKey, - groupValue, - page, - limit, - sortBy, - before, - after, - }: GetAssetsByGroupRpcInput): Promise { + async getAssetsByGroup({ groupKey, groupValue, page, limit, sortBy, before, after }: GetAssetsByGroupRpcInput): Promise { // `page` cannot be supplied with `before` or `after` - if (typeof page == "number" && (before || after)) - throw new ReadApiError( - "Pagination Error. Only one pagination parameter supported per query.", - ); + if (typeof page === 'number' && (before || after)) throw new ReadApiError('Pagination Error. Only one pagination parameter supported per query.'); // a pagination method MUST be selected, but we are defaulting to using `page=0` const { result } = await this.callReadApi({ - method: "getAssetsByGroup", + method: 'getAssetsByGroup', params: { groupKey, groupValue, @@ -217,30 +197,20 @@ export class WrapperConnection extends Connection { }, }); - if (!result) throw new ReadApiError("No results returned"); + if (!result) throw new ReadApiError('No results returned'); return result; } // - async getAssetsByOwner({ - ownerAddress, - page, - limit, - sortBy, - before, - after, - }: GetAssetsByOwnerRpcInput): Promise { + async getAssetsByOwner({ ownerAddress, page, limit, sortBy, before, after }: GetAssetsByOwnerRpcInput): Promise { // `page` cannot be supplied with `before` or `after` - if (typeof page == "number" && (before || after)) - throw new ReadApiError( - "Pagination Error. Only one pagination parameter supported per query.", - ); + if (typeof page === 'number' && (before || after)) throw new ReadApiError('Pagination Error. Only one pagination parameter supported per query.'); // a pagination method MUST be selected, but we are defaulting to using `page=0` const { result } = await this.callReadApi({ - method: "getAssetsByOwner", + method: 'getAssetsByOwner', params: { ownerAddress, after: after ?? null, @@ -251,7 +221,7 @@ export class WrapperConnection extends Connection { }, }); - if (!result) throw new ReadApiError("No results returned"); + if (!result) throw new ReadApiError('No results returned'); return result; } diff --git a/compression/cnft-burn/tests/ReadApi/types.ts b/compression/cnft-burn/anchor/tests/ReadApi/types.ts similarity index 83% rename from compression/cnft-burn/tests/ReadApi/types.ts rename to compression/cnft-burn/anchor/tests/ReadApi/types.ts index f2f8aa74f..a49e40fb0 100644 --- a/compression/cnft-burn/tests/ReadApi/types.ts +++ b/compression/cnft-burn/anchor/tests/ReadApi/types.ts @@ -2,25 +2,25 @@ Types specific to the ReadApi */ -import type { Metadata, Option } from "@metaplex-foundation/js"; -import { ConcurrentMerkleTreeAccount } from "@solana/spl-account-compression"; +import type { Metadata, Option } from '@metaplex-foundation/js'; +import type { ConcurrentMerkleTreeAccount } from '@solana/spl-account-compression'; export type ReadApiAssetInterface = - | "V1_NFT" - | "V1_PRINT" - | "LEGACY_NFT" - | "V2_NFT" - | "FungibleAsset" - | "Custom" - | "Identity" - | "Executable" - | "ProgrammableNFT"; + | 'V1_NFT' + | 'V1_PRINT' + | 'LEGACY_NFT' + | 'V2_NFT' + | 'FungibleAsset' + | 'Custom' + | 'Identity' + | 'Executable' + | 'ProgrammableNFT'; -export type ReadApiPropGroupKey = "collection"; +export type ReadApiPropGroupKey = 'collection'; -export type ReadApiPropSortBy = "created" | "updated" | "recent_action"; +export type ReadApiPropSortBy = 'created' | 'updated' | 'recent_action'; -export type ReadApiPropSortDirection = "asc" | "desc"; +export type ReadApiPropSortDirection = 'asc' | 'desc'; export type TransferNftCompressionParam = { ownership?: ReadApiOwnershipMetadata; @@ -36,7 +36,7 @@ export type ReadApiParamAssetSortBy = { export type ReadApiAssetContent = { json_uri: string; - metadata: Metadata["json"]; + metadata: Metadata['json']; }; export type ReadApiCompressionMetadata = { @@ -55,7 +55,7 @@ export type ReadApiOwnershipMetadata = { delegated: boolean; delegate: string | null; owner: string; - ownership_model: "single" | "token"; + ownership_model: 'single' | 'token'; }; export type ReadApiAssetSupplyMetadata = { @@ -74,7 +74,7 @@ export type ReadApiAssetGrouping = { group_value: string; }; -export type ReadApiAuthorityScope = "full"; +export type ReadApiAuthorityScope = 'full'; export type ReadApiAssetAuthority = { address: string; @@ -133,7 +133,7 @@ export type ReadApiAsset = { content: ReadApiAssetContent; royalty: ReadApiAssetRoyaltyMetadata; supply: ReadApiAssetSupplyMetadata; - creators: Metadata["creators"]; + creators: Metadata['creators']; grouping: Array; compression: ReadApiCompressionMetadata; }; diff --git a/compression/cnft-burn/tests/cnft-burn.ts b/compression/cnft-burn/anchor/tests/cnft-burn.ts similarity index 60% rename from compression/cnft-burn/tests/cnft-burn.ts rename to compression/cnft-burn/anchor/tests/cnft-burn.ts index 009beccaa..45d116671 100644 --- a/compression/cnft-burn/tests/cnft-burn.ts +++ b/compression/cnft-burn/anchor/tests/cnft-burn.ts @@ -1,20 +1,17 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { CnftBurn } from "../target/types/cnft_burn"; -import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum"; -import { decode, mapProof } from "./utils"; -import { getAsset, getAssetProof } from "./readApi"; -import { createAndMint } from "./createAndMint"; -import { getcNFTsFromCollection } from "./fetchNFTsByCollection"; -import { - SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - SPL_NOOP_PROGRAM_ID, -} from "@solana/spl-account-compression"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum'; +import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression'; +import type { CnftBurn } from '../target/types/cnft_burn'; +import { createAndMint } from './createAndMint'; +import { getcNFTsFromCollection } from './fetchNFTsByCollection'; +import { getAsset, getAssetProof } from './readApi'; +import { decode, mapProof } from './utils'; // Replace this with your custom RPC endpoint that supports cNFT indexing -export const RPC_PATH = "https://api.devnet.solana.com"; +export const RPC_PATH = 'https://api.devnet.solana.com'; -describe("cnft-burn", () => { +describe('cnft-burn', () => { // Configure the client to use the local cluster. anchor.setProvider(anchor.AnchorProvider.env()); @@ -23,28 +20,23 @@ describe("cnft-burn", () => { const payerWallet = provider.wallet as anchor.Wallet; let treeAddress: anchor.web3.PublicKey | undefined = undefined; - const MPL_BUBBLEGUM_PROGRAM_ID_KEY = new anchor.web3.PublicKey( - BUBBLEGUM_PROGRAM_ID - ); + const MPL_BUBBLEGUM_PROGRAM_ID_KEY = new anchor.web3.PublicKey(BUBBLEGUM_PROGRAM_ID); // this is the assetId of the cNft you want to burn - let assetId: string = ""; + let assetId = ''; - it("Should create the tree and mint a cnft", async () => { + it('Should create the tree and mint a cnft', async () => { const { tree, collection } = await createAndMint(); if (!tree.treeAddress) { - throw new Error("Tree address not found"); + throw new Error('Tree address not found'); } treeAddress = tree.treeAddress; - const fetchcNFTs = await getcNFTsFromCollection( - collection.mint, - payerWallet.publicKey.toString() - ); - console.log("fetchcNFTs", fetchcNFTs); + const fetchcNFTs = await getcNFTsFromCollection(collection.mint, payerWallet.publicKey.toString()); + console.log('fetchcNFTs', fetchcNFTs); assetId = fetchcNFTs[0]; }); - it("Burn cNft!", async () => { + it('Burn cNft!', async () => { const asset = await getAsset(assetId); const proof = await getAssetProof(assetId); @@ -54,11 +46,7 @@ describe("cnft-burn", () => { const creatorHash = decode(asset.compression.creator_hash); const nonce = new anchor.BN(asset.compression.leaf_id); const index = asset.compression.leaf_id; - const [treeAuthority, _bump2] = - anchor.web3.PublicKey.findProgramAddressSync( - [treeAddress.toBuffer()], - MPL_BUBBLEGUM_PROGRAM_ID_KEY - ); + const [treeAuthority, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([treeAddress.toBuffer()], MPL_BUBBLEGUM_PROGRAM_ID_KEY); const tx = await program.methods .burnCnft(root, dataHash, creatorHash, nonce, index) .accounts({ @@ -74,7 +62,7 @@ describe("cnft-burn", () => { .rpc({ skipPreflight: true, }); - console.log("Your transaction signature", tx); + console.log('Your transaction signature', tx); // here is a sample transaction signature on devnet // https://explorer.solana.com/tx/2MpeHi64pbWNY7BKBuhAp4yND5HdfQqNqkd8pu6F6meoSNUYRvxQgV5TC4w8BM8hUihB8G8TwBAaPRqS7pnN8Nu1?cluster=devnet }); diff --git a/compression/cnft-burn/tests/createAndMint.ts b/compression/cnft-burn/anchor/tests/createAndMint.ts similarity index 72% rename from compression/cnft-burn/tests/createAndMint.ts rename to compression/cnft-burn/anchor/tests/createAndMint.ts index a4d577290..3ca701cd2 100644 --- a/compression/cnft-burn/tests/createAndMint.ts +++ b/compression/cnft-burn/anchor/tests/createAndMint.ts @@ -12,30 +12,23 @@ less console logging and explanation of what is occurring */ -import { Keypair, LAMPORTS_PER_SOL, clusterApiUrl } from "@solana/web3.js"; -import { - MetadataArgs, - TokenProgramVersion, - TokenStandard, -} from "@metaplex-foundation/mpl-bubblegum"; +import { type MetadataArgs, TokenProgramVersion, TokenStandard } from '@metaplex-foundation/mpl-bubblegum'; +import { Keypair, LAMPORTS_PER_SOL, clusterApiUrl } from '@solana/web3.js'; // import custom helpers to mint compressed NFTs -import { - createCollection, - createTree, - mintCompressedNFT, -} from "./utils/compression"; +import { createCollection, createTree, mintCompressedNFT } from './utils/compression'; // import custom helpers for demos -import { loadKeypairFromFile, numberFormatter } from "./utils/helpers"; +import { loadKeypairFromFile, numberFormatter } from './utils/helpers'; -import { CreateMetadataAccountArgsV3 } from "@metaplex-foundation/mpl-token-metadata"; -import { ValidDepthSizePair } from "@solana/spl-account-compression"; +import * as anchor from '@coral-xyz/anchor'; +import type { CreateMetadataAccountArgsV3 } from '@metaplex-foundation/mpl-token-metadata'; +import type { ValidDepthSizePair } from '@solana/spl-account-compression'; // local import of the connection wrapper, to help with using the ReadApi -import { WrapperConnection } from "./ReadApi/WrapperConnection"; -import { RPC_PATH } from "./cnft-burn"; -import * as anchor from "@coral-xyz/anchor"; +import { WrapperConnection } from './ReadApi/WrapperConnection'; +import { RPC_PATH } from './cnft-burn'; // define some reusable balance values for tracking -let initBalance: number, balance: number; +let initBalance: number; +let balance: number; export async function createAndMint() { ////////////////////////////////////////////////////////////////////////////// @@ -47,7 +40,7 @@ export async function createAndMint() { const payerWallet = provider.wallet as anchor.Wallet; const payer = payerWallet.payer; - console.log("Payer address:", payer.publicKey.toBase58()); + console.log('Payer address:', payer.publicKey.toBase58()); ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -56,7 +49,7 @@ export async function createAndMint() { const CLUSTER_URL = RPC_PATH; // create a new rpc connection, using the ReadApi wrapper - const connection = new WrapperConnection(CLUSTER_URL, "confirmed"); + const connection = new WrapperConnection(CLUSTER_URL, 'confirmed'); // get the payer's starting balance (only used for demonstration purposes) initBalance = await connection.getBalance(payer.publicKey); @@ -82,13 +75,7 @@ export async function createAndMint() { const treeKeypair = Keypair.generate(); // create and send the transaction to create the tree on chain - const tree = await createTree( - connection, - payer, - treeKeypair, - maxDepthSizePair, - canopyDepth - ); + const tree = await createTree(connection, payer, treeKeypair, maxDepthSizePair, canopyDepth); /* Create the actual NFT collection (using the normal Metaplex method) @@ -98,10 +85,10 @@ export async function createAndMint() { // define the metadata to be used for creating the NFT collection const collectionMetadataV3: CreateMetadataAccountArgsV3 = { data: { - name: "Test Burn", - symbol: "TB", + name: 'Test Burn', + symbol: 'TB', // specific json metadata for the collection - uri: "https://supersweetcollection.notarealurl/collection.json", + uri: 'https://supersweetcollection.notarealurl/collection.json', sellerFeeBasisPoints: 100, creators: [ { @@ -118,21 +105,17 @@ export async function createAndMint() { }; // create a full token mint and initialize the collection (with the `payer` as the authority) - const collection = await createCollection( - connection, - payer, - collectionMetadataV3 - ); + const collection = await createCollection(connection, payer, collectionMetadataV3); /* Mint a single compressed NFT */ const compressedNFTMetadata: MetadataArgs = { - name: "Pratik test", + name: 'Pratik test', symbol: collectionMetadataV3.data.symbol, // specific json metadata for each NFT - uri: "https://bafkreies5r7b5eszpq5dgnw2brhjtlw7xtdtmsmoniebqehf37nv5rxajy.ipfs.nftstorage.link/", + uri: 'https://bafkreies5r7b5eszpq5dgnw2brhjtlw7xtdtmsmoniebqehf37nv5rxajy.ipfs.nftstorage.link/', creators: [ { address: payer.publicKey, @@ -152,9 +135,7 @@ export async function createAndMint() { }; // fully mint a single compressed NFT to the payer - console.log( - `Minting a single compressed NFT to ${payer.publicKey.toBase58()}...` - ); + console.log(`Minting a single compressed NFT to ${payer.publicKey.toBase58()}...`); await mintCompressedNFT( connection, @@ -165,7 +146,7 @@ export async function createAndMint() { collection.masterEditionAccount, compressedNFTMetadata, // mint to this specific wallet (in this case, the tree owner aka `payer`) - payer.publicKey + payer.publicKey, ); ////////////////////////////////////////////////////////////////////////////// @@ -174,12 +155,8 @@ export async function createAndMint() { // fetch the payer's final balance balance = await connection.getBalance(payer.publicKey); - console.log(`===============================`); - console.log( - "Total cost:", - numberFormatter((initBalance - balance) / LAMPORTS_PER_SOL, true), - "SOL\n" - ); + console.log('==============================='); + console.log('Total cost:', numberFormatter((initBalance - balance) / LAMPORTS_PER_SOL, true), 'SOL\n'); return { tree, collection }; } diff --git a/compression/cnft-burn/tests/fetchNFTsByCollection.ts b/compression/cnft-burn/anchor/tests/fetchNFTsByCollection.ts similarity index 68% rename from compression/cnft-burn/tests/fetchNFTsByCollection.ts rename to compression/cnft-burn/anchor/tests/fetchNFTsByCollection.ts index ec0281799..66b9bb958 100644 --- a/compression/cnft-burn/tests/fetchNFTsByCollection.ts +++ b/compression/cnft-burn/anchor/tests/fetchNFTsByCollection.ts @@ -4,18 +4,15 @@ */ // imports from other libraries -import { PublicKey } from "@solana/web3.js"; +import type { PublicKey } from '@solana/web3.js'; // import custom helpers for demos -import { printConsoleSeparator } from "./utils/helpers"; +import { printConsoleSeparator } from './utils/helpers'; // local import of the connection wrapper, to help with using the ReadApi -import { WrapperConnection } from "./ReadApi/WrapperConnection"; -import { RPC_PATH } from "./cnft-burn"; +import { WrapperConnection } from './ReadApi/WrapperConnection'; +import { RPC_PATH } from './cnft-burn'; -export async function getcNFTsFromCollection( - collectionMint: PublicKey, - owner: string -) { +export async function getcNFTsFromCollection(collectionMint: PublicKey, owner: string) { // load the stored PublicKeys for ease of use // let keys = loadPublicKeysFromFile(); @@ -26,7 +23,7 @@ export async function getcNFTsFromCollection( // convert the locally saved keys to PublicKeys // const collectionMint: PublicKey = keys.collectionMint; - console.log("Collection mint:", collectionMint.toBase58()); + console.log('Collection mint:', collectionMint.toBase58()); ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -41,31 +38,31 @@ export async function getcNFTsFromCollection( const assets = await connection .getAssetsByGroup({ - groupKey: "collection", + groupKey: 'collection', groupValue: collectionMint.toBase58(), sortBy: { - sortBy: "recent_action", - sortDirection: "asc", + sortBy: 'recent_action', + sortDirection: 'asc', }, }) .then((res) => { - console.log("Total assets returned:", res.total); + console.log('Total assets returned:', res.total); // loop over each of the asset items in the collection const assetsIds = res.items?.map((asset) => { // display a spacer between each of the assets - console.log("\n==============================================="); + console.log('\n==============================================='); // print the entire asset record to the console // console.log(asset); // print some useful info - console.log("assetId:", asset.id); - console.log("ownership:", asset.ownership); - console.log("compression:", asset.compression); + console.log('assetId:', asset.id); + console.log('ownership:', asset.ownership); + console.log('compression:', asset.compression); if (asset.ownership?.owner === owner) { - console.log("assetId:", asset.id); + console.log('assetId:', asset.id); return asset.id; } }); diff --git a/compression/cnft-burn/tests/readApi.ts b/compression/cnft-burn/anchor/tests/readApi.ts similarity index 75% rename from compression/cnft-burn/tests/readApi.ts rename to compression/cnft-burn/anchor/tests/readApi.ts index ae15d5652..0ee382850 100644 --- a/compression/cnft-burn/tests/readApi.ts +++ b/compression/cnft-burn/anchor/tests/readApi.ts @@ -2,8 +2,8 @@ // as it supports more readAPI functionality // this is just a subset of functions for quick availabiity -import axios from "axios"; -import { RPC_PATH } from "./cnft-burn"; +import axios from 'axios'; +import { RPC_PATH } from './cnft-burn'; // you might want to change that to your custom RPC endpoint as this endpoint is not going to work as it does not support DAS @@ -13,9 +13,9 @@ export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise { baseURL: rpcUrl, }); const response = await axiosInstance.post(rpcUrl, { - jsonrpc: "2.0", - method: "getAsset", - id: "rpd-op-123", + jsonrpc: '2.0', + method: 'getAsset', + id: 'rpd-op-123', params: { id: assetId, }, @@ -26,18 +26,15 @@ export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise { } } -export async function getAssetProof( - assetId: any, - rpcUrl = RPC_PATH -): Promise { +export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise { try { const axiosInstance = axios.create({ baseURL: rpcUrl, }); const response = await axiosInstance.post(rpcUrl, { - jsonrpc: "2.0", - method: "getAssetProof", - id: "rpd-op-123", + jsonrpc: '2.0', + method: 'getAssetProof', + id: 'rpd-op-123', params: { id: assetId, }, diff --git a/compression/cnft-burn/tests/utils.ts b/compression/cnft-burn/anchor/tests/utils.ts similarity index 74% rename from compression/cnft-burn/tests/utils.ts rename to compression/cnft-burn/anchor/tests/utils.ts index eb40c9331..45c4ed230 100644 --- a/compression/cnft-burn/tests/utils.ts +++ b/compression/cnft-burn/anchor/tests/utils.ts @@ -1,4 +1,5 @@ import { + type AccountMeta, Connection, Keypair, PublicKey, @@ -6,16 +7,13 @@ import { TransactionInstruction, TransactionMessage, VersionedTransaction, - AccountMeta, -} from "@solana/web3.js"; +} from '@solana/web3.js'; -import * as bs58 from "bs58"; +import * as bs58 from 'bs58'; export function loadWalletKey(keypairFile: string): Keypair { - const fs = require("fs"); - return Keypair.fromSecretKey( - new Uint8Array(JSON.parse(fs.readFileSync(keypairFile).toString())) - ); + const fs = require('node:fs'); + return Keypair.fromSecretKey(new Uint8Array(JSON.parse(fs.readFileSync(keypairFile).toString()))); } export function decode(stuff: string) { @@ -30,7 +28,7 @@ function bufferToArray(buffer: Buffer): number[] { } export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => { if (!assetProof.proof || assetProof.proof.length === 0) { - throw new Error("Proof is empty"); + throw new Error('Proof is empty'); } return assetProof.proof.map((node) => ({ pubkey: new PublicKey(node), diff --git a/compression/cnft-burn/tests/utils/compression.ts b/compression/cnft-burn/anchor/tests/utils/compression.ts similarity index 72% rename from compression/cnft-burn/tests/utils/compression.ts rename to compression/cnft-burn/anchor/tests/utils/compression.ts index 07031eb3f..eb1dcfcd3 100644 --- a/compression/cnft-burn/tests/utils/compression.ts +++ b/compression/cnft-burn/anchor/tests/utils/compression.ts @@ -1,41 +1,24 @@ -import { - Keypair, - PublicKey, - Connection, - Transaction, - sendAndConfirmTransaction, - TransactionInstruction, -} from "@solana/web3.js"; -import { - createAccount, - createMint, - mintTo, - TOKEN_PROGRAM_ID, -} from "@solana/spl-token"; -import { - SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - createAllocTreeIx, - ValidDepthSizePair, - SPL_NOOP_PROGRAM_ID, -} from "@solana/spl-account-compression"; import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID, - MetadataArgs, + type MetadataArgs, computeCreatorHash, computeDataHash, createCreateTreeInstruction, createMintToCollectionV1Instruction, -} from "@metaplex-foundation/mpl-bubblegum"; +} from '@metaplex-foundation/mpl-bubblegum'; import { + type CreateMetadataAccountArgsV3, PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID, - CreateMetadataAccountArgsV3, - createCreateMetadataAccountV3Instruction, createCreateMasterEditionV3Instruction, + createCreateMetadataAccountV3Instruction, createSetCollectionSizeInstruction, -} from "@metaplex-foundation/mpl-token-metadata"; +} from '@metaplex-foundation/mpl-token-metadata'; +import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID, type ValidDepthSizePair, createAllocTreeIx } from '@solana/spl-account-compression'; +import { TOKEN_PROGRAM_ID, createAccount, createMint, mintTo } from '@solana/spl-token'; +import { type Connection, type Keypair, PublicKey, Transaction, type TransactionInstruction, sendAndConfirmTransaction } from '@solana/web3.js'; // import local helper functions -import { explorerURL, extractSignatureFromFailedTransaction } from "./helpers"; +import { explorerURL, extractSignatureFromFailedTransaction } from './helpers'; /* Helper function to create a merkle tree on chain, including allocating @@ -46,27 +29,18 @@ export async function createTree( payer: Keypair, treeKeypair: Keypair, maxDepthSizePair: ValidDepthSizePair, - canopyDepth: number = 0 + canopyDepth = 0, ) { - console.log("Creating a new Merkle tree..."); - console.log("treeAddress:", treeKeypair.publicKey.toBase58()); + console.log('Creating a new Merkle tree...'); + console.log('treeAddress:', treeKeypair.publicKey.toBase58()); // derive the tree's authority (PDA), owned by Bubblegum - const [treeAuthority, _bump] = PublicKey.findProgramAddressSync( - [treeKeypair.publicKey.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); - console.log("treeAuthority:", treeAuthority.toBase58()); + const [treeAuthority, _bump] = PublicKey.findProgramAddressSync([treeKeypair.publicKey.toBuffer()], BUBBLEGUM_PROGRAM_ID); + console.log('treeAuthority:', treeAuthority.toBase58()); // allocate the tree's account on chain with the `space` // NOTE: this will compute the space needed to store the tree on chain (and the lamports required to store it) - const allocTreeIx = await createAllocTreeIx( - connection, - treeKeypair.publicKey, - payer.publicKey, - maxDepthSizePair, - canopyDepth - ); + const allocTreeIx = await createAllocTreeIx(connection, treeKeypair.publicKey, payer.publicKey, maxDepthSizePair, canopyDepth); // create the instruction to actually create the tree const createTreeIx = createCreateTreeInstruction( @@ -84,7 +58,7 @@ export async function createTree( maxDepth: maxDepthSizePair.maxDepth, public: false, }, - BUBBLEGUM_PROGRAM_ID + BUBBLEGUM_PROGRAM_ID, ); try { @@ -99,18 +73,18 @@ export async function createTree( // ensuring the `treeKeypair` PDA and the `payer` are BOTH signers [treeKeypair, payer], { - commitment: "confirmed", + commitment: 'confirmed', skipPreflight: true, - } + }, ); - console.log("\nMerkle tree created successfully!"); + console.log('\nMerkle tree created successfully!'); console.log(explorerURL({ txSignature })); // return useful info return { treeAuthority, treeAddress: treeKeypair.publicKey }; } catch (err: any) { - console.error("\nFailed to create merkle tree:", err); + console.error('\nFailed to create merkle tree:', err); // log a block explorer link for the failed transaction await extractSignatureFromFailedTransaction(connection, err); @@ -123,11 +97,7 @@ export async function createTree( * Create an NFT collection on-chain, using the regular Metaplex standards * with the `payer` as the authority */ -export async function createCollection( - connection: Connection, - payer: Keypair, - metadataV3: CreateMetadataAccountArgsV3 -) { +export async function createCollection(connection: Connection, payer: Keypair, metadataV3: CreateMetadataAccountArgsV3) { // create and initialize the SPL token mint console.log("Creating the collection's mint..."); const mint = await createMint( @@ -138,23 +108,23 @@ export async function createCollection( // freeze authority payer.publicKey, // decimals - use `0` for NFTs since they are non-fungible - 0 + 0, ); - console.log("Mint address:", mint.toBase58()); + console.log('Mint address:', mint.toBase58()); // create the token account - console.log("Creating a token account..."); + console.log('Creating a token account...'); const tokenAccount = await createAccount( connection, payer, mint, - payer.publicKey + payer.publicKey, // undefined, undefined, ); - console.log("Token account:", tokenAccount.toBase58()); + console.log('Token account:', tokenAccount.toBase58()); // mint 1 token () - console.log("Minting 1 token for the collection..."); + console.log('Minting 1 token for the collection...'); const mintSig = await mintTo( connection, payer, @@ -166,20 +136,16 @@ export async function createCollection( // no `multiSigners` [], undefined, - TOKEN_PROGRAM_ID + TOKEN_PROGRAM_ID, ); // console.log(explorerURL({ txSignature: mintSig })); // derive the PDA for the metadata account const [metadataAccount, _bump] = PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata", "utf8"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mint.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID + [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, ); - console.log("Metadata account:", metadataAccount.toBase58()); + console.log('Metadata account:', metadataAccount.toBase58()); // create an instruction to create the metadata account const createMetadataIx = createCreateMetadataAccountV3Instruction( @@ -192,20 +158,15 @@ export async function createCollection( }, { createMetadataAccountArgsV3: metadataV3, - } + }, ); // derive the PDA for the metadata account const [masterEditionAccount, _bump2] = PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata", "utf8"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mint.toBuffer(), - Buffer.from("edition", "utf8"), - ], - TOKEN_METADATA_PROGRAM_ID + [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer(), Buffer.from('edition', 'utf8')], + TOKEN_METADATA_PROGRAM_ID, ); - console.log("Master edition account:", masterEditionAccount.toBase58()); + console.log('Master edition account:', masterEditionAccount.toBase58()); // create an instruction to create the metadata account const createMasterEditionIx = createCreateMasterEditionV3Instruction( @@ -221,7 +182,7 @@ export async function createCollection( createMasterEditionArgs: { maxSupply: 0, }, - } + }, ); // create the collection size instruction @@ -233,32 +194,24 @@ export async function createCollection( }, { setCollectionSizeArgs: { size: 50 }, - } + }, ); try { // construct the transaction with our instructions, making the `payer` the `feePayer` - const tx = new Transaction() - .add(createMetadataIx) - .add(createMasterEditionIx) - .add(collectionSizeIX); + const tx = new Transaction().add(createMetadataIx).add(createMasterEditionIx).add(collectionSizeIX); tx.feePayer = payer.publicKey; // send the transaction to the cluster - const txSignature = await sendAndConfirmTransaction( - connection, - tx, - [payer], - { - commitment: "confirmed", - skipPreflight: true, - } - ); + const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], { + commitment: 'confirmed', + skipPreflight: true, + }); - console.log("\nCollection successfully created!"); + console.log('\nCollection successfully created!'); console.log(explorerURL({ txSignature })); } catch (err) { - console.error("\nFailed to create collection:", err); + console.error('\nFailed to create collection:', err); // log a block explorer link for the failed transaction await extractSignatureFromFailedTransaction(connection, err); @@ -281,19 +234,16 @@ export async function mintCompressedNFT( collectionMetadata: PublicKey, collectionMasterEditionAccount: PublicKey, compressedNFTMetadata: MetadataArgs, - receiverAddress?: PublicKey + receiverAddress?: PublicKey, ) { // derive the tree's authority (PDA), owned by Bubblegum - const [treeAuthority, _bump] = PublicKey.findProgramAddressSync( - [treeAddress.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); + const [treeAuthority, _bump] = PublicKey.findProgramAddressSync([treeAddress.toBuffer()], BUBBLEGUM_PROGRAM_ID); // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting const [bubblegumSigner, _bump2] = PublicKey.findProgramAddressSync( // `collection_cpi` is a custom prefix required by the Bubblegum program - [Buffer.from("collection_cpi", "utf8")], - BUBBLEGUM_PROGRAM_ID + [Buffer.from('collection_cpi', 'utf8')], + BUBBLEGUM_PROGRAM_ID, ); // create an array of instruction, to mint multiple compressed NFTs at once @@ -317,14 +267,10 @@ export async function mintCompressedNFT( * (since it is performed on chain via the Bubblegum program) * this is only for demonstration */ - const computedDataHash = new PublicKey( - computeDataHash(metadataArgs) - ).toBase58(); - const computedCreatorHash = new PublicKey( - computeCreatorHash(metadataArgs.creators) - ).toBase58(); - console.log("computedDataHash:", computedDataHash); - console.log("computedCreatorHash:", computedCreatorHash); + const computedDataHash = new PublicKey(computeDataHash(metadataArgs)).toBase58(); + const computedCreatorHash = new PublicKey(computeCreatorHash(metadataArgs.creators)).toBase58(); + console.log('computedDataHash:', computedDataHash); + console.log('computedCreatorHash:', computedCreatorHash); /* Add a single mint to collection instruction @@ -369,8 +315,8 @@ export async function mintCompressedNFT( }, { metadataArgs, - } - ) + }, + ), ); try { @@ -379,22 +325,17 @@ export async function mintCompressedNFT( tx.feePayer = payer.publicKey; // send the transaction to the cluster - const txSignature = await sendAndConfirmTransaction( - connection, - tx, - [payer], - { - commitment: "confirmed", - skipPreflight: true, - } - ); + const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], { + commitment: 'confirmed', + skipPreflight: true, + }); - console.log("\nSuccessfully minted the compressed NFT!"); + console.log('\nSuccessfully minted the compressed NFT!'); console.log(explorerURL({ txSignature })); return txSignature; } catch (err) { - console.error("\nFailed to mint compressed NFT:", err); + console.error('\nFailed to mint compressed NFT:', err); // log a block explorer link for the failed transaction await extractSignatureFromFailedTransaction(connection, err); diff --git a/compression/cnft-burn/tests/utils/helpers.ts b/compression/cnft-burn/anchor/tests/utils/helpers.ts similarity index 61% rename from compression/cnft-burn/tests/utils/helpers.ts rename to compression/cnft-burn/anchor/tests/utils/helpers.ts index 3bc32b89f..0075cfe8f 100644 --- a/compression/cnft-burn/tests/utils/helpers.ts +++ b/compression/cnft-burn/anchor/tests/utils/helpers.ts @@ -1,34 +1,26 @@ -import fs from "fs"; -import path from "path"; -import { - Connection, - Keypair, - LAMPORTS_PER_SOL, - PublicKey, -} from "@solana/web3.js"; +import fs from 'node:fs'; +import path from 'node:path'; +import { type Connection, Keypair, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js'; // define some default locations -const DEFAULT_KEY_DIR_NAME = ".local_keys"; -const DEFAULT_PUBLIC_KEY_FILE = "keys.json"; -const DEFAULT_DEMO_DATA_FILE = "demo.json"; +const DEFAULT_KEY_DIR_NAME = '.local_keys'; +const DEFAULT_PUBLIC_KEY_FILE = 'keys.json'; +const DEFAULT_DEMO_DATA_FILE = 'demo.json'; /* Load locally stored PublicKey addresses */ -export function loadPublicKeysFromFile( - absPath: string = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}` -) { +export function loadPublicKeysFromFile(absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`) { try { - if (!absPath) throw Error("No path provided"); - if (!fs.existsSync(absPath)) throw Error("File does not exist."); + if (!absPath) throw Error('No path provided'); + if (!fs.existsSync(absPath)) throw Error('File does not exist.'); // load the public keys from the file - const data = - JSON.parse(fs.readFileSync(absPath, { encoding: "utf-8" })) || {}; + const data = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })) || {}; // convert all loaded keyed values into valid public keys for (const [key, value] of Object.entries(data)) { - data[key] = new PublicKey(value as string) ?? ""; + data[key] = new PublicKey(value as string) ?? ''; } return data; @@ -42,28 +34,23 @@ export function loadPublicKeysFromFile( /* Locally save a demo data to the filesystem for later retrieval */ -export function saveDemoDataToFile( - name: string, - newData: any, - absPath: string = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_DEMO_DATA_FILE}` -) { +export function saveDemoDataToFile(name: string, newData: any, absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_DEMO_DATA_FILE}`) { try { let data: object = {}; // fetch all the current values, when the storage file exists - if (fs.existsSync(absPath)) - data = JSON.parse(fs.readFileSync(absPath, { encoding: "utf-8" })) || {}; + if (fs.existsSync(absPath)) data = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })) || {}; data = { ...data, [name]: newData }; // actually save the data to the file fs.writeFileSync(absPath, JSON.stringify(data), { - encoding: "utf-8", + encoding: 'utf-8', }); return data; } catch (err) { - console.warn("Unable to save to file"); + console.warn('Unable to save to file'); // console.warn(err); } @@ -74,11 +61,7 @@ export function saveDemoDataToFile( /* Locally save a PublicKey addresses to the filesystem for later retrieval */ -export function savePublicKeyToFile( - name: string, - publicKey: PublicKey, - absPath: string = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}` -) { +export function savePublicKeyToFile(name: string, publicKey: PublicKey, absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`) { try { // if (!absPath) throw Error("No path provided"); // if (!fs.existsSync(absPath)) throw Error("File does not exist."); @@ -94,7 +77,7 @@ export function savePublicKeyToFile( // actually save the data to the file fs.writeFileSync(absPath, JSON.stringify(data), { - encoding: "utf-8", + encoding: 'utf-8', }); // reload the keys for sanity @@ -102,7 +85,7 @@ export function savePublicKeyToFile( return data; } catch (err) { - console.warn("Unable to save to file"); + console.warn('Unable to save to file'); } // always return an object return {}; @@ -113,13 +96,11 @@ export function savePublicKeyToFile( */ export function loadKeypairFromFile(absPath: string) { try { - if (!absPath) throw Error("No path provided"); - if (!fs.existsSync(absPath)) throw Error("File does not exist."); + if (!absPath) throw Error('No path provided'); + if (!fs.existsSync(absPath)) throw Error('File does not exist.'); // load the keypair from the file - const keyfileBytes = JSON.parse( - fs.readFileSync(absPath, { encoding: "utf-8" }) - ); + const keyfileBytes = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })); // parse the loaded secretKey into a valid keypair const keypair = Keypair.fromSecretKey(new Uint8Array(keyfileBytes)); return keypair; @@ -132,11 +113,7 @@ export function loadKeypairFromFile(absPath: string) { /* Save a locally stored JSON keypair file for later importing */ -export function saveKeypairToFile( - keypair: Keypair, - fileName: string, - dirName: string = DEFAULT_KEY_DIR_NAME -) { +export function saveKeypairToFile(keypair: Keypair, fileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) { fileName = path.join(dirName, `${fileName}.json`); // create the `dirName` directory, if it does not exists @@ -147,7 +124,7 @@ export function saveKeypairToFile( // write the `secretKey` value as a string fs.writeFileSync(fileName, `[${keypair.secretKey.toString()}]`, { - encoding: "utf-8", + encoding: 'utf-8', }); return fileName; @@ -156,10 +133,7 @@ export function saveKeypairToFile( /* Attempt to load a keypair from the filesystem, or generate and save a new one */ -export function loadOrGenerateKeypair( - fileName: string, - dirName: string = DEFAULT_KEY_DIR_NAME -) { +export function loadOrGenerateKeypair(fileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) { try { // compute the path to locate the file const searchPath = path.join(dirName, `${fileName}.json`); @@ -172,7 +146,7 @@ export function loadOrGenerateKeypair( return keypair; } catch (err) { - console.error("loadOrGenerateKeypair:", err); + console.error('loadOrGenerateKeypair:', err); throw err; } } @@ -187,46 +161,37 @@ export function explorerURL({ }: { address?: string; txSignature?: string; - cluster?: "devnet" | "testnet" | "mainnet" | "mainnet-beta"; + cluster?: 'devnet' | 'testnet' | 'mainnet' | 'mainnet-beta'; }) { let baseUrl: string; // if (address) baseUrl = `https://explorer.solana.com/address/${address}`; - else if (txSignature) - baseUrl = `https://explorer.solana.com/tx/${txSignature}`; - else return "[unknown]"; + else if (txSignature) baseUrl = `https://explorer.solana.com/tx/${txSignature}`; + else return '[unknown]'; // auto append the desired search params const url = new URL(baseUrl); - url.searchParams.append("cluster", cluster || "devnet"); - return url.toString() + "\n"; + url.searchParams.append('cluster', cluster || 'devnet'); + return `${url.toString()}\n`; } /** * Auto airdrop the given wallet of of a balance of < 0.5 SOL */ -export async function airdropOnLowBalance( - connection: Connection, - keypair: Keypair, - forceAirdrop: boolean = false -) { +export async function airdropOnLowBalance(connection: Connection, keypair: Keypair, forceAirdrop = false) { // get the current balance - let balance = await connection.getBalance(keypair.publicKey); + const balance = await connection.getBalance(keypair.publicKey); // define the low balance threshold before airdrop const MIN_BALANCE_TO_AIRDROP = LAMPORTS_PER_SOL / 2; // current: 0.5 SOL // check the balance of the two accounts, airdrop when low if (forceAirdrop === true || balance < MIN_BALANCE_TO_AIRDROP) { - console.log( - `Requesting airdrop of 1 SOL to ${keypair.publicKey.toBase58()}...` - ); - await connection - .requestAirdrop(keypair.publicKey, LAMPORTS_PER_SOL) - .then((sig) => { - console.log("Tx signature:", sig); - // balance = balance + LAMPORTS_PER_SOL; - }); + console.log(`Requesting airdrop of 1 SOL to ${keypair.publicKey.toBase58()}...`); + await connection.requestAirdrop(keypair.publicKey, LAMPORTS_PER_SOL).then((sig) => { + console.log('Tx signature:', sig); + // balance = balance + LAMPORTS_PER_SOL; + }); // fetch the new balance // const newBalance = await connection.getBalance(keypair.publicKey); @@ -240,17 +205,11 @@ export async function airdropOnLowBalance( /* Helper function to extract a transaction signature from a failed transaction's error message */ -export async function extractSignatureFromFailedTransaction( - connection: Connection, - err: any, - fetchLogs?: boolean -) { +export async function extractSignatureFromFailedTransaction(connection: Connection, err: any, fetchLogs?: boolean) { if (err?.signature) return err.signature; // extract the failed transaction's signature - const failedSig = new RegExp( - /^((.*)?Error: )?(Transaction|Signature) ([A-Z0-9]{32,}) /gim - ).exec(err?.message?.toString())?.[4]; + const failedSig = new RegExp(/^((.*)?Error: )?(Transaction|Signature) ([A-Z0-9]{32,}) /gim).exec(err?.message?.toString())?.[4]; // ensure a signature was found if (failedSig) { @@ -262,16 +221,14 @@ export async function extractSignatureFromFailedTransaction( }) .then((tx) => { console.log(`\n==== Transaction logs for ${failedSig} ====`); - console.log(explorerURL({ txSignature: failedSig }), ""); - console.log( - tx?.meta?.logMessages ?? "No log messages provided by RPC" - ); - console.log(`==== END LOGS ====\n`); + console.log(explorerURL({ txSignature: failedSig }), ''); + console.log(tx?.meta?.logMessages ?? 'No log messages provided by RPC'); + console.log('==== END LOGS ====\n'); }); else { - console.log("\n========================================"); + console.log('\n========================================'); console.log(explorerURL({ txSignature: failedSig })); - console.log("========================================\n"); + console.log('========================================\n'); } } @@ -296,7 +253,7 @@ export function numberFormatter(num: number, forceDecimals = false) { Display a separator in the console, with our without a message */ export function printConsoleSeparator(message?: string) { - console.log("\n==============================================="); - console.log("===============================================\n"); + console.log('\n==============================================='); + console.log('===============================================\n'); if (message) console.log(message); } diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/tsconfig.json b/compression/cnft-burn/anchor/tsconfig.json similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/tsconfig.json rename to compression/cnft-burn/anchor/tsconfig.json diff --git a/compression/cnft-burn/tsconfig.json b/compression/cnft-burn/tsconfig.json deleted file mode 100644 index 558b83e5e..000000000 --- a/compression/cnft-burn/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file diff --git a/compression/cnft-vault/anchor/pnpm-lock.yaml b/compression/cnft-vault/anchor/pnpm-lock.yaml new file mode 100644 index 000000000..5c4f1d8b6 --- /dev/null +++ b/compression/cnft-vault/anchor/pnpm-lock.yaml @@ -0,0 +1,1993 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: ^0.30.0 + version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-bubblegum': + specifier: ^0.6.2 + version: 0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-account-compression': + specifier: ^0.1.8 + version: 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + axios: + specifier: ^1.4.0 + version: 1.7.2 + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.16 + '@types/mocha': + specifier: ^9.0.0 + version: 9.1.1 + chai: + specifier: ^4.3.4 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + prettier: + specifier: ^2.6.2 + version: 2.8.8 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@coral-xyz/anchor@0.30.0': + resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.30.0': + resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@metaplex-foundation/beet-solana@0.4.0': + resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==} + + '@metaplex-foundation/beet-solana@0.4.1': + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + + '@metaplex-foundation/beet@0.7.1': + resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==} + + '@metaplex-foundation/beet@0.7.2': + resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==} + + '@metaplex-foundation/cusper@0.0.2': + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + + '@metaplex-foundation/mpl-bubblegum@0.6.2': + resolution: {integrity: sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==} + + '@metaplex-foundation/mpl-token-metadata@2.13.0': + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-account-compression@0.1.10': + resolution: {integrity: sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.50.1 + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.1.8': + resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} + engines: {node: '>= 10'} + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.7.2: + resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript-collections@1.3.3: + resolution: {integrity: sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.4.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.1.8 + crypto-hash: 1.3.0 + eventemitter3: 4.0.7 + pako: 2.1.0 + snake-case: 3.0.4 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer-layout: 1.2.2 + + '@metaplex-foundation/beet-solana@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet@0.7.1': + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/beet@0.7.2': + dependencies: + ansicolors: 0.3.2 + assert: 2.1.0 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/cusper@0.0.2': {} + + '@metaplex-foundation/mpl-bubblegum@0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + js-sha3: 0.8.0 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-account-compression@0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + borsh: 0.7.0 + js-sha3: 0.8.0 + typescript-collections: 1.3.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer: 6.0.3 + buffer-layout: 1.2.2 + dotenv: 10.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@1.1.0: {} + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axios@1.7.2: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + buffer-from@1.1.2: {} + + buffer-layout@1.2.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@12.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + cross-fetch@3.1.8: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + crypto-hash@1.3.0: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + delayed-stream@1.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + + dotenv@10.0.0: {} + + emoji-regex@8.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + follow-redirects@1.15.6: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-sha3@0.8.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lower-case@2.0.2: + dependencies: + tslib: 2.6.2 + + make-error@1.3.6: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: + optional: true + + normalize-path@3.0.0: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + pako@2.1.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + prettier@2.8.8: {} + + proxy-from-env@1.1.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + superstruct@0.15.5: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toml@3.0.0: {} + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + tslib@2.6.2: {} + + type-detect@4.0.8: {} + + typescript-collections@1.3.3: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/compression/cnft-vault/anchor/tests/readAPI.ts b/compression/cnft-vault/anchor/tests/readAPI.ts index 1c5bfef59..070203f17 100644 --- a/compression/cnft-vault/anchor/tests/readAPI.ts +++ b/compression/cnft-vault/anchor/tests/readAPI.ts @@ -1,48 +1,46 @@ -// I recommend using a WrappedConnection for production -// as it supports more readAPI functionality -// this is just a subset of functions for quick availabiity - -import axios from "axios"; - - // you might want to change that to your custom RPC -const RPC_PATH = "https://rpc-devnet.aws.metaplex.com/"; - -export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise { - try { - const axiosInstance = axios.create({ - baseURL: rpcUrl, - }); - const response = await axiosInstance.post(rpcUrl, { - jsonrpc: "2.0", - method: "getAsset", - id: "rpd-op-123", - params: { - id: assetId - }, - }); - return response.data.result; - } catch (error) { - console.error(error); - } -} - - -export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise { - try { - - const axiosInstance = axios.create({ - baseURL: rpcUrl, - }); - const response = await axiosInstance.post(rpcUrl, { - jsonrpc: "2.0", - method: "getAssetProof", - id: "rpd-op-123", - params: { - id: assetId - }, - }); - return response.data.result; - } catch (error) { - console.error(error); - } -} \ No newline at end of file +// I recommend using a WrappedConnection for production +// as it supports more readAPI functionality +// this is just a subset of functions for quick availabiity + +import axios from 'axios'; + +// you might want to change that to your custom RPC +const RPC_PATH = 'https://rpc-devnet.aws.metaplex.com/'; + +export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise { + try { + const axiosInstance = axios.create({ + baseURL: rpcUrl, + }); + const response = await axiosInstance.post(rpcUrl, { + jsonrpc: '2.0', + method: 'getAsset', + id: 'rpd-op-123', + params: { + id: assetId, + }, + }); + return response.data.result; + } catch (error) { + console.error(error); + } +} + +export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise { + try { + const axiosInstance = axios.create({ + baseURL: rpcUrl, + }); + const response = await axiosInstance.post(rpcUrl, { + jsonrpc: '2.0', + method: 'getAssetProof', + id: 'rpd-op-123', + params: { + id: assetId, + }, + }); + return response.data.result; + } catch (error) { + console.error(error); + } +} diff --git a/compression/cnft-vault/anchor/tests/scripts/constants.ts b/compression/cnft-vault/anchor/tests/scripts/constants.ts index 4cbdbed1f..1cb9b9660 100644 --- a/compression/cnft-vault/anchor/tests/scripts/constants.ts +++ b/compression/cnft-vault/anchor/tests/scripts/constants.ts @@ -1,15 +1,11 @@ -import * as anchor from "@coral-xyz/anchor"; -import { CnftVault } from "../../target/types/cnft_vault"; -import { loadWalletKey } from "../utils"; -import { IDL } from "../../target/types/cnft_vault"; +import * as anchor from '@coral-xyz/anchor'; +import type { CnftVault } from '../../target/types/cnft_vault'; +import { IDL } from '../../target/types/cnft_vault'; +import { loadWalletKey } from '../utils'; -export const connection = new anchor.web3.Connection( - "https://api.devnet.solana.com" -); -export const keypair = loadWalletKey("~/.config/solana/id.json"); +export const connection = new anchor.web3.Connection('https://api.devnet.solana.com'); +export const keypair = loadWalletKey('~/.config/solana/id.json'); export const wallet = new anchor.Wallet(keypair); export const provider = new anchor.AnchorProvider(connection, wallet, {}); -export const programID = new anchor.web3.PublicKey( - "CNftyK7T8udPwYRzZUMWzbh79rKrz9a5GwV2wv7iEHpk" -); +export const programID = new anchor.web3.PublicKey('CNftyK7T8udPwYRzZUMWzbh79rKrz9a5GwV2wv7iEHpk'); export const program = new anchor.Program(IDL, programID, provider); diff --git a/compression/cnft-vault/anchor/tests/scripts/withdraw.ts b/compression/cnft-vault/anchor/tests/scripts/withdraw.ts index 3dbe63ce4..389db2d23 100644 --- a/compression/cnft-vault/anchor/tests/scripts/withdraw.ts +++ b/compression/cnft-vault/anchor/tests/scripts/withdraw.ts @@ -1,34 +1,21 @@ -import * as anchor from "@coral-xyz/anchor"; -import { decode, mapProof } from "../utils"; -import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum"; -import { - SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - SPL_NOOP_PROGRAM_ID, -} from "@solana/spl-account-compression"; -import { getAsset, getAssetProof } from "../readAPI"; +import * as anchor from '@coral-xyz/anchor'; +import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum'; +import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression'; +import { getAsset, getAssetProof } from '../readAPI'; +import { decode, mapProof } from '../utils'; -import { program, programID } from "./constants"; +import { program, programID } from './constants'; async function main() { - const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync( - [Buffer.from("cNFT-vault", "utf8")], - programID - ); + const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('cNFT-vault', 'utf8')], programID); - const tree = new anchor.web3.PublicKey( - "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B" - ); + const tree = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B'); - const receiver = new anchor.web3.PublicKey( - "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM" - ); + const receiver = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM'); - const [treeAuthority, _bump2] = anchor.web3.PublicKey.findProgramAddressSync( - [tree.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); + const [treeAuthority, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree.toBuffer()], BUBBLEGUM_PROGRAM_ID); - const assetId = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd"; + const assetId = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd'; const asset = await getAsset(assetId); // console.log(res) diff --git a/compression/cnft-vault/anchor/tests/scripts/withdrawTwo.ts b/compression/cnft-vault/anchor/tests/scripts/withdrawTwo.ts index d2b250038..089a31dad 100644 --- a/compression/cnft-vault/anchor/tests/scripts/withdrawTwo.ts +++ b/compression/cnft-vault/anchor/tests/scripts/withdrawTwo.ts @@ -1,48 +1,28 @@ -import * as anchor from "@coral-xyz/anchor"; -import { decode, mapProof } from "../utils"; -import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum"; -import { - SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - SPL_NOOP_PROGRAM_ID, -} from "@solana/spl-account-compression"; -import { getAsset, getAssetProof } from "../readAPI"; -import { AccountMeta } from "@solana/web3.js"; +import * as anchor from '@coral-xyz/anchor'; +import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum'; +import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression'; +import type { AccountMeta } from '@solana/web3.js'; +import { getAsset, getAssetProof } from '../readAPI'; +import { decode, mapProof } from '../utils'; -import { program, programID } from "./constants"; +import { program, programID } from './constants'; async function main() { // TODO change all of these to your values - const assetId1 = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd"; - const assetId2 = "14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg"; //"D2CoMLCRfsfv1EAiNbaBHfoU1Sqf1964KXLGxEfyUwWo"; + const assetId1 = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd'; + const assetId2 = '14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg'; //"D2CoMLCRfsfv1EAiNbaBHfoU1Sqf1964KXLGxEfyUwWo"; - const tree1 = new anchor.web3.PublicKey( - "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B" - ); - const tree2 = new anchor.web3.PublicKey( - "Feywkti8LLBLfxhSGmYgzUBqpq89qehfB1SMTYV1zCu" - ); + const tree1 = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B'); + const tree2 = new anchor.web3.PublicKey('Feywkti8LLBLfxhSGmYgzUBqpq89qehfB1SMTYV1zCu'); - const receiver1 = new anchor.web3.PublicKey( - "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM" - ); - const receiver2 = new anchor.web3.PublicKey( - "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM" - ); + const receiver1 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM'); + const receiver2 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM'); // --- - const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync( - [Buffer.from("cNFT-vault", "utf8")], - programID - ); + const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('cNFT-vault', 'utf8')], programID); - const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync( - [tree1.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); - const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync( - [tree2.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); + const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree1.toBuffer()], BUBBLEGUM_PROGRAM_ID); + const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync([tree2.toBuffer()], BUBBLEGUM_PROGRAM_ID); const asset1 = await getAsset(assetId1); const asset2 = await getAsset(assetId2); @@ -55,10 +35,7 @@ async function main() { const ixData1 = getInstructionData(asset1, proof1); const ixData2 = getInstructionData(asset2, proof2); - const remainingAccounts: AccountMeta[] = [ - ...proofPathAsAccounts1, - ...proofPathAsAccounts2, - ]; + const remainingAccounts: AccountMeta[] = [...proofPathAsAccounts1, ...proofPathAsAccounts2]; const tx = await program.methods .withdrawTwoCnfts(...ixData1, ...ixData2) @@ -80,10 +57,7 @@ async function main() { console.log(tx); } -function getInstructionData( - asset: any, - proof: any -): [number[], number[], number[], anchor.BN, number, number] { +function getInstructionData(asset: any, proof: any): [number[], number[], number[], anchor.BN, number, number] { const root = decode(proof.root); const dataHash = decode(asset.compression.data_hash); const creatorHash = decode(asset.compression.creator_hash); diff --git a/compression/cnft-vault/anchor/tests/scripts/withdrawWithLookup.ts b/compression/cnft-vault/anchor/tests/scripts/withdrawWithLookup.ts index a82821509..373b5d0a6 100644 --- a/compression/cnft-vault/anchor/tests/scripts/withdrawWithLookup.ts +++ b/compression/cnft-vault/anchor/tests/scripts/withdrawWithLookup.ts @@ -1,196 +1,164 @@ -import * as anchor from "@coral-xyz/anchor"; -import { decode, mapProof } from "../utils"; -import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum"; -import { - SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - SPL_NOOP_PROGRAM_ID, -} from "@solana/spl-account-compression"; -import { getAsset, getAssetProof } from "../readAPI"; -import { - AccountMeta, - AddressLookupTableProgram, - PublicKey, - SystemProgram, - Transaction, - TransactionMessage, - VersionedTransaction, - sendAndConfirmTransaction, -} from "@solana/web3.js"; - -import { connection, keypair, program, programID } from "./constants"; - -async function main() { - // TODO change all of these to your values - const assetId1 = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd"; - const assetId2 = "14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg"; //"D2CoMLCRfsfv1EAiNbaBHfoU1Sqf1964KXLGxEfyUwWo"; - - const tree1 = new anchor.web3.PublicKey( - "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B" - ); - const tree2 = new anchor.web3.PublicKey( - "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B" - ); - - const receiver1 = new anchor.web3.PublicKey( - "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM" - ); - const receiver2 = new anchor.web3.PublicKey( - "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM" - ); - // --- - - const lookupTable = await createLookupTable(); - - const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync( - [Buffer.from("cNFT-vault", "utf8")], - programID - ); - - const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync( - [tree1.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); - const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync( - [tree2.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); - - const asset1 = await getAsset(assetId1); - const asset2 = await getAsset(assetId2); - - const proof1 = await getAssetProof(assetId1); - const proofPathAsAccounts1 = mapProof(proof1); - const proof2 = await getAssetProof(assetId2); - const proofPathAsAccounts2 = mapProof(proof2); - - const ixData1 = getInstructionData(asset1, proof1); - const ixData2 = getInstructionData(asset2, proof2); - - const remainingAccounts: AccountMeta[] = [ - ...proofPathAsAccounts1, - ...proofPathAsAccounts2, - ]; - - const ix = await program.methods - .withdrawTwoCnfts(...ixData1, ...ixData2) - .accounts({ - leafOwner: vaultPDA, - merkleTree1: tree1, - newLeafOwner1: receiver1, - treeAuthority1: treeAuthority1, - merkleTree2: tree2, - newLeafOwner2: receiver2, - treeAuthority2: treeAuthority2, - bubblegumProgram: BUBBLEGUM_PROGRAM_ID, - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - logWrapper: SPL_NOOP_PROGRAM_ID, - systemProgram: anchor.web3.SystemProgram.programId, - }) - .remainingAccounts(remainingAccounts) - .instruction(); - - await extendLookupTable( - lookupTable, - proofPathAsAccounts1.map((acc) => acc.pubkey) - ); - await extendLookupTable( - lookupTable, - proofPathAsAccounts2.map((acc) => acc.pubkey) - ); - - const lookupTableAccount = await connection - .getAddressLookupTable(lookupTable) - .then((res) => res.value); - - if (!lookupTableAccount) { - console.log("could not fetch ATL!"); - return; - } - - await new Promise((_) => setTimeout(_, 30000)); - - const messageV0 = new TransactionMessage({ - payerKey: keypair.publicKey, - recentBlockhash: (await connection.getLatestBlockhash()).blockhash, - instructions: [ix], - }).compileToV0Message([lookupTableAccount]); - - const transactionV0 = new VersionedTransaction(messageV0); - transactionV0.sign([keypair]); - - const txid = await connection.sendTransaction(transactionV0); - console.log(txid); -} - -function getInstructionData( - asset: any, - proof: any -): [number[], number[], number[], anchor.BN, number, number] { - const root = decode(proof.root); - const dataHash = decode(asset.compression.data_hash); - const creatorHash = decode(asset.compression.creator_hash); - const nonce = new anchor.BN(asset.compression.leaf_id); - const index = asset.compression.leaf_id; - const proofLength = proof.proof.length; - return [root, dataHash, creatorHash, nonce, index, proofLength]; -} - -main(); - -async function extendLookupTable( - lookupTableAddress: PublicKey, - proofHashes: PublicKey[] -) { - const extendInstruction = AddressLookupTableProgram.extendLookupTable({ - payer: keypair.publicKey, - authority: keypair.publicKey, - lookupTable: lookupTableAddress, - addresses: [...proofHashes], - }); - - const tx = new Transaction(); - tx.add(extendInstruction); - - const sx = await sendAndConfirmTransaction(connection, tx, [keypair], { - commitment: "finalized", - }); - console.log(sx); - console.log("ALT extended!"); -} - -async function createLookupTable(): Promise { - const slot = await connection.getSlot(); - - const [lookupTableInst, lookupTableAddress] = - AddressLookupTableProgram.createLookupTable({ - authority: keypair.publicKey, - payer: keypair.publicKey, - recentSlot: slot, - }); - console.log(lookupTableAddress.toBase58()); - - const extendInstruction = AddressLookupTableProgram.extendLookupTable({ - payer: keypair.publicKey, - authority: keypair.publicKey, - lookupTable: lookupTableAddress, - addresses: [ - programID, - SystemProgram.programId, - BUBBLEGUM_PROGRAM_ID, - SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - SPL_NOOP_PROGRAM_ID, - // you could add more addresses here, like merkle trees, leaf owners etc. - ], - }); - - const tx = new Transaction(); - tx.add(lookupTableInst).add(extendInstruction); - - const sx = await sendAndConfirmTransaction(connection, tx, [keypair], { - commitment: "finalized", - }); - console.log(sx); - console.log("ALT created"); - - return lookupTableAddress; -} +import * as anchor from '@coral-xyz/anchor'; +import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum'; +import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression'; +import { + type AccountMeta, + AddressLookupTableProgram, + type PublicKey, + SystemProgram, + Transaction, + TransactionMessage, + VersionedTransaction, + sendAndConfirmTransaction, +} from '@solana/web3.js'; +import { getAsset, getAssetProof } from '../readAPI'; +import { decode, mapProof } from '../utils'; + +import { connection, keypair, program, programID } from './constants'; + +async function main() { + // TODO change all of these to your values + const assetId1 = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd'; + const assetId2 = '14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg'; //"D2CoMLCRfsfv1EAiNbaBHfoU1Sqf1964KXLGxEfyUwWo"; + + const tree1 = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B'); + const tree2 = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B'); + + const receiver1 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM'); + const receiver2 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM'); + // --- + + const lookupTable = await createLookupTable(); + + const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('cNFT-vault', 'utf8')], programID); + + const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree1.toBuffer()], BUBBLEGUM_PROGRAM_ID); + const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync([tree2.toBuffer()], BUBBLEGUM_PROGRAM_ID); + + const asset1 = await getAsset(assetId1); + const asset2 = await getAsset(assetId2); + + const proof1 = await getAssetProof(assetId1); + const proofPathAsAccounts1 = mapProof(proof1); + const proof2 = await getAssetProof(assetId2); + const proofPathAsAccounts2 = mapProof(proof2); + + const ixData1 = getInstructionData(asset1, proof1); + const ixData2 = getInstructionData(asset2, proof2); + + const remainingAccounts: AccountMeta[] = [...proofPathAsAccounts1, ...proofPathAsAccounts2]; + + const ix = await program.methods + .withdrawTwoCnfts(...ixData1, ...ixData2) + .accounts({ + leafOwner: vaultPDA, + merkleTree1: tree1, + newLeafOwner1: receiver1, + treeAuthority1: treeAuthority1, + merkleTree2: tree2, + newLeafOwner2: receiver2, + treeAuthority2: treeAuthority2, + bubblegumProgram: BUBBLEGUM_PROGRAM_ID, + compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, + logWrapper: SPL_NOOP_PROGRAM_ID, + systemProgram: anchor.web3.SystemProgram.programId, + }) + .remainingAccounts(remainingAccounts) + .instruction(); + + await extendLookupTable( + lookupTable, + proofPathAsAccounts1.map((acc) => acc.pubkey), + ); + await extendLookupTable( + lookupTable, + proofPathAsAccounts2.map((acc) => acc.pubkey), + ); + + const lookupTableAccount = await connection.getAddressLookupTable(lookupTable).then((res) => res.value); + + if (!lookupTableAccount) { + console.log('could not fetch ATL!'); + return; + } + + await new Promise((_) => setTimeout(_, 30000)); + + const messageV0 = new TransactionMessage({ + payerKey: keypair.publicKey, + recentBlockhash: (await connection.getLatestBlockhash()).blockhash, + instructions: [ix], + }).compileToV0Message([lookupTableAccount]); + + const transactionV0 = new VersionedTransaction(messageV0); + transactionV0.sign([keypair]); + + const txid = await connection.sendTransaction(transactionV0); + console.log(txid); +} + +function getInstructionData(asset: any, proof: any): [number[], number[], number[], anchor.BN, number, number] { + const root = decode(proof.root); + const dataHash = decode(asset.compression.data_hash); + const creatorHash = decode(asset.compression.creator_hash); + const nonce = new anchor.BN(asset.compression.leaf_id); + const index = asset.compression.leaf_id; + const proofLength = proof.proof.length; + return [root, dataHash, creatorHash, nonce, index, proofLength]; +} + +main(); + +async function extendLookupTable(lookupTableAddress: PublicKey, proofHashes: PublicKey[]) { + const extendInstruction = AddressLookupTableProgram.extendLookupTable({ + payer: keypair.publicKey, + authority: keypair.publicKey, + lookupTable: lookupTableAddress, + addresses: [...proofHashes], + }); + + const tx = new Transaction(); + tx.add(extendInstruction); + + const sx = await sendAndConfirmTransaction(connection, tx, [keypair], { + commitment: 'finalized', + }); + console.log(sx); + console.log('ALT extended!'); +} + +async function createLookupTable(): Promise { + const slot = await connection.getSlot(); + + const [lookupTableInst, lookupTableAddress] = AddressLookupTableProgram.createLookupTable({ + authority: keypair.publicKey, + payer: keypair.publicKey, + recentSlot: slot, + }); + console.log(lookupTableAddress.toBase58()); + + const extendInstruction = AddressLookupTableProgram.extendLookupTable({ + payer: keypair.publicKey, + authority: keypair.publicKey, + lookupTable: lookupTableAddress, + addresses: [ + programID, + SystemProgram.programId, + BUBBLEGUM_PROGRAM_ID, + SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, + SPL_NOOP_PROGRAM_ID, + // you could add more addresses here, like merkle trees, leaf owners etc. + ], + }); + + const tx = new Transaction(); + tx.add(lookupTableInst).add(extendInstruction); + + const sx = await sendAndConfirmTransaction(connection, tx, [keypair], { + commitment: 'finalized', + }); + console.log(sx); + console.log('ALT created'); + + return lookupTableAddress; +} diff --git a/compression/cnft-vault/anchor/tests/tests.ts b/compression/cnft-vault/anchor/tests/tests.ts index f4b591f8d..8e39911dc 100644 --- a/compression/cnft-vault/anchor/tests/tests.ts +++ b/compression/cnft-vault/anchor/tests/tests.ts @@ -1,43 +1,31 @@ -import * as anchor from "@coral-xyz/anchor"; -import { loadWalletKey, decode, mapProof } from "./utils"; -import { IDL, CnftVault } from "../target/types/cnft_vault"; -import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum"; -import { - SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - SPL_NOOP_PROGRAM_ID, -} from "@solana/spl-account-compression"; -import { getAsset, getAssetProof } from "./readAPI"; -import { AccountMeta } from "@solana/web3.js"; - -describe("cNFT Vault", () => { +import * as anchor from '@coral-xyz/anchor'; +import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum'; +import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression'; +import type { AccountMeta } from '@solana/web3.js'; +import { type CnftVault, IDL } from '../target/types/cnft_vault'; +import { getAsset, getAssetProof } from './readAPI'; +import { decode, loadWalletKey, mapProof } from './utils'; + +describe('cNFT Vault', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const payer = provider.wallet as anchor.Wallet; const program = anchor.workspace.CnftVault as anchor.Program; - const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync( - [Buffer.from("cNFT-vault", "utf8")], - program.programId - ); - console.log("Vault address: " + vaultPDA.toBase58()); + const [vaultPDA, _bump] = anchor.web3.PublicKey.findProgramAddressSync([Buffer.from('cNFT-vault', 'utf8')], program.programId); + console.log(`Vault address: ${vaultPDA.toBase58()}`); - it("Withdraw a cNFT!", async () => { + it('Withdraw a cNFT!', async () => { // we expect the cNFT to already be in the vault // you can send it there (to vaultPDA) using any regular wallet // the cNFT has the following asset id - const assetId = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd"; // TODO + const assetId = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd'; // TODO // and is compressed in the following tree - const tree = new anchor.web3.PublicKey( - "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B" - ); // TODO + const tree = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B'); // TODO const receiver = payer.publicKey; // you can define any pubkey as the receiver here - const [treeAuthority, _bump2] = - anchor.web3.PublicKey.findProgramAddressSync( - [tree.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); + const [treeAuthority, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree.toBuffer()], BUBBLEGUM_PROGRAM_ID); const asset = await getAsset(assetId); @@ -65,40 +53,24 @@ describe("cNFT Vault", () => { .remainingAccounts(proofPathAsAccounts) .rpc(); - console.log("Success!"); + console.log('Success!'); console.log(` Tx Signature: ${sx}`); }); - it("Withdraw two cNFTs!", async () => { + it('Withdraw two cNFTs!', async () => { // TODO change all of these to your values - const assetId1 = "DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd"; - const assetId2 = "14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg"; - - const tree1 = new anchor.web3.PublicKey( - "trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B" - ); - const tree2 = new anchor.web3.PublicKey( - "Feywkti8LLBLfxhSGmYgzUBqpq89qehfB1SMTYV1zCu" - ); - - const receiver1 = new anchor.web3.PublicKey( - "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM" - ); - const receiver2 = new anchor.web3.PublicKey( - "Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM" - ); + const assetId1 = 'DGWU3mHenDerCvjkeDsKYEbsvXbWvqdo1bVoXy3dkeTd'; + const assetId2 = '14JojSTdBZvP7f77rCxB3oQK78skTVD6DiXrXUL4objg'; + + const tree1 = new anchor.web3.PublicKey('trezdkTFPKyj4gE9LAJYPpxn8AYVCvM7Mc4JkTb9X5B'); + const tree2 = new anchor.web3.PublicKey('Feywkti8LLBLfxhSGmYgzUBqpq89qehfB1SMTYV1zCu'); + + const receiver1 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM'); + const receiver2 = new anchor.web3.PublicKey('Andys9wuoMdUeRiZLgRS5aJwYNFv4Ut6qQi8PNDTAPEM'); // --- - const [treeAuthority1, _bump2] = - anchor.web3.PublicKey.findProgramAddressSync( - [tree1.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); - const [treeAuthority2, _bump3] = - anchor.web3.PublicKey.findProgramAddressSync( - [tree2.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); + const [treeAuthority1, _bump2] = anchor.web3.PublicKey.findProgramAddressSync([tree1.toBuffer()], BUBBLEGUM_PROGRAM_ID); + const [treeAuthority2, _bump3] = anchor.web3.PublicKey.findProgramAddressSync([tree2.toBuffer()], BUBBLEGUM_PROGRAM_ID); const asset1 = await getAsset(assetId1); const asset2 = await getAsset(assetId2); @@ -111,10 +83,7 @@ describe("cNFT Vault", () => { const ixData1 = getInstructionData(asset1, proof1); const ixData2 = getInstructionData(asset2, proof2); - const remainingAccounts: AccountMeta[] = [ - ...proofPathAsAccounts1, - ...proofPathAsAccounts2, - ]; + const remainingAccounts: AccountMeta[] = [...proofPathAsAccounts1, ...proofPathAsAccounts2]; const sx = await program.methods .withdrawTwoCnfts(...ixData1, ...ixData2) @@ -133,15 +102,12 @@ describe("cNFT Vault", () => { }) .remainingAccounts(remainingAccounts) .rpc(); - console.log("Success!"); + console.log('Success!'); console.log(` Tx Signature: ${sx}`); }); }); -function getInstructionData( - asset: any, - proof: any -): [number[], number[], number[], anchor.BN, number, number] { +function getInstructionData(asset: any, proof: any): [number[], number[], number[], anchor.BN, number, number] { const root = decode(proof.root); const dataHash = decode(asset.compression.data_hash); const creatorHash = decode(asset.compression.creator_hash); diff --git a/compression/cnft-vault/anchor/tests/utils.ts b/compression/cnft-vault/anchor/tests/utils.ts index bb371855e..45c4ed230 100644 --- a/compression/cnft-vault/anchor/tests/utils.ts +++ b/compression/cnft-vault/anchor/tests/utils.ts @@ -1,31 +1,38 @@ -import { Connection, Keypair, PublicKey, Signer, TransactionInstruction, TransactionMessage, VersionedTransaction, AccountMeta } from "@solana/web3.js"; - -import * as bs58 from "bs58"; - -export function loadWalletKey(keypairFile: string): Keypair { - const fs = require("fs") - return Keypair.fromSecretKey( - new Uint8Array(JSON.parse(fs.readFileSync(keypairFile).toString())), - ); -} - -export function decode(stuff: string) { - return bufferToArray(bs58.decode(stuff)) -} -function bufferToArray(buffer: Buffer): number[] { - const nums: number[] = []; - for (let i = 0; i < buffer.length; i++) { - nums.push(buffer[i]); - } - return nums; -} -export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => { - if (!assetProof.proof || assetProof.proof.length === 0) { - throw new Error("Proof is empty"); - } - return assetProof.proof.map((node) => ({ - pubkey: new PublicKey(node), - isSigner: false, - isWritable: false, - })); -}; \ No newline at end of file +import { + type AccountMeta, + Connection, + Keypair, + PublicKey, + Signer, + TransactionInstruction, + TransactionMessage, + VersionedTransaction, +} from '@solana/web3.js'; + +import * as bs58 from 'bs58'; + +export function loadWalletKey(keypairFile: string): Keypair { + const fs = require('node:fs'); + return Keypair.fromSecretKey(new Uint8Array(JSON.parse(fs.readFileSync(keypairFile).toString()))); +} + +export function decode(stuff: string) { + return bufferToArray(bs58.decode(stuff)); +} +function bufferToArray(buffer: Buffer): number[] { + const nums: number[] = []; + for (let i = 0; i < buffer.length; i++) { + nums.push(buffer[i]); + } + return nums; +} +export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => { + if (!assetProof.proof || assetProof.proof.length === 0) { + throw new Error('Proof is empty'); + } + return assetProof.proof.map((node) => ({ + pubkey: new PublicKey(node), + isSigner: false, + isWritable: false, + })); +}; diff --git a/compression/cnft-vault/anchor/tsconfig.json b/compression/cnft-vault/anchor/tsconfig.json index d8c8d75f9..cd5d2e3d0 100644 --- a/compression/cnft-vault/anchor/tsconfig.json +++ b/compression/cnft-vault/anchor/tsconfig.json @@ -1,17 +1,10 @@ { "compilerOptions": { - "types": [ - "mocha", - "chai" - ], - "typeRoots": [ - "./node_modules/@types" - ], - "lib": [ - "es2015" - ], + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], "module": "commonjs", "target": "es6", "esModuleInterop": true } -} \ No newline at end of file +} diff --git a/compression/cutils/.gitignore b/compression/cutils/anchor/.gitignore similarity index 100% rename from compression/cutils/.gitignore rename to compression/cutils/anchor/.gitignore diff --git a/compression/cutils/Anchor.toml b/compression/cutils/anchor/Anchor.toml similarity index 100% rename from compression/cutils/Anchor.toml rename to compression/cutils/anchor/Anchor.toml diff --git a/compression/cutils/Cargo.toml b/compression/cutils/anchor/Cargo.toml similarity index 100% rename from compression/cutils/Cargo.toml rename to compression/cutils/anchor/Cargo.toml diff --git a/compression/cutils/README.md b/compression/cutils/anchor/README.md similarity index 100% rename from compression/cutils/README.md rename to compression/cutils/anchor/README.md diff --git a/compression/cutils/anchor/package.json b/compression/cutils/anchor/package.json new file mode 100644 index 000000000..9a2b55c88 --- /dev/null +++ b/compression/cutils/anchor/package.json @@ -0,0 +1,26 @@ +{ + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.27.0", + "@metaplex-foundation/js": "^0.19.4", + "@metaplex-foundation/mpl-bubblegum": "^0.7.0", + "@solana/spl-account-compression": "^0.1.8", + "@solana/spl-token": "^0.3.8", + "@solana/web3.js": "^1.77.3", + "axios": "^1.4.0" + }, + "devDependencies": { + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "mocha": "^9.0.3", + "prettier": "^2.6.2", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.3.5" + } +} diff --git a/compression/cutils/anchor/pnpm-lock.yaml b/compression/cutils/anchor/pnpm-lock.yaml new file mode 100644 index 000000000..ff5554dd9 --- /dev/null +++ b/compression/cutils/anchor/pnpm-lock.yaml @@ -0,0 +1,3775 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: ^0.27.0 + version: 0.27.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/js': + specifier: ^0.19.4 + version: 0.19.5(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-bubblegum': + specifier: ^0.7.0 + version: 0.7.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-account-compression': + specifier: ^0.1.8 + version: 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': + specifier: ^0.3.8 + version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: ^1.77.3 + version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + axios: + specifier: ^1.4.0 + version: 1.7.2 + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.16 + '@types/mocha': + specifier: ^9.0.0 + version: 9.1.1 + chai: + specifier: ^4.3.4 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + prettier: + specifier: ^2.6.2 + version: 2.8.8 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@20.12.12)(typescript@4.9.5) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@bundlr-network/client@0.8.9': + resolution: {integrity: sha512-SJ7BAt/KhONeFQ0+nbqrw2DUWrsev6y6cmlXt+3x7fPCkw7OJwudtxV/h2nBteZd65NXjqw8yzkmLiLfZ7CCRA==} + deprecated: Bundlr is now Irys - please switch to @irys/sdk - this package will remain compatible with Irys for the foreseeable future. + hasBin: true + + '@coral-xyz/anchor@0.27.0': + resolution: {integrity: sha512-+P/vPdORawvg3A9Wj02iquxb4T0C5m4P6aZBVYysKl4Amk+r6aMPZkUhilBkD6E4Nuxnoajv3CFykUfkGE0n5g==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.27.0': + resolution: {integrity: sha512-tJKzhLukghTWPLy+n8K8iJKgBq1yLT/AxaNd10yJrX8mI56ao5+OFAKAqW/h0i79KCvb4BK0VGO5ECmmolFz9A==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@ethereumjs/rlp@4.0.1': + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + + '@ethereumjs/util@8.1.0': + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + + '@ethersproject/abi@5.7.0': + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + + '@ethersproject/abstract-provider@5.7.0': + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + + '@ethersproject/abstract-signer@5.7.0': + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/base64@5.7.0': + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + + '@ethersproject/basex@5.7.0': + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/constants@5.7.0': + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + + '@ethersproject/contracts@5.7.0': + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + + '@ethersproject/hash@5.7.0': + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + + '@ethersproject/hdnode@5.7.0': + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + + '@ethersproject/json-wallets@5.7.0': + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/networks@5.7.1': + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + + '@ethersproject/pbkdf2@5.7.0': + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + + '@ethersproject/properties@5.7.0': + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + + '@ethersproject/providers@5.7.2': + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + + '@ethersproject/random@5.7.0': + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + + '@ethersproject/sha2@5.7.0': + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + + '@ethersproject/signing-key@5.7.0': + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + + '@ethersproject/solidity@5.7.0': + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + + '@ethersproject/strings@5.7.0': + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + + '@ethersproject/transactions@5.7.0': + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + + '@ethersproject/units@5.7.0': + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + + '@ethersproject/wallet@5.7.0': + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + + '@ethersproject/web@5.7.1': + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + + '@ethersproject/wordlists@5.7.0': + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@metaplex-foundation/beet-solana@0.3.1': + resolution: {integrity: sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==} + + '@metaplex-foundation/beet-solana@0.4.0': + resolution: {integrity: sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ==} + + '@metaplex-foundation/beet-solana@0.4.1': + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + + '@metaplex-foundation/beet@0.4.0': + resolution: {integrity: sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA==} + + '@metaplex-foundation/beet@0.6.1': + resolution: {integrity: sha512-OYgnijLFzw0cdUlRKH5POp0unQECPOW9muJ2X3QIVyak5G6I6l/rKo72sICgPLIFKdmsi2jmnkuLY7wp14iXdw==} + + '@metaplex-foundation/beet@0.7.1': + resolution: {integrity: sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA==} + + '@metaplex-foundation/beet@0.7.2': + resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==} + + '@metaplex-foundation/cusper@0.0.2': + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + + '@metaplex-foundation/js@0.19.5': + resolution: {integrity: sha512-OXGX0zr4rpr4vpFt6+tO+bEQ7yN5fqyKpAWYzxPb0yGM0Rj6JKlvj0Eaiymvwmm5XtLPK+98M8y9jxZiQEtsEA==} + + '@metaplex-foundation/mpl-auction-house@2.5.1': + resolution: {integrity: sha512-O+IAdYVaoOvgACB8pm+1lF5BNEjl0COkqny2Ho8KQZwka6aC/vHbZ239yRwAMtJhf5992BPFdT4oifjyE0O+Mw==} + + '@metaplex-foundation/mpl-bubblegum@0.6.2': + resolution: {integrity: sha512-4tF7/FFSNtpozuIGD7gMKcqK2D49eVXZ144xiowC5H1iBeu009/oj2m8Tj6n4DpYFKWJ2JQhhhk0a2q7x0Begw==} + + '@metaplex-foundation/mpl-bubblegum@0.7.0': + resolution: {integrity: sha512-HCo6q+nh8M3KRv9/aUaZcJo5/vPJEeZwPGRDWkqN7lUXoMIvhd83fZi7MB1rIg1gwpVHfHqim0A02LCYKisWFg==} + + '@metaplex-foundation/mpl-candy-guard@0.3.2': + resolution: {integrity: sha512-QWXzPDz+6OR3957LtfW6/rcGvFWS/0AeHJa/BUO2VEVQxN769dupsKGtrsS8o5RzXCeap3wrCtDSNxN3dnWu4Q==} + + '@metaplex-foundation/mpl-candy-machine-core@0.1.2': + resolution: {integrity: sha512-jjDkRvMR+iykt7guQ7qVnOHTZedql0lq3xqWDMaenAUCH3Xrf2zKATThhJppIVNX1/YtgBOO3lGqhaFbaI4pCw==} + + '@metaplex-foundation/mpl-candy-machine@5.1.0': + resolution: {integrity: sha512-pjHpUpWVOCDxK3l6dXxfmJKNQmbjBqnm5ElOl1mJAygnzO8NIPQvrP89y6xSNyo8qZsJyt4ZMYUyD0TdbtKZXQ==} + + '@metaplex-foundation/mpl-token-metadata@2.13.0': + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + + '@noble/curves@1.3.0': + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/ed25519@1.7.3': + resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@randlabs/communication-bridge@1.0.1': + resolution: {integrity: sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==} + + '@randlabs/myalgo-connect@1.4.2': + resolution: {integrity: sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==} + + '@scure/base@1.1.6': + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + + '@scure/bip32@1.3.3': + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + + '@scure/bip39@1.2.2': + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-account-compression@0.1.10': + resolution: {integrity: sha512-IQAOJrVOUo6LCgeWW9lHuXo6JDbi4g3/RkQtvY0SyalvSWk9BIkHHe4IkAzaQw8q/BxEVBIjz8e9bNYWIAESNw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.50.1 + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.1.8': + resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==} + engines: {node: '>= 10'} + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/wallet-adapter-base@0.9.23': + resolution: {integrity: sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.77.3 + + '@solana/wallet-standard-features@1.2.0': + resolution: {integrity: sha512-tUd9srDLkRpe1BYg7we+c4UhRQkq+XQWswsr/L1xfGmoRDF47BPSXf4zE7ZU2GRBGvxtGt7lwJVAufQyQYhxTQ==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@supercharge/promise-pool@2.4.0': + resolution: {integrity: sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w==} + engines: {node: '>=8'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@11.11.6': + resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + '@wallet-standard/base@1.0.1': + resolution: {integrity: sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w==} + engines: {node: '>=16'} + + '@wallet-standard/features@1.0.3': + resolution: {integrity: sha512-m8475I6W5LTatTZuUz5JJNK42wFRgkJTB0I9tkruMwfqBF2UN2eomkYNVf9RbrsROelCRzSFmugqjKZBFaubsA==} + engines: {node: '>=16'} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + algo-msgpack-with-bigint@2.1.1: + resolution: {integrity: sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==} + engines: {node: '>= 10'} + + algosdk@1.24.1: + resolution: {integrity: sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==} + engines: {node: '>=14.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arbundles@0.6.23: + resolution: {integrity: sha512-+gr93F3fivN+6dhiImT6BQNaXz4oECPn2GYjCZjS2yEoq7hM78FRvVp6kQyjEdhnuBFQr/q4oS/nkjnQlHdj9Q==} + + arconnect@0.4.2: + resolution: {integrity: sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + arweave-stream-tx@1.2.2: + resolution: {integrity: sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==} + peerDependencies: + arweave: ^1.10.0 + + arweave@1.15.1: + resolution: {integrity: sha512-rT7FOwqdudd5npqp4xOYdDT2035LtpcqePjwirh4wjRiEtVsz1FZkRiM2Yj+fOAwYzOm/hNG0GDOipDSaiEGGQ==} + engines: {node: '>=18'} + + asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + avsc@https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef: + resolution: {tarball: https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef} + version: 5.4.7 + engines: {node: '>=0.11'} + + axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + + axios@0.25.0: + resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} + + axios@1.7.2: + resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + base64url@3.0.1: + resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} + engines: {node: '>=6.0.0'} + + bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bip39-light@1.0.7: + resolution: {integrity: sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q==} + + bip39@3.0.2: + resolution: {integrity: sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bn.js@4.11.6: + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + bn.js@5.2.0: + resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.6.0: + resolution: {integrity: sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer-reverse@1.0.1: + resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + capability@0.2.5: + resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + crypto-js@3.3.0: + resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==} + + csv-generate@4.4.1: + resolution: {integrity: sha512-O/einO0v4zPmXaOV+sYqGa02VkST4GP5GLpWBNHEouIU7pF3kpGf3D0kCCvX82ydIY4EKkOK+R8b1BYsRXravg==} + + csv-parse@5.5.6: + resolution: {integrity: sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==} + + csv-stringify@6.5.0: + resolution: {integrity: sha512-edlXFVKcUx7r8Vx5zQucsuMg4wb/xT6qyz+Sr1vnLrdXqlLD1+UKyWNyZ9zn6mUW1ewmGxrpVwAcChGF0HQ/2Q==} + + csv@6.3.9: + resolution: {integrity: sha512-eiN+Qu8NwSLxZYia6WzB8xlX/rAQ/8EgK5A4dIF7Bz96mzcr5dW1jlcNmjG0QWySWKfPdCerH3RQ96ZqqsE8cA==} + engines: {node: '>= 0.1.90'} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + + elliptic@6.5.5: + resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + error-polyfill@0.1.3: + resolution: {integrity: sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + ethereum-bloom-filters@1.1.0: + resolution: {integrity: sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==} + + ethereum-cryptography@2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + + ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + + ethjs-unit@0.1.6: + resolution: {integrity: sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=} + engines: {node: '>=6.5.0', npm: '>=3'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hi-base32@0.5.1: + resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hex-prefixed@1.0.0: + resolution: {integrity: sha1-fY035q135dEnFIkTxXPggtd39VQ=} + engines: {node: '>=6.5.0', npm: '>=3'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-sha256@0.9.0: + resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-sha512@0.8.0: + resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + merkletreejs@0.2.32: + resolution: {integrity: sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ==} + engines: {node: '>= 7.6.0'} + + micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multistream@4.1.0: + resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==} + + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + near-api-js@0.44.2: + resolution: {integrity: sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg==} + + near-hd-key@1.2.1: + resolution: {integrity: sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg==} + + near-seed-phrase@0.2.0: + resolution: {integrity: sha512-NpmrnejpY1AdlRpDZ0schJQJtfBaoUheRfiYtQpcq9TkwPgqKZCRULV5L3hHmLc0ep7KRtikbPQ9R2ztN/3cyQ==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + number-to-bn@1.7.0: + resolution: {integrity: sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=} + engines: {node: '>=6.5.0', npm: '>=3'} + + o3@1.0.3: + resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + secp256k1@4.0.3: + resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} + engines: {node: '>=10.0.0'} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + stream-transform@3.3.2: + resolution: {integrity: sha512-v64PUnPy9Qw94NGuaEMo+9RHQe4jTBYf+NkTtqkCgeuiNo8NlL0LtLR7fkKWNVFtp3RhIm5Dlxkgm5uz7TDimQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-hex-prefix@1.0.0: + resolution: {integrity: sha1-DF8VX+8RUTczd96du1iNoFUA428=} + engines: {node: '>=6.5.0', npm: '>=3'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + treeify@1.1.0: + resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} + engines: {node: '>=0.6'} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typescript-collections@1.3.3: + resolution: {integrity: sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + u3@0.1.1: + resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + vlq@2.0.4: + resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web3-utils@1.10.4: + resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} + engines: {node: '>=8.0.0'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@bundlr-network/client@0.8.9(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10)': + dependencies: + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@supercharge/promise-pool': 2.4.0 + algosdk: 1.24.1 + arbundles: 0.6.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10) + arweave: 1.15.1 + async-retry: 1.3.3 + axios: 0.25.0(debug@4.3.4) + base64url: 3.0.1 + bignumber.js: 9.1.2 + bs58: 4.0.1 + commander: 8.3.0 + csv: 6.3.9 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + inquirer: 8.2.6 + js-sha256: 0.9.0 + mime-types: 2.1.35 + near-api-js: 0.44.2 + near-seed-phrase: 0.2.0 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - utf-8-validate + + '@coral-xyz/anchor@0.27.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/borsh': 0.27.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + base64-js: 1.5.1 + bn.js: 5.2.1 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.1.8 + crypto-hash: 1.3.0 + eventemitter3: 4.0.7 + js-sha256: 0.9.0 + pako: 2.1.0 + snake-case: 3.0.4 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@coral-xyz/borsh@0.27.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer-layout: 1.2.2 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@ethereumjs/rlp@4.0.1': {} + + '@ethereumjs/util@8.1.0': + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.1.3 + micro-ftch: 0.3.1 + + '@ethersproject/abi@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/abstract-provider@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + + '@ethersproject/abstract-signer@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/base64@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + + '@ethersproject/basex@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + + '@ethersproject/contracts@5.7.0': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + + '@ethersproject/hash@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/hdnode@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/json-wallets@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/pbkdf2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@ethersproject/random@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/sha2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + + '@ethersproject/signing-key@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + + '@ethersproject/solidity@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/transactions@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + + '@ethersproject/units@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/wallet@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/web@5.7.1': + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/wordlists@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@metaplex-foundation/beet-solana@0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet-solana@0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet@0.4.0': + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/beet@0.6.1': + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/beet@0.7.1': + dependencies: + ansicolors: 0.3.2 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/beet@0.7.2': + dependencies: + ansicolors: 0.3.2 + assert: 2.1.0 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/cusper@0.0.2': {} + + '@metaplex-foundation/js@0.19.5(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@bundlr-network/client': 0.8.9(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10) + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/mpl-auction-house': 2.5.1(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-bubblegum': 0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-candy-guard': 0.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-candy-machine': 5.1.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-candy-machine-core': 0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@noble/ed25519': 1.7.3 + '@noble/hashes': 1.4.0 + '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bignumber.js: 9.1.2 + bn.js: 5.2.1 + bs58: 5.0.0 + buffer: 6.0.3 + debug: 4.3.4 + eventemitter3: 4.0.7 + lodash.clonedeep: 4.5.0 + lodash.isequal: 4.5.0 + merkletreejs: 0.2.32 + mime: 3.0.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-auction-house@2.5.1(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.6.1 + '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-bubblegum@0.6.2(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + js-sha3: 0.8.0 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-bubblegum@0.7.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-account-compression': 0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + js-sha3: 0.8.0 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-candy-guard@0.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.4.0 + '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-candy-machine-core@0.1.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.4.0 + '@metaplex-foundation/beet-solana': 0.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-candy-machine@5.1.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.1 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@noble/curves@1.3.0': + dependencies: + '@noble/hashes': 1.3.3 + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/ed25519@1.7.3': {} + + '@noble/hashes@1.3.3': {} + + '@noble/hashes@1.4.0': {} + + '@randlabs/communication-bridge@1.0.1': {} + + '@randlabs/myalgo-connect@1.4.2': + dependencies: + '@randlabs/communication-bridge': 1.0.1 + + '@scure/base@1.1.6': {} + + '@scure/bip32@1.3.3': + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@scure/bip39@1.2.2': + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-account-compression@0.1.10(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + borsh: 0.7.0 + js-sha3: 0.8.0 + typescript-collections: 1.3.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.1.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer: 6.0.3 + buffer-layout: 1.2.2 + dotenv: 10.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@solana/wallet-standard-features': 1.2.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@wallet-standard/base': 1.0.1 + '@wallet-standard/features': 1.0.3 + eventemitter3: 4.0.7 + + '@solana/wallet-standard-features@1.2.0': + dependencies: + '@wallet-standard/base': 1.0.1 + '@wallet-standard/features': 1.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@supercharge/promise-pool@2.4.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@11.11.6': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + '@wallet-standard/base@1.0.1': {} + + '@wallet-standard/features@1.0.3': + dependencies: + '@wallet-standard/base': 1.0.1 + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + acorn-walk@8.3.2: {} + + acorn@8.11.3: {} + + aes-js@3.0.0: {} + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + algo-msgpack-with-bigint@2.1.1: {} + + algosdk@1.24.1: + dependencies: + algo-msgpack-with-bigint: 2.1.1 + buffer: 6.0.3 + cross-fetch: 3.1.8 + hi-base32: 0.5.1 + js-sha256: 0.9.0 + js-sha3: 0.8.0 + js-sha512: 0.8.0 + json-bigint: 1.0.0 + tweetnacl: 1.0.3 + vlq: 2.0.4 + transitivePeerDependencies: + - encoding + + ansi-colors@4.1.1: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arbundles@0.6.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@5.0.10): + dependencies: + '@noble/ed25519': 1.7.3 + '@randlabs/myalgo-connect': 1.4.2 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + algosdk: 1.24.1 + arweave: 1.15.1 + arweave-stream-tx: 1.2.2(arweave@1.15.1) + avsc: https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef + axios: 0.21.4(debug@4.3.4) + base64url: 3.0.1 + bs58: 4.0.1 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + keccak: 3.0.4 + multistream: 4.1.0 + process: 0.11.10 + secp256k1: 4.0.3 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - '@solana/web3.js' + - bufferutil + - debug + - encoding + - utf-8-validate + + arconnect@0.4.2: + dependencies: + arweave: 1.15.1 + + arg@4.1.3: {} + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + arweave-stream-tx@1.2.2(arweave@1.15.1): + dependencies: + arweave: 1.15.1 + exponential-backoff: 3.1.1 + + arweave@1.15.1: + dependencies: + arconnect: 0.4.2 + asn1.js: 5.4.1 + base64-js: 1.5.1 + bignumber.js: 9.1.2 + + asn1.js@5.4.1: + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@1.1.0: {} + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + avsc@https://codeload.github.com/Irys-xyz/avsc/tar.gz/a730cc8018b79e114b6a3381bbb57760a24c6cef: {} + + axios@0.21.4(debug@4.3.4): + dependencies: + follow-redirects: 1.15.6(debug@4.3.4) + transitivePeerDependencies: + - debug + + axios@0.25.0(debug@4.3.4): + dependencies: + follow-redirects: 1.15.6(debug@4.3.4) + transitivePeerDependencies: + - debug + + axios@1.7.2: + dependencies: + follow-redirects: 1.15.6(debug@4.3.4) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base64-js@1.5.1: {} + + base64url@3.0.1: {} + + bech32@1.1.4: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bip39-light@1.0.7: + dependencies: + create-hash: 1.2.0 + pbkdf2: 3.1.2 + + bip39@3.0.2: + dependencies: + '@types/node': 11.11.6 + create-hash: 1.2.0 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + bn.js@4.11.6: {} + + bn.js@4.12.0: {} + + bn.js@5.2.0: {} + + bn.js@5.2.1: {} + + borsh@0.6.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + buffer-from@1.1.2: {} + + buffer-layout@1.2.2: {} + + buffer-reverse@1.0.1: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + capability@0.2.5: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + chardet@0.7.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cipher-base@1.0.4: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-width@3.0.0: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@12.1.0: {} + + commander@2.20.3: {} + + commander@8.3.0: {} + + concat-map@0.0.1: {} + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + create-require@1.1.1: {} + + cross-fetch@3.1.8: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + crypto-hash@1.3.0: {} + + crypto-js@3.3.0: {} + + csv-generate@4.4.1: {} + + csv-parse@5.5.6: {} + + csv-stringify@6.5.0: {} + + csv@6.3.9: + dependencies: + csv-generate: 4.4.1 + csv-parse: 5.5.6 + csv-stringify: 6.5.0 + stream-transform: 3.3.2 + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + delayed-stream@1.0.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + diff@3.5.0: {} + + diff@4.0.2: {} + + diff@5.0.0: {} + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + + dotenv@10.0.0: {} + + elliptic@6.5.4: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + elliptic@6.5.5: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emoji-regex@8.0.0: {} + + error-polyfill@0.1.3: + dependencies: + capability: 0.2.5 + o3: 1.0.3 + u3: 0.1.1 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + ethereum-bloom-filters@1.1.0: + dependencies: + '@noble/hashes': 1.4.0 + + ethereum-cryptography@2.1.3: + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 + + ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethjs-unit@0.1.6: + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + + eventemitter3@4.0.7: {} + + exponential-backoff@3.1.1: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + follow-redirects@1.15.6(debug@4.3.4): + optionalDependencies: + debug: 4.3.4 + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hash-base@3.1.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + hi-base32@0.5.1: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + http-errors@1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hex-prefixed@1.0.0: {} + + is-interactive@1.0.0: {} + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-sha256@0.9.0: {} + + js-sha3@0.8.0: {} + + js-sha512@0.8.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.1.2 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.1 + readable-stream: 3.6.2 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.clonedeep@4.5.0: {} + + lodash.isequal@4.5.0: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lower-case@2.0.2: + dependencies: + tslib: 2.6.2 + + make-error@1.3.6: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + merkletreejs@0.2.32: + dependencies: + bignumber.js: 9.1.2 + buffer-reverse: 1.0.1 + crypto-js: 3.3.0 + treeify: 1.1.0 + web3-utils: 1.10.4 + + micro-ftch@0.3.1: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@3.0.0: {} + + mimic-fn@2.1.0: {} + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + multistream@4.1.0: + dependencies: + once: 1.4.0 + readable-stream: 3.6.2 + + mustache@4.2.0: {} + + mute-stream@0.0.8: {} + + nanoid@3.3.1: {} + + near-api-js@0.44.2: + dependencies: + bn.js: 5.2.0 + borsh: 0.6.0 + bs58: 4.0.1 + depd: 2.0.0 + error-polyfill: 0.1.3 + http-errors: 1.8.1 + js-sha256: 0.9.0 + mustache: 4.2.0 + node-fetch: 2.7.0 + text-encoding-utf-8: 1.0.2 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - encoding + + near-hd-key@1.2.1: + dependencies: + bip39: 3.0.2 + create-hmac: 1.1.7 + tweetnacl: 1.0.3 + + near-seed-phrase@0.2.0: + dependencies: + bip39-light: 1.0.7 + bs58: 4.0.1 + near-hd-key: 1.2.1 + tweetnacl: 1.0.3 + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + + node-addon-api@2.0.2: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: {} + + normalize-path@3.0.0: {} + + number-to-bn@1.7.0: + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 + + o3@1.0.3: + dependencies: + capability: 0.2.5 + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-tmpdir@1.0.2: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + pako@2.1.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + pbkdf2@3.1.2: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + prettier@2.8.8: {} + + process@0.11.10: {} + + proxy-from-env@1.1.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry@0.13.1: {} + + ripemd160@2.0.2: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + run-async@2.4.1: {} + + rxjs@7.8.1: + dependencies: + tslib: 2.6.2 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + scrypt-js@3.0.1: {} + + secp256k1@4.0.3: + dependencies: + elliptic: 6.5.5 + node-addon-api: 2.0.2 + node-gyp-build: 4.8.1 + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + signal-exit@3.0.7: {} + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + statuses@1.5.0: {} + + stream-transform@3.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-hex-prefix@1.0.0: + dependencies: + is-hex-prefixed: 1.0.0 + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + superstruct@0.15.5: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.3 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmp@0.2.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + toml@3.0.0: {} + + tr46@0.0.3: {} + + treeify@1.1.0: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@10.9.2(@types/node@20.12.12)(typescript@4.9.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.12.12 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + tslib@2.6.2: {} + + tweetnacl@1.0.3: {} + + type-detect@4.0.8: {} + + type-fest@0.21.3: {} + + typescript-collections@1.3.3: {} + + typescript@4.9.5: {} + + u3@0.1.1: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + utf8@3.0.0: {} + + util-deprecate@1.0.2: {} + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: {} + + vlq@2.0.4: {} + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + web3-utils@1.10.4: + dependencies: + '@ethereumjs/util': 8.1.0 + bn.js: 5.2.1 + ethereum-bloom-filters: 1.1.0 + ethereum-cryptography: 2.1.3 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/compression/cutils/programs/cutils/Cargo.toml b/compression/cutils/anchor/programs/cutils/Cargo.toml similarity index 100% rename from compression/cutils/programs/cutils/Cargo.toml rename to compression/cutils/anchor/programs/cutils/Cargo.toml diff --git a/compression/cutils/programs/cutils/Xargo.toml b/compression/cutils/anchor/programs/cutils/Xargo.toml similarity index 100% rename from compression/cutils/programs/cutils/Xargo.toml rename to compression/cutils/anchor/programs/cutils/Xargo.toml diff --git a/compression/cutils/programs/cutils/src/actions/mint.rs b/compression/cutils/anchor/programs/cutils/src/actions/mint.rs similarity index 100% rename from compression/cutils/programs/cutils/src/actions/mint.rs rename to compression/cutils/anchor/programs/cutils/src/actions/mint.rs diff --git a/compression/cutils/programs/cutils/src/actions/mod.rs b/compression/cutils/anchor/programs/cutils/src/actions/mod.rs similarity index 100% rename from compression/cutils/programs/cutils/src/actions/mod.rs rename to compression/cutils/anchor/programs/cutils/src/actions/mod.rs diff --git a/compression/cutils/programs/cutils/src/actions/verify.rs b/compression/cutils/anchor/programs/cutils/src/actions/verify.rs similarity index 100% rename from compression/cutils/programs/cutils/src/actions/verify.rs rename to compression/cutils/anchor/programs/cutils/src/actions/verify.rs diff --git a/compression/cutils/programs/cutils/src/lib.rs b/compression/cutils/anchor/programs/cutils/src/lib.rs similarity index 100% rename from compression/cutils/programs/cutils/src/lib.rs rename to compression/cutils/anchor/programs/cutils/src/lib.rs diff --git a/compression/cutils/programs/cutils/src/state/data.rs b/compression/cutils/anchor/programs/cutils/src/state/data.rs similarity index 100% rename from compression/cutils/programs/cutils/src/state/data.rs rename to compression/cutils/anchor/programs/cutils/src/state/data.rs diff --git a/compression/cutils/programs/cutils/src/state/mod.rs b/compression/cutils/anchor/programs/cutils/src/state/mod.rs similarity index 100% rename from compression/cutils/programs/cutils/src/state/mod.rs rename to compression/cutils/anchor/programs/cutils/src/state/mod.rs diff --git a/compression/cutils/anchor/tests/setup.ts b/compression/cutils/anchor/tests/setup.ts new file mode 100644 index 000000000..00c4463bd --- /dev/null +++ b/compression/cutils/anchor/tests/setup.ts @@ -0,0 +1,57 @@ +import type { CreateMetadataAccountArgsV3 } from '@metaplex-foundation/mpl-token-metadata'; +import type { ValidDepthSizePair } from '@solana/spl-account-compression'; +import { Connection, Keypair } from '@solana/web3.js'; +import { createCollection, createTree } from './utils/compression'; +import { loadOrGenerateKeypair, savePublicKeyToFile } from './utils/helpers'; + +async function setup() { + const rpc = 'https://api.devnet.solana.com'; + const connection = new Connection(rpc, 'confirmed'); + + // Collection auth and treeCreator + const payer = loadOrGenerateKeypair('payer'); + + // Airdrop + await connection.requestAirdrop(payer.publicKey, 1 * 10 ** 9); + console.log('Payer address:', payer.publicKey.toBase58()); + + const treeKeypair = Keypair.generate(); + const maxDepthSizePair: ValidDepthSizePair = { + maxDepth: 14, + maxBufferSize: 64, + }; + const canopyDepth = maxDepthSizePair.maxDepth - 5; + const tree = await createTree(connection, payer, treeKeypair, maxDepthSizePair, canopyDepth); + + // locally save the addresses for demo + savePublicKeyToFile('treeAddress', tree.treeAddress); + + const collectionMetadataV3: CreateMetadataAccountArgsV3 = { + data: { + name: 'Super Sweet NFT Collection', + symbol: 'SSNC', + // specific json metadata for the collection + uri: 'https://supersweetcollection.notarealurl/collection.json', + sellerFeeBasisPoints: 100, + creators: [ + { + address: payer.publicKey, + verified: false, + share: 100, + }, + ], + collection: null, + uses: null, + }, + isMutable: false, + collectionDetails: null, + }; + + // create a full token mint and initialize the collection (with the `payer` as the authority) + const collection = await createCollection(connection, payer, collectionMetadataV3); + + // locally save the addresses for the demo + savePublicKeyToFile('collectionMint', collection.mint); +} + +// setup() diff --git a/compression/cutils/anchor/tests/tests.ts b/compression/cutils/anchor/tests/tests.ts new file mode 100644 index 000000000..266af270e --- /dev/null +++ b/compression/cutils/anchor/tests/tests.ts @@ -0,0 +1,79 @@ +import * as anchor from '@coral-xyz/anchor'; +import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum/dist/src/generated'; +import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression'; +import type { Cutils } from '../target/types/cutils'; +import { loadOrGenerateKeypair, loadPublicKeysFromFile } from './utils/helpers'; +import { getAsset, getAssetProof } from './utils/readAPI'; +import { decode, getAccounts, mapProof } from './utils/utils'; + +describe('cutils', () => { + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + + const program = anchor.workspace.Cutils as anchor.Program; + + // NFT metadata pointer + // TODO change + const uri = 'https://arweave.net/nVRvZDaOk5YAdr4ZBEeMjOVhynuv8P3vywvuN5sYSPo'; + + const payer = loadOrGenerateKeypair('payer'); + + // cNFT receiver + const testWallet = loadOrGenerateKeypair('testWallet'); + + const { collectionMint, treeAddress } = loadPublicKeysFromFile(); + + it('Mint!', async () => { + const tx = await program.methods + .mint({ uri }) + .accounts({ + payer: payer.publicKey, + leafOwner: testWallet.publicKey, + leafDelegate: testWallet.publicKey, //verify + treeDelegate: payer.publicKey, + collectionAuthority: payer.publicKey, + collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID, + ...getAccounts(collectionMint, treeAddress), + }) + .transaction(); + + const sx = await program.provider.sendAndConfirm(tx, [payer], { + skipPreflight: true, + }); + console.log(` Tx Signature: ${sx}`); + }); + + // it("Verify", async () => { + // // TODO: replace assetId + // const assetId = "HUBMRAcYpow1ZUojdSMuvhcbNuCuRSAPWnXWjjYrpAVQ"; + // + // const asset = await getAsset(assetId); + // const proof = await getAssetProof(assetId); + // const proofPathAsAccounts = mapProof(proof); + // const root = decode(proof.root); + // const dataHash = decode(asset.compression.data_hash); + // const creatorHash = decode(asset.compression.creator_hash); + // const nonce = new anchor.BN(asset.compression.leaf_id); + // const index = asset.compression.leaf_id; + // + // const tx = await program.methods + // .verify({ + // root, dataHash, creatorHash, nonce, index + // }) + // .accounts({ + // leafOwner: testWallet.publicKey, + // leafDelegate: testWallet.publicKey, + // merkleTree: treeAddress, + // compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, + // }) + // .remainingAccounts(proofPathAsAccounts) + // .transaction(); + // + // const sx = await program.provider.sendAndConfirm(tx, [testWallet], {skipPreflight: true}); + // + // // This fails due to incorrect owner + // // const sx = await program.provider.sendAndConfirm(tx, [payer], {skipPreflight: true}); + // + // console.log(` Tx Signature: ${sx}`); + // }); +}); diff --git a/compression/cutils/anchor/tests/utils/compression.ts b/compression/cutils/anchor/tests/utils/compression.ts new file mode 100644 index 000000000..7b1947363 --- /dev/null +++ b/compression/cutils/anchor/tests/utils/compression.ts @@ -0,0 +1,346 @@ +import { + PROGRAM_ID as BUBBLEGUM_PROGRAM_ID, + type MetadataArgs, + computeCreatorHash, + computeDataHash, + createCreateTreeInstruction, + createMintToCollectionV1Instruction, +} from '@metaplex-foundation/mpl-bubblegum'; +import { + type CreateMetadataAccountArgsV3, + PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID, + createCreateMasterEditionV3Instruction, + createCreateMetadataAccountV3Instruction, + createSetCollectionSizeInstruction, +} from '@metaplex-foundation/mpl-token-metadata'; +import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID, type ValidDepthSizePair, createAllocTreeIx } from '@solana/spl-account-compression'; +import { TOKEN_PROGRAM_ID, createAccount, createMint, mintTo } from '@solana/spl-token'; +import { type Connection, type Keypair, PublicKey, Transaction, type TransactionInstruction, sendAndConfirmTransaction } from '@solana/web3.js'; + +// import local helper functions +import { explorerURL, extractSignatureFromFailedTransaction } from './helpers'; + +/* + Helper function to create a merkle tree on chain, including allocating + all the space required to store all the nodes +*/ +export async function createTree( + connection: Connection, + payer: Keypair, + treeKeypair: Keypair, + maxDepthSizePair: ValidDepthSizePair, + canopyDepth = 0, +) { + console.log('Creating a new Merkle tree...'); + console.log('treeAddress:', treeKeypair.publicKey.toBase58()); + + // derive the tree's authority (PDA), owned by Bubblegum + const [treeAuthority, _bump] = PublicKey.findProgramAddressSync([treeKeypair.publicKey.toBuffer()], BUBBLEGUM_PROGRAM_ID); + console.log('treeAuthority:', treeAuthority.toBase58()); + + // allocate the tree's account on chain with the `space` + // NOTE: this will compute the space needed to store the tree on chain (and the lamports required to store it) + const allocTreeIx = await createAllocTreeIx(connection, treeKeypair.publicKey, payer.publicKey, maxDepthSizePair, canopyDepth); + + // create the instruction to actually create the tree + const createTreeIx = createCreateTreeInstruction( + { + payer: payer.publicKey, + treeCreator: payer.publicKey, + treeAuthority, + merkleTree: treeKeypair.publicKey, + compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, + // NOTE: this is used for some on chain logging + logWrapper: SPL_NOOP_PROGRAM_ID, + }, + { + maxBufferSize: maxDepthSizePair.maxBufferSize, + maxDepth: maxDepthSizePair.maxDepth, + public: false, + }, + BUBBLEGUM_PROGRAM_ID, + ); + + try { + // create and send the transaction to initialize the tree + const tx = new Transaction().add(allocTreeIx).add(createTreeIx); + tx.feePayer = payer.publicKey; + console.log('tx'); + + // send the transaction + const txSignature = await sendAndConfirmTransaction( + connection, + tx, + // ensuring the `treeKeypair` PDA and the `payer` are BOTH signers + [treeKeypair, payer], + { + commitment: 'confirmed', + skipPreflight: true, + }, + ); + + console.log('\nMerkle tree created successfully!'); + console.log(explorerURL({ txSignature })); + + // return useful info + return { treeAuthority, treeAddress: treeKeypair.publicKey }; + } catch (err: any) { + console.error('\nFailed to create merkle tree:', err); + + // log a block explorer link for the failed transaction + await extractSignatureFromFailedTransaction(connection, err); + + throw err; + } +} + +/** + * Create an NFT collection on-chain, using the regular Metaplex standards + * with the `payer` as the authority + */ +export async function createCollection(connection: Connection, payer: Keypair, metadataV3: CreateMetadataAccountArgsV3) { + // create and initialize the SPL token mint + console.log("Creating the collection's mint..."); + const mint = await createMint( + connection, + payer, + // mint authority + payer.publicKey, + // freeze authority + payer.publicKey, + // decimals - use `0` for NFTs since they are non-fungible + 0, + ); + console.log('Mint address:', mint.toBase58()); + + // create the token account + console.log('Creating a token account...'); + const tokenAccount = await createAccount( + connection, + payer, + mint, + payer.publicKey, + // undefined, undefined, + ); + console.log('Token account:', tokenAccount.toBase58()); + + // mint 1 token () + console.log('Minting 1 token for the collection...'); + const mintSig = await mintTo( + connection, + payer, + mint, + tokenAccount, + payer, + // mint exactly 1 token + 1, + // no `multiSigners` + [], + undefined, + TOKEN_PROGRAM_ID, + ); + // console.log(explorerURL({ txSignature: mintSig })); + + // derive the PDA for the metadata account + const [metadataAccount, _bump] = PublicKey.findProgramAddressSync( + [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + ); + console.log('Metadata account:', metadataAccount.toBase58()); + + // create an instruction to create the metadata account + const createMetadataIx = createCreateMetadataAccountV3Instruction( + { + metadata: metadataAccount, + mint: mint, + mintAuthority: payer.publicKey, + payer: payer.publicKey, + updateAuthority: payer.publicKey, + }, + { + createMetadataAccountArgsV3: metadataV3, + }, + ); + + // derive the PDA for the metadata account + const [masterEditionAccount, _bump2] = PublicKey.findProgramAddressSync( + [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer(), Buffer.from('edition', 'utf8')], + TOKEN_METADATA_PROGRAM_ID, + ); + console.log('Master edition account:', masterEditionAccount.toBase58()); + + // create an instruction to create the metadata account + const createMasterEditionIx = createCreateMasterEditionV3Instruction( + { + edition: masterEditionAccount, + mint: mint, + mintAuthority: payer.publicKey, + payer: payer.publicKey, + updateAuthority: payer.publicKey, + metadata: metadataAccount, + }, + { + createMasterEditionArgs: { + maxSupply: 0, + }, + }, + ); + + // create the collection size instruction + const collectionSizeIX = createSetCollectionSizeInstruction( + { + collectionMetadata: metadataAccount, + collectionAuthority: payer.publicKey, + collectionMint: mint, + }, + { + setCollectionSizeArgs: { size: 50 }, + }, + ); + + try { + // construct the transaction with our instructions, making the `payer` the `feePayer` + const tx = new Transaction().add(createMetadataIx).add(createMasterEditionIx).add(collectionSizeIX); + tx.feePayer = payer.publicKey; + + // send the transaction to the cluster + const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], { + commitment: 'confirmed', + skipPreflight: true, + }); + + console.log('\nCollection successfully created!'); + console.log(explorerURL({ txSignature })); + } catch (err) { + console.error('\nFailed to create collection:', err); + + // log a block explorer link for the failed transaction + await extractSignatureFromFailedTransaction(connection, err); + + throw err; + } + + // return all the accounts + return { mint, tokenAccount, metadataAccount, masterEditionAccount }; +} + +/** + * Mint a single compressed NFTs to any address + */ +export async function mintCompressedNFT( + connection: Connection, + payer: Keypair, + treeAddress: PublicKey, + collectionMint: PublicKey, + collectionMetadata: PublicKey, + collectionMasterEditionAccount: PublicKey, + compressedNFTMetadata: MetadataArgs, + receiverAddress?: PublicKey, +) { + // derive the tree's authority (PDA), owned by Bubblegum + const [treeAuthority, _bump] = PublicKey.findProgramAddressSync([treeAddress.toBuffer()], BUBBLEGUM_PROGRAM_ID); + + // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting + const [bubblegumSigner, _bump2] = PublicKey.findProgramAddressSync( + // `collection_cpi` is a custom prefix required by the Bubblegum program + [Buffer.from('collection_cpi', 'utf8')], + BUBBLEGUM_PROGRAM_ID, + ); + + // create an array of instruction, to mint multiple compressed NFTs at once + const mintIxs: TransactionInstruction[] = []; + + /** + * correctly format the metadata args for the nft to mint + * --- + * note: minting an nft into a collection (via `createMintToCollectionV1Instruction`) + * will auto verify the collection. But, the `collection.verified` value inside the + * `metadataArgs` must be set to `false` in order for the instruction to succeed + */ + const metadataArgs = Object.assign(compressedNFTMetadata, { + collection: { key: collectionMint, verified: false }, + }); + + /** + * compute the data and creator hash for display in the console + * + * note: this is not required to do in order to mint new compressed nfts + * (since it is performed on chain via the Bubblegum program) + * this is only for demonstration + */ + const computedDataHash = new PublicKey(computeDataHash(metadataArgs)).toBase58(); + const computedCreatorHash = new PublicKey(computeCreatorHash(metadataArgs.creators)).toBase58(); + console.log('computedDataHash:', computedDataHash); + console.log('computedCreatorHash:', computedCreatorHash); + + /* + Add a single mint to collection instruction + --- + But you could all multiple in the same transaction, as long as your + transaction is still within the byte size limits + */ + mintIxs.push( + createMintToCollectionV1Instruction( + { + payer: payer.publicKey, + + merkleTree: treeAddress, + treeAuthority, + treeDelegate: payer.publicKey, + + // set the receiver of the NFT + leafOwner: receiverAddress || payer.publicKey, + // set a delegated authority over this NFT + leafDelegate: payer.publicKey, + + /* + You can set any delegate address at mint, otherwise should + normally be the same as `leafOwner` + NOTE: the delegate will be auto cleared upon NFT transfer + --- + in this case, we are setting the payer as the delegate + */ + + // collection details + collectionAuthority: payer.publicKey, + collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID, + collectionMint: collectionMint, + collectionMetadata: collectionMetadata, + editionAccount: collectionMasterEditionAccount, + + // other accounts + compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, + logWrapper: SPL_NOOP_PROGRAM_ID, + bubblegumSigner: bubblegumSigner, + tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, + }, + { + metadataArgs, + }, + ), + ); + + try { + // construct the transaction with our instructions, making the `payer` the `feePayer` + const tx = new Transaction().add(...mintIxs); + tx.feePayer = payer.publicKey; + + // send the transaction to the cluster + const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], { + commitment: 'confirmed', + skipPreflight: true, + }); + + console.log('\nSuccessfully minted the compressed NFT!'); + console.log(explorerURL({ txSignature })); + + return txSignature; + } catch (err) { + console.error('\nFailed to mint compressed NFT:', err); + + // log a block explorer link for the failed transaction + await extractSignatureFromFailedTransaction(connection, err); + + throw err; + } +} diff --git a/compression/cutils/anchor/tests/utils/helpers.ts b/compression/cutils/anchor/tests/utils/helpers.ts new file mode 100644 index 000000000..0075cfe8f --- /dev/null +++ b/compression/cutils/anchor/tests/utils/helpers.ts @@ -0,0 +1,259 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { type Connection, Keypair, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js'; + +// define some default locations +const DEFAULT_KEY_DIR_NAME = '.local_keys'; +const DEFAULT_PUBLIC_KEY_FILE = 'keys.json'; +const DEFAULT_DEMO_DATA_FILE = 'demo.json'; + +/* + Load locally stored PublicKey addresses +*/ +export function loadPublicKeysFromFile(absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`) { + try { + if (!absPath) throw Error('No path provided'); + if (!fs.existsSync(absPath)) throw Error('File does not exist.'); + + // load the public keys from the file + const data = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })) || {}; + + // convert all loaded keyed values into valid public keys + for (const [key, value] of Object.entries(data)) { + data[key] = new PublicKey(value as string) ?? ''; + } + + return data; + } catch (err) { + // console.warn("Unable to load local file"); + } + // always return an object + return {}; +} + +/* + Locally save a demo data to the filesystem for later retrieval +*/ +export function saveDemoDataToFile(name: string, newData: any, absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_DEMO_DATA_FILE}`) { + try { + let data: object = {}; + + // fetch all the current values, when the storage file exists + if (fs.existsSync(absPath)) data = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })) || {}; + + data = { ...data, [name]: newData }; + + // actually save the data to the file + fs.writeFileSync(absPath, JSON.stringify(data), { + encoding: 'utf-8', + }); + + return data; + } catch (err) { + console.warn('Unable to save to file'); + // console.warn(err); + } + + // always return an object + return {}; +} + +/* + Locally save a PublicKey addresses to the filesystem for later retrieval +*/ +export function savePublicKeyToFile(name: string, publicKey: PublicKey, absPath = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`) { + try { + // if (!absPath) throw Error("No path provided"); + // if (!fs.existsSync(absPath)) throw Error("File does not exist."); + + // fetch all the current values + let data: any = loadPublicKeysFromFile(absPath); + + // convert all loaded keyed values from PublicKeys to strings + for (const [key, value] of Object.entries(data)) { + data[key as any] = (value as PublicKey).toBase58(); + } + data = { ...data, [name]: publicKey.toBase58() }; + + // actually save the data to the file + fs.writeFileSync(absPath, JSON.stringify(data), { + encoding: 'utf-8', + }); + + // reload the keys for sanity + data = loadPublicKeysFromFile(absPath); + + return data; + } catch (err) { + console.warn('Unable to save to file'); + } + // always return an object + return {}; +} + +/* + Load a locally stored JSON keypair file and convert it to a valid Keypair +*/ +export function loadKeypairFromFile(absPath: string) { + try { + if (!absPath) throw Error('No path provided'); + if (!fs.existsSync(absPath)) throw Error('File does not exist.'); + + // load the keypair from the file + const keyfileBytes = JSON.parse(fs.readFileSync(absPath, { encoding: 'utf-8' })); + // parse the loaded secretKey into a valid keypair + const keypair = Keypair.fromSecretKey(new Uint8Array(keyfileBytes)); + return keypair; + } catch (err) { + // return false; + throw err; + } +} + +/* + Save a locally stored JSON keypair file for later importing +*/ +export function saveKeypairToFile(keypair: Keypair, fileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) { + fileName = path.join(dirName, `${fileName}.json`); + + // create the `dirName` directory, if it does not exists + if (!fs.existsSync(`./${dirName}/`)) fs.mkdirSync(`./${dirName}/`); + + // remove the current file, if it already exists + if (fs.existsSync(fileName)) fs.unlinkSync(fileName); + + // write the `secretKey` value as a string + fs.writeFileSync(fileName, `[${keypair.secretKey.toString()}]`, { + encoding: 'utf-8', + }); + + return fileName; +} + +/* + Attempt to load a keypair from the filesystem, or generate and save a new one +*/ +export function loadOrGenerateKeypair(fileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) { + try { + // compute the path to locate the file + const searchPath = path.join(dirName, `${fileName}.json`); + let keypair = Keypair.generate(); + + // attempt to load the keypair from the file + if (fs.existsSync(searchPath)) keypair = loadKeypairFromFile(searchPath); + // when unable to locate the keypair, save the new one + else saveKeypairToFile(keypair, fileName, dirName); + + return keypair; + } catch (err) { + console.error('loadOrGenerateKeypair:', err); + throw err; + } +} + +/* + Compute the Solana explorer address for the various data +*/ +export function explorerURL({ + address, + txSignature, + cluster, +}: { + address?: string; + txSignature?: string; + cluster?: 'devnet' | 'testnet' | 'mainnet' | 'mainnet-beta'; +}) { + let baseUrl: string; + // + if (address) baseUrl = `https://explorer.solana.com/address/${address}`; + else if (txSignature) baseUrl = `https://explorer.solana.com/tx/${txSignature}`; + else return '[unknown]'; + + // auto append the desired search params + const url = new URL(baseUrl); + url.searchParams.append('cluster', cluster || 'devnet'); + return `${url.toString()}\n`; +} + +/** + * Auto airdrop the given wallet of of a balance of < 0.5 SOL + */ +export async function airdropOnLowBalance(connection: Connection, keypair: Keypair, forceAirdrop = false) { + // get the current balance + const balance = await connection.getBalance(keypair.publicKey); + + // define the low balance threshold before airdrop + const MIN_BALANCE_TO_AIRDROP = LAMPORTS_PER_SOL / 2; // current: 0.5 SOL + + // check the balance of the two accounts, airdrop when low + if (forceAirdrop === true || balance < MIN_BALANCE_TO_AIRDROP) { + console.log(`Requesting airdrop of 1 SOL to ${keypair.publicKey.toBase58()}...`); + await connection.requestAirdrop(keypair.publicKey, LAMPORTS_PER_SOL).then((sig) => { + console.log('Tx signature:', sig); + // balance = balance + LAMPORTS_PER_SOL; + }); + + // fetch the new balance + // const newBalance = await connection.getBalance(keypair.publicKey); + // return newBalance; + } + // else console.log("Balance of:", balance / LAMPORTS_PER_SOL, "SOL"); + + return balance; +} + +/* + Helper function to extract a transaction signature from a failed transaction's error message +*/ +export async function extractSignatureFromFailedTransaction(connection: Connection, err: any, fetchLogs?: boolean) { + if (err?.signature) return err.signature; + + // extract the failed transaction's signature + const failedSig = new RegExp(/^((.*)?Error: )?(Transaction|Signature) ([A-Z0-9]{32,}) /gim).exec(err?.message?.toString())?.[4]; + + // ensure a signature was found + if (failedSig) { + // when desired, attempt to fetch the program logs from the cluster + if (fetchLogs) + await connection + .getTransaction(failedSig, { + maxSupportedTransactionVersion: 0, + }) + .then((tx) => { + console.log(`\n==== Transaction logs for ${failedSig} ====`); + console.log(explorerURL({ txSignature: failedSig }), ''); + console.log(tx?.meta?.logMessages ?? 'No log messages provided by RPC'); + console.log('==== END LOGS ====\n'); + }); + else { + console.log('\n========================================'); + console.log(explorerURL({ txSignature: failedSig })); + console.log('========================================\n'); + } + } + + // always return the failed signature value + return failedSig; +} + +/* + Standard number formatter +*/ +export function numberFormatter(num: number, forceDecimals = false) { + // set the significant figures + const minimumFractionDigits = num < 1 || forceDecimals ? 10 : 2; + + // do the formatting + return new Intl.NumberFormat(undefined, { + minimumFractionDigits, + }).format(num); +} + +/* + Display a separator in the console, with our without a message +*/ +export function printConsoleSeparator(message?: string) { + console.log('\n==============================================='); + console.log('===============================================\n'); + if (message) console.log(message); +} diff --git a/compression/cutils/tests/utils/readAPI.ts b/compression/cutils/anchor/tests/utils/readAPI.ts similarity index 74% rename from compression/cutils/tests/utils/readAPI.ts rename to compression/cutils/anchor/tests/utils/readAPI.ts index de9d6f7a4..3562d91c6 100644 --- a/compression/cutils/tests/utils/readAPI.ts +++ b/compression/cutils/anchor/tests/utils/readAPI.ts @@ -1,48 +1,46 @@ -// I recommend using a WrappedConnection for production -// as it supports more readAPI functionality -// this is just a subset of functions for quick availabiity - -import axios from "axios"; - -//TODO insert -const RPC_PATH = ""; - -export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise { - try { - const axiosInstance = axios.create({ - baseURL: rpcUrl, - }); - const response = await axiosInstance.post(rpcUrl, { - jsonrpc: "2.0", - method: "getAsset", - id: "rpd-op-123", - params: { - id: assetId - }, - }); - return response.data.result; - } catch (error) { - console.error(error); - } -} - - -export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise { - try { - - const axiosInstance = axios.create({ - baseURL: rpcUrl, - }); - const response = await axiosInstance.post(rpcUrl, { - jsonrpc: "2.0", - method: "getAssetProof", - id: "rpd-op-123", - params: { - id: assetId - }, - }); - return response.data.result; - } catch (error) { - console.error(error); - } -} \ No newline at end of file +// I recommend using a WrappedConnection for production +// as it supports more readAPI functionality +// this is just a subset of functions for quick availabiity + +import axios from 'axios'; + +//TODO insert +const RPC_PATH = ''; + +export async function getAsset(assetId: any, rpcUrl = RPC_PATH): Promise { + try { + const axiosInstance = axios.create({ + baseURL: rpcUrl, + }); + const response = await axiosInstance.post(rpcUrl, { + jsonrpc: '2.0', + method: 'getAsset', + id: 'rpd-op-123', + params: { + id: assetId, + }, + }); + return response.data.result; + } catch (error) { + console.error(error); + } +} + +export async function getAssetProof(assetId: any, rpcUrl = RPC_PATH): Promise { + try { + const axiosInstance = axios.create({ + baseURL: rpcUrl, + }); + const response = await axiosInstance.post(rpcUrl, { + jsonrpc: '2.0', + method: 'getAssetProof', + id: 'rpd-op-123', + params: { + id: assetId, + }, + }); + return response.data.result; + } catch (error) { + console.error(error); + } +} diff --git a/compression/cutils/tests/utils/utils.ts b/compression/cutils/anchor/tests/utils/utils.ts similarity index 52% rename from compression/cutils/tests/utils/utils.ts rename to compression/cutils/anchor/tests/utils/utils.ts index 13cc7d2ce..74206b75e 100644 --- a/compression/cutils/tests/utils/utils.ts +++ b/compression/cutils/anchor/tests/utils/utils.ts @@ -1,73 +1,65 @@ -import {AccountMeta, PublicKey, SystemProgram} from "@solana/web3.js"; -import {PROGRAM_ID as BUBBLEGUM_PROGRAM_ID} from "@metaplex-foundation/mpl-bubblegum/dist/src/generated"; -import {PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID} from "@metaplex-foundation/mpl-token-metadata/dist/src/generated"; -import * as bs58 from "bs58"; -import {SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID} from "@solana/spl-account-compression"; - -export function decode(stuff: string) { - return bufferToArray(bs58.decode(stuff)) -} -function bufferToArray(buffer: Buffer): number[] { - const nums: number[] = []; - for (let i = 0; i < buffer.length; i++) { - nums.push(buffer[i]); - } - return nums; -} -export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => { - if (!assetProof.proof || assetProof.proof.length === 0) { - throw new Error("Proof is empty"); - } - return assetProof.proof.map((node) => ({ - pubkey: new PublicKey(node), - isSigner: false, - isWritable: false, - })); -}; - -export function getAccounts(collectionMint: PublicKey, tree: PublicKey) { - // treeAuth - const [treeAuthority] = PublicKey.findProgramAddressSync( - [tree.toBuffer()], - BUBBLEGUM_PROGRAM_ID - ); - - // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting - const [bubblegumSigner] = PublicKey.findProgramAddressSync( - // `collection_cpi` is a custom prefix required by the Bubblegum program - [Buffer.from("collection_cpi", "utf8")], - BUBBLEGUM_PROGRAM_ID - ); - - // collection metadata account - const [metadataAccount] = PublicKey.findProgramAddressSync( - [Buffer.from("metadata", "utf8"), TOKEN_METADATA_PROGRAM_ID.toBuffer(), collectionMint.toBuffer()], - TOKEN_METADATA_PROGRAM_ID - ); - - // collection master edition - const [masterEditionAccount] = PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata", "utf8"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - collectionMint.toBuffer(), - Buffer.from("edition", "utf8"), - ], - TOKEN_METADATA_PROGRAM_ID - ); - - return { - treeAuthority, - collectionMint, - collectionMetadata: metadataAccount, - editionAccount: masterEditionAccount, - merkleTree: tree, - - bubblegumSigner, - logWrapper: SPL_NOOP_PROGRAM_ID, - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, - bubblegumProgram: BUBBLEGUM_PROGRAM_ID, - systemProgram: SystemProgram.programId, - }; -} \ No newline at end of file +import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from '@metaplex-foundation/mpl-bubblegum/dist/src/generated'; +import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata/dist/src/generated'; +import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID } from '@solana/spl-account-compression'; +import { type AccountMeta, PublicKey, SystemProgram } from '@solana/web3.js'; +import * as bs58 from 'bs58'; + +export function decode(stuff: string) { + return bufferToArray(bs58.decode(stuff)); +} +function bufferToArray(buffer: Buffer): number[] { + const nums: number[] = []; + for (let i = 0; i < buffer.length; i++) { + nums.push(buffer[i]); + } + return nums; +} +export const mapProof = (assetProof: { proof: string[] }): AccountMeta[] => { + if (!assetProof.proof || assetProof.proof.length === 0) { + throw new Error('Proof is empty'); + } + return assetProof.proof.map((node) => ({ + pubkey: new PublicKey(node), + isSigner: false, + isWritable: false, + })); +}; + +export function getAccounts(collectionMint: PublicKey, tree: PublicKey) { + // treeAuth + const [treeAuthority] = PublicKey.findProgramAddressSync([tree.toBuffer()], BUBBLEGUM_PROGRAM_ID); + + // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting + const [bubblegumSigner] = PublicKey.findProgramAddressSync( + // `collection_cpi` is a custom prefix required by the Bubblegum program + [Buffer.from('collection_cpi', 'utf8')], + BUBBLEGUM_PROGRAM_ID, + ); + + // collection metadata account + const [metadataAccount] = PublicKey.findProgramAddressSync( + [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), collectionMint.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + ); + + // collection master edition + const [masterEditionAccount] = PublicKey.findProgramAddressSync( + [Buffer.from('metadata', 'utf8'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), collectionMint.toBuffer(), Buffer.from('edition', 'utf8')], + TOKEN_METADATA_PROGRAM_ID, + ); + + return { + treeAuthority, + collectionMint, + collectionMetadata: metadataAccount, + editionAccount: masterEditionAccount, + merkleTree: tree, + + bubblegumSigner, + logWrapper: SPL_NOOP_PROGRAM_ID, + compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, + tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, + bubblegumProgram: BUBBLEGUM_PROGRAM_ID, + systemProgram: SystemProgram.programId, + }; +} diff --git a/compression/cutils/anchor/tsconfig.json b/compression/cutils/anchor/tsconfig.json new file mode 100644 index 000000000..7fe94dda0 --- /dev/null +++ b/compression/cutils/anchor/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "module": "commonjs", + "target": "esnext", + "esModuleInterop": true + } +} diff --git a/compression/cutils/package.json b/compression/cutils/package.json deleted file mode 100644 index 5b1ce7fdc..000000000 --- a/compression/cutils/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.27.0", - "@metaplex-foundation/js": "^0.19.4", - "@metaplex-foundation/mpl-bubblegum": "^0.7.0", - "@solana/spl-account-compression": "^0.1.8", - "@solana/spl-token": "^0.3.8", - "@solana/web3.js": "^1.77.3", - "axios": "^1.4.0" - }, - "devDependencies": { - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "chai": "^4.3.4", - "mocha": "^9.0.3", - "prettier": "^2.6.2", - "ts-mocha": "^10.0.0", - "ts-node": "^10.9.1", - "typescript": "^4.3.5" - } -} diff --git a/compression/cutils/tests/setup.ts b/compression/cutils/tests/setup.ts deleted file mode 100644 index 7f1540905..000000000 --- a/compression/cutils/tests/setup.ts +++ /dev/null @@ -1,57 +0,0 @@ -import {loadOrGenerateKeypair, savePublicKeyToFile} from "./utils/helpers"; -import {Connection, Keypair} from "@solana/web3.js"; -import {ValidDepthSizePair} from "@solana/spl-account-compression"; -import {createCollection, createTree} from "./utils/compression"; -import {CreateMetadataAccountArgsV3} from "@metaplex-foundation/mpl-token-metadata"; - -async function setup() { - const rpc = "https://api.devnet.solana.com" - const connection = new Connection(rpc, "confirmed") - - // Collection auth and treeCreator - const payer = loadOrGenerateKeypair("payer"); - - // Airdrop - await connection.requestAirdrop(payer.publicKey, 1 * 10**9); - console.log("Payer address:", payer.publicKey.toBase58()); - - const treeKeypair = Keypair.generate(); - const maxDepthSizePair: ValidDepthSizePair = { - maxDepth: 14, - maxBufferSize: 64, - }; - const canopyDepth = maxDepthSizePair.maxDepth - 5; - const tree = await createTree(connection, payer, treeKeypair, maxDepthSizePair, canopyDepth); - - // locally save the addresses for demo - savePublicKeyToFile("treeAddress", tree.treeAddress); - - const collectionMetadataV3: CreateMetadataAccountArgsV3 = { - data: { - name: "Super Sweet NFT Collection", - symbol: "SSNC", - // specific json metadata for the collection - uri: "https://supersweetcollection.notarealurl/collection.json", - sellerFeeBasisPoints: 100, - creators: [ - { - address: payer.publicKey, - verified: false, - share: 100, - }, - ], - collection: null, - uses: null, - }, - isMutable: false, - collectionDetails: null, - }; - - // create a full token mint and initialize the collection (with the `payer` as the authority) - const collection = await createCollection(connection, payer, collectionMetadataV3); - - // locally save the addresses for the demo - savePublicKeyToFile("collectionMint", collection.mint); -} - -// setup() \ No newline at end of file diff --git a/compression/cutils/tests/tests.ts b/compression/cutils/tests/tests.ts deleted file mode 100644 index 4a62ed0a4..000000000 --- a/compression/cutils/tests/tests.ts +++ /dev/null @@ -1,77 +0,0 @@ -import * as anchor from "@coral-xyz/anchor"; -import {decode, getAccounts, mapProof} from "./utils/utils"; -import {SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID} from "@solana/spl-account-compression"; -import {getAsset, getAssetProof} from "./utils/readAPI"; -import {Cutils} from "../target/types/cutils"; -import {loadOrGenerateKeypair, loadPublicKeysFromFile} from "./utils/helpers"; -import { PROGRAM_ID as BUBBLEGUM_PROGRAM_ID } from "@metaplex-foundation/mpl-bubblegum/dist/src/generated"; - -describe("cutils", () => { - const provider = anchor.AnchorProvider.env(); - anchor.setProvider(provider); - - const program = anchor.workspace.Cutils as anchor.Program; - - // NFT metadata pointer - // TODO change - const uri = "https://arweave.net/nVRvZDaOk5YAdr4ZBEeMjOVhynuv8P3vywvuN5sYSPo" - - const payer = loadOrGenerateKeypair("payer"); - - // cNFT receiver - const testWallet = loadOrGenerateKeypair("testWallet") - - const {collectionMint, treeAddress} = loadPublicKeysFromFile() - - it("Mint!", async () => { - const tx = await program.methods.mint({uri}) - .accounts({ - payer: payer.publicKey, - leafOwner: testWallet.publicKey, - leafDelegate: testWallet.publicKey, //verify - treeDelegate: payer.publicKey, - collectionAuthority: payer.publicKey, - collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID, - ...getAccounts(collectionMint, treeAddress) - }) - .transaction() - - const sx = await program.provider.sendAndConfirm(tx, [payer], {skipPreflight: true}); - console.log(` Tx Signature: ${sx}`); - }); - - - // it("Verify", async () => { - // // TODO: replace assetId - // const assetId = "HUBMRAcYpow1ZUojdSMuvhcbNuCuRSAPWnXWjjYrpAVQ"; - // - // const asset = await getAsset(assetId); - // const proof = await getAssetProof(assetId); - // const proofPathAsAccounts = mapProof(proof); - // const root = decode(proof.root); - // const dataHash = decode(asset.compression.data_hash); - // const creatorHash = decode(asset.compression.creator_hash); - // const nonce = new anchor.BN(asset.compression.leaf_id); - // const index = asset.compression.leaf_id; - // - // const tx = await program.methods - // .verify({ - // root, dataHash, creatorHash, nonce, index - // }) - // .accounts({ - // leafOwner: testWallet.publicKey, - // leafDelegate: testWallet.publicKey, - // merkleTree: treeAddress, - // compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - // }) - // .remainingAccounts(proofPathAsAccounts) - // .transaction(); - // - // const sx = await program.provider.sendAndConfirm(tx, [testWallet], {skipPreflight: true}); - // - // // This fails due to incorrect owner - // // const sx = await program.provider.sendAndConfirm(tx, [payer], {skipPreflight: true}); - // - // console.log(` Tx Signature: ${sx}`); - // }); -}); \ No newline at end of file diff --git a/compression/cutils/tests/utils/compression.ts b/compression/cutils/tests/utils/compression.ts deleted file mode 100644 index 5a9e9d683..000000000 --- a/compression/cutils/tests/utils/compression.ts +++ /dev/null @@ -1,382 +0,0 @@ -import { - Keypair, - PublicKey, - Connection, - Transaction, - sendAndConfirmTransaction, - TransactionInstruction, -} from "@solana/web3.js"; -import { createAccount, createMint, mintTo, TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import { - SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - createAllocTreeIx, - ValidDepthSizePair, - SPL_NOOP_PROGRAM_ID, -} from "@solana/spl-account-compression"; -import { - PROGRAM_ID as BUBBLEGUM_PROGRAM_ID, - MetadataArgs, - computeCreatorHash, - computeDataHash, - createCreateTreeInstruction, - createMintToCollectionV1Instruction, -} from "@metaplex-foundation/mpl-bubblegum"; -import { - PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID, - CreateMetadataAccountArgsV3, - createCreateMetadataAccountV3Instruction, - createCreateMasterEditionV3Instruction, - createSetCollectionSizeInstruction, -} from "@metaplex-foundation/mpl-token-metadata"; - -// import local helper functions -import { explorerURL, extractSignatureFromFailedTransaction } from "./helpers"; - -/* - Helper function to create a merkle tree on chain, including allocating - all the space required to store all the nodes -*/ -export async function createTree( - connection: Connection, - payer: Keypair, - treeKeypair: Keypair, - maxDepthSizePair: ValidDepthSizePair, - canopyDepth: number = 0, -) { - console.log("Creating a new Merkle tree..."); - console.log("treeAddress:", treeKeypair.publicKey.toBase58()); - - // derive the tree's authority (PDA), owned by Bubblegum - const [treeAuthority, _bump] = PublicKey.findProgramAddressSync( - [treeKeypair.publicKey.toBuffer()], - BUBBLEGUM_PROGRAM_ID, - ); - console.log("treeAuthority:", treeAuthority.toBase58()); - - // allocate the tree's account on chain with the `space` - // NOTE: this will compute the space needed to store the tree on chain (and the lamports required to store it) - const allocTreeIx = await createAllocTreeIx( - connection, - treeKeypair.publicKey, - payer.publicKey, - maxDepthSizePair, - canopyDepth, - ); - - // create the instruction to actually create the tree - const createTreeIx = createCreateTreeInstruction( - { - payer: payer.publicKey, - treeCreator: payer.publicKey, - treeAuthority, - merkleTree: treeKeypair.publicKey, - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - // NOTE: this is used for some on chain logging - logWrapper: SPL_NOOP_PROGRAM_ID, - }, - { - maxBufferSize: maxDepthSizePair.maxBufferSize, - maxDepth: maxDepthSizePair.maxDepth, - public: false, - }, - BUBBLEGUM_PROGRAM_ID, - ); - - try { - // create and send the transaction to initialize the tree - const tx = new Transaction().add(allocTreeIx).add(createTreeIx); - tx.feePayer = payer.publicKey; - console.log("tx") - - // send the transaction - const txSignature = await sendAndConfirmTransaction( - connection, - tx, - // ensuring the `treeKeypair` PDA and the `payer` are BOTH signers - [treeKeypair, payer], - { - commitment: "confirmed", - skipPreflight: true, - }, - ); - - console.log("\nMerkle tree created successfully!"); - console.log(explorerURL({ txSignature })); - - // return useful info - return { treeAuthority, treeAddress: treeKeypair.publicKey }; - } catch (err: any) { - console.error("\nFailed to create merkle tree:", err); - - // log a block explorer link for the failed transaction - await extractSignatureFromFailedTransaction(connection, err); - - throw err; - } -} - -/** - * Create an NFT collection on-chain, using the regular Metaplex standards - * with the `payer` as the authority - */ -export async function createCollection( - connection: Connection, - payer: Keypair, - metadataV3: CreateMetadataAccountArgsV3, -) { - // create and initialize the SPL token mint - console.log("Creating the collection's mint..."); - const mint = await createMint( - connection, - payer, - // mint authority - payer.publicKey, - // freeze authority - payer.publicKey, - // decimals - use `0` for NFTs since they are non-fungible - 0, - ); - console.log("Mint address:", mint.toBase58()); - - // create the token account - console.log("Creating a token account..."); - const tokenAccount = await createAccount( - connection, - payer, - mint, - payer.publicKey, - // undefined, undefined, - ); - console.log("Token account:", tokenAccount.toBase58()); - - // mint 1 token () - console.log("Minting 1 token for the collection..."); - const mintSig = await mintTo( - connection, - payer, - mint, - tokenAccount, - payer, - // mint exactly 1 token - 1, - // no `multiSigners` - [], - undefined, - TOKEN_PROGRAM_ID, - ); - // console.log(explorerURL({ txSignature: mintSig })); - - // derive the PDA for the metadata account - const [metadataAccount, _bump] = PublicKey.findProgramAddressSync( - [Buffer.from("metadata", "utf8"), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()], - TOKEN_METADATA_PROGRAM_ID, - ); - console.log("Metadata account:", metadataAccount.toBase58()); - - // create an instruction to create the metadata account - const createMetadataIx = createCreateMetadataAccountV3Instruction( - { - metadata: metadataAccount, - mint: mint, - mintAuthority: payer.publicKey, - payer: payer.publicKey, - updateAuthority: payer.publicKey, - }, - { - createMetadataAccountArgsV3: metadataV3, - }, - ); - - // derive the PDA for the metadata account - const [masterEditionAccount, _bump2] = PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata", "utf8"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mint.toBuffer(), - Buffer.from("edition", "utf8"), - ], - TOKEN_METADATA_PROGRAM_ID, - ); - console.log("Master edition account:", masterEditionAccount.toBase58()); - - // create an instruction to create the metadata account - const createMasterEditionIx = createCreateMasterEditionV3Instruction( - { - edition: masterEditionAccount, - mint: mint, - mintAuthority: payer.publicKey, - payer: payer.publicKey, - updateAuthority: payer.publicKey, - metadata: metadataAccount, - }, - { - createMasterEditionArgs: { - maxSupply: 0, - }, - }, - ); - - // create the collection size instruction - const collectionSizeIX = createSetCollectionSizeInstruction( - { - collectionMetadata: metadataAccount, - collectionAuthority: payer.publicKey, - collectionMint: mint, - }, - { - setCollectionSizeArgs: { size: 50 }, - }, - ); - - try { - // construct the transaction with our instructions, making the `payer` the `feePayer` - const tx = new Transaction() - .add(createMetadataIx) - .add(createMasterEditionIx) - .add(collectionSizeIX); - tx.feePayer = payer.publicKey; - - // send the transaction to the cluster - const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], { - commitment: "confirmed", - skipPreflight: true, - }); - - console.log("\nCollection successfully created!"); - console.log(explorerURL({ txSignature })); - } catch (err) { - console.error("\nFailed to create collection:", err); - - // log a block explorer link for the failed transaction - await extractSignatureFromFailedTransaction(connection, err); - - throw err; - } - - // return all the accounts - return { mint, tokenAccount, metadataAccount, masterEditionAccount }; -} - -/** - * Mint a single compressed NFTs to any address - */ -export async function mintCompressedNFT( - connection: Connection, - payer: Keypair, - treeAddress: PublicKey, - collectionMint: PublicKey, - collectionMetadata: PublicKey, - collectionMasterEditionAccount: PublicKey, - compressedNFTMetadata: MetadataArgs, - receiverAddress?: PublicKey, -) { - // derive the tree's authority (PDA), owned by Bubblegum - const [treeAuthority, _bump] = PublicKey.findProgramAddressSync( - [treeAddress.toBuffer()], - BUBBLEGUM_PROGRAM_ID, - ); - - // derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting - const [bubblegumSigner, _bump2] = PublicKey.findProgramAddressSync( - // `collection_cpi` is a custom prefix required by the Bubblegum program - [Buffer.from("collection_cpi", "utf8")], - BUBBLEGUM_PROGRAM_ID, - ); - - // create an array of instruction, to mint multiple compressed NFTs at once - const mintIxs: TransactionInstruction[] = []; - - /** - * correctly format the metadata args for the nft to mint - * --- - * note: minting an nft into a collection (via `createMintToCollectionV1Instruction`) - * will auto verify the collection. But, the `collection.verified` value inside the - * `metadataArgs` must be set to `false` in order for the instruction to succeed - */ - const metadataArgs = Object.assign(compressedNFTMetadata, { - collection: { key: collectionMint, verified: false }, - }); - - /** - * compute the data and creator hash for display in the console - * - * note: this is not required to do in order to mint new compressed nfts - * (since it is performed on chain via the Bubblegum program) - * this is only for demonstration - */ - const computedDataHash = new PublicKey(computeDataHash(metadataArgs)).toBase58(); - const computedCreatorHash = new PublicKey(computeCreatorHash(metadataArgs.creators)).toBase58(); - console.log("computedDataHash:", computedDataHash); - console.log("computedCreatorHash:", computedCreatorHash); - - /* - Add a single mint to collection instruction - --- - But you could all multiple in the same transaction, as long as your - transaction is still within the byte size limits - */ - mintIxs.push( - createMintToCollectionV1Instruction( - { - payer: payer.publicKey, - - merkleTree: treeAddress, - treeAuthority, - treeDelegate: payer.publicKey, - - // set the receiver of the NFT - leafOwner: receiverAddress || payer.publicKey, - // set a delegated authority over this NFT - leafDelegate: payer.publicKey, - - /* - You can set any delegate address at mint, otherwise should - normally be the same as `leafOwner` - NOTE: the delegate will be auto cleared upon NFT transfer - --- - in this case, we are setting the payer as the delegate - */ - - // collection details - collectionAuthority: payer.publicKey, - collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID, - collectionMint: collectionMint, - collectionMetadata: collectionMetadata, - editionAccount: collectionMasterEditionAccount, - - // other accounts - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - logWrapper: SPL_NOOP_PROGRAM_ID, - bubblegumSigner: bubblegumSigner, - tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, - }, - { - metadataArgs, - }, - ), - ); - - try { - // construct the transaction with our instructions, making the `payer` the `feePayer` - const tx = new Transaction().add(...mintIxs); - tx.feePayer = payer.publicKey; - - // send the transaction to the cluster - const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], { - commitment: "confirmed", - skipPreflight: true, - }); - - console.log("\nSuccessfully minted the compressed NFT!"); - console.log(explorerURL({ txSignature })); - - return txSignature; - } catch (err) { - console.error("\nFailed to mint compressed NFT:", err); - - // log a block explorer link for the failed transaction - await extractSignatureFromFailedTransaction(connection, err); - - throw err; - } -} diff --git a/compression/cutils/tests/utils/helpers.ts b/compression/cutils/tests/utils/helpers.ts deleted file mode 100644 index 99e4acbf5..000000000 --- a/compression/cutils/tests/utils/helpers.ts +++ /dev/null @@ -1,284 +0,0 @@ -import fs from "fs"; -import path from "path"; -import { Connection, Keypair, LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js"; - -// define some default locations -const DEFAULT_KEY_DIR_NAME = ".local_keys"; -const DEFAULT_PUBLIC_KEY_FILE = "keys.json"; -const DEFAULT_DEMO_DATA_FILE = "demo.json"; - -/* - Load locally stored PublicKey addresses -*/ -export function loadPublicKeysFromFile( - absPath: string = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`, -) { - try { - if (!absPath) throw Error("No path provided"); - if (!fs.existsSync(absPath)) throw Error("File does not exist."); - - // load the public keys from the file - const data = JSON.parse(fs.readFileSync(absPath, { encoding: "utf-8" })) || {}; - - // convert all loaded keyed values into valid public keys - for (const [key, value] of Object.entries(data)) { - data[key] = new PublicKey(value as string) ?? ""; - } - - return data; - } catch (err) { - // console.warn("Unable to load local file"); - } - // always return an object - return {}; -} - -/* - Locally save a demo data to the filesystem for later retrieval -*/ -export function saveDemoDataToFile( - name: string, - newData: any, - absPath: string = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_DEMO_DATA_FILE}`, -) { - try { - let data: object = {}; - - // fetch all the current values, when the storage file exists - if (fs.existsSync(absPath)) - data = JSON.parse(fs.readFileSync(absPath, { encoding: "utf-8" })) || {}; - - data = { ...data, [name]: newData }; - - // actually save the data to the file - fs.writeFileSync(absPath, JSON.stringify(data), { - encoding: "utf-8", - }); - - return data; - } catch (err) { - console.warn("Unable to save to file"); - // console.warn(err); - } - - // always return an object - return {}; -} - -/* - Locally save a PublicKey addresses to the filesystem for later retrieval -*/ -export function savePublicKeyToFile( - name: string, - publicKey: PublicKey, - absPath: string = `${DEFAULT_KEY_DIR_NAME}/${DEFAULT_PUBLIC_KEY_FILE}`, -) { - try { - // if (!absPath) throw Error("No path provided"); - // if (!fs.existsSync(absPath)) throw Error("File does not exist."); - - // fetch all the current values - let data: any = loadPublicKeysFromFile(absPath); - - // convert all loaded keyed values from PublicKeys to strings - for (const [key, value] of Object.entries(data)) { - data[key as any] = (value as PublicKey).toBase58(); - } - data = { ...data, [name]: publicKey.toBase58() }; - - // actually save the data to the file - fs.writeFileSync(absPath, JSON.stringify(data), { - encoding: "utf-8", - }); - - // reload the keys for sanity - data = loadPublicKeysFromFile(absPath); - - return data; - } catch (err) { - console.warn("Unable to save to file"); - } - // always return an object - return {}; -} - -/* - Load a locally stored JSON keypair file and convert it to a valid Keypair -*/ -export function loadKeypairFromFile(absPath: string) { - try { - if (!absPath) throw Error("No path provided"); - if (!fs.existsSync(absPath)) throw Error("File does not exist."); - - // load the keypair from the file - const keyfileBytes = JSON.parse(fs.readFileSync(absPath, { encoding: "utf-8" })); - // parse the loaded secretKey into a valid keypair - const keypair = Keypair.fromSecretKey(new Uint8Array(keyfileBytes)); - return keypair; - } catch (err) { - // return false; - throw err; - } -} - -/* - Save a locally stored JSON keypair file for later importing -*/ -export function saveKeypairToFile( - keypair: Keypair, - fileName: string, - dirName: string = DEFAULT_KEY_DIR_NAME, -) { - fileName = path.join(dirName, `${fileName}.json`); - - // create the `dirName` directory, if it does not exists - if (!fs.existsSync(`./${dirName}/`)) fs.mkdirSync(`./${dirName}/`); - - // remove the current file, if it already exists - if (fs.existsSync(fileName)) fs.unlinkSync(fileName); - - // write the `secretKey` value as a string - fs.writeFileSync(fileName, `[${keypair.secretKey.toString()}]`, { - encoding: "utf-8", - }); - - return fileName; -} - -/* - Attempt to load a keypair from the filesystem, or generate and save a new one -*/ -export function loadOrGenerateKeypair(fileName: string, dirName: string = DEFAULT_KEY_DIR_NAME) { - try { - // compute the path to locate the file - const searchPath = path.join(dirName, `${fileName}.json`); - let keypair = Keypair.generate(); - - // attempt to load the keypair from the file - if (fs.existsSync(searchPath)) keypair = loadKeypairFromFile(searchPath); - // when unable to locate the keypair, save the new one - else saveKeypairToFile(keypair, fileName, dirName); - - return keypair; - } catch (err) { - console.error("loadOrGenerateKeypair:", err); - throw err; - } -} - -/* - Compute the Solana explorer address for the various data -*/ -export function explorerURL({ - address, - txSignature, - cluster, - }: { - address?: string; - txSignature?: string; - cluster?: "devnet" | "testnet" | "mainnet" | "mainnet-beta"; -}) { - let baseUrl: string; - // - if (address) baseUrl = `https://explorer.solana.com/address/${address}`; - else if (txSignature) baseUrl = `https://explorer.solana.com/tx/${txSignature}`; - else return "[unknown]"; - - // auto append the desired search params - const url = new URL(baseUrl); - url.searchParams.append("cluster", cluster || "devnet"); - return url.toString() + "\n"; -} - -/** - * Auto airdrop the given wallet of of a balance of < 0.5 SOL - */ -export async function airdropOnLowBalance( - connection: Connection, - keypair: Keypair, - forceAirdrop: boolean = false, -) { - // get the current balance - let balance = await connection.getBalance(keypair.publicKey); - - // define the low balance threshold before airdrop - const MIN_BALANCE_TO_AIRDROP = LAMPORTS_PER_SOL / 2; // current: 0.5 SOL - - // check the balance of the two accounts, airdrop when low - if (forceAirdrop === true || balance < MIN_BALANCE_TO_AIRDROP) { - console.log(`Requesting airdrop of 1 SOL to ${keypair.publicKey.toBase58()}...`); - await connection.requestAirdrop(keypair.publicKey, LAMPORTS_PER_SOL).then(sig => { - console.log("Tx signature:", sig); - // balance = balance + LAMPORTS_PER_SOL; - }); - - // fetch the new balance - // const newBalance = await connection.getBalance(keypair.publicKey); - // return newBalance; - } - // else console.log("Balance of:", balance / LAMPORTS_PER_SOL, "SOL"); - - return balance; -} - -/* - Helper function to extract a transaction signature from a failed transaction's error message -*/ -export async function extractSignatureFromFailedTransaction( - connection: Connection, - err: any, - fetchLogs?: boolean, -) { - if (err?.signature) return err.signature; - - // extract the failed transaction's signature - const failedSig = new RegExp(/^((.*)?Error: )?(Transaction|Signature) ([A-Z0-9]{32,}) /gim).exec( - err?.message?.toString(), - )?.[4]; - - // ensure a signature was found - if (failedSig) { - // when desired, attempt to fetch the program logs from the cluster - if (fetchLogs) - await connection - .getTransaction(failedSig, { - maxSupportedTransactionVersion: 0, - }) - .then(tx => { - console.log(`\n==== Transaction logs for ${failedSig} ====`); - console.log(explorerURL({ txSignature: failedSig }), ""); - console.log(tx?.meta?.logMessages ?? "No log messages provided by RPC"); - console.log(`==== END LOGS ====\n`); - }); - else { - console.log("\n========================================"); - console.log(explorerURL({ txSignature: failedSig })); - console.log("========================================\n"); - } - } - - // always return the failed signature value - return failedSig; -} - -/* - Standard number formatter -*/ -export function numberFormatter(num: number, forceDecimals = false) { - // set the significant figures - const minimumFractionDigits = num < 1 || forceDecimals ? 10 : 2; - - // do the formatting - return new Intl.NumberFormat(undefined, { - minimumFractionDigits, - }).format(num); -} - -/* - Display a separator in the console, with our without a message -*/ -export function printConsoleSeparator(message?: string) { - console.log("\n==============================================="); - console.log("===============================================\n"); - if (message) console.log(message); -} diff --git a/compression/cutils/tsconfig.json b/compression/cutils/tsconfig.json deleted file mode 100644 index cfa5e7660..000000000 --- a/compression/cutils/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "types": [ - "mocha", - "chai" - ], - "typeRoots": [ - "./node_modules/@types" - ], - "module": "commonjs", - "target": "esnext", - "esModuleInterop": true, - } -} \ No newline at end of file diff --git a/oracles/pyth/anchor/migrations/deploy.ts b/oracles/pyth/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/oracles/pyth/anchor/migrations/deploy.ts +++ b/oracles/pyth/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/oracles/pyth/anchor/package.json b/oracles/pyth/anchor/package.json index 4de1ab3c2..b5355136b 100644 --- a/oracles/pyth/anchor/package.json +++ b/oracles/pyth/anchor/package.json @@ -1,19 +1,19 @@ { - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.27.0" - }, - "devDependencies": { - "chai": "^4.3.4", - "mocha": "^9.0.3", - "ts-mocha": "^10.0.0", - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "typescript": "^4.3.5", - "prettier": "^2.6.2" - } + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.27.0" + }, + "devDependencies": { + "chai": "^4.3.4", + "mocha": "^9.0.3", + "ts-mocha": "^10.0.0", + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "typescript": "^4.3.5", + "prettier": "^2.6.2" + } } diff --git a/oracles/pyth/anchor/pnpm-lock.yaml b/oracles/pyth/anchor/pnpm-lock.yaml new file mode 100644 index 000000000..b31c571bd --- /dev/null +++ b/oracles/pyth/anchor/pnpm-lock.yaml @@ -0,0 +1,1355 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: ^0.27.0 + version: 0.27.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.16 + '@types/mocha': + specifier: ^9.0.0 + version: 9.1.1 + chai: + specifier: ^4.3.4 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + prettier: + specifier: ^2.6.2 + version: 2.8.8 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@coral-xyz/anchor@0.27.0': + resolution: {integrity: sha512-+P/vPdORawvg3A9Wj02iquxb4T0C5m4P6aZBVYysKl4Amk+r6aMPZkUhilBkD6E4Nuxnoajv3CFykUfkGE0n5g==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.27.0': + resolution: {integrity: sha512-tJKzhLukghTWPLy+n8K8iJKgBq1yLT/AxaNd10yJrX8mI56ao5+OFAKAqW/h0i79KCvb4BK0VGO5ECmmolFz9A==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.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==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-sha256@0.9.0: + resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@coral-xyz/anchor@0.27.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/borsh': 0.27.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + base64-js: 1.5.1 + bn.js: 5.2.1 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.1.8 + crypto-hash: 1.3.0 + eventemitter3: 4.0.7 + js-sha256: 0.9.0 + pako: 2.1.0 + snake-case: 3.0.4 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@coral-xyz/borsh@0.27.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer-layout: 1.2.2 + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assertion-error@1.1.0: {} + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + buffer-from@1.1.2: {} + + buffer-layout@1.2.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + cross-fetch@3.1.8: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + crypto-hash@1.3.0: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + + emoji-regex@8.0.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.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.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-sha256@0.9.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lower-case@2.0.2: + dependencies: + tslib: 2.6.2 + + make-error@1.3.6: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: + optional: true + + normalize-path@3.0.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + pako@2.1.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + prettier@2.8.8: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + superstruct@0.15.5: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toml@3.0.0: {} + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + tslib@2.6.2: {} + + type-detect@4.0.8: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/oracles/pyth/anchor/tests/pythexample.ts b/oracles/pyth/anchor/tests/pythexample.ts index e7c7a38e8..aae8f0f3b 100644 --- a/oracles/pyth/anchor/tests/pythexample.ts +++ b/oracles/pyth/anchor/tests/pythexample.ts @@ -1,18 +1,16 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { Pythexample } from "../target/types/pythexample"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import type { Pythexample } from '../target/types/pythexample'; -describe("pythexample", () => { +describe('pythexample', () => { // Configure the client to use the local cluster. anchor.setProvider(anchor.AnchorProvider.env()); const program = anchor.workspace.Pythexample as Program; - const PYTH_FEED_ID = new anchor.web3.PublicKey( - "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG" - ); + const PYTH_FEED_ID = new anchor.web3.PublicKey('H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG'); - it("Check SOL_USD Price", async () => { + it('Check SOL_USD Price', async () => { const tx = await program.methods .readPrice() .accounts({ @@ -22,9 +20,6 @@ describe("pythexample", () => { }) .rpc(); - console.log( - "Your transaction signature, find the price in the program logs", - tx - ); + console.log('Your transaction signature, find the price in the program logs', tx); }); }); diff --git a/oracles/pyth/anchor/tsconfig.json b/oracles/pyth/anchor/tsconfig.json index 558b83e5e..cd5d2e3d0 100644 --- a/oracles/pyth/anchor/tsconfig.json +++ b/oracles/pyth/anchor/tsconfig.json @@ -1,11 +1,10 @@ { - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/oracles/pyth/seahorse/migrations/deploy.ts b/oracles/pyth/seahorse/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/oracles/pyth/seahorse/migrations/deploy.ts +++ b/oracles/pyth/seahorse/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/oracles/pyth/seahorse/package.json b/oracles/pyth/seahorse/package.json index 4de1ab3c2..b5355136b 100644 --- a/oracles/pyth/seahorse/package.json +++ b/oracles/pyth/seahorse/package.json @@ -1,19 +1,19 @@ { - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.27.0" - }, - "devDependencies": { - "chai": "^4.3.4", - "mocha": "^9.0.3", - "ts-mocha": "^10.0.0", - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "typescript": "^4.3.5", - "prettier": "^2.6.2" - } + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.27.0" + }, + "devDependencies": { + "chai": "^4.3.4", + "mocha": "^9.0.3", + "ts-mocha": "^10.0.0", + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "typescript": "^4.3.5", + "prettier": "^2.6.2" + } } diff --git a/oracles/pyth/seahorse/tests/seahorse.ts b/oracles/pyth/seahorse/tests/seahorse.ts index 2f1ce953a..ebb71e7fe 100644 --- a/oracles/pyth/seahorse/tests/seahorse.ts +++ b/oracles/pyth/seahorse/tests/seahorse.ts @@ -1,18 +1,16 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { Seahorse } from "../target/types/seahorse"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import type { Seahorse } from '../target/types/seahorse'; -describe("seahorse", () => { +describe('seahorse', () => { // Configure the client to use the local cluster. anchor.setProvider(anchor.AnchorProvider.env()); const program = anchor.workspace.Seahorse as Program; - const PYTH_PRICE_ACCOUNT = new anchor.web3.PublicKey( - "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG" - ); + const PYTH_PRICE_ACCOUNT = new anchor.web3.PublicKey('H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG'); - it("Is initialized!", async () => { + it('Is initialized!', async () => { // Add your test here. const tx = await program.methods .getPythPrice() @@ -20,6 +18,6 @@ describe("seahorse", () => { pythPriceAccount: PYTH_PRICE_ACCOUNT, }) .rpc(); - console.log("Your transaction signature", tx); + console.log('Your transaction signature', tx); }); }); diff --git a/oracles/pyth/seahorse/tsconfig.json b/oracles/pyth/seahorse/tsconfig.json index 558b83e5e..cd5d2e3d0 100644 --- a/oracles/pyth/seahorse/tsconfig.json +++ b/oracles/pyth/seahorse/tsconfig.json @@ -1,11 +1,10 @@ { - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/package.json b/package.json index 621e6d890..db339dbe6 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,24 @@ "version": "1.0.0", "description": "### :crab: Rust. :snake: Python. :link: All on-chain.", "scripts": { - "sync-package-json": "ts-node scripts/sync-package-json.ts" + "sync-package-json": "ts-node scripts/sync-package-json.ts", + "format:fix": "pnpx @biomejs/biome format --write ./", + "lint:fix": "pnpx @biomejs/biome lint --apply ./", + "lint": "pnpx @biomejs/biome lint ./", + "fix": "pnpx @biomejs/biome check --apply ./", + "check": "pnpx @biomejs/biome check ./", + "prepare": "husky" + }, + "lint-staged": { + "*": ["biome check --apply --no-errors-on-unmatched --files-ignore-unknown=true"] }, "keywords": [], "author": "Solana Foundation", "license": "MIT", "devDependencies": { + "@biomejs/biome": "1.7.3", "@types/node": "^20.9.0", + "husky": "^9.0.11", "picocolors": "^1.0.0", "ts-node": "^10.9.1", "typescript": "^5.2.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..44ad7d1ac --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,275 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@biomejs/biome': + specifier: 1.7.3 + version: 1.7.3 + '@types/node': + specifier: ^20.9.0 + version: 20.12.12 + husky: + specifier: ^9.0.11 + version: 9.0.11 + picocolors: + specifier: ^1.0.0 + version: 1.0.1 + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) + typescript: + specifier: ^5.2.2 + version: 5.4.5 + +packages: + + '@biomejs/biome@1.7.3': + resolution: {integrity: sha512-ogFQI+fpXftr+tiahA6bIXwZ7CSikygASdqMtH07J2cUzrpjyTMVc9Y97v23c7/tL1xCZhM+W9k4hYIBm7Q6cQ==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.7.3': + resolution: {integrity: sha512-eDvLQWmGRqrPIRY7AIrkPHkQ3visEItJKkPYSHCscSDdGvKzYjmBJwG1Gu8+QC5ed6R7eiU63LEC0APFBobmfQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.7.3': + resolution: {integrity: sha512-JXCaIseKRER7dIURsVlAJacnm8SG5I0RpxZ4ya3dudASYUc68WGl4+FEN03ABY3KMIq7hcK1tzsJiWlmXyosZg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.7.3': + resolution: {integrity: sha512-c8AlO45PNFZ1BYcwaKzdt46kYbuP6xPGuGQ6h4j3XiEDpyseRRUy/h+6gxj07XovmyxKnSX9GSZ6nVbZvcVUAw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.7.3': + resolution: {integrity: sha512-phNTBpo7joDFastnmZsFjYcDYobLTx4qR4oPvc9tJ486Bd1SfEVPHEvJdNJrMwUQK56T+TRClOQd/8X1nnjA9w==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.7.3': + resolution: {integrity: sha512-UdEHKtYGWEX3eDmVWvQeT+z05T9/Sdt2+F/7zmMOFQ7boANeX8pcO6EkJPK3wxMudrApsNEKT26rzqK6sZRTRA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.7.3': + resolution: {integrity: sha512-vnedYcd5p4keT3iD48oSKjOIRPYcjSNNbd8MO1bKo9ajg3GwQXZLAH+0Cvlr+eMsO67/HddWmscSQwTFrC/uPA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.7.3': + resolution: {integrity: sha512-unNCDqUKjujYkkSxs7gFIfdasttbDC4+z0kYmcqzRk6yWVoQBL4dNLcCbdnJS+qvVDNdI9rHp2NwpQ0WAdla4Q==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.7.3': + resolution: {integrity: sha512-ZmByhbrnmz/UUFYB622CECwhKIPjJLLPr5zr3edhu04LzbfcOrz16VYeNq5dpO1ADG70FORhAJkaIGdaVBG00w==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + husky@9.0.11: + resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + engines: {node: '>=18'} + hasBin: true + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + +snapshots: + + '@biomejs/biome@1.7.3': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.7.3 + '@biomejs/cli-darwin-x64': 1.7.3 + '@biomejs/cli-linux-arm64': 1.7.3 + '@biomejs/cli-linux-arm64-musl': 1.7.3 + '@biomejs/cli-linux-x64': 1.7.3 + '@biomejs/cli-linux-x64-musl': 1.7.3 + '@biomejs/cli-win32-arm64': 1.7.3 + '@biomejs/cli-win32-x64': 1.7.3 + + '@biomejs/cli-darwin-arm64@1.7.3': + optional: true + + '@biomejs/cli-darwin-x64@1.7.3': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.7.3': + optional: true + + '@biomejs/cli-linux-arm64@1.7.3': + optional: true + + '@biomejs/cli-linux-x64-musl@1.7.3': + optional: true + + '@biomejs/cli-linux-x64@1.7.3': + optional: true + + '@biomejs/cli-win32-arm64@1.7.3': + optional: true + + '@biomejs/cli-win32-x64@1.7.3': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + acorn-walk@8.3.2: {} + + acorn@8.11.3: {} + + arg@4.1.3: {} + + create-require@1.1.1: {} + + diff@4.0.2: {} + + husky@9.0.11: {} + + make-error@1.3.6: {} + + picocolors@1.0.1: {} + + ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.12.12 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + typescript@5.4.5: {} + + undici-types@5.26.5: {} + + v8-compile-cache-lib@3.0.1: {} + + yn@3.1.1: {} diff --git a/scripts/lib/change-package-version.ts b/scripts/lib/change-package-version.ts index 5dc6ecd40..0e8dab176 100644 --- a/scripts/lib/change-package-version.ts +++ b/scripts/lib/change-package-version.ts @@ -1,14 +1,14 @@ -import { readFileSync } from 'node:fs' +import { readFileSync } from 'node:fs'; export function changePackageVersion(file: string, pkgName: string, pkgVersion: string): [boolean, string] { - const content = JSON.parse(readFileSync(file).toString('utf-8')) - if (content.dependencies && content.dependencies[pkgName] && content.dependencies[pkgName] !== pkgVersion) { - content.dependencies[pkgName] = pkgVersion - return [true, content] + const content = JSON.parse(readFileSync(file).toString('utf-8')); + if (content.dependencies?.[pkgName] && content.dependencies[pkgName] !== pkgVersion) { + content.dependencies[pkgName] = pkgVersion; + return [true, content]; } - if (content.devDependencies && content.devDependencies[pkgName] && content.devDependencies[pkgName] !== pkgVersion) { - content.devDependencies[pkgName] = pkgVersion - return [true, content] + if (content.devDependencies?.[pkgName] && content.devDependencies[pkgName] !== pkgVersion) { + content.devDependencies[pkgName] = pkgVersion; + return [true, content]; } - return [false, content] + return [false, content]; } diff --git a/scripts/lib/command-check.ts b/scripts/lib/command-check.ts index e824ea127..50806fd95 100644 --- a/scripts/lib/command-check.ts +++ b/scripts/lib/command-check.ts @@ -1,42 +1,42 @@ -import { basename } from 'node:path' -import * as p from 'picocolors' -import { getDepsCount } from './get-deps-count' -import { getRecursiveFileList } from './get-recursive-file-list' +import { basename } from 'node:path'; +import * as p from 'picocolors'; +import { getDepsCount } from './get-deps-count'; +import { getRecursiveFileList } from './get-recursive-file-list'; -export function commandCheck(path: string = '.') { - const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json') - const depsCounter = getDepsCount(files) +export function commandCheck(path = '.') { + const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json'); + const depsCounter = getDepsCount(files); - const single: string[] = [] - const multiple: string[] = [] + const single: string[] = []; + const multiple: string[] = []; Object.keys(depsCounter) .sort() .map((pkg) => { - const versions = depsCounter[pkg] - const versionMap = Object.keys(versions).sort() - const versionsLength = versionMap.length + const versions = depsCounter[pkg]; + const versionMap = Object.keys(versions).sort(); + const versionsLength = versionMap.length; if (versionsLength === 1) { - const count = versions[versionMap[0]].length - single.push(`${p.green(`✔`)} ${pkg}@${versionMap[0]} (${count})`) - return + const count = versions[versionMap[0]].length; + single.push(`${p.green('✔')} ${pkg}@${versionMap[0]} (${count})`); + return; } - const versionCount: { version: string; count: number }[] = [] + const versionCount: { version: string; count: number }[] = []; for (const version of versionMap) { - versionCount.push({ version, count: versions[version].length }) + versionCount.push({ version, count: versions[version].length }); } - versionCount.sort((a, b) => b.count - a.count) + versionCount.sort((a, b) => b.count - a.count); - multiple.push(`${p.yellow(`⚠`)} ${pkg} has ${versionsLength} versions:`) + multiple.push(`${p.yellow('⚠')} ${pkg} has ${versionsLength} versions:`); for (const { count, version } of versionCount) { - multiple.push(` - ${p.bold(version)} (${count})`) + multiple.push(` - ${p.bold(version)} (${count})`); } - }) + }); for (const string of [...single.sort(), ...multiple]) { - console.log(string) + console.log(string); } } diff --git a/scripts/lib/command-help.ts b/scripts/lib/command-help.ts index 888959239..dfbe8021f 100644 --- a/scripts/lib/command-help.ts +++ b/scripts/lib/command-help.ts @@ -1,26 +1,26 @@ export function commandHelp() { - console.log(`Usage: yarn sync-package-json [options]`) - console.log(``) - console.log(`Commands:`) - console.log(` check Check package.json files`) - console.log(` help Show this help`) - console.log(` list List package.json files`) - console.log(` set [ver] Set specific version in package.json files`) - console.log(` update Update all versions in package.json files`) - console.log(``) - console.log(`Arguments:`) - console.log(` path Path to directory`) - console.log(``) - console.log(`Examples:`) - console.log(` yarn sync-package-json check`) - console.log(` yarn sync-package-json check basics`) - console.log(` yarn sync-package-json list`) - console.log(` yarn sync-package-json list basics`) - console.log(` yarn sync-package-json help`) - console.log(` yarn sync-package-json set @coral-xyz/anchor@0.29.0`) - console.log(` yarn sync-package-json set @coral-xyz/anchor@0.29.0 basics`) - console.log(` yarn sync-package-json update`) - console.log(` yarn sync-package-json update basics`) - console.log(` yarn sync-package-json update . @solana/web3.js @solana/spl-token`) - process.exit(0) + console.log('Usage: yarn sync-package-json [options]'); + console.log(''); + console.log('Commands:'); + console.log(' check Check package.json files'); + console.log(' help Show this help'); + console.log(' list List package.json files'); + console.log(' set [ver] Set specific version in package.json files'); + console.log(' update Update all versions in package.json files'); + console.log(''); + console.log('Arguments:'); + console.log(' path Path to directory'); + console.log(''); + console.log('Examples:'); + console.log(' yarn sync-package-json check'); + console.log(' yarn sync-package-json check basics'); + console.log(' yarn sync-package-json list'); + console.log(' yarn sync-package-json list basics'); + console.log(' yarn sync-package-json help'); + console.log(' yarn sync-package-json set @coral-xyz/anchor@0.29.0'); + console.log(' yarn sync-package-json set @coral-xyz/anchor@0.29.0 basics'); + console.log(' yarn sync-package-json update'); + console.log(' yarn sync-package-json update basics'); + console.log(' yarn sync-package-json update . @solana/web3.js @solana/spl-token'); + process.exit(0); } diff --git a/scripts/lib/command-list.ts b/scripts/lib/command-list.ts index 2082006ec..a127c1a73 100644 --- a/scripts/lib/command-list.ts +++ b/scripts/lib/command-list.ts @@ -1,9 +1,9 @@ -import { basename } from 'node:path' -import { getRecursiveFileList } from './get-recursive-file-list' +import { basename } from 'node:path'; +import { getRecursiveFileList } from './get-recursive-file-list'; export function commandList(path: string) { - const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json') + const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json'); for (const file of files) { - console.log(file) + console.log(file); } } diff --git a/scripts/lib/command-set.ts b/scripts/lib/command-set.ts index 6c3065d55..33d5be755 100644 --- a/scripts/lib/command-set.ts +++ b/scripts/lib/command-set.ts @@ -1,12 +1,12 @@ -import { writeFileSync } from 'fs' -import { basename } from 'node:path' -import { changePackageVersion } from './change-package-version' -import { getRecursiveFileList } from './get-recursive-file-list' +import { writeFileSync } from 'node:fs'; +import { basename } from 'node:path'; +import { changePackageVersion } from './change-package-version'; +import { getRecursiveFileList } from './get-recursive-file-list'; -export function commandSet(version: string, path: string = '.') { +export function commandSet(version: string, path = '.') { if (!version) { - console.error(`Version is required`) - process.exit(1) + console.error('Version is required'); + process.exit(1); } if ( !version @@ -14,30 +14,30 @@ export function commandSet(version: string, path: string = '.') { .replace(/^@/, '') .includes('@') ) { - console.error(`Invalid package version: ${version}. Provide package with version, e.g. @solana/web3.js@1.0.0`) - process.exit(1) + console.error(`Invalid package version: ${version}. Provide package with version, e.g. @solana/web3.js@1.0.0`); + process.exit(1); } // Take anything after the second `@` as the version, the rest is the package name - const [pkg, ...rest] = version.split('@').reverse() - const pkgName = rest.reverse().join('@') + const [pkg, ...rest] = version.split('@').reverse(); + const pkgName = rest.reverse().join('@'); // Make sure pkgVersions has a ^ prefix, if not add it - const pkgVersion = pkg.startsWith('^') ? pkg : `^${pkg}` + const pkgVersion = pkg.startsWith('^') ? pkg : `^${pkg}`; - console.log(`Setting package ${pkgName} to ${pkgVersion} in ${path}`) + console.log(`Setting package ${pkgName} to ${pkgVersion} in ${path}`); - const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json') - let count = 0 + const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json'); + let count = 0; for (const file of files) { - const [changed, content] = changePackageVersion(file, pkgName, pkgVersion) + const [changed, content] = changePackageVersion(file, pkgName, pkgVersion); if (changed) { - writeFileSync(file, JSON.stringify(content, null, 2) + '\n') - count++ + writeFileSync(file, `${JSON.stringify(content, null, 2)}\n`); + count++; } } if (count === 0) { - console.log(`No files updated`) + console.log('No files updated'); } else { - console.log(`Updated ${count} files`) + console.log(`Updated ${count} files`); } } diff --git a/scripts/lib/command-update.ts b/scripts/lib/command-update.ts index 07e3b050c..360d75dd9 100644 --- a/scripts/lib/command-update.ts +++ b/scripts/lib/command-update.ts @@ -1,45 +1,45 @@ -import { execSync } from 'child_process' -import { writeFileSync } from 'fs' -import { basename } from 'node:path' -import * as p from 'picocolors' -import { changePackageVersion } from './change-package-version' +import { execSync } from 'node:child_process'; +import { writeFileSync } from 'node:fs'; +import { basename } from 'node:path'; +import * as p from 'picocolors'; +import { changePackageVersion } from './change-package-version'; -import { getDepsCount } from './get-deps-count' -import { getRecursiveFileList } from './get-recursive-file-list' +import { getDepsCount } from './get-deps-count'; +import { getRecursiveFileList } from './get-recursive-file-list'; -export function commandUpdate(path: string = '.', packageNames: string[] = []) { - const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json') - const depsCounter = getDepsCount(files) - const pkgNames = Object.keys(depsCounter).sort() +export function commandUpdate(path = '.', packageNames: string[] = []) { + const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json'); + const depsCounter = getDepsCount(files); + const pkgNames = Object.keys(depsCounter).sort(); if (packageNames.length > 0) { - console.log(`Updating ${packageNames.join(', ')} in ${files.length} files`) + console.log(`Updating ${packageNames.join(', ')} in ${files.length} files`); } - let total = 0 + let total = 0; for (const pkgName of pkgNames.filter((pkgName) => packageNames.length === 0 || packageNames.includes(pkgName))) { // Get latest version from npm - const npmVersion = execSync(`npm view ${pkgName} version`).toString().trim() + const npmVersion = execSync(`npm view ${pkgName} version`).toString().trim(); - let count = 0 + let count = 0; for (const file of files) { - const [changed, content] = changePackageVersion(file, pkgName, `^${npmVersion}`) + const [changed, content] = changePackageVersion(file, pkgName, `^${npmVersion}`); if (changed) { - writeFileSync(file, JSON.stringify(content, null, 2) + '\n') - count++ + writeFileSync(file, `${JSON.stringify(content, null, 2)}\n`); + count++; } } - total += count + total += count; if (count === 0) { - console.log(p.dim(`Package ${pkgName} is up to date ${npmVersion}`)) - continue + console.log(p.dim(`Package ${pkgName} is up to date ${npmVersion}`)); + continue; } - console.log(p.green(` -> Updated ${count} files with ${pkgName} ${npmVersion}`)) + console.log(p.green(` -> Updated ${count} files with ${pkgName} ${npmVersion}`)); } if (total === 0) { - console.log(`No files updated`) + console.log('No files updated'); } else { - console.log(`Updated ${total} files`) + console.log(`Updated ${total} files`); } } diff --git a/scripts/lib/get-deps-count.ts b/scripts/lib/get-deps-count.ts index 799e14894..434752091 100644 --- a/scripts/lib/get-deps-count.ts +++ b/scripts/lib/get-deps-count.ts @@ -1,32 +1,32 @@ -import { readFileSync } from 'node:fs' +import { readFileSync } from 'node:fs'; export function getDepsCount(files: string[] = []): Record> { - const map: Record = {} - const depsCounter: Record> = {} + const map: Record = {}; + const depsCounter: Record> = {}; for (const file of files) { - const content = JSON.parse(readFileSync(file).toString('utf-8')) - map[file] = content + const content = JSON.parse(readFileSync(file).toString('utf-8')); + map[file] = content; - const deps = content.dependencies ?? {} - const devDeps = content.devDependencies ?? {} + const deps = content.dependencies ?? {}; + const devDeps = content.devDependencies ?? {}; - const merged = { ...deps, ...devDeps } + const merged = { ...deps, ...devDeps }; Object.keys(merged) .sort() .map((pkg) => { - const pkgVersion = merged[pkg] + const pkgVersion = merged[pkg]; if (!depsCounter[pkg]) { - depsCounter[pkg] = { [pkgVersion]: [file] } - return + depsCounter[pkg] = { [pkgVersion]: [file] }; + return; } if (!depsCounter[pkg][pkgVersion]) { - depsCounter[pkg][pkgVersion] = [file] - return + depsCounter[pkg][pkgVersion] = [file]; + return; } - depsCounter[pkg][pkgVersion] = [...depsCounter[pkg][pkgVersion], file] - }) + depsCounter[pkg][pkgVersion] = [...depsCounter[pkg][pkgVersion], file]; + }); } - return depsCounter + return depsCounter; } diff --git a/scripts/lib/get-recursive-file-list.ts b/scripts/lib/get-recursive-file-list.ts index 13bb42fa8..223598d2c 100644 --- a/scripts/lib/get-recursive-file-list.ts +++ b/scripts/lib/get-recursive-file-list.ts @@ -1,28 +1,28 @@ // Point method at path and return a list of all the files in the directory recursively -import { readdirSync, statSync } from 'node:fs' +import { readdirSync, statSync } from 'node:fs'; export function getRecursiveFileList(path: string): string[] { - const ignore = ['.git', '.github', '.idea', '.next', '.vercel', '.vscode', 'coverage', 'dist', 'node_modules'] - const files: string[] = [] + const ignore = ['.git', '.github', '.idea', '.next', '.vercel', '.vscode', 'coverage', 'dist', 'node_modules']; + const files: string[] = []; - const items = readdirSync(path) + const items = readdirSync(path); items.forEach((item) => { if (ignore.includes(item)) { - return + return; } // Check out if it's a directory or a file - const isDir = statSync(`${path}/${item}`).isDirectory() + const isDir = statSync(`${path}/${item}`).isDirectory(); if (isDir) { // If it's a directory, recursively call the method - files.push(...getRecursiveFileList(`${path}/${item}`)) + files.push(...getRecursiveFileList(`${path}/${item}`)); } else { // If it's a file, add it to the array of files - files.push(`${path}/${item}`) + files.push(`${path}/${item}`); } - }) + }); return files.filter((file) => { // Remove package.json from the root directory - return path === '.' ? file !== './package.json' : true - }) + return path === '.' ? file !== './package.json' : true; + }); } diff --git a/scripts/lib/index.ts b/scripts/lib/index.ts index f4859ac80..37dfbc8cf 100644 --- a/scripts/lib/index.ts +++ b/scripts/lib/index.ts @@ -1,5 +1,5 @@ -export * from './command-check' -export * from './command-help' -export * from './command-list' -export * from './command-set' -export * from './command-update' +export * from './command-check'; +export * from './command-help'; +export * from './command-list'; +export * from './command-set'; +export * from './command-update'; diff --git a/scripts/sync-package-json.ts b/scripts/sync-package-json.ts index f0679c55f..1ecec29bd 100644 --- a/scripts/sync-package-json.ts +++ b/scripts/sync-package-json.ts @@ -1,22 +1,21 @@ -import { commandCheck, commandHelp, commandList, commandSet, commandUpdate } from './lib' +import { commandCheck, commandHelp, commandList, commandSet, commandUpdate } from './lib'; -const params: string[] = process.argv.slice(3) +const params: string[] = process.argv.slice(3); switch (process.argv[2]) { case 'check': - commandCheck(params[0]) - break + commandCheck(params[0]); + break; case 'list': - commandList(params[0]) - break + commandList(params[0]); + break; case 'set': - commandSet(params[0], params[1]) - break + commandSet(params[0], params[1]); + break; case 'update': - commandUpdate(params[0], params.slice(1)) - break - case 'help': + commandUpdate(params[0], params.slice(1)); + break; default: - commandHelp() - break + commandHelp(); + break; } diff --git a/tokens/.assets/nft.json b/tokens/.assets/nft.json index 9cb416d7f..71e17c5c2 100644 --- a/tokens/.assets/nft.json +++ b/tokens/.assets/nft.json @@ -1,6 +1,6 @@ { - "name": "Homer NFT", - "symbol": "HOMR", - "description": "An NFT of Homer Simpson", - "image": "https://static.onecms.io/wp-content/uploads/sites/6/2018/08/simp_homersingle08_f_hires2-2000.jpg" -} \ No newline at end of file + "name": "Homer NFT", + "symbol": "HOMR", + "description": "An NFT of Homer Simpson", + "image": "https://static.onecms.io/wp-content/uploads/sites/6/2018/08/simp_homersingle08_f_hires2-2000.jpg" +} diff --git a/tokens/.assets/spl-token.json b/tokens/.assets/spl-token.json index 4b13eb292..ad3c6f2b5 100644 --- a/tokens/.assets/spl-token.json +++ b/tokens/.assets/spl-token.json @@ -1,6 +1,6 @@ { - "name": "Solana Gold", - "symbol": "GOLDSOL", - "description": "A gold Solana SPL token :)", - "image": "https://w7.pngwing.com/pngs/153/594/png-transparent-solana-coin-sign-icon-shiny-golden-symmetric-geometrical-design.png" -} \ No newline at end of file + "name": "Solana Gold", + "symbol": "GOLDSOL", + "description": "A gold Solana SPL token :)", + "image": "https://w7.pngwing.com/pngs/153/594/png-transparent-solana-coin-sign-icon-shiny-golden-symmetric-geometrical-design.png" +} diff --git a/tokens/create-token/anchor/Anchor.toml b/tokens/create-token/anchor/Anchor.toml index e2d25fa7c..8809634a4 100644 --- a/tokens/create-token/anchor/Anchor.toml +++ b/tokens/create-token/anchor/Anchor.toml @@ -15,7 +15,7 @@ cluster = "devnet" wallet = "~/.config/solana/id.json" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" [test] startup_wait = 5000 diff --git a/tokens/create-token/anchor/tests/test.ts b/tokens/create-token/anchor/tests/test.ts index 990adcd47..4a4333dd3 100644 --- a/tokens/create-token/anchor/tests/test.ts +++ b/tokens/create-token/anchor/tests/test.ts @@ -1,20 +1,20 @@ -import * as anchor from "@coral-xyz/anchor"; -import { CreateToken } from "../target/types/create_token"; -import { Keypair } from "@solana/web3.js"; +import * as anchor from '@coral-xyz/anchor'; +import { Keypair } from '@solana/web3.js'; +import type { CreateToken } from '../target/types/create_token'; -describe("Create Tokens", () => { +describe('Create Tokens', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const payer = provider.wallet as anchor.Wallet; const program = anchor.workspace.CreateToken as anchor.Program; const metadata = { - name: "Solana Gold", - symbol: "GOLDSOL", - uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json", + name: 'Solana Gold', + symbol: 'GOLDSOL', + uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json', }; - it("Create an SPL Token!", async () => { + it('Create an SPL Token!', async () => { // Generate new keypair to use as address for mint account. const mintKeypair = new Keypair(); @@ -28,12 +28,12 @@ describe("Create Tokens", () => { .signers([mintKeypair]) .rpc(); - console.log("Success!"); + console.log('Success!'); console.log(` Mint Address: ${mintKeypair.publicKey}`); console.log(` Transaction Signature: ${transactionSignature}`); }); - it("Create an NFT!", async () => { + it('Create an NFT!', async () => { // Generate new keypair to use as address for mint account. const mintKeypair = new Keypair(); @@ -47,7 +47,7 @@ describe("Create Tokens", () => { .signers([mintKeypair]) .rpc(); - console.log("Success!"); + console.log('Success!'); console.log(` Mint Address: ${mintKeypair.publicKey}`); console.log(` Transaction Signature: ${transactionSignature}`); }); diff --git a/tokens/create-token/native/package.json b/tokens/create-token/native/package.json index 3adfa05b1..e7e2e909a 100644 --- a/tokens/create-token/native/package.json +++ b/tokens/create-token/native/package.json @@ -1,6 +1,9 @@ { "scripts": { - "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts" + "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts", + "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test", + "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so", + "deploy": "solana program deploy ./program/target/so/hello_solana_program.so" }, "dependencies": { "@metaplex-foundation/mpl-token-metadata": "^2.5.2", diff --git a/tokens/create-token/native/tests/test.ts b/tokens/create-token/native/tests/test.ts index b152a3675..47ccdeb00 100644 --- a/tokens/create-token/native/tests/test.ts +++ b/tokens/create-token/native/tests/test.ts @@ -1,159 +1,139 @@ -import { - PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID -} from '@metaplex-foundation/mpl-token-metadata'; +import { Buffer } from 'node:buffer'; +import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata'; +import { TOKEN_PROGRAM_ID } from '@solana/spl-token'; import { - Connection, - Keypair, - PublicKey, - SystemProgram, - SYSVAR_RENT_PUBKEY, - TransactionInstruction, - Transaction, - sendAndConfirmTransaction, + Connection, + Keypair, + PublicKey, + SYSVAR_RENT_PUBKEY, + SystemProgram, + Transaction, + TransactionInstruction, + sendAndConfirmTransaction, } from '@solana/web3.js'; -import { - TOKEN_PROGRAM_ID, -} from '@solana/spl-token'; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - +import * as borsh from 'borsh'; function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8"))) - ) -}; - + return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8')))); +} class Assignable { - constructor(properties) { - Object.keys(properties).map((key) => { - return (this[key] = properties[key]); - }); - }; -}; + constructor(properties) { + Object.keys(properties).map((key) => { + return (this[key] = properties[key]); + }); + } +} class CreateTokenArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); + } +} const CreateTokenArgsSchema = new Map([ - [ - CreateTokenArgs, { - kind: 'struct', - fields: [ - ['token_title', 'string'], - ['token_symbol', 'string'], - ['token_uri', 'string'], - ['token_decimals', 'u8'], - ] - } - ] + [ + CreateTokenArgs, + { + kind: 'struct', + fields: [ + ['token_title', 'string'], + ['token_symbol', 'string'], + ['token_uri', 'string'], + ['token_decimals', 'u8'], + ], + }, + ], ]); +describe('Create Tokens!', async () => { + // const connection = new Connection(`http://localhost:8899`, 'confirmed'); + const connection = new Connection('https://api.devnet.solana.com/', 'confirmed'); + const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`); + const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); + + it('Create an SPL Token!', async () => { + const mintKeypair: Keypair = Keypair.generate(); + + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + + // SPL Token default = 9 decimals + // + const instructionData = new CreateTokenArgs({ + token_title: 'Solana Gold', + token_symbol: 'GOLDSOL', + token_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json', + token_decimals: 9, + }); + + const ix = new TransactionInstruction({ + keys: [ + { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), + }); + + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, mintKeypair]); + + console.log('Success!'); + console.log(` Mint Address: ${mintKeypair.publicKey}`); + console.log(` Tx Signature: ${sx}`); + }); -describe("Create Tokens!", async () => { - - // const connection = new Connection(`http://localhost:8899`, 'confirmed'); - const connection = new Connection(`https://api.devnet.solana.com/`, 'confirmed'); - const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json'); - const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); - - it("Create an SPL Token!", async () => { - - const mintKeypair: Keypair = Keypair.generate(); - - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - // SPL Token default = 9 decimals - // - const instructionData = new CreateTokenArgs({ - token_title: "Solana Gold", - token_symbol: "GOLDSOL", - token_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json", - token_decimals: 9, - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); - - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, mintKeypair] - ); - - console.log("Success!"); - console.log(` Mint Address: ${mintKeypair.publicKey}`); - console.log(` Tx Signature: ${sx}`); + it('Create an NFT!', async () => { + const mintKeypair: Keypair = Keypair.generate(); + + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + + // NFT default = 0 decimals + // + const instructionData = new CreateTokenArgs({ + token_title: 'Homer NFT', + token_symbol: 'HOMR', + token_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json', + token_decimals: 9, }); - it("Create an NFT!", async () => { - - const mintKeypair: Keypair = Keypair.generate(); - - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - // NFT default = 0 decimals - // - const instructionData = new CreateTokenArgs({ - token_title: "Homer NFT", - token_symbol: "HOMR", - token_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json", - token_decimals: 9, - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); - - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, mintKeypair] - ); - - console.log("Success!"); - console.log(` Mint Address: ${mintKeypair.publicKey}`); - console.log(` Tx Signature: ${sx}`); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), }); + + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, mintKeypair]); + + console.log('Success!'); + console.log(` Mint Address: ${mintKeypair.publicKey}`); + console.log(` Tx Signature: ${sx}`); }); - \ No newline at end of file +}); diff --git a/tokens/create-token/native/tsconfig.json b/tokens/create-token/native/tsconfig.json index b7d51edac..cd5d2e3d0 100644 --- a/tokens/create-token/native/tsconfig.json +++ b/tokens/create-token/native/tsconfig.json @@ -5,6 +5,6 @@ "lib": ["es2015"], "module": "commonjs", "target": "es6", - "esModuleInterop": true, + "esModuleInterop": true } } diff --git a/tokens/nft-minter/anchor/Anchor.toml b/tokens/nft-minter/anchor/Anchor.toml index f0cc4b35c..81adecb4b 100644 --- a/tokens/nft-minter/anchor/Anchor.toml +++ b/tokens/nft-minter/anchor/Anchor.toml @@ -16,7 +16,7 @@ cluster = "devnet" wallet = "~/.config/solana/id.json" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" [test] startup_wait = 5000 diff --git a/tokens/nft-minter/anchor/tests/test.ts b/tokens/nft-minter/anchor/tests/test.ts index 14ebfea37..527cb94f7 100644 --- a/tokens/nft-minter/anchor/tests/test.ts +++ b/tokens/nft-minter/anchor/tests/test.ts @@ -1,9 +1,9 @@ -import * as anchor from "@coral-xyz/anchor"; -import { NftMinter } from "../target/types/nft_minter"; -import { Keypair } from "@solana/web3.js"; -import { getAssociatedTokenAddressSync } from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import { getAssociatedTokenAddressSync } from '@solana/spl-token'; +import { Keypair } from '@solana/web3.js'; +import type { NftMinter } from '../target/types/nft_minter'; -describe("NFT Minter", () => { +describe('NFT Minter', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const payer = provider.wallet as anchor.Wallet; @@ -11,20 +11,17 @@ describe("NFT Minter", () => { // The metadata for our NFT const metadata = { - name: "Homer NFT", - symbol: "HOMR", - uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json", + name: 'Homer NFT', + symbol: 'HOMR', + uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json', }; - it("Create an NFT!", async () => { + it('Create an NFT!', async () => { // Generate a keypair to use as the address of our mint account const mintKeypair = new Keypair(); // Derive the associated token address account for the mint and payer. - const associatedTokenAccountAddress = getAssociatedTokenAddressSync( - mintKeypair.publicKey, - payer.publicKey - ); + const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, payer.publicKey); const transactionSignature = await program.methods .mintNft(metadata.name, metadata.symbol, metadata.uri) @@ -36,7 +33,7 @@ describe("NFT Minter", () => { .signers([mintKeypair]) .rpc({ skipPreflight: true }); - console.log("Success!"); + console.log('Success!'); console.log(` Mint Address: ${mintKeypair.publicKey}`); console.log(` Transaction Signature: ${transactionSignature}`); }); diff --git a/tokens/nft-minter/native/tests/instructions.ts b/tokens/nft-minter/native/tests/instructions.ts index 9a2888914..88c738030 100644 --- a/tokens/nft-minter/native/tests/instructions.ts +++ b/tokens/nft-minter/native/tests/instructions.ts @@ -1,50 +1,49 @@ -import * as borsh from "borsh"; - +import * as borsh from 'borsh'; class Assignable { - constructor(properties) { - Object.keys(properties).map((key) => { - return (this[key] = properties[key]); - }); - }; -}; + constructor(properties) { + Object.keys(properties).map((key) => { + return (this[key] = properties[key]); + }); + } +} export enum NftMinterInstruction { - Create, - Mint, + Create = 0, + Mint = 1, } export class CreateTokenArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); + } +} const CreateTokenArgsSchema = new Map([ - [ - CreateTokenArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['nft_title', 'string'], - ['nft_symbol', 'string'], - ['nft_uri', 'string'], - ] - } - ] + [ + CreateTokenArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['nft_title', 'string'], + ['nft_symbol', 'string'], + ['nft_uri', 'string'], + ], + }, + ], ]); export class MintToArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(MintToArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(MintToArgsSchema, this)); + } +} const MintToArgsSchema = new Map([ - [ - MintToArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ] - } - ] -]); \ No newline at end of file + [ + MintToArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], +]); diff --git a/tokens/nft-minter/native/tests/test.ts b/tokens/nft-minter/native/tests/test.ts index cfb76f043..d957d4f4e 100644 --- a/tokens/nft-minter/native/tests/test.ts +++ b/tokens/nft-minter/native/tests/test.ts @@ -1,145 +1,120 @@ -import { - PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID -} from '@metaplex-foundation/mpl-token-metadata'; +import { Buffer } from 'node:buffer'; +import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata'; +import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddress } from '@solana/spl-token'; import { - Connection, - Keypair, - PublicKey, - SystemProgram, - SYSVAR_RENT_PUBKEY, - TransactionInstruction, - Transaction, - sendAndConfirmTransaction, + Connection, + Keypair, + PublicKey, + SYSVAR_RENT_PUBKEY, + SystemProgram, + Transaction, + TransactionInstruction, + sendAndConfirmTransaction, } from '@solana/web3.js'; -import { - ASSOCIATED_TOKEN_PROGRAM_ID, - getAssociatedTokenAddress, - TOKEN_PROGRAM_ID, -} from '@solana/spl-token'; -import { Buffer } from "buffer"; -import { - CreateTokenArgs, - MintToArgs, - NftMinterInstruction, -} from './instructions'; - +import { CreateTokenArgs, MintToArgs, NftMinterInstruction } from './instructions'; function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8"))) - ) -}; - - -describe("NFT Minter", async () => { + return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8')))); +} + +describe('NFT Minter', async () => { + // const connection = new Connection(`http://localhost:8899`, 'confirmed'); + const connection = new Connection('https://api.devnet.solana.com/', 'confirmed'); + const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`); + const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); + + const mintKeypair: Keypair = Keypair.generate(); + + it('Create an NFT!', async () => { + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + + const instructionData = new CreateTokenArgs({ + instruction: NftMinterInstruction.Create, + nft_title: 'Homer NFT', + nft_symbol: 'HOMR', + nft_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json', + }); - // const connection = new Connection(`http://localhost:8899`, 'confirmed'); - const connection = new Connection(`https://api.devnet.solana.com/`, 'confirmed'); - const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json'); - const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), + }); - const mintKeypair: Keypair = Keypair.generate(); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, mintKeypair]); - it("Create an NFT!", async () => { + console.log('Success!'); + console.log(` Mint Address: ${mintKeypair.publicKey}`); + console.log(` Tx Signature: ${sx}`); + }); - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const instructionData = new CreateTokenArgs({ - instruction: NftMinterInstruction.Create, - nft_title: "Homer NFT", - nft_symbol: "HOMR", - nft_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json", - }); + it('Mint the NFT to your wallet!', async () => { + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; - let ix = new TransactionInstruction({ - keys: [ - { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); + const editionAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer(), Buffer.from('edition')], + TOKEN_METADATA_PROGRAM_ID, + )[0]; - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, mintKeypair] - ); + const associatedTokenAccountAddress = await getAssociatedTokenAddress(mintKeypair.publicKey, payer.publicKey); - console.log("Success!"); - console.log(` Mint Address: ${mintKeypair.publicKey}`); - console.log(` Tx Signature: ${sx}`); + const instructionData = new MintToArgs({ + instruction: NftMinterInstruction.Mint, }); - it("Mint the NFT to your wallet!", async () => { - - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const editionAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mintKeypair.publicKey.toBuffer(), - Buffer.from("edition"), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const associatedTokenAccountAddress = await getAssociatedTokenAddress( - mintKeypair.publicKey, - payer.publicKey, - ); - - const instructionData = new MintToArgs({ - instruction: NftMinterInstruction.Mint, - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: associatedTokenAccountAddress, isSigner: false, isWritable: true }, // ATA - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Associated token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { + pubkey: associatedTokenAccountAddress, + isSigner: false, + isWritable: true, + }, // ATA + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Associated token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), + }); - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer], - ); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); - console.log("Success!"); - console.log(` ATA Address: ${associatedTokenAccountAddress}`); - console.log(` Tx Signature: ${sx}`); + console.log('Success!'); + console.log(` ATA Address: ${associatedTokenAccountAddress}`); + console.log(` Tx Signature: ${sx}`); }); -}); \ No newline at end of file +}); diff --git a/tokens/nft-minter/native/tsconfig.json b/tokens/nft-minter/native/tsconfig.json index b7d51edac..cd5d2e3d0 100644 --- a/tokens/nft-minter/native/tsconfig.json +++ b/tokens/nft-minter/native/tsconfig.json @@ -5,6 +5,6 @@ "lib": ["es2015"], "module": "commonjs", "target": "es6", - "esModuleInterop": true, + "esModuleInterop": true } } diff --git a/tokens/pda-mint-authority/anchor/Anchor.toml b/tokens/pda-mint-authority/anchor/Anchor.toml index 1853041f1..b508e1c23 100644 --- a/tokens/pda-mint-authority/anchor/Anchor.toml +++ b/tokens/pda-mint-authority/anchor/Anchor.toml @@ -15,7 +15,7 @@ cluster = "Devnet" wallet = "~/.config/solana/id.json" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" [test] startup_wait = 5000 diff --git a/tokens/pda-mint-authority/anchor/tests/test.ts b/tokens/pda-mint-authority/anchor/tests/test.ts index 0f4efec37..8b88c33d0 100644 --- a/tokens/pda-mint-authority/anchor/tests/test.ts +++ b/tokens/pda-mint-authority/anchor/tests/test.ts @@ -1,9 +1,9 @@ -import * as anchor from "@coral-xyz/anchor"; -import { TokenMinter } from "../target/types/token_minter"; -import { PublicKey } from "@solana/web3.js"; -import { getAssociatedTokenAddressSync } from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import { getAssociatedTokenAddressSync } from '@solana/spl-token'; +import { PublicKey } from '@solana/web3.js'; +import type { TokenMinter } from '../target/types/token_minter'; -describe("NFT Minter", () => { +describe('NFT Minter', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const payer = provider.wallet as anchor.Wallet; @@ -11,18 +11,15 @@ describe("NFT Minter", () => { // Derive the PDA to use as mint account address. // This same PDA is also used as the mint authority. - const [mintPDA] = PublicKey.findProgramAddressSync( - [Buffer.from("mint")], - program.programId - ); + const [mintPDA] = PublicKey.findProgramAddressSync([Buffer.from('mint')], program.programId); const metadata = { - name: "Solana Gold", - symbol: "GOLDSOL", - uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json", + name: 'Solana Gold', + symbol: 'GOLDSOL', + uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json', }; - it("Create a token!", async () => { + it('Create a token!', async () => { const transactionSignature = await program.methods .createToken(metadata.name, metadata.symbol, metadata.uri) .accounts({ @@ -30,17 +27,14 @@ describe("NFT Minter", () => { }) .rpc(); - console.log("Success!"); + console.log('Success!'); console.log(` Mint Address: ${mintPDA}`); console.log(` Transaction Signature: ${transactionSignature}`); }); - it("Mint 1 Token!", async () => { + it('Mint 1 Token!', async () => { // Derive the associated token address account for the mint and payer. - const associatedTokenAccountAddress = getAssociatedTokenAddressSync( - mintPDA, - payer.publicKey - ); + const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintPDA, payer.publicKey); // Amount of tokens to mint. const amount = new anchor.BN(100); @@ -53,10 +47,8 @@ describe("NFT Minter", () => { }) .rpc(); - console.log("Success!"); - console.log( - ` Associated Token Account Address: ${associatedTokenAccountAddress}` - ); + console.log('Success!'); + console.log(` Associated Token Account Address: ${associatedTokenAccountAddress}`); console.log(` Transaction Signature: ${transactionSignature}`); }); }); diff --git a/tokens/pda-mint-authority/native/package.json b/tokens/pda-mint-authority/native/package.json index 3adfa05b1..c40574d38 100644 --- a/tokens/pda-mint-authority/native/package.json +++ b/tokens/pda-mint-authority/native/package.json @@ -1,6 +1,9 @@ { "scripts": { - "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts" + "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts", + "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test", + "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so", + "deploy": "solana program deploy ./program/target/so/hello_solana_program.so" }, "dependencies": { "@metaplex-foundation/mpl-token-metadata": "^2.5.2", @@ -16,6 +19,7 @@ "@types/mocha": "^9.1.1", "chai": "^4.3.4", "mocha": "^9.0.3", + "solana-bankrun": "^0.3.0", "ts-mocha": "^10.0.0", "typescript": "^4.3.5" } diff --git a/tokens/pda-mint-authority/native/pnpm-lock.yaml b/tokens/pda-mint-authority/native/pnpm-lock.yaml new file mode 100644 index 000000000..de38e9e59 --- /dev/null +++ b/tokens/pda-mint-authority/native/pnpm-lock.yaml @@ -0,0 +1,1780 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@metaplex-foundation/mpl-token-metadata': + specifier: ^2.5.2 + version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-token': + specifier: ^0.3.7 + version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: ^1.73.0 + version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + borsh: + specifier: ^0.7.0 + version: 0.7.0 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + fs: + specifier: ^0.0.1-security + version: 0.0.1-security + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.1 + version: 4.3.16 + '@types/mocha': + specifier: ^9.1.1 + version: 9.1.1 + chai: + specifier: ^4.3.4 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + solana-bankrun: + specifier: ^0.3.0 + version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@metaplex-foundation/beet-solana@0.4.1': + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + + '@metaplex-foundation/beet@0.7.2': + resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==} + + '@metaplex-foundation/cusper@0.0.2': + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + + '@metaplex-foundation/mpl-token-metadata@2.13.0': + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fs@0.0.1-security: + resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + solana-bankrun-darwin-arm64@0.3.0: + resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + solana-bankrun-darwin-universal@0.3.0: + resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==} + engines: {node: '>= 10'} + os: [darwin] + + solana-bankrun-darwin-x64@0.3.0: + resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + solana-bankrun-linux-x64-gnu@0.3.0: + resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun-linux-x64-musl@0.3.0: + resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun@0.3.0: + resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==} + engines: {node: '>= 10'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet@0.7.2': + dependencies: + ansicolors: 0.3.2 + assert: 2.1.0 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/cusper@0.0.2': {} + + '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@1.1.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + emoji-regex@8.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fs.realpath@1.0.0: {} + + fs@0.0.1-security: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + make-error@1.3.6: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: + optional: true + + normalize-path@3.0.0: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + solana-bankrun-darwin-arm64@0.3.0: + optional: true + + solana-bankrun-darwin-universal@0.3.0: + optional: true + + solana-bankrun-darwin-x64@0.3.0: + optional: true + + solana-bankrun-linux-x64-gnu@0.3.0: + optional: true + + solana-bankrun-linux-x64-musl@0.3.0: + optional: true + + solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 4.0.1 + optionalDependencies: + solana-bankrun-darwin-arm64: 0.3.0 + solana-bankrun-darwin-universal: 0.3.0 + solana-bankrun-darwin-x64: 0.3.0 + solana-bankrun-linux-x64-gnu: 0.3.0 + solana-bankrun-linux-x64-musl: 0.3.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + type-detect@4.0.8: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/tokens/pda-mint-authority/native/tests/instructions.ts b/tokens/pda-mint-authority/native/tests/instructions.ts index 9da6b8e27..b422ad1f6 100644 --- a/tokens/pda-mint-authority/native/tests/instructions.ts +++ b/tokens/pda-mint-authority/native/tests/instructions.ts @@ -1,67 +1,65 @@ -import * as borsh from "borsh"; - +import * as borsh from 'borsh'; class Assignable { - constructor(properties) { - Object.keys(properties).map((key) => { - return (this[key] = properties[key]); - }); - }; -}; + constructor(properties) { + Object.keys(properties).map((key) => { + return (this[key] = properties[key]); + }); + } +} export enum NftMinterInstruction { - Init, - Create, - Mint, + Init = 0, + Create = 1, + Mint = 2, } export class InitArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(InitArgsSchema, this)); - } + toBuffer() { + return Buffer.from(borsh.serialize(InitArgsSchema, this)); + } } const InitArgsSchema = new Map([ - [ - InitArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ] - } - ] + [ + InitArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], ]); export class CreateTokenArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); + } +} const CreateTokenArgsSchema = new Map([ - [ - CreateTokenArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['nft_title', 'string'], - ['nft_symbol', 'string'], - ['nft_uri', 'string'], - ] - } - ] + [ + CreateTokenArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['nft_title', 'string'], + ['nft_symbol', 'string'], + ['nft_uri', 'string'], + ], + }, + ], ]); export class MintToArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(MintToArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(MintToArgsSchema, this)); + } +} const MintToArgsSchema = new Map([ - [ - MintToArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ] - } - ] -]); \ No newline at end of file + [ + MintToArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], +]); diff --git a/tokens/pda-mint-authority/native/tests/test.ts b/tokens/pda-mint-authority/native/tests/test.ts index 40704ed8e..3d59aad33 100644 --- a/tokens/pda-mint-authority/native/tests/test.ts +++ b/tokens/pda-mint-authority/native/tests/test.ts @@ -1,180 +1,144 @@ -import { - PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID -} from '@metaplex-foundation/mpl-token-metadata'; +import { Buffer } from 'node:buffer'; +import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata'; +import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddress } from '@solana/spl-token'; import { - Connection, - Keypair, - PublicKey, - SystemProgram, - SYSVAR_RENT_PUBKEY, - TransactionInstruction, - Transaction, - sendAndConfirmTransaction, + Connection, + Keypair, + PublicKey, + SYSVAR_RENT_PUBKEY, + SystemProgram, + Transaction, + TransactionInstruction, + sendAndConfirmTransaction, } from '@solana/web3.js'; -import { - ASSOCIATED_TOKEN_PROGRAM_ID, - getAssociatedTokenAddress, - TOKEN_PROGRAM_ID, -} from '@solana/spl-token'; -import { Buffer } from "buffer"; -import { - CreateTokenArgs, - InitArgs, - MintToArgs, - NftMinterInstruction, -} from './instructions'; - +import { CreateTokenArgs, InitArgs, MintToArgs, NftMinterInstruction } from './instructions'; function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8"))) - ) -}; + return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8')))); +} + +describe('NFT Minter', async () => { + // const connection = new Connection(`http://localhost:8899`, 'confirmed'); + const connection = new Connection('https://api.devnet.solana.com/', 'confirmed'); + const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`); + const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); + + const mintAuthorityPublicKey = PublicKey.findProgramAddressSync([Buffer.from('mint_authority')], program.publicKey)[0]; + + const mintKeypair: Keypair = Keypair.generate(); + + it('Init Mint Authority PDA', async () => { + const instructionData = new InitArgs({ + instruction: NftMinterInstruction.Init, + }); + + const ix = new TransactionInstruction({ + keys: [ + { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, + ], + programId: program.publicKey, + data: instructionData.toBuffer(), + }); + + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer], { skipPreflight: true }); + + console.log('Success!'); + console.log(` Mint Address: ${mintKeypair.publicKey}`); + console.log(` Tx Signature: ${sx}`); + }); + + it('Create an NFT!', async () => { + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + const instructionData = new CreateTokenArgs({ + instruction: NftMinterInstruction.Create, + nft_title: 'Homer NFT', + nft_symbol: 'HOMR', + nft_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json', + }); -describe("NFT Minter", async () => { + const ix = new TransactionInstruction({ + keys: [ + { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account + { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, // Mint authority account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), + }); - // const connection = new Connection(`http://localhost:8899`, 'confirmed'); - const connection = new Connection(`https://api.devnet.solana.com/`, 'confirmed'); - const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json'); - const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, mintKeypair], { skipPreflight: true }); - const mintAuthorityPublicKey = PublicKey.findProgramAddressSync( - [Buffer.from("mint_authority")], - program.publicKey, + console.log('Success!'); + console.log(` Mint Address: ${mintKeypair.publicKey}`); + console.log(` Tx Signature: ${sx}`); + }); + + it('Mint the NFT to your wallet!', async () => { + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + + const editionAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer(), Buffer.from('edition')], + TOKEN_METADATA_PROGRAM_ID, )[0]; - const mintKeypair: Keypair = Keypair.generate(); - - it("Init Mint Authority PDA", async () => { - - const instructionData = new InitArgs({ - instruction: NftMinterInstruction.Init, - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); - - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer], - { skipPreflight: true } - ); - - console.log("Success!"); - console.log(` Mint Address: ${mintKeypair.publicKey}`); - console.log(` Tx Signature: ${sx}`); + const associatedTokenAccountAddress = await getAssociatedTokenAddress(mintKeypair.publicKey, payer.publicKey); + + const instructionData = new MintToArgs({ + instruction: NftMinterInstruction.Mint, }); - it("Create an NFT!", async () => { - - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const instructionData = new CreateTokenArgs({ - instruction: NftMinterInstruction.Create, - nft_title: "Homer NFT", - nft_symbol: "HOMR", - nft_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json", - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account - { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); - - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, mintKeypair], - { skipPreflight: true } - ); - - console.log("Success!"); - console.log(` Mint Address: ${mintKeypair.publicKey}`); - console.log(` Tx Signature: ${sx}`); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account + { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, // Mint authority account + { + pubkey: associatedTokenAccountAddress, + isSigner: false, + isWritable: true, + }, // ATA + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Associated token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), }); - it("Mint the NFT to your wallet!", async () => { - - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const editionAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mintKeypair.publicKey.toBuffer(), - Buffer.from("edition"), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const associatedTokenAccountAddress = await getAssociatedTokenAddress( - mintKeypair.publicKey, - payer.publicKey, - ); - - const instructionData = new MintToArgs({ - instruction: NftMinterInstruction.Mint, - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account - { pubkey: mintAuthorityPublicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: associatedTokenAccountAddress, isSigner: false, isWritable: true }, // ATA - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Associated token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); - - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer], - ); - - console.log("Success!"); - console.log(` ATA Address: ${associatedTokenAccountAddress}`); - console.log(` Tx Signature: ${sx}`); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); + + console.log('Success!'); + console.log(` ATA Address: ${associatedTokenAccountAddress}`); + console.log(` Tx Signature: ${sx}`); }); -}); \ No newline at end of file +}); diff --git a/tokens/pda-mint-authority/native/tsconfig.json b/tokens/pda-mint-authority/native/tsconfig.json index b7d51edac..cd5d2e3d0 100644 --- a/tokens/pda-mint-authority/native/tsconfig.json +++ b/tokens/pda-mint-authority/native/tsconfig.json @@ -5,6 +5,6 @@ "lib": ["es2015"], "module": "commonjs", "target": "es6", - "esModuleInterop": true, + "esModuleInterop": true } } diff --git a/tokens/spl-token-minter/anchor/Anchor.toml b/tokens/spl-token-minter/anchor/Anchor.toml index cf5763426..e8f761d27 100644 --- a/tokens/spl-token-minter/anchor/Anchor.toml +++ b/tokens/spl-token-minter/anchor/Anchor.toml @@ -15,7 +15,7 @@ cluster = "devnet" wallet = "~/.config/solana/id.json" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" [test] startup_wait = 5000 diff --git a/tokens/spl-token-minter/anchor/tests/test.ts b/tokens/spl-token-minter/anchor/tests/test.ts index ae1551e91..130ebc867 100644 --- a/tokens/spl-token-minter/anchor/tests/test.ts +++ b/tokens/spl-token-minter/anchor/tests/test.ts @@ -1,25 +1,24 @@ -import * as anchor from "@coral-xyz/anchor"; -import { SplTokenMinter } from "../target/types/spl_token_minter"; -import { Keypair } from "@solana/web3.js"; -import { getAssociatedTokenAddressSync } from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import { getAssociatedTokenAddressSync } from '@solana/spl-token'; +import { Keypair } from '@solana/web3.js'; +import type { SplTokenMinter } from '../target/types/spl_token_minter'; -describe("SPL Token Minter", () => { +describe('SPL Token Minter', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const payer = provider.wallet as anchor.Wallet; - const program = anchor.workspace - .SplTokenMinter as anchor.Program; + const program = anchor.workspace.SplTokenMinter as anchor.Program; const metadata = { - name: "Solana Gold", - symbol: "GOLDSOL", - uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json", + name: 'Solana Gold', + symbol: 'GOLDSOL', + uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json', }; // Generate new keypair to use as address for mint account. const mintKeypair = new Keypair(); - it("Create an SPL Token!", async () => { + it('Create an SPL Token!', async () => { const transactionSignature = await program.methods .createToken(metadata.name, metadata.symbol, metadata.uri) .accounts({ @@ -29,17 +28,14 @@ describe("SPL Token Minter", () => { .signers([mintKeypair]) .rpc(); - console.log("Success!"); + console.log('Success!'); console.log(` Mint Address: ${mintKeypair.publicKey}`); console.log(` Transaction Signature: ${transactionSignature}`); }); - it("Mint some tokens to your wallet!", async () => { + it('Mint some tokens to your wallet!', async () => { // Derive the associated token address account for the mint and payer. - const associatedTokenAccountAddress = getAssociatedTokenAddressSync( - mintKeypair.publicKey, - payer.publicKey - ); + const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, payer.publicKey); // Amount of tokens to mint. const amount = new anchor.BN(100); @@ -55,10 +51,8 @@ describe("SPL Token Minter", () => { }) .rpc(); - console.log("Success!"); - console.log( - ` Associated Token Account Address: ${associatedTokenAccountAddress}` - ); + console.log('Success!'); + console.log(` Associated Token Account Address: ${associatedTokenAccountAddress}`); console.log(` Transaction Signature: ${transactionSignature}`); }); }); diff --git a/tokens/spl-token-minter/native/tests/instructions.ts b/tokens/spl-token-minter/native/tests/instructions.ts index 0c312a48a..8af727c70 100644 --- a/tokens/spl-token-minter/native/tests/instructions.ts +++ b/tokens/spl-token-minter/native/tests/instructions.ts @@ -1,51 +1,52 @@ -import * as borsh from "borsh"; - +import * as borsh from 'borsh'; class Assignable { - constructor(properties) { - Object.keys(properties).map((key) => { - return (this[key] = properties[key]); - }); - }; -}; + constructor(properties) { + Object.keys(properties).map((key) => { + return (this[key] = properties[key]); + }); + } +} export enum SplMinterInstruction { - Create, - Mint, + Create = 0, + Mint = 1, } export class CreateTokenArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); + } +} const CreateTokenArgsSchema = new Map([ - [ - CreateTokenArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['token_title', 'string'], - ['token_symbol', 'string'], - ['token_uri', 'string'], - ] - } - ] + [ + CreateTokenArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['token_title', 'string'], + ['token_symbol', 'string'], + ['token_uri', 'string'], + ], + }, + ], ]); export class MintToArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(MintToArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(MintToArgsSchema, this)); + } +} const MintToArgsSchema = new Map([ - [ - MintToArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['quantity', 'u64'], - ] - } - ] -]); \ No newline at end of file + [ + MintToArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['quantity', 'u64'], + ], + }, + ], +]); diff --git a/tokens/spl-token-minter/native/tests/test.ts b/tokens/spl-token-minter/native/tests/test.ts index d753b28f7..64263e42b 100644 --- a/tokens/spl-token-minter/native/tests/test.ts +++ b/tokens/spl-token-minter/native/tests/test.ts @@ -1,124 +1,104 @@ -import { - PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID -} from '@metaplex-foundation/mpl-token-metadata'; +import { Buffer } from 'node:buffer'; +import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata'; +import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddress } from '@solana/spl-token'; import { - Connection, - Keypair, - PublicKey, - SystemProgram, - SYSVAR_RENT_PUBKEY, - TransactionInstruction, - Transaction, - sendAndConfirmTransaction, + Connection, + Keypair, + PublicKey, + SYSVAR_RENT_PUBKEY, + SystemProgram, + Transaction, + TransactionInstruction, + sendAndConfirmTransaction, } from '@solana/web3.js'; -import { - ASSOCIATED_TOKEN_PROGRAM_ID, - getAssociatedTokenAddress, - TOKEN_PROGRAM_ID, -} from '@solana/spl-token'; -import { Buffer } from "buffer"; -import { - CreateTokenArgs, - MintToArgs, - SplMinterInstruction, -} from './instructions'; import { BN } from 'bn.js'; - +import { CreateTokenArgs, MintToArgs, SplMinterInstruction } from './instructions'; function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8"))) - ) -}; - - -describe("SPL Token Minter", async () => { - - // const connection = new Connection(`http://localhost:8899`, 'confirmed'); - const connection = new Connection(`https://api.devnet.solana.com/`, 'confirmed'); - const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json'); - const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); - - const mintKeypair: Keypair = Keypair.generate(); + return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8')))); +} + +describe('SPL Token Minter', async () => { + // const connection = new Connection(`http://localhost:8899`, 'confirmed'); + const connection = new Connection('https://api.devnet.solana.com/', 'confirmed'); + const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`); + const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); + + const mintKeypair: Keypair = Keypair.generate(); + + it('Create an SPL Token!', async () => { + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + + const instructionData = new CreateTokenArgs({ + instruction: SplMinterInstruction.Create, + token_title: 'Solana Gold', + token_symbol: 'GOLDSOL', + token_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json', + }); - it("Create an SPL Token!", async () => { + const ix = new TransactionInstruction({ + keys: [ + { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), + }); - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - mintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const instructionData = new CreateTokenArgs({ - instruction: SplMinterInstruction.Create, - token_title: "Solana Gold", - token_symbol: "GOLDSOL", - token_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json", - }); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, mintKeypair]); - let ix = new TransactionInstruction({ - keys: [ - { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); + console.log('Success!'); + console.log(` Mint Address: ${mintKeypair.publicKey}`); + console.log(` Tx Signature: ${sx}`); + }); - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, mintKeypair] - ); + it('Mint some tokens to your wallet!', async () => { + const associatedTokenAccountAddress = await getAssociatedTokenAddress(mintKeypair.publicKey, payer.publicKey); - console.log("Success!"); - console.log(` Mint Address: ${mintKeypair.publicKey}`); - console.log(` Tx Signature: ${sx}`); + const instructionData = new MintToArgs({ + instruction: SplMinterInstruction.Mint, + quantity: new BN(150), }); - it("Mint some tokens to your wallet!", async () => { - - const associatedTokenAccountAddress = await getAssociatedTokenAddress( - mintKeypair.publicKey, - payer.publicKey, - ); - - const instructionData = new MintToArgs({ - instruction: SplMinterInstruction.Mint, - quantity: new BN(150), - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: associatedTokenAccountAddress, isSigner: false, isWritable: true }, // ATA - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SystemProgram.programId, isSigner: false, isWritable: true }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: mintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { + pubkey: associatedTokenAccountAddress, + isSigner: false, + isWritable: true, + }, // ATA + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SystemProgram.programId, isSigner: false, isWritable: true }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), + }); - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer], - ); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); - console.log("Success!"); - console.log(` ATA Address: ${associatedTokenAccountAddress}`); - console.log(` Tx Signature: ${sx}`); + console.log('Success!'); + console.log(` ATA Address: ${associatedTokenAccountAddress}`); + console.log(` Tx Signature: ${sx}`); }); -}); \ No newline at end of file +}); diff --git a/tokens/spl-token-minter/native/tsconfig.json b/tokens/spl-token-minter/native/tsconfig.json index b7d51edac..cd5d2e3d0 100644 --- a/tokens/spl-token-minter/native/tsconfig.json +++ b/tokens/spl-token-minter/native/tsconfig.json @@ -5,6 +5,6 @@ "lib": ["es2015"], "module": "commonjs", "target": "es6", - "esModuleInterop": true, + "esModuleInterop": true } } diff --git a/tokens/token-2022/basics/anchor/migrations/deploy.ts b/tokens/token-2022/basics/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/basics/anchor/migrations/deploy.ts +++ b/tokens/token-2022/basics/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/basics/anchor/tests/anchor.ts b/tokens/token-2022/basics/anchor/tests/anchor.ts index 419e489b1..fb96eea5b 100644 --- a/tokens/token-2022/basics/anchor/tests/anchor.ts +++ b/tokens/token-2022/basics/anchor/tests/anchor.ts @@ -1,52 +1,36 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { Anchor } from "../target/types/anchor"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import type { Anchor } from '../target/types/anchor'; -describe("anchor", () => { +describe('anchor', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const program = anchor.workspace.Anchor as Program; const connection = program.provider.connection; - const TOKEN_2022_PROGRAM_ID = new anchor.web3.PublicKey( - "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" - ); + const TOKEN_2022_PROGRAM_ID = new anchor.web3.PublicKey('TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'); const wallet = provider.wallet as anchor.Wallet; - const ATA_PROGRAM_ID = new anchor.web3.PublicKey( - "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" - ); + const ATA_PROGRAM_ID = new anchor.web3.PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'); - const tokenName = "TestToken"; + const tokenName = 'TestToken'; const [mint] = anchor.web3.PublicKey.findProgramAddressSync( - [ - Buffer.from("token-2022-token"), - wallet.publicKey.toBytes(), - Buffer.from(tokenName), - ], - program.programId + [Buffer.from('token-2022-token'), wallet.publicKey.toBytes(), Buffer.from(tokenName)], + program.programId, ); const [payerATA] = anchor.web3.PublicKey.findProgramAddressSync( - [ - wallet.publicKey.toBytes(), - TOKEN_2022_PROGRAM_ID.toBytes(), - mint.toBytes(), - ], - ATA_PROGRAM_ID + [wallet.publicKey.toBytes(), TOKEN_2022_PROGRAM_ID.toBytes(), mint.toBytes()], + ATA_PROGRAM_ID, ); const receiver = anchor.web3.Keypair.generate(); const [receiverATA] = anchor.web3.PublicKey.findProgramAddressSync( - [ - receiver.publicKey.toBytes(), - TOKEN_2022_PROGRAM_ID.toBytes(), - mint.toBytes(), - ], - ATA_PROGRAM_ID + [receiver.publicKey.toBytes(), TOKEN_2022_PROGRAM_ID.toBytes(), mint.toBytes()], + ATA_PROGRAM_ID, ); - it("Create Token-2022 Token", async () => { + it('Create Token-2022 Token', async () => { await connection.requestAirdrop(receiver.publicKey, 1000000000); await connection.requestAirdrop(wallet.publicKey, 1000000000); const tx = new anchor.web3.Transaction(); @@ -61,15 +45,11 @@ describe("anchor", () => { tx.add(ix); - const sig = await anchor.web3.sendAndConfirmTransaction( - program.provider.connection, - tx, - [wallet.payer] - ); - console.log("Your transaction signature", sig); + const sig = await anchor.web3.sendAndConfirmTransaction(program.provider.connection, tx, [wallet.payer]); + console.log('Your transaction signature', sig); }); - it("Initialize payer ATA", async () => { + it('Initialize payer ATA', async () => { const tx = new anchor.web3.Transaction(); const ix = await program.methods @@ -84,12 +64,8 @@ describe("anchor", () => { tx.add(ix); - const sig = await anchor.web3.sendAndConfirmTransaction( - program.provider.connection, - tx, - [wallet.payer] - ); - console.log("Your transaction signature", sig); + const sig = await anchor.web3.sendAndConfirmTransaction(program.provider.connection, tx, [wallet.payer]); + console.log('Your transaction signature', sig); }); /* @@ -117,7 +93,7 @@ describe("anchor", () => { }); */ - it("Mint Token to payer", async () => { + it('Mint Token to payer', async () => { const tx = new anchor.web3.Transaction(); const ix = await program.methods @@ -132,16 +108,12 @@ describe("anchor", () => { tx.add(ix); - const sig = await anchor.web3.sendAndConfirmTransaction( - program.provider.connection, - tx, - [wallet.payer] - ); - console.log("Your transaction signature", sig); + const sig = await anchor.web3.sendAndConfirmTransaction(program.provider.connection, tx, [wallet.payer]); + console.log('Your transaction signature', sig); }); // Using init in the transfer instruction, as init if needed is bot working with Token 2022 yet. - it("Transfer Token", async () => { + it('Transfer Token', async () => { const tx = new anchor.web3.Transaction(); const ix = await program.methods @@ -158,11 +130,7 @@ describe("anchor", () => { tx.add(ix); - const sig = await anchor.web3.sendAndConfirmTransaction( - program.provider.connection, - tx, - [wallet.payer] - ); - console.log("Your transaction signature", sig); + const sig = await anchor.web3.sendAndConfirmTransaction(program.provider.connection, tx, [wallet.payer]); + console.log('Your transaction signature', sig); }); }); diff --git a/tokens/token-2022/basics/anchor/tsconfig.json b/tokens/token-2022/basics/anchor/tsconfig.json index 558b83e5e..cd5d2e3d0 100644 --- a/tokens/token-2022/basics/anchor/tsconfig.json +++ b/tokens/token-2022/basics/anchor/tsconfig.json @@ -1,11 +1,10 @@ { - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/tokens/token-2022/cpi-guard/anchor/migrations/deploy.ts b/tokens/token-2022/cpi-guard/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/cpi-guard/anchor/migrations/deploy.ts +++ b/tokens/token-2022/cpi-guard/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/cpi-guard/anchor/tests/cpi-guard.ts b/tokens/token-2022/cpi-guard/anchor/tests/cpi-guard.ts index e4b633ef1..e3bb6180d 100644 --- a/tokens/token-2022/cpi-guard/anchor/tests/cpi-guard.ts +++ b/tokens/token-2022/cpi-guard/anchor/tests/cpi-guard.ts @@ -1,6 +1,5 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { CpiGuard } from "../target/types/cpi_guard"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; import { ExtensionType, TOKEN_2022_PROGRAM_ID, @@ -10,14 +9,11 @@ import { disableCpiGuard, getAccountLen, mintTo, -} from "@solana/spl-token"; -import { - sendAndConfirmTransaction, - SystemProgram, - Transaction, -} from "@solana/web3.js"; +} from '@solana/spl-token'; +import { SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; +import type { CpiGuard } from '../target/types/cpi_guard'; -describe("cpi-guard", () => { +describe('cpi-guard', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); const connection = provider.connection; @@ -29,7 +25,7 @@ describe("cpi-guard", () => { const mintKeypair = new anchor.web3.Keypair(); const tokenKeypair = new anchor.web3.Keypair(); - it("Create Token Account with CpiGuard extension", async () => { + it('Create Token Account with CpiGuard extension', async () => { await createMint( connection, wallet.payer, // Payer of the transaction and initialization fees @@ -38,15 +34,13 @@ describe("cpi-guard", () => { 2, // Decimals of Mint mintKeypair, // Optional keypair undefined, // Options for confirming the transaction - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); // Size of Token Account with extension const accountLen = getAccountLen([ExtensionType.CpiGuard]); // Minimum lamports required for Token Account - const lamports = await connection.getMinimumBalanceForRentExemption( - accountLen - ); + const lamports = await connection.getMinimumBalanceForRentExemption(accountLen); // Instruction to invoke System Program to create new account const createAccountInstruction = SystemProgram.createAccount({ @@ -62,45 +56,26 @@ describe("cpi-guard", () => { tokenKeypair.publicKey, // Token Account Address mintKeypair.publicKey, // Mint Account wallet.publicKey, // Token Account Owner - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); // Instruction to initialize the CpiGuard Extension - const enableCpiGuiardInstruction = createEnableCpiGuardInstruction( - tokenKeypair.publicKey, - wallet.publicKey, - [], - TOKEN_2022_PROGRAM_ID - ); + const enableCpiGuiardInstruction = createEnableCpiGuardInstruction(tokenKeypair.publicKey, wallet.publicKey, [], TOKEN_2022_PROGRAM_ID); - const transaction = new Transaction().add( - createAccountInstruction, - initializeAccountInstruction, - enableCpiGuiardInstruction - ); + const transaction = new Transaction().add(createAccountInstruction, initializeAccountInstruction, enableCpiGuiardInstruction); const transactionSignature = await sendAndConfirmTransaction( connection, transaction, - [wallet.payer, tokenKeypair] // Signers + [wallet.payer, tokenKeypair], // Signers ); - await mintTo( - connection, - wallet.payer, - mintKeypair.publicKey, - tokenKeypair.publicKey, - wallet.payer, - 1, - [], - null, - TOKEN_2022_PROGRAM_ID - ); + await mintTo(connection, wallet.payer, mintKeypair.publicKey, tokenKeypair.publicKey, wallet.payer, 1, [], null, TOKEN_2022_PROGRAM_ID); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Transfer, expect fail", async () => { + it('Transfer, expect fail', async () => { try { await program.methods .cpiTransfer() @@ -111,21 +86,16 @@ describe("cpi-guard", () => { }) .rpc({ skipPreflight: true }); } catch (error) { - console.log("\nExpect Error:", error.message); + console.log('\nExpect Error:', error.message); } }); - it("Disable CpiGuard", async () => { - const transactionSignature = await disableCpiGuard( - connection, - wallet.payer, - tokenKeypair.publicKey, - wallet.publicKey - ); - console.log("Your transaction signature", transactionSignature); + it('Disable CpiGuard', async () => { + const transactionSignature = await disableCpiGuard(connection, wallet.payer, tokenKeypair.publicKey, wallet.publicKey); + console.log('Your transaction signature', transactionSignature); }); - it("Transfer, expect success", async () => { + it('Transfer, expect success', async () => { const transactionSignature = await program.methods .cpiTransfer() .accounts({ @@ -134,6 +104,6 @@ describe("cpi-guard", () => { mintAccount: mintKeypair.publicKey, }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); }); diff --git a/tokens/token-2022/default-account-state/anchor/migrations/deploy.ts b/tokens/token-2022/default-account-state/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/default-account-state/anchor/migrations/deploy.ts +++ b/tokens/token-2022/default-account-state/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/default-account-state/anchor/tests/default-account-state.ts b/tokens/token-2022/default-account-state/anchor/tests/default-account-state.ts index 1442d4b8e..a3af7c80e 100644 --- a/tokens/token-2022/default-account-state/anchor/tests/default-account-state.ts +++ b/tokens/token-2022/default-account-state/anchor/tests/default-account-state.ts @@ -1,33 +1,28 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { DefaultAccountState } from "../target/types/default_account_state"; -import { - TOKEN_2022_PROGRAM_ID, - mintTo, - createAccount, -} from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { TOKEN_2022_PROGRAM_ID, createAccount, mintTo } from '@solana/spl-token'; +import type { DefaultAccountState } from '../target/types/default_account_state'; -describe("default-account-state", () => { +describe('default-account-state', () => { const provider = anchor.AnchorProvider.env(); const connection = provider.connection; const wallet = provider.wallet as anchor.Wallet; anchor.setProvider(provider); - const program = anchor.workspace - .DefaultAccountState as Program; + const program = anchor.workspace.DefaultAccountState as Program; const mintKeypair = new anchor.web3.Keypair(); - it("Create Mint with DefaultAccountState extension", async () => { + it('Create Mint with DefaultAccountState extension', async () => { const transactionSignature = await program.methods .initialize() .accounts({ mintAccount: mintKeypair.publicKey }) .signers([mintKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Attempt Mint Token, expect fail", async () => { + it('Attempt Mint Token, expect fail', async () => { const amount = 1; // Create a token account, default state is frozen @@ -38,7 +33,7 @@ describe("default-account-state", () => { wallet.payer.publicKey, // Token Account owner new anchor.web3.Keypair(), // Optional keypair undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); try { @@ -52,23 +47,23 @@ describe("default-account-state", () => { amount, // Amount [], // Additional signers null, // Commitment - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); } catch (error) { - console.log("\nExpect Error:", error.logs); + console.log('\nExpect Error:', error.logs); } }); - it("Update DefaultAccountState", async () => { + it('Update DefaultAccountState', async () => { // Update the default state to initialized (not frozen) const transactionSignature = await program.methods .updateDefaultState({ initialized: {} }) .accounts({ mintAccount: mintKeypair.publicKey }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Attempt Mint Token, expect success", async () => { + it('Attempt Mint Token, expect success', async () => { const amount = 1; // Create a token account, default state is initialized (not frozen) @@ -79,7 +74,7 @@ describe("default-account-state", () => { wallet.payer.publicKey, // Token Account owner new anchor.web3.Keypair(), // Optional keypair undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); await mintTo( @@ -91,7 +86,7 @@ describe("default-account-state", () => { amount, // Amount [], // Additional signers null, // Commitment - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); }); }); diff --git a/tokens/token-2022/default-account-state/native/package.json b/tokens/token-2022/default-account-state/native/package.json index 3adfa05b1..48fb3d18f 100644 --- a/tokens/token-2022/default-account-state/native/package.json +++ b/tokens/token-2022/default-account-state/native/package.json @@ -1,6 +1,9 @@ { "scripts": { - "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts" + "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts", + "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test", + "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so", + "deploy": "solana program deploy ./program/target/so/hello_solana_program.so" }, "dependencies": { "@metaplex-foundation/mpl-token-metadata": "^2.5.2", @@ -14,8 +17,9 @@ "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.1", "@types/mocha": "^9.1.1", - "chai": "^4.3.4", + "chai": "^4.4.1", "mocha": "^9.0.3", + "solana-bankrun": "^0.3.0", "ts-mocha": "^10.0.0", "typescript": "^4.3.5" } diff --git a/tokens/token-2022/default-account-state/native/pnpm-lock.yaml b/tokens/token-2022/default-account-state/native/pnpm-lock.yaml new file mode 100644 index 000000000..164085a92 --- /dev/null +++ b/tokens/token-2022/default-account-state/native/pnpm-lock.yaml @@ -0,0 +1,1780 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@metaplex-foundation/mpl-token-metadata': + specifier: ^2.5.2 + version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-token': + specifier: ^0.3.7 + version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: ^1.73.0 + version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + borsh: + specifier: ^0.7.0 + version: 0.7.0 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + fs: + specifier: ^0.0.1-security + version: 0.0.1-security + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.1 + version: 4.3.16 + '@types/mocha': + specifier: ^9.1.1 + version: 9.1.1 + chai: + specifier: ^4.4.1 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + solana-bankrun: + specifier: ^0.3.0 + version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@metaplex-foundation/beet-solana@0.4.1': + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + + '@metaplex-foundation/beet@0.7.2': + resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==} + + '@metaplex-foundation/cusper@0.0.2': + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + + '@metaplex-foundation/mpl-token-metadata@2.13.0': + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fs@0.0.1-security: + resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + solana-bankrun-darwin-arm64@0.3.0: + resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + solana-bankrun-darwin-universal@0.3.0: + resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==} + engines: {node: '>= 10'} + os: [darwin] + + solana-bankrun-darwin-x64@0.3.0: + resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + solana-bankrun-linux-x64-gnu@0.3.0: + resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun-linux-x64-musl@0.3.0: + resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun@0.3.0: + resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==} + engines: {node: '>= 10'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet@0.7.2': + dependencies: + ansicolors: 0.3.2 + assert: 2.1.0 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/cusper@0.0.2': {} + + '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@1.1.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + emoji-regex@8.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fs.realpath@1.0.0: {} + + fs@0.0.1-security: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + make-error@1.3.6: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: + optional: true + + normalize-path@3.0.0: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + solana-bankrun-darwin-arm64@0.3.0: + optional: true + + solana-bankrun-darwin-universal@0.3.0: + optional: true + + solana-bankrun-darwin-x64@0.3.0: + optional: true + + solana-bankrun-linux-x64-gnu@0.3.0: + optional: true + + solana-bankrun-linux-x64-musl@0.3.0: + optional: true + + solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 4.0.1 + optionalDependencies: + solana-bankrun-darwin-arm64: 0.3.0 + solana-bankrun-darwin-universal: 0.3.0 + solana-bankrun-darwin-x64: 0.3.0 + solana-bankrun-linux-x64-gnu: 0.3.0 + solana-bankrun-linux-x64-musl: 0.3.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + type-detect@4.0.8: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/tokens/token-2022/default-account-state/native/program/Cargo.toml b/tokens/token-2022/default-account-state/native/program/Cargo.toml index 49ada413f..e1d06f097 100644 --- a/tokens/token-2022/default-account-state/native/program/Cargo.toml +++ b/tokens/token-2022/default-account-state/native/program/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] borsh = "0.9.3" borsh-derive = "0.9.1" -solana-program = "1.16.10" +solana-program = "1.17.25" spl-associated-token-account = { version="2.0.0", features = [ "no-entrypoint" ] } spl-token-2022 = {version = "0.7.0", features = [ "no-entrypoint" ] } diff --git a/tokens/token-2022/default-account-state/native/tests/test.ts b/tokens/token-2022/default-account-state/native/tests/test.ts index d992e4de8..f6abc2658 100644 --- a/tokens/token-2022/default-account-state/native/tests/test.ts +++ b/tokens/token-2022/default-account-state/native/tests/test.ts @@ -1,23 +1,18 @@ -import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata"; +import { Buffer } from 'node:buffer'; +import { describe, test } from 'node:test'; +import { TOKEN_2022_PROGRAM_ID } from '@solana/spl-token'; import { - Connection, Keypair, PublicKey, - SystemProgram, SYSVAR_RENT_PUBKEY, - TransactionInstruction, + SystemProgram, Transaction, + TransactionInstruction, sendAndConfirmTransaction, -} from "@solana/web3.js"; -import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - -function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require("fs").readFileSync(path, "utf-8"))) - ); -} +} from '@solana/web3.js'; +import * as borsh from 'borsh'; +import { assert } from 'chai'; +import { start } from 'solana-bankrun'; class Assignable { constructor(properties) { @@ -36,32 +31,36 @@ const CreateTokenArgsSchema = new Map([ [ CreateTokenArgs, { - kind: "struct", - fields: [["token_decimals", "u8"]], + kind: 'struct', + fields: [['token_decimals', 'u8']], }, ], ]); -describe("Create Token", async () => { - const connection = new Connection( - `https://api.devnet.solana.com/`, - "confirmed" - ); - const payer = createKeypairFromFile( - require("os").homedir() + "/.config/solana/id.json" - ); - const program = createKeypairFromFile( - "./program/target/deploy/program-keypair.json" +describe('Create Token', async () => { + const PROGRAM_ID = PublicKey.unique(); + const context = await start( + [ + { + name: 'token_2022_default_account_state_program', + programId: PROGRAM_ID, + }, + ], + [], ); + const client = context.banksClient; + const payer = context.payer; + + test('Create a Token-22 SPL-Token !', async () => { + const blockhash = context.lastBlockhash; - it("Create a Token-22 SPL-Token !", async () => { const mintKeypair: Keypair = Keypair.generate(); const instructionData = new CreateTokenArgs({ token_decimals: 9, }); - const instruction = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account @@ -70,17 +69,17 @@ describe("Create Token", async () => { { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program ], - programId: program.publicKey, + programId: PROGRAM_ID, data: instructionData.toBuffer(), }); - const signature = await sendAndConfirmTransaction( - connection, - new Transaction().add(instruction), - [payer, mintKeypair] - ); + const tx = new Transaction(); + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer, mintKeypair); + + const transaction = await client.processTransaction(tx); - console.log(`Token Mint Address: `, mintKeypair.publicKey.toBase58()); - console.log(`Transaction Signature: `, signature); + assert(transaction.logMessages[0].startsWith(`Program ${PROGRAM_ID}`)); + console.log('Token Mint Address: ', mintKeypair.publicKey.toBase58()); }); }); diff --git a/tokens/token-2022/group/anchor/migrations/deploy.ts b/tokens/token-2022/group/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/group/anchor/migrations/deploy.ts +++ b/tokens/token-2022/group/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/group/anchor/tests/group.ts b/tokens/token-2022/group/anchor/tests/group.ts index d5323d65b..5acf56410 100644 --- a/tokens/token-2022/group/anchor/tests/group.ts +++ b/tokens/token-2022/group/anchor/tests/group.ts @@ -1,8 +1,8 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { Group } from "../target/types/group"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import type { Group } from '../target/types/group'; -describe("group", () => { +describe('group', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); const connection = provider.connection; @@ -11,11 +11,8 @@ describe("group", () => { const program = anchor.workspace.Group as Program; - it("Create Mint with Group Pointer", async () => { - const transactionSignature = await program.methods - .testInitializeGroup() - .accounts({}) - .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + it('Create Mint with Group Pointer', async () => { + const transactionSignature = await program.methods.testInitializeGroup().accounts({}).rpc({ skipPreflight: true }); + console.log('Your transaction signature', transactionSignature); }); }); diff --git a/tokens/token-2022/immutable-owner/anchor/migrations/deploy.ts b/tokens/token-2022/immutable-owner/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/immutable-owner/anchor/migrations/deploy.ts +++ b/tokens/token-2022/immutable-owner/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/immutable-owner/anchor/tests/immutable-owner.ts b/tokens/token-2022/immutable-owner/anchor/tests/immutable-owner.ts index a71fa493c..a3d7067ae 100644 --- a/tokens/token-2022/immutable-owner/anchor/tests/immutable-owner.ts +++ b/tokens/token-2022/immutable-owner/anchor/tests/immutable-owner.ts @@ -1,14 +1,9 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { ImmutableOwner } from "../target/types/immutable_owner"; -import { - AuthorityType, - TOKEN_2022_PROGRAM_ID, - createMint, - setAuthority, -} from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { AuthorityType, TOKEN_2022_PROGRAM_ID, createMint, setAuthority } from '@solana/spl-token'; +import type { ImmutableOwner } from '../target/types/immutable_owner'; -describe("immutable-owner", () => { +describe('immutable-owner', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); const connection = provider.connection; @@ -19,7 +14,7 @@ describe("immutable-owner", () => { const tokenKeypair = new anchor.web3.Keypair(); - it("Create Token Account with ImmutableOwner extension", async () => { + it('Create Token Account with ImmutableOwner extension', async () => { const mint = await createMint( connection, wallet.payer, // Payer of the transaction and initialization fees @@ -28,7 +23,7 @@ describe("immutable-owner", () => { 2, // Decimals of Mint undefined, // Optional keypair undefined, // Options for confirming the transaction - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); const transactionSignature = await program.methods @@ -39,10 +34,10 @@ describe("immutable-owner", () => { }) .signers([tokenKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Attempt to change token account owner, expect fail", async () => { + it('Attempt to change token account owner, expect fail', async () => { try { await setAuthority( connection, // Connection to use @@ -53,10 +48,10 @@ describe("immutable-owner", () => { new anchor.web3.Keypair().publicKey, // Random address as new account Owner undefined, // Additional signers undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); } catch (error) { - console.log("\nExpect Error:", error.logs); + console.log('\nExpect Error:', error.logs); } }); }); diff --git a/tokens/token-2022/interest-bearing/anchor/migrations/deploy.ts b/tokens/token-2022/interest-bearing/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/interest-bearing/anchor/migrations/deploy.ts +++ b/tokens/token-2022/interest-bearing/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/interest-bearing/anchor/tests/interest-bearing.ts b/tokens/token-2022/interest-bearing/anchor/tests/interest-bearing.ts index 4baa6e555..4fde86518 100644 --- a/tokens/token-2022/interest-bearing/anchor/tests/interest-bearing.ts +++ b/tokens/token-2022/interest-bearing/anchor/tests/interest-bearing.ts @@ -1,9 +1,9 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { InterestBearing } from "../target/types/interest_bearing"; -import { TOKEN_2022_PROGRAM_ID, amountToUiAmount } from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { TOKEN_2022_PROGRAM_ID, amountToUiAmount } from '@solana/spl-token'; +import type { InterestBearing } from '../target/types/interest_bearing'; -describe("interest-bearing", () => { +describe('interest-bearing', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); const connection = provider.connection; @@ -14,7 +14,7 @@ describe("interest-bearing", () => { const mintKeypair = new anchor.web3.Keypair(); - it("Create Mint with InterestBearingConfig extension", async () => { + it('Create Mint with InterestBearingConfig extension', async () => { const rate = 0; const transactionSignature = await program.methods @@ -22,20 +22,17 @@ describe("interest-bearing", () => { .accounts({ mintAccount: mintKeypair.publicKey }) .signers([mintKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Update Mint with Interest Rate", async () => { + it('Update Mint with Interest Rate', async () => { const rate = 100; - const transactionSignature = await program.methods - .updateRate(rate) - .accounts({ mintAccount: mintKeypair.publicKey }) - .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + const transactionSignature = await program.methods.updateRate(rate).accounts({ mintAccount: mintKeypair.publicKey }).rpc({ skipPreflight: true }); + console.log('Your transaction signature', transactionSignature); }); - it("Calculate accrued interest", async () => { + it('Calculate accrued interest', async () => { await sleep(1); const amount = 1000; @@ -46,10 +43,10 @@ describe("interest-bearing", () => { wallet.payer, mintKeypair.publicKey, // Address of the Mint account amount, // Amount to be converted - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); - console.log("\nAmount with Accrued Interest:", uiAmount); + console.log('\nAmount with Accrued Interest:', uiAmount); }); }); diff --git a/tokens/token-2022/memo-transfer/anchor/migrations/deploy.ts b/tokens/token-2022/memo-transfer/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/memo-transfer/anchor/migrations/deploy.ts +++ b/tokens/token-2022/memo-transfer/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/memo-transfer/anchor/tests/memo-transfer.ts b/tokens/token-2022/memo-transfer/anchor/tests/memo-transfer.ts index 8035468d9..61a4bc578 100644 --- a/tokens/token-2022/memo-transfer/anchor/tests/memo-transfer.ts +++ b/tokens/token-2022/memo-transfer/anchor/tests/memo-transfer.ts @@ -1,17 +1,11 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { MemoTransfer } from "../target/types/memo_transfer"; -import { - TOKEN_2022_PROGRAM_ID, - createAccount, - createMint, - createTransferInstruction, - mintTo, -} from "@solana/spl-token"; -import { createMemoInstruction } from "@solana/spl-memo"; -import { Transaction, sendAndConfirmTransaction } from "@solana/web3.js"; - -describe("memo-transfer", () => { +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { createMemoInstruction } from '@solana/spl-memo'; +import { TOKEN_2022_PROGRAM_ID, createAccount, createMint, createTransferInstruction, mintTo } from '@solana/spl-token'; +import { Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; +import type { MemoTransfer } from '../target/types/memo_transfer'; + +describe('memo-transfer', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); const connection = provider.connection; @@ -23,7 +17,7 @@ describe("memo-transfer", () => { const mintKeypair = new anchor.web3.Keypair(); const tokenKeypair = new anchor.web3.Keypair(); - it("Create Token Account with RequiredMemo extension", async () => { + it('Create Token Account with RequiredMemo extension', async () => { await createMint( connection, wallet.payer, // Payer of the transaction and initialization fees @@ -32,7 +26,7 @@ describe("memo-transfer", () => { 2, // Decimals of Mint mintKeypair, // Optional keypair undefined, // Options for confirming the transaction - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); const transactionSignature = await program.methods @@ -43,10 +37,10 @@ describe("memo-transfer", () => { }) .signers([tokenKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Attempt transfer without memo, expect fail", async () => { + it('Attempt transfer without memo, expect fail', async () => { // Create a new token account to transfer to const sourceTokenAccount = await createAccount( connection, @@ -55,20 +49,10 @@ describe("memo-transfer", () => { wallet.publicKey, // Token Account owner new anchor.web3.Keypair(), // Optional keypair, undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); - await mintTo( - connection, - wallet.payer, - mintKeypair.publicKey, - sourceTokenAccount, - wallet.payer, - 1, - [], - null, - TOKEN_2022_PROGRAM_ID - ); + await mintTo(connection, wallet.payer, mintKeypair.publicKey, sourceTokenAccount, wallet.payer, 1, [], null, TOKEN_2022_PROGRAM_ID); const transferInstruction = createTransferInstruction( sourceTokenAccount, // Source Token Account @@ -76,7 +60,7 @@ describe("memo-transfer", () => { wallet.publicKey, // Source Token Account owner 1, // Amount undefined, // Additional signers - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); const transaction = new Transaction().add(transferInstruction); @@ -86,14 +70,14 @@ describe("memo-transfer", () => { await sendAndConfirmTransaction( connection, transaction, - [wallet.payer] // Signers + [wallet.payer], // Signers ); } catch (error) { - console.log("\nExpect Error:", error.logs); + console.log('\nExpect Error:', error.logs); } }); - it("Attempt transfer with memo, expect success", async () => { + it('Attempt transfer with memo, expect success', async () => { // Create a new token account to transfer to const sourceTokenAccount = await createAccount( connection, @@ -102,24 +86,12 @@ describe("memo-transfer", () => { wallet.publicKey, // Token Account owner new anchor.web3.Keypair(), // Optional keypair, default to Associated Token Account undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); - await mintTo( - connection, - wallet.payer, - mintKeypair.publicKey, - sourceTokenAccount, - wallet.payer, - 1, - [], - null, - TOKEN_2022_PROGRAM_ID - ); + await mintTo(connection, wallet.payer, mintKeypair.publicKey, sourceTokenAccount, wallet.payer, 1, [], null, TOKEN_2022_PROGRAM_ID); - const memoInstruction = createMemoInstruction("hello, world", [ - wallet.publicKey, - ]); + const memoInstruction = createMemoInstruction('hello, world', [wallet.publicKey]); const transferInstruction = createTransferInstruction( sourceTokenAccount, // Source Token Account @@ -127,34 +99,31 @@ describe("memo-transfer", () => { wallet.publicKey, // Source Token Account owner 1, // Amount undefined, // Additional signers - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); - const transaction = new Transaction().add( - memoInstruction, - transferInstruction - ); + const transaction = new Transaction().add(memoInstruction, transferInstruction); const transactionSignature = await sendAndConfirmTransaction( connection, transaction, - [wallet.payer] // Signers + [wallet.payer], // Signers ); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Disable RequiredMemo extension", async () => { + it('Disable RequiredMemo extension', async () => { const transactionSignature = await program.methods .disable() .accounts({ tokenAccount: tokenKeypair.publicKey, }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Attempt transfer without memo, expect success", async () => { + it('Attempt transfer without memo, expect success', async () => { // Create a new token account to transfer to const sourceTokenAccount = await createAccount( connection, @@ -163,20 +132,10 @@ describe("memo-transfer", () => { wallet.publicKey, // Token Account owner new anchor.web3.Keypair(), // Optional keypair, undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); - await mintTo( - connection, - wallet.payer, - mintKeypair.publicKey, - sourceTokenAccount, - wallet.payer, - 1, - [], - null, - TOKEN_2022_PROGRAM_ID - ); + await mintTo(connection, wallet.payer, mintKeypair.publicKey, sourceTokenAccount, wallet.payer, 1, [], null, TOKEN_2022_PROGRAM_ID); const transferInstruction = createTransferInstruction( sourceTokenAccount, // Source Token Account @@ -184,7 +143,7 @@ describe("memo-transfer", () => { wallet.publicKey, // Source Token Account owner 1, // Amount undefined, // Additional signers - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); const transaction = new Transaction().add(transferInstruction); @@ -192,9 +151,9 @@ describe("memo-transfer", () => { const transactionSignature = await sendAndConfirmTransaction( connection, transaction, - [wallet.payer] // Signers + [wallet.payer], // Signers ); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); }); diff --git a/tokens/token-2022/metadata/anchor/migrations/deploy.ts b/tokens/token-2022/metadata/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/metadata/anchor/migrations/deploy.ts +++ b/tokens/token-2022/metadata/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/metadata/anchor/tests/metadata.ts b/tokens/token-2022/metadata/anchor/tests/metadata.ts index 0ede2a2a8..2323476e1 100644 --- a/tokens/token-2022/metadata/anchor/tests/metadata.ts +++ b/tokens/token-2022/metadata/anchor/tests/metadata.ts @@ -1,9 +1,9 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { Metadata } from "../target/types/metadata"; -import { unpack } from "@solana/spl-token-metadata"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { unpack } from '@solana/spl-token-metadata'; +import type { Metadata } from '../target/types/metadata'; -describe("metadata", () => { +describe('metadata', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); @@ -12,52 +12,52 @@ describe("metadata", () => { const mintKeypair = new anchor.web3.Keypair(); const metadata = { - name: "OPOS", - symbol: "OPOS", - uri: "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json", + name: 'OPOS', + symbol: 'OPOS', + uri: 'https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json', }; - it("Create Mint with MetadataPointer and TokenMetadata Extensions", async () => { + it('Create Mint with MetadataPointer and TokenMetadata Extensions', async () => { const tx = await program.methods .initialize(metadata) .accounts({ mintAccount: mintKeypair.publicKey }) .signers([mintKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", tx); + console.log('Your transaction signature', tx); }); - it("Update existing metadata field", async () => { + it('Update existing metadata field', async () => { // Add your test here. const tx = await program.methods .updateField({ field: { name: {} }, // Update the name field - value: "Solana", + value: 'Solana', }) .accounts({ mintAccount: mintKeypair.publicKey }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", tx); + console.log('Your transaction signature', tx); }); - it("Update metadata with custom field", async () => { + it('Update metadata with custom field', async () => { const tx = await program.methods .updateField({ - field: { key: { 0: "color" } }, // Add a custom field named "color" - value: "red", + field: { key: { 0: 'color' } }, // Add a custom field named "color" + value: 'red', }) .accounts({ mintAccount: mintKeypair.publicKey }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", tx); + console.log('Your transaction signature', tx); }); - it("Remove custom field", async () => { + it('Remove custom field', async () => { const tx = await program.methods - .removeKey("color") // Remove the custom field named "color" + .removeKey('color') // Remove the custom field named "color" .accounts({ mintAccount: mintKeypair.publicKey }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", tx); + console.log('Your transaction signature', tx); }); - it("Change update authority", async () => { + it('Change update authority', async () => { const tx = await program.methods .updateAuthority() .accounts({ @@ -65,53 +65,45 @@ describe("metadata", () => { newAuthority: null, // Set the update authority to null }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", tx); + console.log('Your transaction signature', tx); }); - it("Emit metadata, decode transaction logs", async () => { + it('Emit metadata, decode transaction logs', async () => { const txSignature = await program.methods .emit() .accounts({ mintAccount: mintKeypair.publicKey }) - .rpc({ commitment: "confirmed", skipPreflight: true }); - console.log("Your transaction signature", txSignature); + .rpc({ commitment: 'confirmed', skipPreflight: true }); + console.log('Your transaction signature', txSignature); // Fetch the transaction response - const transactionResponse = await provider.connection.getTransaction( - txSignature, - { - commitment: "confirmed", - } - ); + const transactionResponse = await provider.connection.getTransaction(txSignature, { + commitment: 'confirmed', + }); // Extract the log message that starts with "Program return:" - const prefix = "Program return: "; - let log = transactionResponse.meta.logMessages.find((log) => - log.startsWith(prefix) - ); + const prefix = 'Program return: '; + let log = transactionResponse.meta.logMessages.find((log) => log.startsWith(prefix)); log = log.slice(prefix.length); - const [_, data] = log.split(" ", 2); + const [_, data] = log.split(' ', 2); // Decode the data from base64 and unpack it into TokenMetadata - const buffer = Buffer.from(data, "base64"); + const buffer = Buffer.from(data, 'base64'); const metadata = unpack(buffer); - console.log("Metadata", metadata); + console.log('Metadata', metadata); }); - it("Emit metadata, decode simulated transaction", async () => { - const simulateResponse = await program.methods - .emit() - .accounts({ mintAccount: mintKeypair.publicKey }) - .simulate(); + it('Emit metadata, decode simulated transaction', async () => { + const simulateResponse = await program.methods.emit().accounts({ mintAccount: mintKeypair.publicKey }).simulate(); // Extract the log message that starts with "Program return:" - const prefix = "Program return: "; + const prefix = 'Program return: '; let log = simulateResponse.raw.find((log) => log.startsWith(prefix)); log = log.slice(prefix.length); - const [_, data] = log.split(" ", 2); + const [_, data] = log.split(' ', 2); // Decode the data from base64 and unpack it into TokenMetadata - const buffer = Buffer.from(data, "base64"); + const buffer = Buffer.from(data, 'base64'); const metadata = unpack(buffer); - console.log("Metadata", metadata); + console.log('Metadata', metadata); }); }); diff --git a/tokens/token-2022/mint-close-authority/anchor/migrations/deploy.ts b/tokens/token-2022/mint-close-authority/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/mint-close-authority/anchor/migrations/deploy.ts +++ b/tokens/token-2022/mint-close-authority/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/mint-close-authority/anchor/tests/mint-close-authority.ts b/tokens/token-2022/mint-close-authority/anchor/tests/mint-close-authority.ts index 9de1a4652..35f84e89e 100644 --- a/tokens/token-2022/mint-close-authority/anchor/tests/mint-close-authority.ts +++ b/tokens/token-2022/mint-close-authority/anchor/tests/mint-close-authority.ts @@ -1,47 +1,43 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { MintCloseAuthority } from "../target/types/mint_close_authority"; -import { TOKEN_2022_PROGRAM_ID, closeAccount } from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { TOKEN_2022_PROGRAM_ID, closeAccount } from '@solana/spl-token'; +import type { MintCloseAuthority } from '../target/types/mint_close_authority'; -describe("mint-close-authority", () => { +describe('mint-close-authority', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); const connection = provider.connection; const wallet = provider.wallet as anchor.Wallet; anchor.setProvider(provider); - const program = anchor.workspace - .MintCloseAuthority as Program; + const program = anchor.workspace.MintCloseAuthority as Program; const mintKeypair = new anchor.web3.Keypair(); - it("Create Mint with Close Authority", async () => { + it('Create Mint with Close Authority', async () => { const transactionSignature = await program.methods .initialize() .accounts({ mintAccount: mintKeypair.publicKey }) .signers([mintKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Close Mint with Anchor CPI", async () => { - const transactionSignature = await program.methods - .close() - .accounts({ mintAccount: mintKeypair.publicKey }) - .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + it('Close Mint with Anchor CPI', async () => { + const transactionSignature = await program.methods.close().accounts({ mintAccount: mintKeypair.publicKey }).rpc({ skipPreflight: true }); + console.log('Your transaction signature', transactionSignature); }); - it("Create Mint with Close Authority again", async () => { + it('Create Mint with Close Authority again', async () => { const transactionSignature = await program.methods .initialize() .accounts({ mintAccount: mintKeypair.publicKey }) .signers([mintKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Close Mint using @solana/spl-token", async () => { + it('Close Mint using @solana/spl-token', async () => { const transactionSignature = await closeAccount( connection, wallet.payer, // Transaction fee payer @@ -50,8 +46,8 @@ describe("mint-close-authority", () => { wallet.publicKey, // Close Authority for Mint Account undefined, // Additional signers undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); }); diff --git a/tokens/token-2022/mint-close-authority/native/package.json b/tokens/token-2022/mint-close-authority/native/package.json index 3adfa05b1..5de902719 100644 --- a/tokens/token-2022/mint-close-authority/native/package.json +++ b/tokens/token-2022/mint-close-authority/native/package.json @@ -1,6 +1,9 @@ { "scripts": { - "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts" + "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts", + "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test", + "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so", + "deploy": "solana program deploy ./program/target/so/program.so" }, "dependencies": { "@metaplex-foundation/mpl-token-metadata": "^2.5.2", @@ -14,8 +17,9 @@ "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.1", "@types/mocha": "^9.1.1", - "chai": "^4.3.4", + "chai": "^4.4.1", "mocha": "^9.0.3", + "solana-bankrun": "^0.3.0", "ts-mocha": "^10.0.0", "typescript": "^4.3.5" } diff --git a/tokens/token-2022/mint-close-authority/native/pnpm-lock.yaml b/tokens/token-2022/mint-close-authority/native/pnpm-lock.yaml new file mode 100644 index 000000000..164085a92 --- /dev/null +++ b/tokens/token-2022/mint-close-authority/native/pnpm-lock.yaml @@ -0,0 +1,1780 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@metaplex-foundation/mpl-token-metadata': + specifier: ^2.5.2 + version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-token': + specifier: ^0.3.7 + version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: ^1.73.0 + version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + borsh: + specifier: ^0.7.0 + version: 0.7.0 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + fs: + specifier: ^0.0.1-security + version: 0.0.1-security + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.1 + version: 4.3.16 + '@types/mocha': + specifier: ^9.1.1 + version: 9.1.1 + chai: + specifier: ^4.4.1 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + solana-bankrun: + specifier: ^0.3.0 + version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@metaplex-foundation/beet-solana@0.4.1': + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + + '@metaplex-foundation/beet@0.7.2': + resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==} + + '@metaplex-foundation/cusper@0.0.2': + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + + '@metaplex-foundation/mpl-token-metadata@2.13.0': + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fs@0.0.1-security: + resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + solana-bankrun-darwin-arm64@0.3.0: + resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + solana-bankrun-darwin-universal@0.3.0: + resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==} + engines: {node: '>= 10'} + os: [darwin] + + solana-bankrun-darwin-x64@0.3.0: + resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + solana-bankrun-linux-x64-gnu@0.3.0: + resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun-linux-x64-musl@0.3.0: + resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun@0.3.0: + resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==} + engines: {node: '>= 10'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet@0.7.2': + dependencies: + ansicolors: 0.3.2 + assert: 2.1.0 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/cusper@0.0.2': {} + + '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@1.1.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + emoji-regex@8.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fs.realpath@1.0.0: {} + + fs@0.0.1-security: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + make-error@1.3.6: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: + optional: true + + normalize-path@3.0.0: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + solana-bankrun-darwin-arm64@0.3.0: + optional: true + + solana-bankrun-darwin-universal@0.3.0: + optional: true + + solana-bankrun-darwin-x64@0.3.0: + optional: true + + solana-bankrun-linux-x64-gnu@0.3.0: + optional: true + + solana-bankrun-linux-x64-musl@0.3.0: + optional: true + + solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 4.0.1 + optionalDependencies: + solana-bankrun-darwin-arm64: 0.3.0 + solana-bankrun-darwin-universal: 0.3.0 + solana-bankrun-darwin-x64: 0.3.0 + solana-bankrun-linux-x64-gnu: 0.3.0 + solana-bankrun-linux-x64-musl: 0.3.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + type-detect@4.0.8: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/tokens/token-2022/mint-close-authority/native/tests/test.ts b/tokens/token-2022/mint-close-authority/native/tests/test.ts index 66a7a4677..0a210ffe6 100644 --- a/tokens/token-2022/mint-close-authority/native/tests/test.ts +++ b/tokens/token-2022/mint-close-authority/native/tests/test.ts @@ -1,23 +1,10 @@ -import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata"; -import { - Connection, - Keypair, - PublicKey, - SystemProgram, - SYSVAR_RENT_PUBKEY, - TransactionInstruction, - Transaction, - sendAndConfirmTransaction, -} from "@solana/web3.js"; -import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - -function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require("fs").readFileSync(path, "utf-8"))) - ); -} +import { Buffer } from 'node:buffer'; +import { describe, test } from 'node:test'; +import { TOKEN_2022_PROGRAM_ID } from '@solana/spl-token'; +import { Keypair, PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; +import { assert } from 'chai'; +import { start } from 'solana-bankrun'; class Assignable { constructor(properties) { @@ -36,32 +23,34 @@ const CreateTokenArgsSchema = new Map([ [ CreateTokenArgs, { - kind: "struct", - fields: [["token_decimals", "u8"]], + kind: 'struct', + fields: [['token_decimals', 'u8']], }, ], ]); -describe("Create Token", async () => { - const connection = new Connection( - `https://api.devnet.solana.com/`, - "confirmed" - ); - const payer = createKeypairFromFile( - require("os").homedir() + "/.config/solana/id.json" - ); - const program = createKeypairFromFile( - "./program/target/deploy/program-keypair.json" +describe('Create Token', async () => { + const PROGRAM_ID = PublicKey.unique(); + const context = await start( + [ + { + name: 'token_2022_mint_close_authority_program', + programId: PROGRAM_ID, + }, + ], + [], ); + const client = context.banksClient; + const payer = context.payer; - it("Create a Token-22 SPL-Token !", async () => { + test('Create a Token-22 SPL-Token !', async () => { const mintKeypair: Keypair = Keypair.generate(); const instructionData = new CreateTokenArgs({ token_decimals: 9, }); - const instruction = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account @@ -71,17 +60,18 @@ describe("Create Token", async () => { { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program ], - programId: program.publicKey, + programId: PROGRAM_ID, data: instructionData.toBuffer(), }); + const blockhash = context.lastBlockhash; + + const tx = new Transaction(); + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer, mintKeypair); - const signature = await sendAndConfirmTransaction( - connection, - new Transaction().add(instruction), - [payer, mintKeypair] - ); + const transaction = await client.processTransaction(tx); - console.log(`Token Mint Address: `, mintKeypair.publicKey.toBase58()); - console.log(`Transaction Signature: `, signature); + assert(transaction.logMessages[0].startsWith(`Program ${PROGRAM_ID}`)); + console.log('Token Mint Address: ', mintKeypair.publicKey.toBase58()); }); }); diff --git a/tokens/token-2022/multiple-extensions/native/package.json b/tokens/token-2022/multiple-extensions/native/package.json index 3adfa05b1..48fb3d18f 100644 --- a/tokens/token-2022/multiple-extensions/native/package.json +++ b/tokens/token-2022/multiple-extensions/native/package.json @@ -1,6 +1,9 @@ { "scripts": { - "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts" + "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts", + "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test", + "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so", + "deploy": "solana program deploy ./program/target/so/hello_solana_program.so" }, "dependencies": { "@metaplex-foundation/mpl-token-metadata": "^2.5.2", @@ -14,8 +17,9 @@ "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.1", "@types/mocha": "^9.1.1", - "chai": "^4.3.4", + "chai": "^4.4.1", "mocha": "^9.0.3", + "solana-bankrun": "^0.3.0", "ts-mocha": "^10.0.0", "typescript": "^4.3.5" } diff --git a/tokens/token-2022/multiple-extensions/native/pnpm-lock.yaml b/tokens/token-2022/multiple-extensions/native/pnpm-lock.yaml new file mode 100644 index 000000000..164085a92 --- /dev/null +++ b/tokens/token-2022/multiple-extensions/native/pnpm-lock.yaml @@ -0,0 +1,1780 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@metaplex-foundation/mpl-token-metadata': + specifier: ^2.5.2 + version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-token': + specifier: ^0.3.7 + version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: ^1.73.0 + version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + borsh: + specifier: ^0.7.0 + version: 0.7.0 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + fs: + specifier: ^0.0.1-security + version: 0.0.1-security + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.1 + version: 4.3.16 + '@types/mocha': + specifier: ^9.1.1 + version: 9.1.1 + chai: + specifier: ^4.4.1 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + solana-bankrun: + specifier: ^0.3.0 + version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@metaplex-foundation/beet-solana@0.4.1': + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + + '@metaplex-foundation/beet@0.7.2': + resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==} + + '@metaplex-foundation/cusper@0.0.2': + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + + '@metaplex-foundation/mpl-token-metadata@2.13.0': + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fs@0.0.1-security: + resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + solana-bankrun-darwin-arm64@0.3.0: + resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + solana-bankrun-darwin-universal@0.3.0: + resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==} + engines: {node: '>= 10'} + os: [darwin] + + solana-bankrun-darwin-x64@0.3.0: + resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + solana-bankrun-linux-x64-gnu@0.3.0: + resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun-linux-x64-musl@0.3.0: + resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun@0.3.0: + resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==} + engines: {node: '>= 10'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet@0.7.2': + dependencies: + ansicolors: 0.3.2 + assert: 2.1.0 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/cusper@0.0.2': {} + + '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@1.1.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + emoji-regex@8.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fs.realpath@1.0.0: {} + + fs@0.0.1-security: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + make-error@1.3.6: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: + optional: true + + normalize-path@3.0.0: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + solana-bankrun-darwin-arm64@0.3.0: + optional: true + + solana-bankrun-darwin-universal@0.3.0: + optional: true + + solana-bankrun-darwin-x64@0.3.0: + optional: true + + solana-bankrun-linux-x64-gnu@0.3.0: + optional: true + + solana-bankrun-linux-x64-musl@0.3.0: + optional: true + + solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 4.0.1 + optionalDependencies: + solana-bankrun-darwin-arm64: 0.3.0 + solana-bankrun-darwin-universal: 0.3.0 + solana-bankrun-darwin-x64: 0.3.0 + solana-bankrun-linux-x64-gnu: 0.3.0 + solana-bankrun-linux-x64-musl: 0.3.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + type-detect@4.0.8: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/tokens/token-2022/multiple-extensions/native/program/Cargo.toml b/tokens/token-2022/multiple-extensions/native/program/Cargo.toml index bd3762735..346446fc8 100644 --- a/tokens/token-2022/multiple-extensions/native/program/Cargo.toml +++ b/tokens/token-2022/multiple-extensions/native/program/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] borsh = "0.9.3" borsh-derive = "0.9.1" -solana-program = "1.16.10" +solana-program = "1.17.25" spl-associated-token-account = { version="2.0.0", features = [ "no-entrypoint" ] } spl-token-2022 = {version = "0.7.0", features = [ "no-entrypoint" ] } diff --git a/tokens/token-2022/multiple-extensions/native/tests/test.ts b/tokens/token-2022/multiple-extensions/native/tests/test.ts index 66a7a4677..0b2699233 100644 --- a/tokens/token-2022/multiple-extensions/native/tests/test.ts +++ b/tokens/token-2022/multiple-extensions/native/tests/test.ts @@ -1,23 +1,10 @@ -import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata"; -import { - Connection, - Keypair, - PublicKey, - SystemProgram, - SYSVAR_RENT_PUBKEY, - TransactionInstruction, - Transaction, - sendAndConfirmTransaction, -} from "@solana/web3.js"; -import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - -function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require("fs").readFileSync(path, "utf-8"))) - ); -} +import { Buffer } from 'node:buffer'; +import { describe, test } from 'node:test'; +import { TOKEN_2022_PROGRAM_ID } from '@solana/spl-token'; +import { Keypair, PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; +import { assert } from 'chai'; +import { start } from 'solana-bankrun'; class Assignable { constructor(properties) { @@ -36,32 +23,27 @@ const CreateTokenArgsSchema = new Map([ [ CreateTokenArgs, { - kind: "struct", - fields: [["token_decimals", "u8"]], + kind: 'struct', + fields: [['token_decimals', 'u8']], }, ], ]); -describe("Create Token", async () => { - const connection = new Connection( - `https://api.devnet.solana.com/`, - "confirmed" - ); - const payer = createKeypairFromFile( - require("os").homedir() + "/.config/solana/id.json" - ); - const program = createKeypairFromFile( - "./program/target/deploy/program-keypair.json" - ); +describe('Create Token', async () => { + const PROGRAM_ID = PublicKey.unique(); + const context = await start([{ name: 'token_2022_multiple_extensions_program', programId: PROGRAM_ID }], []); + const client = context.banksClient; + const payer = context.payer; - it("Create a Token-22 SPL-Token !", async () => { + test('Create a Token-22 SPL-Token !', async () => { + const blockhash = context.lastBlockhash; const mintKeypair: Keypair = Keypair.generate(); const instructionData = new CreateTokenArgs({ token_decimals: 9, }); - const instruction = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account @@ -71,17 +53,17 @@ describe("Create Token", async () => { { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program ], - programId: program.publicKey, + programId: PROGRAM_ID, data: instructionData.toBuffer(), }); - const signature = await sendAndConfirmTransaction( - connection, - new Transaction().add(instruction), - [payer, mintKeypair] - ); + const tx = new Transaction(); + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer, mintKeypair); + + const transaction = await client.processTransaction(tx); - console.log(`Token Mint Address: `, mintKeypair.publicKey.toBase58()); - console.log(`Transaction Signature: `, signature); + assert(transaction.logMessages[0].startsWith(`Program ${PROGRAM_ID}`)); + console.log('Token Mint Address: ', mintKeypair.publicKey.toBase58()); }); }); diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/README.md b/tokens/token-2022/nft-meta-data-pointer/anchor-example/README.md similarity index 92% rename from tokens/token-2022/nft-meta-data-pointer/anchor/README.md rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/README.md index b530d9d7b..090f97548 100644 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/README.md +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/README.md @@ -1,16 +1,16 @@ -## Token Extension MetaData Pointer NFT +## Token Extension MetaData Pointer NFT This is a simple example of a program that creates a NFT using the new token extension program and facilitating the token extension meta data pointer. The cool thing about this especially for games is that we can now have additional metadata fields on chain as a key value store which can be used to save the state of the game character. In this example we save the level and the collected wood of the player. -This opens all kind of interesting possibilities for games. You can for example save the level and xp of the player, the current weapon and armor, the current quest and so on. When market places will eventually support additional meta data the nfts could be filtered and ordered by the meta data fields and NFTs with better values like higher level could potentially gain more value by playing. +This opens all kind of interesting possibilities for games. You can for example save the level and xp of the player, the current weapon and armor, the current quest and so on. When market places will eventually support additional meta data the nfts could be filtered and ordered by the meta data fields and NFTs with better values like higher level could potentially gain more value by playing. -The nft will be created in an anchor program so it is very easy to mint from the js client. The name, uri and symbol are saved in the meta data extension which is pointed to the mint. +The nft will be created in an anchor program so it is very easy to mint from the js client. The name, uri and symbol are saved in the meta data extension which is pointed to the mint. The nft will have a name, symbol and a uri. The uri is a link to a json file which contains the meta data of the nft. -There is a video walkthrough of this example on the Solana Foundation Youtube channel. +There is a video walkthrough of this example on the Solana Foundation Youtube channel. [![Solana Foundation Youtube channel]](https://www.youtube.com/@SolanaFndn/videos) @@ -25,7 +25,7 @@ anchor test --detach Then you can set your https://solana.explorer.com url to local net an look at the transactions. -The program is also already deployed to dev net so you can try it out on dev net. +The program is also already deployed to dev net so you can try it out on dev net. Starting the js client ```shell @@ -34,9 +34,9 @@ yarn install yarn dev ``` -# Minting the NFT +# Minting the NFT -For the creating of the NFT we perform the following steps: +For the creating of the NFT we perform the following steps: 1. Create a mint account 2. Initialize the mint account @@ -54,10 +54,10 @@ Here is the rust code for the minting of the NFT: let space = ExtensionType::try_calculate_account_len::( &[ExtensionType::MetadataPointer]) .unwrap(); - - // This is the space required for the metadata account. - // We put the meta data into the mint account at the end so we - // don't need to create and additional account. + + // This is the space required for the metadata account. + // We put the meta data into the mint account at the end so we + // don't need to create and additional account. let meta_data_space = 250; let lamports_required = (Rent::get()?).minimum_balance(space + meta_data_space); @@ -93,7 +93,7 @@ let space = ExtensionType::try_calculate_account_len::( )?; // Initialize the metadata pointer (Need to do this before initializing the mint) - let init_meta_data_pointer_ix = + let init_meta_data_pointer_ix = spl_token_2022::extension::metadata_pointer::instruction::initialize( &Token2022::id(), &ctx.accounts.mint.key(), @@ -101,7 +101,7 @@ let space = ExtensionType::try_calculate_account_len::( Some(ctx.accounts.mint.key()), ) .unwrap(); - + invoke( &init_meta_data_pointer_ix, &[ @@ -109,7 +109,7 @@ let space = ExtensionType::try_calculate_account_len::( ctx.accounts.nft_authority.to_account_info() ], )?; - + // Initialize the mint cpi let mint_cpi_ix = CpiContext::new( ctx.accounts.token_program.to_account_info(), @@ -123,8 +123,8 @@ let space = ExtensionType::try_calculate_account_len::( 0, &ctx.accounts.nft_authority.key(), None).unwrap(); - - // We use a PDA as a mint authority for the metadata account because + + // We use a PDA as a mint authority for the metadata account because // we want to be able to update the NFT from the program. let seeds = b"nft_authority"; let bump = ctx.bumps.nft_authority; @@ -133,7 +133,7 @@ let space = ExtensionType::try_calculate_account_len::( msg!("Init metadata {0}", ctx.accounts.nft_authority.to_account_info().key); // Init the metadata account - let init_token_meta_data_ix = + let init_token_meta_data_ix = &spl_token_metadata_interface::instruction::initialize( &spl_token_2022::id(), ctx.accounts.mint.key, @@ -213,7 +213,7 @@ let space = ExtensionType::try_calculate_account_len::( -The example is based on the Solana Games Preset +The example is based on the Solana Games Preset ```shell npx create-solana-game gamName @@ -221,28 +221,28 @@ npx create-solana-game gamName # Solana Game Preset -This game is ment as a starter game for on chain games. +This game is ment as a starter game for on chain games. There is a js and a unity client for this game and both are talking to a solana anchor program. -This game uses gum session keys for auto approval of transactions. -Note that neither the program nor session keys are audited. Use at your own risk. +This game uses gum session keys for auto approval of transactions. +Note that neither the program nor session keys are audited. Use at your own risk. # How to run this example ## Quickstart -The unity client and the js client are both connected to the same program and should work out of the box connecting to the already deployed program. +The unity client and the js client are both connected to the same program and should work out of the box connecting to the already deployed program. -### Unity +### Unity Open the Unity project with Unity Version 2021.3.32.f1 (or similar), open the GameScene or LoginScene and hit play. Use the editor login button in the bottom left. If you cant get devnet sol you can copy your address from the console and use the faucet here: https://faucet.solana.com/ to request some sol. ### Js Client -To start the js client open the project in visual studio code and run: +To start the js client open the project in visual studio code and run: ```bash -cd app -yarn install +cd app +yarn install yarn dev ``` @@ -256,7 +256,7 @@ sh -c "$(curl -sSfL https://release.solana.com/v1.16.18/install)" Anchor program 1. Install the [Anchor CLI](https://project-serum.github.io/anchor/getting-started/installation.html) -2. `cd program` to end the program directory +2. `cd anchor` to end the program directory 3. Run `anchor build` to build the program 4. Run `anchor deploy` to deploy the program 5. Copy the program id from the terminal into the lib.rs, anchor.toml and within the unity project in the AnchorService and if you use js in the anchor.ts file @@ -270,15 +270,15 @@ Next js client 4. Run `yarn dev` to start the client 5. After doing changes to the anchor program make sure to copy over the types from the program into the client so you can use them. You can find the js types in the target/idl folder. -Unity client +Unity client 1. Install [Unity](https://unity.com/) 2. Open the MainScene 3. Hit play 4. After doing changes to the anchor program make sure to regenerate the C# client: https://solanacookbook.com/gaming/porting-anchor-to-unity.html#generating-the-client -Its done like this (after you have build the program): +Its done like this (after you have build the program): ```bash -cd program +cd program dotnet tool install Solana.Unity.Anchor.Tool <- run once dotnet anchorgen -i target/idl/extension_nft.json -o target/idl/ExtensionNft.cs ``` @@ -288,15 +288,15 @@ dotnet anchorgen -i target/idl/extension_nft.json -o target/idl/ExtensionNft.cs then copy the c# code into the unity project. ## Connect to local host (optional) -To connect to local host from Unity add these links on the wallet holder game object: +To connect to local host from Unity add these links on the wallet holder game object: http://localhost:8899 ws://localhost:8900 ## Video walkthroughs -Here are two videos explaining the energy logic and session keys: +Here are two videos explaining the energy logic and session keys: Session keys: https://www.youtube.com/watch?v=oKvWZoybv7Y&t=17s&ab_channel=Solana -Energy system: +Energy system: https://www.youtube.com/watch?v=YYQtRCXJBgs&t=4s&ab_channel=Solana # Project structure @@ -325,23 +325,23 @@ The instructions then call the state to get the data and update it. ``` -The project uses session keys (maintained by Magic Block) for auto approving transactions using an expiring token. +The project uses session keys (maintained by Magic Block) for auto approving transactions using an expiring token. -# Energy System +# Energy System Many casual games in traditional gaming use energy systems. This is how you can build it on chain. -If you have no prior knowledge in solana and rust programming it is recommended to start with the Solana cookbook [Hello world example]([https://unity.com/](https://solanacookbook.com/gaming/hello-world.html#getting-started-with-your-first-solana-game)). +If you have no prior knowledge in solana and rust programming it is recommended to start with the Solana cookbook [Hello world example]([https://unity.com/](https://solanacookbook.com/gaming/hello-world.html#getting-started-with-your-first-solana-game)). -## Anchor program +## Anchor program -Here we will build a program which refills energy over time which the player can then use to perform actions in the game. -In our example it will be a lumber jack which chops trees. Every tree will reward on wood and cost one energy. +Here we will build a program which refills energy over time which the player can then use to perform actions in the game. +In our example it will be a lumber jack which chops trees. Every tree will reward on wood and cost one energy. ### Creating the player account -First the player needs to create an account which saves the state of our player. Notice the last_login time which will save the current unix time stamp of the player he interacts with the program. -Like this we will be able to calculate how much energy the player has at a certain point in time. +First the player needs to create an account which saves the state of our player. Notice the last_login time which will save the current unix time stamp of the player he interacts with the program. +Like this we will be able to calculate how much energy the player has at a certain point in time. We also have a value for wood which will store the wood the lumber jack chucks in the game. ```rust @@ -381,7 +381,7 @@ pub struct InitPlayer<'info> { ### Chopping trees -Then whenever the player calls the chop_tree instruction we will check if the player has enough energy and reward him with one wood. +Then whenever the player calls the chop_tree instruction we will check if the player has enough energy and reward him with one wood. ```rust #[error_code] @@ -407,9 +407,9 @@ Then whenever the player calls the chop_tree instruction we will check if the pl ### Calculating the energy -The interesting part happens in the update_energy function. We check how much time has passed and calculate the energy that the player will have at the given time. -The same thing we will also do in the client. So we basically lazily update the energy instead of polling it all the time. -The is a common technic in game development. +The interesting part happens in the update_energy function. We check how much time has passed and calculate the energy that the player will have at the given time. +The same thing we will also do in the client. So we basically lazily update the energy instead of polling it all the time. +The is a common technic in game development. ```rust @@ -442,7 +442,7 @@ pub fn update_energy(&mut self) -> Result<()> { } ``` -## Js client +## Js client ### Subscribe to account updates @@ -452,7 +452,7 @@ It is possible to subscribe to account updates via a websocket. This get updates useEffect(() => { if (!publicKey) {return;} const [pda] = PublicKey.findProgramAddressSync( - [Buffer.from("player", "utf8"), + [Buffer.from("player", "utf8"), publicKey.toBuffer()], new PublicKey(ExtensionNft_PROGRAM_ID) ); @@ -463,7 +463,7 @@ useEffect(() => { } catch (e) { window.alert("No player data found, please init!"); } - + connection.onAccountChange(pda, (account) => { setGameState(program.coder.accounts.decode("playerData", account.data)); }); @@ -504,25 +504,25 @@ const interval = setInterval(async () => { {(gameState &&
{("Wood: " + gameState.wood + " Energy: " + gameState.energy + " Next energy in: " + nextEnergyIn )} -
)} +)} ``` -## Unity client +## Unity client -In the Unity client everything interesting happens in the AnchorService. +In the Unity client everything interesting happens in the AnchorService. To generate the client code you can follow the instructions here: https://solanacookbook.com/gaming/porting-anchor-to-unity.html#generating-the-client ```bash -cd program +cd program dotnet tool install Solana.Unity.Anchor.Tool <- run once dotnet anchorgen -i target/idl/extension_nft.json -o target/idl/ExtensionNft.cs ``` ### Session keys -Session keys is an optional component. What it does is creating a local key pair which is toped up with some sol which can be used to autoapprove transactions. The session token is only allowed on certain functions of the program and has an expiry of 23 hours. Then the player will get the sol back and can create a new session. +Session keys is an optional component. What it does is creating a local key pair which is toped up with some sol which can be used to autoapprove transactions. The session token is only allowed on certain functions of the program and has an expiry of 23 hours. Then the player will get the sol back and can create a new session. With this you can now build any energy based game and even if someone builds a bot for the game the most he can do is play optimally, which maybe even easier to achieve when playing normally depending on the logic of your game. -This game becomes even better when combined with the Token example from Solana Cookbook and you actually drop some spl token to the players. +This game becomes even better when combined with the Token example from Solana Cookbook and you actually drop some spl token to the players. diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/.gitignore b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/.gitignore similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/.gitignore rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/.gitignore diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/.prettierignore b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/.prettierignore similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/.prettierignore rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/.prettierignore diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/Anchor.toml b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/Anchor.toml similarity index 77% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/Anchor.toml rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/Anchor.toml index f9acb53c0..c09a67d5a 100644 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/program/Anchor.toml +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/Anchor.toml @@ -11,4 +11,4 @@ cluster = "localnet" wallet = "~/.config/solana/id.json" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/Cargo.toml b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/Cargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/Cargo.toml rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/Cargo.toml diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/README.md b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/README.md similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/README.md rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/README.md diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/migrations/deploy.ts b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/migrations/deploy.ts similarity index 77% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/migrations/deploy.ts rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/migrations/deploy.ts index 82fb175fa..0a1222c93 100644 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/migrations/deploy.ts +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@project-serum/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/package.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/package.json new file mode 100644 index 000000000..65d88acfe --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/package.json @@ -0,0 +1,23 @@ +{ + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.0", + "@coral-xyz/spl-token": "0.30.0", + "@solana/spl-token": "^0.4.0" + }, + "devDependencies": { + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "browserify-sign": ">=4.2.2", + "chai": "^4.3.4", + "crypto-js": ">=4.2.0", + "mocha": "^9.0.3", + "prettier": "^2.6.2", + "ts-mocha": "^10.0.0", + "typescript": "^4.3.5" + } +} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/pnpm-lock.yaml b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/pnpm-lock.yaml new file mode 100644 index 000000000..99189c09f --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/pnpm-lock.yaml @@ -0,0 +1,1802 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: ^0.30.0 + version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@coral-xyz/spl-token': + specifier: 0.30.0 + version: 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token': + specifier: ^0.4.0 + version: 0.4.6(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.16 + '@types/mocha': + specifier: ^9.0.0 + version: 9.1.1 + browserify-sign: + specifier: '>=4.2.2' + version: 4.2.3 + chai: + specifier: ^4.3.4 + version: 4.4.1 + crypto-js: + specifier: '>=4.2.0' + version: 4.2.0 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + prettier: + specifier: ^2.6.2 + version: 2.8.8 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@coral-xyz/anchor@0.30.0': + resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.30.0': + resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@coral-xyz/spl-token@0.30.0': + resolution: {integrity: sha512-NIGhvqeImeLT4Y30ZymU066dKL95/ssa3hs0hCwBBumhIdH77P6ESXjuhoBuU89EYrARXHlWscq8+wEIEItggw==} + + '@native-to-anchor/buffer-layout@0.1.0': + resolution: {integrity: sha512-7Ykz9KRAm53XqHj5blDUKPX+OXAPO4GZBW4zJhfHGIAbzmqsUFh9kMqR66Bak3mp6wyv1OVTwSr8ZGHKswPxDg==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.0': + resolution: {integrity: sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==} + engines: {node: '>=5.10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-token-group@0.0.4': + resolution: {integrity: sha512-7+80nrEMdUKlK37V6kOe024+T7J4nNss0F8LQ9OOPYdWCCfJmsGUzVx2W3oeizZR4IHM6N4yC9v1Xqwc3BTPWw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.4.6': + resolution: {integrity: sha512-1nCnUqfHVtdguFciVWaY/RKcQz1IF4b31jnKgAmjU9QVN1q7dRUkTEWJZgTYIEtsULjVnC9jRqlhgGN39WbKKA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + 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'} + + asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + 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'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserify-rsa@4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + + browserify-sign@4.2.3: + resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} + engines: {node: '>= 0.12'} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + elliptic@6.5.5: + resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + 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'} + + hash-base@3.0.4: + resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + 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'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + parse-asn1@5.1.7: + resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} + engines: {node: '>= 0.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==} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + 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'} + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@coral-xyz/anchor@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.4.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.1.8 + crypto-hash: 1.3.0 + eventemitter3: 4.0.7 + pako: 2.1.0 + snake-case: 3.0.4 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer-layout: 1.2.2 + + '@coral-xyz/spl-token@0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor': 0.30.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@native-to-anchor/buffer-layout': 0.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@native-to-anchor/buffer-layout@0.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.0 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.0': + dependencies: + buffer: 6.0.3 + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-token-group@0.0.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.4.6(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + asn1.js@4.10.1: + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + assertion-error@1.1.0: {} + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@4.12.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 + + brorand@1.1.0: {} + + browser-stdout@1.3.1: {} + + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserify-rsa@4.1.0: + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + + browserify-sign@4.2.3: + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.5 + hash-base: 3.0.4 + inherits: 2.0.4 + parse-asn1: 5.1.7 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + buffer-from@1.1.2: {} + + buffer-layout@1.2.2: {} + + buffer-xor@1.0.3: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cipher-base@1.0.4: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + core-util-is@1.0.3: {} + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + cross-fetch@3.1.8: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + crypto-hash@1.3.0: {} + + crypto-js@4.2.0: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + + elliptic@6.5.5: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emoji-regex@8.0.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + hash-base@3.0.4: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + he@1.2.0: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + 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: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lower-case@2.0.2: + dependencies: + tslib: 2.6.2 + + make-error@1.3.6: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.0.4 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: + optional: true + + normalize-path@3.0.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + pako@2.1.0: {} + + parse-asn1@5.1.7: + dependencies: + asn1.js: 4.10.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + hash-base: 3.0.4 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + pbkdf2@3.1.2: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + picomatch@2.3.1: {} + + prettier@2.8.8: {} + + process-nextick-args@2.0.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + ripemd160@2.0.2: + dependencies: + hash-base: 3.0.4 + inherits: 2.0.4 + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + superstruct@0.15.5: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toml@3.0.0: {} + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + tslib@2.6.2: {} + + type-detect@4.0.8: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/Cargo.toml b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/Cargo.toml similarity index 95% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/Cargo.toml rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/Cargo.toml index 750aa79f9..81ab8382a 100644 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/Cargo.toml +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/Cargo.toml @@ -19,8 +19,8 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] [dependencies] anchor-lang = { version = "0.30.0", features = ["init-if-needed"] } anchor-spl = { version = "0.30.0" } -session-keys = { version = "2.0.3", features = ["no-entrypoint"] } -solana-program = "1.17.17" +session-keys = { version = "2.0.3", features = ["no-entrypoint"] } +solana-program = "1.17.25" spl-token-2022 = { version="2.0.1", features = [ "no-entrypoint" ] } spl-token = { version = "4.0.1", features = [ "no-entrypoint" ] } spl-token-metadata-interface = { version = "0.2.1"} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/Xargo.toml b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/Xargo.toml similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/Xargo.toml rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/Xargo.toml diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/constants.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/constants.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/constants.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/constants.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/errors.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/errors.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/errors.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/errors.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/instructions/chop_tree.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/instructions/chop_tree.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/instructions/chop_tree.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/instructions/chop_tree.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/instructions/init_player.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/instructions/init_player.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/instructions/init_player.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/instructions/init_player.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/instructions/mint_nft.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/instructions/mint_nft.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/instructions/mint_nft.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/instructions/mint_nft.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/instructions/mod.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/instructions/mod.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/instructions/mod.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/instructions/mod.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/lib.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/lib.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/lib.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/lib.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/state/game_data.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/state/game_data.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/state/game_data.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/state/game_data.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/state/mod.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/state/mod.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/state/mod.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/state/mod.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/state/player_data.rs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/state/player_data.rs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/programs/extension_nft/src/state/player_data.rs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/programs/extension_nft/src/state/player_data.rs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/rustfmt.toml b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/rustfmt.toml similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/rustfmt.toml rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/rustfmt.toml diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/tests/lumberjack.ts b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/tests/lumberjack.ts new file mode 100644 index 000000000..158df8d64 --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/tests/lumberjack.ts @@ -0,0 +1,53 @@ +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { ASSOCIATED_PROGRAM_ID } from '@coral-xyz/anchor/dist/cjs/utils/token'; +import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, getAssociatedTokenAddressSync } from '@solana/spl-token'; +import { Keypair, PublicKey } from '@solana/web3.js'; +import type { ExtensionNft } from '../target/types/extension_nft'; + +describe('extension_nft', () => { + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); + const program = anchor.workspace.ExtensionNft as Program; + const payer = provider.wallet as anchor.Wallet; + + it('Mint nft!', async () => { + const balance = await anchor.getProvider().connection.getBalance(payer.publicKey); + + if (balance < 1e8) { + const res = await anchor.getProvider().connection.requestAirdrop(payer.publicKey, 1e9); + await anchor.getProvider().connection.confirmTransaction(res, 'confirmed'); + } + + const mint = new Keypair(); + console.log('Mint public key', mint.publicKey.toBase58()); + + const destinationTokenAccount = getAssociatedTokenAddressSync( + mint.publicKey, + payer.publicKey, + false, + TOKEN_2022_PROGRAM_ID, + ASSOCIATED_TOKEN_PROGRAM_ID, + ); + + const nft_authority = await PublicKey.findProgramAddress([Buffer.from('nft_authority')], program.programId); + + const tx = await program.methods + .mintNft() + .accounts({ + signer: payer.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + tokenProgram: TOKEN_2022_PROGRAM_ID, + associatedTokenProgram: ASSOCIATED_PROGRAM_ID, + tokenAccount: destinationTokenAccount, + mint: mint.publicKey, + nftAuthority: nft_authority[0], + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + }) + .signers([mint]) + .rpc({ skipPreflight: true }); + + console.log('Mint nft tx', tx); + await anchor.getProvider().connection.confirmTransaction(tx, 'confirmed'); + }); +}); diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/tsconfig.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/tsconfig.json new file mode 100644 index 000000000..cd5d2e3d0 --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/.eslintrc.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/.eslintrc.json similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/.eslintrc.json rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/.eslintrc.json diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/.gitignore b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/.gitignore similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/.gitignore rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/.gitignore diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/README.md b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/README.md similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/README.md rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/README.md diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/components/ChopTreeButton.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/ChopTreeButton.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/components/ChopTreeButton.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/ChopTreeButton.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/components/DisplayGameState.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/DisplayGameState.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/components/DisplayGameState.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/DisplayGameState.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/components/DisplayNfts.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/DisplayNfts.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/components/DisplayNfts.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/DisplayNfts.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/components/InitPlayerButton.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/InitPlayerButton.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/components/InitPlayerButton.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/InitPlayerButton.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/components/MintNftButton.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/MintNftButton.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/components/MintNftButton.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/MintNftButton.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/components/RequestAirdrop.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/RequestAirdrop.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/components/RequestAirdrop.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/RequestAirdrop.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/components/SessionKeyButton.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/SessionKeyButton.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/components/SessionKeyButton.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/SessionKeyButton.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/components/WalletMultiButton.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/WalletMultiButton.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/components/WalletMultiButton.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/components/WalletMultiButton.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/contexts/GameStateProvider.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/contexts/GameStateProvider.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/contexts/GameStateProvider.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/contexts/GameStateProvider.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/contexts/NftProvider.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/contexts/NftProvider.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/contexts/NftProvider.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/contexts/NftProvider.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/contexts/SessionProvider.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/contexts/SessionProvider.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/contexts/SessionProvider.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/contexts/SessionProvider.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/contexts/WalletContextProvider.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/contexts/WalletContextProvider.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/contexts/WalletContextProvider.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/contexts/WalletContextProvider.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/idl/extension_nft.ts b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/idl/extension_nft.ts new file mode 100644 index 000000000..b77acef1c --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/idl/extension_nft.ts @@ -0,0 +1,425 @@ +export type ExtensionNft = { + version: '0.1.0'; + name: 'extension_nft'; + instructions: [ + { + name: 'initPlayer'; + accounts: [ + { + name: 'player'; + isMut: true; + isSigner: false; + }, + { + name: 'gameData'; + isMut: true; + isSigner: false; + }, + { + name: 'signer'; + isMut: true; + isSigner: true; + }, + { + name: 'systemProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: 'levelSeed'; + type: 'string'; + }, + ]; + }, + { + name: 'chopTree'; + accounts: [ + { + name: 'sessionToken'; + isMut: false; + isSigner: false; + isOptional: true; + }, + { + name: 'player'; + isMut: true; + isSigner: false; + }, + { + name: 'gameData'; + isMut: true; + isSigner: false; + }, + { + name: 'signer'; + isMut: true; + isSigner: true; + }, + { + name: 'systemProgram'; + isMut: false; + isSigner: false; + }, + { + name: 'mint'; + isMut: true; + isSigner: false; + }, + { + name: 'nftAuthority'; + isMut: true; + isSigner: false; + }, + { + name: 'tokenProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: 'levelSeed'; + type: 'string'; + }, + { + name: 'counter'; + type: 'u16'; + }, + ]; + }, + { + name: 'mintNft'; + accounts: [ + { + name: 'signer'; + isMut: true; + isSigner: true; + }, + { + name: 'systemProgram'; + isMut: false; + isSigner: false; + }, + { + name: 'tokenProgram'; + isMut: false; + isSigner: false; + }, + { + name: 'tokenAccount'; + isMut: true; + isSigner: false; + }, + { + name: 'mint'; + isMut: true; + isSigner: true; + }, + { + name: 'rent'; + isMut: false; + isSigner: false; + }, + { + name: 'associatedTokenProgram'; + isMut: false; + isSigner: false; + }, + { + name: 'nftAuthority'; + isMut: true; + isSigner: false; + }, + ]; + args: []; + }, + ]; + accounts: [ + { + name: 'nftAuthority'; + type: { + kind: 'struct'; + fields: []; + }; + }, + { + name: 'gameData'; + type: { + kind: 'struct'; + fields: [ + { + name: 'totalWoodCollected'; + type: 'u64'; + }, + ]; + }; + }, + { + name: 'playerData'; + type: { + kind: 'struct'; + fields: [ + { + name: 'authority'; + type: 'publicKey'; + }, + { + name: 'name'; + type: 'string'; + }, + { + name: 'level'; + type: 'u8'; + }, + { + name: 'xp'; + type: 'u64'; + }, + { + name: 'wood'; + type: 'u64'; + }, + { + name: 'energy'; + type: 'u64'; + }, + { + name: 'lastLogin'; + type: 'i64'; + }, + { + name: 'lastId'; + type: 'u16'; + }, + ]; + }; + }, + ]; + errors: [ + { + code: 6000; + name: 'NotEnoughEnergy'; + msg: 'Not enough energy'; + }, + { + code: 6001; + name: 'WrongAuthority'; + msg: 'Wrong Authority'; + }, + ]; +}; + +export const IDL: ExtensionNft = { + version: '0.1.0', + name: 'extension_nft', + instructions: [ + { + name: 'initPlayer', + accounts: [ + { + name: 'player', + isMut: true, + isSigner: false, + }, + { + name: 'gameData', + isMut: true, + isSigner: false, + }, + { + name: 'signer', + isMut: true, + isSigner: true, + }, + { + name: 'systemProgram', + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: 'levelSeed', + type: 'string', + }, + ], + }, + { + name: 'chopTree', + accounts: [ + { + name: 'sessionToken', + isMut: false, + isSigner: false, + isOptional: true, + }, + { + name: 'player', + isMut: true, + isSigner: false, + }, + { + name: 'gameData', + isMut: true, + isSigner: false, + }, + { + name: 'signer', + isMut: true, + isSigner: true, + }, + { + name: 'systemProgram', + isMut: false, + isSigner: false, + }, + { + name: 'mint', + isMut: true, + isSigner: false, + }, + { + name: 'nftAuthority', + isMut: true, + isSigner: false, + }, + { + name: 'tokenProgram', + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: 'levelSeed', + type: 'string', + }, + { + name: 'counter', + type: 'u16', + }, + ], + }, + { + name: 'mintNft', + accounts: [ + { + name: 'signer', + isMut: true, + isSigner: true, + }, + { + name: 'systemProgram', + isMut: false, + isSigner: false, + }, + { + name: 'tokenProgram', + isMut: false, + isSigner: false, + }, + { + name: 'tokenAccount', + isMut: true, + isSigner: false, + }, + { + name: 'mint', + isMut: true, + isSigner: true, + }, + { + name: 'rent', + isMut: false, + isSigner: false, + }, + { + name: 'associatedTokenProgram', + isMut: false, + isSigner: false, + }, + { + name: 'nftAuthority', + isMut: true, + isSigner: false, + }, + ], + args: [], + }, + ], + accounts: [ + { + name: 'nftAuthority', + type: { + kind: 'struct', + fields: [], + }, + }, + { + name: 'gameData', + type: { + kind: 'struct', + fields: [ + { + name: 'totalWoodCollected', + type: 'u64', + }, + ], + }, + }, + { + name: 'playerData', + type: { + kind: 'struct', + fields: [ + { + name: 'authority', + type: 'publicKey', + }, + { + name: 'name', + type: 'string', + }, + { + name: 'level', + type: 'u8', + }, + { + name: 'xp', + type: 'u64', + }, + { + name: 'wood', + type: 'u64', + }, + { + name: 'energy', + type: 'u64', + }, + { + name: 'lastLogin', + type: 'i64', + }, + { + name: 'lastId', + type: 'u16', + }, + ], + }, + }, + ], + errors: [ + { + code: 6000, + name: 'NotEnoughEnergy', + msg: 'Not enough energy', + }, + { + code: 6001, + name: 'WrongAuthority', + msg: 'Wrong Authority', + }, + ], +}; diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/next.config.js b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/next.config.js similarity index 76% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/next.config.js rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/next.config.js index 24c57cf4f..f4fad9bea 100644 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/app/next.config.js +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/next.config.js @@ -1,4 +1,4 @@ -// Notice that currently nft images from all domains can be fetched. +// Notice that currently nft images from all domains can be fetched. // This is not recommended for production use since there could be some security issues. /** @type {import('next').NextConfig} */ @@ -6,11 +6,11 @@ const nextConfig = { images: { remotePatterns: [ { - protocol: "https", - hostname: "**", + protocol: 'https', + hostname: '**', }, ], }, }; - -module.exports = nextConfig + +module.exports = nextConfig; diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/package.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/package.json similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/package.json rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/package.json diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/_app.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/_app.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/_app.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/_app.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/_document.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/_document.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/_document.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/_document.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/api/hello.ts b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/api/hello.ts new file mode 100644 index 000000000..eb4cc6657 --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/api/hello.ts @@ -0,0 +1,10 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next'; + +type Data = { + name: string; +}; + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + res.status(200).json({ name: 'John Doe' }); +} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/index.tsx b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/index.tsx similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/index.tsx rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/pages/index.tsx diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/public/Beaver.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/Beaver.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/public/Beaver.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/Beaver.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/public/Tree.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/Tree.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/public/Tree.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/Tree.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/public/Wood.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/Wood.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/public/Wood.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/Wood.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/public/energy.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/energy.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/public/energy.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/energy.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/public/favicon.ico b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/favicon.ico similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/public/favicon.ico rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/favicon.ico diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/public/next.svg b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/next.svg similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/public/next.svg rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/next.svg diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/public/vercel.svg b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/vercel.svg similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/public/vercel.svg rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/public/vercel.svg diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/styles/Home.module.css b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/styles/Home.module.css similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/styles/Home.module.css rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/styles/Home.module.css diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/styles/globals.css b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/styles/globals.css similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/styles/globals.css rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/styles/globals.css diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/tsconfig.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/tsconfig.json similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/tsconfig.json rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/tsconfig.json diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/utils/anchor.ts b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/utils/anchor.ts new file mode 100644 index 000000000..c38ded408 --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/utils/anchor.ts @@ -0,0 +1,34 @@ +import { BN, type IdlAccounts, Program } from '@coral-xyz/anchor'; +import { Connection, PublicKey, clusterApiUrl } from '@solana/web3.js'; +import { type ExtensionNft, IDL } from '../idl/extension_nft'; +import { WrappedConnection } from './wrappedConnection'; + +export const CONNECTION = new WrappedConnection(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : 'https://rpc.magicblock.app/devnet', { + wsEndpoint: process.env.NEXT_PUBLIC_WSS_RPC ? process.env.NEXT_PUBLIC_WSS_RPC : 'wss://rpc.magicblock.app/devnet', + commitment: 'confirmed', +}); + +export const METAPLEX_READAPI = 'https://devnet.helius-rpc.com/?api-key=78065db3-87fb-431c-8d43-fcd190212125'; + +// Here you can basically use what ever seed you want. For example one per level or city or whatever. +export const GAME_DATA_SEED = 'level_2'; + +// ExtensionNft game program ID +const programId = new PublicKey('H31ofLpWqeAzF2Pg54HSPQGYifJad843tTJg8vCYVoh3'); + +// Create the program interface using the idl, program ID, and provider +export const program = new Program(IDL, programId, { + connection: CONNECTION, +}); + +export const [gameDataPDA] = PublicKey.findProgramAddressSync([Buffer.from(GAME_DATA_SEED, 'utf8')], program.programId); + +// Player Data Account Type from Idl +export type PlayerData = IdlAccounts['playerData']; +export type GameData = IdlAccounts['gameData']; + +// Constants for the game +export const TIME_TO_REFILL_ENERGY: BN = new BN(60); +export const MAX_ENERGY = 100; +export const ENERGY_PER_TICK: BN = new BN(1); +export const TOTAL_WOOD_AVAILABLE: BN = new BN(100000); diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/utils/wrappedConnection.ts b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/utils/wrappedConnection.ts similarity index 66% rename from tokens/token-2022/nft-meta-data-pointer/anchor/app/utils/wrappedConnection.ts rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/app/utils/wrappedConnection.ts index 973ce94d5..ffe891c4b 100644 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/app/utils/wrappedConnection.ts +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/app/utils/wrappedConnection.ts @@ -1,14 +1,14 @@ -import { Connection } from "@solana/web3.js"; -import axios from "axios"; -import { METAPLEX_READAPI } from "./anchor"; +import { Connection } from '@solana/web3.js'; +import axios from 'axios'; +import { METAPLEX_READAPI } from './anchor'; export class WrappedConnection extends Connection { async getAsset(assetId: any): Promise { try { const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, { - jsonrpc: "2.0", - method: "getAsset", - id: "compression-example", + jsonrpc: '2.0', + method: 'getAsset', + id: 'compression-example', params: [assetId], }); return response.data.result; @@ -20,9 +20,9 @@ export class WrappedConnection extends Connection { async getAssetProof(assetId: any): Promise { try { const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, { - jsonrpc: "2.0", - method: "getAssetProof", - id: "compression-example", + jsonrpc: '2.0', + method: 'getAssetProof', + id: 'compression-example', params: [assetId], }); return response.data.result; @@ -31,19 +31,12 @@ export class WrappedConnection extends Connection { } } - async getAssetsByOwner( - assetId: string, - sortBy: any, - limit: number, - page: number, - before: string, - after: string - ): Promise { + async getAssetsByOwner(assetId: string, sortBy: any, limit: number, page: number, before: string, after: string): Promise { try { const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, { - jsonrpc: "2.0", - method: "getAssetsByOwner", - id: "rpd-op-123", + jsonrpc: '2.0', + method: 'getAssetsByOwner', + id: 'rpd-op-123', params: [assetId, sortBy, limit, page, before, after], }); //console.log("getAssetsByOwner: " + JSON.stringify(response.data)); @@ -53,19 +46,12 @@ export class WrappedConnection extends Connection { } } - async getAssetsByCreator( - assetId: string, - sortBy: any, - limit: number, - page: number, - before: string, - after: string - ): Promise { + async getAssetsByCreator(assetId: string, sortBy: any, limit: number, page: number, before: string, after: string): Promise { try { const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, { - jsonrpc: "2.0", - method: "getAssetsByCreator", - id: "compression-example", + jsonrpc: '2.0', + method: 'getAssetsByCreator', + id: 'compression-example', params: [assetId, true, sortBy, limit, page, null, null], }); @@ -75,19 +61,12 @@ export class WrappedConnection extends Connection { } } - async getAssetsByAuthority( - assetId: string, - sortBy: any, - limit: number, - page: number, - before: string, - after: string - ): Promise { + async getAssetsByAuthority(assetId: string, sortBy: any, limit: number, page: number, before: string, after: string): Promise { try { const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, { - jsonrpc: "2.0", - method: "getAssetsByAuthority", - id: "compression-example", + jsonrpc: '2.0', + method: 'getAssetsByAuthority', + id: 'compression-example', params: [assetId, sortBy, limit, page, before, after], }); return response.data.result; @@ -95,7 +74,7 @@ export class WrappedConnection extends Connection { console.error(error); } } - + async getAssetsByGroup( groupKey: string, groupValue: string, @@ -103,15 +82,15 @@ export class WrappedConnection extends Connection { limit: number, page: number, before: string, - after: string + after: string, ): Promise { try { - let events = []; + const events = []; const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, { - jsonrpc: "2.0", - method: "getAssetsByGroup", - id: "rpd-op-123", + jsonrpc: '2.0', + method: 'getAssetsByGroup', + id: 'rpd-op-123', params: [groupKey, groupValue, sortBy, limit, page, before, after], }); events.push(...response.data.result.items); @@ -130,32 +109,32 @@ export class WrappedConnection extends Connection { limit: number, page: number, before: string, - after: string + after: string, ): Promise { try { - let events = []; + const events = []; let response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, { - jsonrpc: "2.0", - method: "getAssetsByGroup", - id: "rpd-op-123", + jsonrpc: '2.0', + method: 'getAssetsByGroup', + id: 'rpd-op-123', params: [groupKey, groupValue, sortBy, limit, page, before, after], }); events.push(...response.data.result.items); - while (true) { - console.log("Requested page" + page); + while (true) { + console.log(`Requested page${page}`); page += 1; response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, { - jsonrpc: "2.0", - method: "getAssetsByGroup", - id: "rpd-op-123", + jsonrpc: '2.0', + method: 'getAssetsByGroup', + id: 'rpd-op-123', params: [groupKey, groupValue, sortBy, limit, page, before, after], }); events.push(...response.data.result.items); - if (events.length % 1000 != 0 || response.data.result.items.length == 0) { + if (events.length % 1000 !== 0 || response.data.result.items.length === 0) { break; } } @@ -166,5 +145,3 @@ export class WrappedConnection extends Connection { } } } - - diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/nx.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/nx.json new file mode 100644 index 000000000..59d3c1f7a --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/nx.json @@ -0,0 +1,22 @@ +{ + "$schema": "./node_modules/nx/schemas/nx-schema.json", + "tasksRunnerOptions": { + "default": { + "runner": "nx/tasks-runners/default", + "options": { + "cacheableOperations": ["build", "lint", "test", "e2e"] + } + } + }, + "targetDefaults": { + "build": { + "dependsOn": ["^build"], + "inputs": ["production", "^production"] + } + }, + "namedInputs": { + "default": ["{projectRoot}/**/*", "sharedGlobals"], + "production": ["default"], + "sharedGlobals": [] + } +} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/package.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/package.json similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/package.json rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/package.json diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/.gitattributes b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/.gitattributes similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/.gitattributes rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/.gitattributes diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/.gitignore b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/.gitignore similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/.gitignore rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/.gitignore diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.XML.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.mdb.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/DOTween.dll.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.XML.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.mdb.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/DOTweenEditor.dll.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenIcon.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/DOTweenMiniIcon.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Footer_dark.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Editor/Imgs/Header.jpg.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleAudio.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleEPOOutline.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModulePhysics2D.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleSprite.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUI.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUnityVersion.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/Modules/DOTweenModuleUtils.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/readme.txt b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/readme.txt similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/readme.txt rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/readme.txt diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/readme.txt.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/readme.txt.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/DOTween 4/readme.txt.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/DOTween 4/readme.txt.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/IMultiSceneSingleton.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/IReinitializingMultiSceneSingleton.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/MessageRouter.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Frictionless/ServiceFactory.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Materials.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Materials.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Materials.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Materials.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Materials/WoodParticles.mat.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/DefaultButton.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/InteractionBlocker.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/NftItemView.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/NftListPopup.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/SessionPopup.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/SolBalanceWidget.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/TokenBalanceWidget.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Prefabs/WoodParticles.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes/GameScene.unity.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scenes/LoginScene.unity.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/SimpleRotate.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/AnchorService.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/ExtensionNft.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftMintingService.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/NftService.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Solana/SolanaUtils.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/BasePopup.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/GameScreen.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/InteractionBlocker.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/LoginScreen.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftContextMenu.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemListView.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftItemView.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopup.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/NftListPopupUiData.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SafeArea.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SelectedNft.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopup.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SessionPopupUiData.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/SolBalanceWidget.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/TokenPanel.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Scripts/Ui/UiService.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/background.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/background.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/background.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/background.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/background.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/background.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/background.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/background.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/beaver.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/beaver.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/beaver.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/beaver.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/beaver.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/beaver.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/beaver.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/beaver.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_energy.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_solana.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_usdc.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/icon_wood.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/tree.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/tree.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/tree.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/tree.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/tree.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/tree.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/tree.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/tree.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_close_button.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_default_button.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_element_panel_rect.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_panel.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Game/Sprites/ui_spinner.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/DOTweenSettings.asset.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterButton.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/WalletAdapterUI.prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Resources/SolanaUnitySDK/[WalletController].prefab.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Socket.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Socket.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Socket.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Socket.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/Socket/SocketStatusWidget.cs.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Documentation.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Documentation.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Documentation.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Documentation.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans - OFL.txt.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Fonts/LiberationSans.ttf.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Resources/TMP Settings.asset.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_SDF.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro.cginc.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json new file mode 100644 index 000000000..2b5e1e6a6 --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json @@ -0,0 +1,157 @@ +{ + "frames": [ + { + "filename": "1f60a.png", + "frame": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f60b.png", + "frame": { "x": 128, "y": 0, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f60d.png", + "frame": { "x": 256, "y": 0, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f60e.png", + "frame": { "x": 384, "y": 0, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f600.png", + "frame": { "x": 0, "y": 128, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f601.png", + "frame": { "x": 128, "y": 128, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f602.png", + "frame": { "x": 256, "y": 128, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f603.png", + "frame": { "x": 384, "y": 128, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f604.png", + "frame": { "x": 0, "y": 256, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f605.png", + "frame": { "x": 128, "y": 256, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f606.png", + "frame": { "x": 256, "y": 256, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f609.png", + "frame": { "x": 384, "y": 256, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f618.png", + "frame": { "x": 0, "y": 384, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "1f923.png", + "frame": { "x": 128, "y": 384, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "263a.png", + "frame": { "x": 256, "y": 384, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + }, + { + "filename": "2639.png", + "frame": { "x": 384, "y": 384, "w": 128, "h": 128 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 128, "h": 128 }, + "sourceSize": { "w": 128, "h": 128 }, + "pivot": { "x": 0.5, "y": 0.5 } + } + ], + "meta": { + "app": "http://www.codeandweb.com/texturepacker", + "version": "1.0", + "image": "EmojiOne.png", + "format": "RGBA8888", + "size": { "w": 512, "h": 512 }, + "scale": "1", + "smartupdate": "$TexturePacker:SmartUpdate:196a26a2e149d875b91ffc8fa3581e76:fc928c7e275404b7e0649307410475cb:424723c3774975ddb2053fd5c4b85f6e$" + } +} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/favicon.ico.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/fullscreen-button.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-dark.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-empty-light.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-dark.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/progress-bar-full-light.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/style.css.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-dark.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/unity-logo-light.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/TemplateData/webgl-logo.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/index.html.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/SolanaWebGlTemplate/thumbnail.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/index.html.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png.meta b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png.meta similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png.meta rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Assets/WebGLTemplates/xNFT/thumbnail.png.meta diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Packages/manifest.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Packages/manifest.json similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Packages/manifest.json rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Packages/manifest.json diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Packages/packages-lock.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Packages/packages-lock.json similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Packages/packages-lock.json rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/Packages/packages-lock.json diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/AudioManager.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/AudioManager.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/AudioManager.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/AudioManager.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/ClusterInputManager.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/ClusterInputManager.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/ClusterInputManager.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/ClusterInputManager.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/DynamicsManager.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/DynamicsManager.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/DynamicsManager.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/DynamicsManager.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/EditorBuildSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/EditorBuildSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/EditorBuildSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/EditorBuildSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/EditorSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/EditorSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/EditorSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/EditorSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/GraphicsSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/GraphicsSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/GraphicsSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/GraphicsSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/InputManager.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/InputManager.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/InputManager.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/InputManager.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/MemorySettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/MemorySettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/MemorySettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/MemorySettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/NavMeshAreas.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/NavMeshAreas.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/NavMeshAreas.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/NavMeshAreas.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/PackageManagerSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/PackageManagerSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/PackageManagerSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/PackageManagerSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json new file mode 100644 index 000000000..757e1a0ae --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json @@ -0,0 +1,7 @@ +{ + "m_Name": "Settings", + "m_Path": "ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json", + "m_Dictionary": { + "m_DictionaryValues": [] + } +} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/Physics2DSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/Physics2DSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/Physics2DSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/Physics2DSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/PresetManager.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/PresetManager.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/PresetManager.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/PresetManager.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/ProjectSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/ProjectSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/ProjectSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/ProjectSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/ProjectVersion.txt b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/ProjectVersion.txt similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/ProjectVersion.txt rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/ProjectVersion.txt diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/QualitySettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/QualitySettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/QualitySettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/QualitySettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/SceneTemplateSettings.json b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 000000000..0062e5cd8 --- /dev/null +++ b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/SceneTemplateSettings.json @@ -0,0 +1,167 @@ +{ + "templatePinStates": [], + "dependencyTypeInfos": [ + { + "userAdded": false, + "type": "UnityEngine.AnimationClip", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.Animations.AnimatorController", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.AnimatorOverrideController", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.Audio.AudioMixerController", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.ComputeShader", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Cubemap", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.GameObject", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.LightingDataAsset", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": false + }, + { + "userAdded": false, + "type": "UnityEngine.LightingSettings", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Material", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.MonoScript", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicMaterial", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial2D", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.VolumeProfile", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEditor.SceneAsset", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": false + }, + { + "userAdded": false, + "type": "UnityEngine.Shader", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.ShaderVariantCollection", + "ignore": true, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Texture", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Texture2D", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + }, + { + "userAdded": false, + "type": "UnityEngine.Timeline.TimelineAsset", + "ignore": false, + "defaultInstantiationMode": 0, + "supportsModification": true + } + ], + "defaultDependencyTypeInfo": { + "userAdded": false, + "type": "", + "ignore": false, + "defaultInstantiationMode": 1, + "supportsModification": true + }, + "newSceneOverride": 0 +} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/TagManager.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/TagManager.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/TagManager.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/TagManager.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/TimeManager.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/TimeManager.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/TimeManager.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/TimeManager.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/UnityConnectSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/UnityConnectSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/UnityConnectSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/UnityConnectSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/VFXManager.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/VFXManager.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/VFXManager.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/VFXManager.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/VersionControlSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/VersionControlSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/VersionControlSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/VersionControlSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/XRSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/XRSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/XRSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/XRSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/boot.config b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/boot.config similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/boot.config rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/ProjectSettings/boot.config diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/UserSettings/EditorUserSettings.asset b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/UserSettings/EditorUserSettings.asset similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/UserSettings/EditorUserSettings.asset rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/UserSettings/EditorUserSettings.asset diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/UserSettings/Layouts/default-2021.dwlt b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/UserSettings/Layouts/default-2021.dwlt similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/UserSettings/Layouts/default-2021.dwlt rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/UserSettings/Layouts/default-2021.dwlt diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/UserSettings/Search.settings b/tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/UserSettings/Search.settings similarity index 100% rename from tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/UserSettings/Search.settings rename to tokens/token-2022/nft-meta-data-pointer/anchor-example/unity/ExtensionNft/UserSettings/Search.settings diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/idl/extension_nft.ts b/tokens/token-2022/nft-meta-data-pointer/anchor/app/idl/extension_nft.ts deleted file mode 100644 index 2fb471584..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/app/idl/extension_nft.ts +++ /dev/null @@ -1,425 +0,0 @@ -export type ExtensionNft = { - "version": "0.1.0", - "name": "extension_nft", - "instructions": [ - { - "name": "initPlayer", - "accounts": [ - { - "name": "player", - "isMut": true, - "isSigner": false - }, - { - "name": "gameData", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "levelSeed", - "type": "string" - } - ] - }, - { - "name": "chopTree", - "accounts": [ - { - "name": "sessionToken", - "isMut": false, - "isSigner": false, - "isOptional": true - }, - { - "name": "player", - "isMut": true, - "isSigner": false - }, - { - "name": "gameData", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "mint", - "isMut": true, - "isSigner": false - }, - { - "name": "nftAuthority", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "levelSeed", - "type": "string" - }, - { - "name": "counter", - "type": "u16" - } - ] - }, - { - "name": "mintNft", - "accounts": [ - { - "name": "signer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "mint", - "isMut": true, - "isSigner": true - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "associatedTokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "nftAuthority", - "isMut": true, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "nftAuthority", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "gameData", - "type": { - "kind": "struct", - "fields": [ - { - "name": "totalWoodCollected", - "type": "u64" - } - ] - } - }, - { - "name": "playerData", - "type": { - "kind": "struct", - "fields": [ - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "name", - "type": "string" - }, - { - "name": "level", - "type": "u8" - }, - { - "name": "xp", - "type": "u64" - }, - { - "name": "wood", - "type": "u64" - }, - { - "name": "energy", - "type": "u64" - }, - { - "name": "lastLogin", - "type": "i64" - }, - { - "name": "lastId", - "type": "u16" - } - ] - } - } - ], - "errors": [ - { - "code": 6000, - "name": "NotEnoughEnergy", - "msg": "Not enough energy" - }, - { - "code": 6001, - "name": "WrongAuthority", - "msg": "Wrong Authority" - } - ] -}; - -export const IDL: ExtensionNft = { - "version": "0.1.0", - "name": "extension_nft", - "instructions": [ - { - "name": "initPlayer", - "accounts": [ - { - "name": "player", - "isMut": true, - "isSigner": false - }, - { - "name": "gameData", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "levelSeed", - "type": "string" - } - ] - }, - { - "name": "chopTree", - "accounts": [ - { - "name": "sessionToken", - "isMut": false, - "isSigner": false, - "isOptional": true - }, - { - "name": "player", - "isMut": true, - "isSigner": false - }, - { - "name": "gameData", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "mint", - "isMut": true, - "isSigner": false - }, - { - "name": "nftAuthority", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "levelSeed", - "type": "string" - }, - { - "name": "counter", - "type": "u16" - } - ] - }, - { - "name": "mintNft", - "accounts": [ - { - "name": "signer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "mint", - "isMut": true, - "isSigner": true - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "associatedTokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "nftAuthority", - "isMut": true, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "nftAuthority", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "gameData", - "type": { - "kind": "struct", - "fields": [ - { - "name": "totalWoodCollected", - "type": "u64" - } - ] - } - }, - { - "name": "playerData", - "type": { - "kind": "struct", - "fields": [ - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "name", - "type": "string" - }, - { - "name": "level", - "type": "u8" - }, - { - "name": "xp", - "type": "u64" - }, - { - "name": "wood", - "type": "u64" - }, - { - "name": "energy", - "type": "u64" - }, - { - "name": "lastLogin", - "type": "i64" - }, - { - "name": "lastId", - "type": "u16" - } - ] - } - } - ], - "errors": [ - { - "code": 6000, - "name": "NotEnoughEnergy", - "msg": "Not enough energy" - }, - { - "code": 6001, - "name": "WrongAuthority", - "msg": "Wrong Authority" - } - ] -}; diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/api/hello.ts b/tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/api/hello.ts deleted file mode 100644 index f8bcc7e5c..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/app/pages/api/hello.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type { NextApiRequest, NextApiResponse } from 'next' - -type Data = { - name: string -} - -export default function handler( - req: NextApiRequest, - res: NextApiResponse -) { - res.status(200).json({ name: 'John Doe' }) -} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/app/utils/anchor.ts b/tokens/token-2022/nft-meta-data-pointer/anchor/app/utils/anchor.ts deleted file mode 100644 index 1ba139ed9..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/app/utils/anchor.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Program, IdlAccounts, BN } from "@coral-xyz/anchor" -import { ExtensionNft, IDL } from "../idl/extension_nft" -import { clusterApiUrl, Connection, PublicKey } from "@solana/web3.js" -import { WrappedConnection } from "./wrappedConnection"; - -export const CONNECTION = new WrappedConnection(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : 'https://rpc.magicblock.app/devnet', { - wsEndpoint: process.env.NEXT_PUBLIC_WSS_RPC ? process.env.NEXT_PUBLIC_WSS_RPC : "wss://rpc.magicblock.app/devnet", - commitment: 'confirmed' -}); - -export const METAPLEX_READAPI = "https://devnet.helius-rpc.com/?api-key=78065db3-87fb-431c-8d43-fcd190212125"; - -// Here you can basically use what ever seed you want. For example one per level or city or whatever. -export const GAME_DATA_SEED = "level_2"; - -// ExtensionNft game program ID -const programId = new PublicKey("H31ofLpWqeAzF2Pg54HSPQGYifJad843tTJg8vCYVoh3") - -// Create the program interface using the idl, program ID, and provider -export const program = new Program(IDL, programId, { - connection: CONNECTION, -}) - -export const [gameDataPDA] = PublicKey.findProgramAddressSync( - [Buffer.from(GAME_DATA_SEED, "utf8")], - program.programId -) - -// Player Data Account Type from Idl -export type PlayerData = IdlAccounts["playerData"] -export type GameData = IdlAccounts["gameData"] - -// Constants for the game -export const TIME_TO_REFILL_ENERGY: BN = new BN(60) -export const MAX_ENERGY = 100 -export const ENERGY_PER_TICK: BN = new BN(1) -export const TOTAL_WOOD_AVAILABLE: BN = new BN(100000) diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/nx.json b/tokens/token-2022/nft-meta-data-pointer/anchor/nx.json deleted file mode 100644 index 61d4b8144..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/nx.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "./node_modules/nx/schemas/nx-schema.json", - "tasksRunnerOptions": { - "default": { - "runner": "nx/tasks-runners/default", - "options": { - "cacheableOperations": [ - "build", - "lint", - "test", - "e2e" - ] - } - } - }, - "targetDefaults": { - "build": { - "dependsOn": [ - "^build" - ], - "inputs": [ - "production", - "^production" - ] - } - }, - "namedInputs": { - "default": [ - "{projectRoot}/**/*", - "sharedGlobals" - ], - "production": [ - "default" - ], - "sharedGlobals": [] - } -} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/migrations/deploy.ts b/tokens/token-2022/nft-meta-data-pointer/anchor/program/migrations/deploy.ts deleted file mode 100644 index 5e3df0dc3..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/program/migrations/deploy.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Migrations are an early feature. Currently, they're nothing more than this -// single deploy script that's invoked from the CLI, injecting a provider -// configured from the workspace's Anchor.toml. - -const anchor = require("@project-serum/anchor"); - -module.exports = async function (provider) { - // Configure client to use the provider. - anchor.setProvider(provider); - - // Add your deploy script here. -}; diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/package.json b/tokens/token-2022/nft-meta-data-pointer/anchor/program/package.json deleted file mode 100644 index d925aa017..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/program/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.30.0", - "@coral-xyz/spl-token": "0.30.0", - "@solana/spl-token": "^0.4.0" - }, - "devDependencies": { - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "browserify-sign": ">=4.2.2", - "chai": "^4.3.4", - "crypto-js": ">=4.2.0", - "mocha": "^9.0.3", - "prettier": "^2.6.2", - "ts-mocha": "^10.0.0", - "typescript": "^4.3.5" - } -} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/tests/lumberjack.ts b/tokens/token-2022/nft-meta-data-pointer/anchor/program/tests/lumberjack.ts deleted file mode 100644 index c9833e59c..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/program/tests/lumberjack.ts +++ /dev/null @@ -1,66 +0,0 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { ExtensionNft } from "../target/types/extension_nft"; -import { ASSOCIATED_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token"; -import { - ASSOCIATED_TOKEN_PROGRAM_ID, - TOKEN_2022_PROGRAM_ID, - getAssociatedTokenAddressSync, -} from "@solana/spl-token"; -import { Keypair, PublicKey } from "@solana/web3.js"; - -describe("extension_nft", () => { - const provider = anchor.AnchorProvider.env(); - anchor.setProvider(provider); - const program = anchor.workspace.ExtensionNft as Program; - const payer = provider.wallet as anchor.Wallet; - - it("Mint nft!", async () => { - const balance = await anchor - .getProvider() - .connection.getBalance(payer.publicKey); - - if (balance < 1e8) { - const res = await anchor - .getProvider() - .connection.requestAirdrop(payer.publicKey, 1e9); - await anchor - .getProvider() - .connection.confirmTransaction(res, "confirmed"); - } - - let mint = new Keypair(); - console.log("Mint public key", mint.publicKey.toBase58()); - - const destinationTokenAccount = getAssociatedTokenAddressSync( - mint.publicKey, - payer.publicKey, - false, - TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID - ); - - const nft_authority = await PublicKey.findProgramAddress( - [Buffer.from("nft_authority")], - program.programId - ); - - let tx = await program.methods - .mintNft() - .accounts({ - signer: payer.publicKey, - systemProgram: anchor.web3.SystemProgram.programId, - tokenProgram: TOKEN_2022_PROGRAM_ID, - associatedTokenProgram: ASSOCIATED_PROGRAM_ID, - tokenAccount: destinationTokenAccount, - mint: mint.publicKey, - nftAuthority: nft_authority[0], - rent: anchor.web3.SYSVAR_RENT_PUBKEY, - }) - .signers([mint]) - .rpc({ skipPreflight: true }); - - console.log("Mint nft tx", tx); - await anchor.getProvider().connection.confirmTransaction(tx, "confirmed"); - }); -}); diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json b/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json deleted file mode 100644 index 6c4e50bc8..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/Assets/TextMesh Pro/Sprites/EmojiOne.json +++ /dev/null @@ -1,156 +0,0 @@ -{"frames": [ - -{ - "filename": "1f60a.png", - "frame": {"x":0,"y":0,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f60b.png", - "frame": {"x":128,"y":0,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f60d.png", - "frame": {"x":256,"y":0,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f60e.png", - "frame": {"x":384,"y":0,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f600.png", - "frame": {"x":0,"y":128,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f601.png", - "frame": {"x":128,"y":128,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f602.png", - "frame": {"x":256,"y":128,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f603.png", - "frame": {"x":384,"y":128,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f604.png", - "frame": {"x":0,"y":256,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f605.png", - "frame": {"x":128,"y":256,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f606.png", - "frame": {"x":256,"y":256,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f609.png", - "frame": {"x":384,"y":256,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f618.png", - "frame": {"x":0,"y":384,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "1f923.png", - "frame": {"x":128,"y":384,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "263a.png", - "frame": {"x":256,"y":384,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "2639.png", - "frame": {"x":384,"y":384,"w":128,"h":128}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, - "sourceSize": {"w":128,"h":128}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "http://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "EmojiOne.png", - "format": "RGBA8888", - "size": {"w":512,"h":512}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:196a26a2e149d875b91ffc8fa3581e76:fc928c7e275404b7e0649307410475cb:424723c3774975ddb2053fd5c4b85f6e$" -} -} diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json deleted file mode 100644 index ad11087f4..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "m_Name": "Settings", - "m_Path": "ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json", - "m_Dictionary": { - "m_DictionaryValues": [] - } -} \ No newline at end of file diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/SceneTemplateSettings.json b/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/SceneTemplateSettings.json deleted file mode 100644 index 6f3e60fd8..000000000 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/unity/ExtensionNft/ProjectSettings/SceneTemplateSettings.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "templatePinStates": [], - "dependencyTypeInfos": [ - { - "userAdded": false, - "type": "UnityEngine.AnimationClip", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.Animations.AnimatorController", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.AnimatorOverrideController", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.Audio.AudioMixerController", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.ComputeShader", - "ignore": true, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Cubemap", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.GameObject", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.LightingDataAsset", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": false - }, - { - "userAdded": false, - "type": "UnityEngine.LightingSettings", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Material", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.MonoScript", - "ignore": true, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.PhysicMaterial", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.PhysicsMaterial2D", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Rendering.VolumeProfile", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEditor.SceneAsset", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": false - }, - { - "userAdded": false, - "type": "UnityEngine.Shader", - "ignore": true, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.ShaderVariantCollection", - "ignore": true, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Texture", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Texture2D", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - }, - { - "userAdded": false, - "type": "UnityEngine.Timeline.TimelineAsset", - "ignore": false, - "defaultInstantiationMode": 0, - "supportsModification": true - } - ], - "defaultDependencyTypeInfo": { - "userAdded": false, - "type": "", - "ignore": false, - "defaultInstantiationMode": 1, - "supportsModification": true - }, - "newSceneOverride": 0 -} \ No newline at end of file diff --git a/tokens/token-2022/non-transferable/anchor/migrations/deploy.ts b/tokens/token-2022/non-transferable/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/non-transferable/anchor/migrations/deploy.ts +++ b/tokens/token-2022/non-transferable/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/non-transferable/anchor/tests/non-transferable.ts b/tokens/token-2022/non-transferable/anchor/tests/non-transferable.ts index f32a44eba..4e438ef2d 100644 --- a/tokens/token-2022/non-transferable/anchor/tests/non-transferable.ts +++ b/tokens/token-2022/non-transferable/anchor/tests/non-transferable.ts @@ -1,15 +1,9 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { NonTransferable } from "../target/types/non_transferable"; -import { - TOKEN_2022_PROGRAM_ID, - getOrCreateAssociatedTokenAccount, - mintTo, - transfer, - ASSOCIATED_TOKEN_PROGRAM_ID, -} from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, getOrCreateAssociatedTokenAccount, mintTo, transfer } from '@solana/spl-token'; +import type { NonTransferable } from '../target/types/non_transferable'; -describe("non-transferable", () => { +describe('non-transferable', () => { const provider = anchor.AnchorProvider.env(); const connection = provider.connection; const wallet = provider.wallet as anchor.Wallet; @@ -20,16 +14,16 @@ describe("non-transferable", () => { const mintKeypair = new anchor.web3.Keypair(); const recipient = new anchor.web3.Keypair(); - it("Create Mint with NonTransferable extension", async () => { + it('Create Mint with NonTransferable extension', async () => { const transactionSignature = await program.methods .initialize() .accounts({ mintAccount: mintKeypair.publicKey }) .signers([mintKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Attempt Token Transfer", async () => { + it('Attempt Token Transfer', async () => { const amount = 1; const sourceTokenAccount = await getOrCreateAssociatedTokenAccount( @@ -41,7 +35,7 @@ describe("non-transferable", () => { null, // Commitment null, // Confirm options TOKEN_2022_PROGRAM_ID, // Token Extension Program ID - ASSOCIATED_TOKEN_PROGRAM_ID // Associated Token Program ID + ASSOCIATED_TOKEN_PROGRAM_ID, // Associated Token Program ID ); const destinationTokenAccount = await getOrCreateAssociatedTokenAccount( @@ -53,7 +47,7 @@ describe("non-transferable", () => { null, // Commitment null, // Confirm options TOKEN_2022_PROGRAM_ID, // Token Extension Program ID - ASSOCIATED_TOKEN_PROGRAM_ID // Associated Token Program ID + ASSOCIATED_TOKEN_PROGRAM_ID, // Associated Token Program ID ); await mintTo( @@ -65,7 +59,7 @@ describe("non-transferable", () => { amount, // Amount [], // Additional signers null, // Commitment - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); try { @@ -79,10 +73,10 @@ describe("non-transferable", () => { amount, // Amount undefined, // Additional signers undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); } catch (error) { - console.log("\nExpect Error:", error.logs); + console.log('\nExpect Error:', error.logs); } }); }); diff --git a/tokens/token-2022/non-transferable/native/package.json b/tokens/token-2022/non-transferable/native/package.json index 3adfa05b1..48fb3d18f 100644 --- a/tokens/token-2022/non-transferable/native/package.json +++ b/tokens/token-2022/non-transferable/native/package.json @@ -1,6 +1,9 @@ { "scripts": { - "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts" + "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts", + "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test", + "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so", + "deploy": "solana program deploy ./program/target/so/hello_solana_program.so" }, "dependencies": { "@metaplex-foundation/mpl-token-metadata": "^2.5.2", @@ -14,8 +17,9 @@ "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.1", "@types/mocha": "^9.1.1", - "chai": "^4.3.4", + "chai": "^4.4.1", "mocha": "^9.0.3", + "solana-bankrun": "^0.3.0", "ts-mocha": "^10.0.0", "typescript": "^4.3.5" } diff --git a/tokens/token-2022/non-transferable/native/pnpm-lock.yaml b/tokens/token-2022/non-transferable/native/pnpm-lock.yaml new file mode 100644 index 000000000..164085a92 --- /dev/null +++ b/tokens/token-2022/non-transferable/native/pnpm-lock.yaml @@ -0,0 +1,1780 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@metaplex-foundation/mpl-token-metadata': + specifier: ^2.5.2 + version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-token': + specifier: ^0.3.7 + version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: ^1.73.0 + version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + borsh: + specifier: ^0.7.0 + version: 0.7.0 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + fs: + specifier: ^0.0.1-security + version: 0.0.1-security + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.1 + version: 4.3.16 + '@types/mocha': + specifier: ^9.1.1 + version: 9.1.1 + chai: + specifier: ^4.4.1 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + solana-bankrun: + specifier: ^0.3.0 + version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@metaplex-foundation/beet-solana@0.4.1': + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + + '@metaplex-foundation/beet@0.7.2': + resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==} + + '@metaplex-foundation/cusper@0.0.2': + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + + '@metaplex-foundation/mpl-token-metadata@2.13.0': + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fs@0.0.1-security: + resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + solana-bankrun-darwin-arm64@0.3.0: + resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + solana-bankrun-darwin-universal@0.3.0: + resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==} + engines: {node: '>= 10'} + os: [darwin] + + solana-bankrun-darwin-x64@0.3.0: + resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + solana-bankrun-linux-x64-gnu@0.3.0: + resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun-linux-x64-musl@0.3.0: + resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun@0.3.0: + resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==} + engines: {node: '>= 10'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet@0.7.2': + dependencies: + ansicolors: 0.3.2 + assert: 2.1.0 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/cusper@0.0.2': {} + + '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@1.1.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + emoji-regex@8.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fs.realpath@1.0.0: {} + + fs@0.0.1-security: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + make-error@1.3.6: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: + optional: true + + normalize-path@3.0.0: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + solana-bankrun-darwin-arm64@0.3.0: + optional: true + + solana-bankrun-darwin-universal@0.3.0: + optional: true + + solana-bankrun-darwin-x64@0.3.0: + optional: true + + solana-bankrun-linux-x64-gnu@0.3.0: + optional: true + + solana-bankrun-linux-x64-musl@0.3.0: + optional: true + + solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 4.0.1 + optionalDependencies: + solana-bankrun-darwin-arm64: 0.3.0 + solana-bankrun-darwin-universal: 0.3.0 + solana-bankrun-darwin-x64: 0.3.0 + solana-bankrun-linux-x64-gnu: 0.3.0 + solana-bankrun-linux-x64-musl: 0.3.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + type-detect@4.0.8: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/tokens/token-2022/non-transferable/native/program/Cargo.toml b/tokens/token-2022/non-transferable/native/program/Cargo.toml index d47b883c8..fc3bd8517 100644 --- a/tokens/token-2022/non-transferable/native/program/Cargo.toml +++ b/tokens/token-2022/non-transferable/native/program/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] borsh = "0.9.3" borsh-derive = "0.9.1" -solana-program = "1.16.10" +solana-program = "=1.17.25" spl-associated-token-account = { version="2.0.0", features = [ "no-entrypoint" ] } spl-token-2022 = {version = "0.7.0", features = [ "no-entrypoint" ] } diff --git a/tokens/token-2022/non-transferable/native/tests/test.ts b/tokens/token-2022/non-transferable/native/tests/test.ts index d992e4de8..020d9fcee 100644 --- a/tokens/token-2022/non-transferable/native/tests/test.ts +++ b/tokens/token-2022/non-transferable/native/tests/test.ts @@ -1,23 +1,10 @@ -import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata"; -import { - Connection, - Keypair, - PublicKey, - SystemProgram, - SYSVAR_RENT_PUBKEY, - TransactionInstruction, - Transaction, - sendAndConfirmTransaction, -} from "@solana/web3.js"; -import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - -function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require("fs").readFileSync(path, "utf-8"))) - ); -} +import { Buffer } from 'node:buffer'; +import { describe, test } from 'node:test'; +import { TOKEN_2022_PROGRAM_ID } from '@solana/spl-token'; +import { Keypair, PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; +import { assert } from 'chai'; +import { start } from 'solana-bankrun'; class Assignable { constructor(properties) { @@ -36,32 +23,27 @@ const CreateTokenArgsSchema = new Map([ [ CreateTokenArgs, { - kind: "struct", - fields: [["token_decimals", "u8"]], + kind: 'struct', + fields: [['token_decimals', 'u8']], }, ], ]); -describe("Create Token", async () => { - const connection = new Connection( - `https://api.devnet.solana.com/`, - "confirmed" - ); - const payer = createKeypairFromFile( - require("os").homedir() + "/.config/solana/id.json" - ); - const program = createKeypairFromFile( - "./program/target/deploy/program-keypair.json" - ); +describe('Create Token', async () => { + const PROGRAM_ID = PublicKey.unique(); + const context = await start([{ name: 'token_2022_non_transferable_program', programId: PROGRAM_ID }], []); + const client = context.banksClient; + const payer = context.payer; - it("Create a Token-22 SPL-Token !", async () => { + test('Create a Token-22 SPL-Token !', async () => { + const blockhash = context.lastBlockhash; const mintKeypair: Keypair = Keypair.generate(); const instructionData = new CreateTokenArgs({ token_decimals: 9, }); - const instruction = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account @@ -70,17 +52,17 @@ describe("Create Token", async () => { { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program ], - programId: program.publicKey, + programId: PROGRAM_ID, data: instructionData.toBuffer(), }); - const signature = await sendAndConfirmTransaction( - connection, - new Transaction().add(instruction), - [payer, mintKeypair] - ); + const tx = new Transaction(); + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer, mintKeypair); + + const transaction = await client.processTransaction(tx); - console.log(`Token Mint Address: `, mintKeypair.publicKey.toBase58()); - console.log(`Transaction Signature: `, signature); + assert(transaction.logMessages[0].startsWith(`Program ${PROGRAM_ID}`)); + console.log('Token Mint Address: ', mintKeypair.publicKey.toBase58()); }); }); diff --git a/tokens/token-2022/permanent-delegate/anchor/migrations/deploy.ts b/tokens/token-2022/permanent-delegate/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/permanent-delegate/anchor/migrations/deploy.ts +++ b/tokens/token-2022/permanent-delegate/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/permanent-delegate/anchor/tests/permanent-delegate.ts b/tokens/token-2022/permanent-delegate/anchor/tests/permanent-delegate.ts index 7d032a19e..19ded17d9 100644 --- a/tokens/token-2022/permanent-delegate/anchor/tests/permanent-delegate.ts +++ b/tokens/token-2022/permanent-delegate/anchor/tests/permanent-delegate.ts @@ -1,35 +1,28 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { PermanentDelegate } from "../target/types/permanent_delegate"; -import { - TOKEN_2022_PROGRAM_ID, - burnChecked, - createAccount, - getAccount, - mintTo, -} from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { TOKEN_2022_PROGRAM_ID, burnChecked, createAccount, getAccount, mintTo } from '@solana/spl-token'; +import type { PermanentDelegate } from '../target/types/permanent_delegate'; -describe("permanent-delegate", () => { +describe('permanent-delegate', () => { const provider = anchor.AnchorProvider.env(); const connection = provider.connection; const wallet = provider.wallet as anchor.Wallet; anchor.setProvider(provider); - const program = anchor.workspace - .PermanentDelegate as Program; + const program = anchor.workspace.PermanentDelegate as Program; const mintKeypair = new anchor.web3.Keypair(); - it("Create Mint with Permanent Delegate", async () => { + it('Create Mint with Permanent Delegate', async () => { const transactionSignature = await program.methods .initialize() .accounts({ mintAccount: mintKeypair.publicKey }) .signers([mintKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Create Token Account, Mint Tokens, and burn with Permanent Delegate", async () => { + it('Create Token Account, Mint Tokens, and burn with Permanent Delegate', async () => { const amount = 100; // Random keypair to use as owner of Token Account @@ -43,7 +36,7 @@ describe("permanent-delegate", () => { randomKeypair.publicKey, // Token Account owner undefined, // Optional keypair, default to Associated Token Account undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); // Mint tokens to sourceTokenAccount @@ -56,7 +49,7 @@ describe("permanent-delegate", () => { amount, // Amount undefined, // Additional signers undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); // Burn tokens from sourceTokenAccount, using Permanent Delegate @@ -71,16 +64,11 @@ describe("permanent-delegate", () => { 2, // Mint Account decimals undefined, // Additional signers undefined, // Confirmation options - TOKEN_2022_PROGRAM_ID // Token Extension Program ID + TOKEN_2022_PROGRAM_ID, // Token Extension Program ID ); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); - const tokenAccount = await getAccount( - connection, - sourceTokenAccount, - null, - TOKEN_2022_PROGRAM_ID - ); - console.log("Token Account Balance:", Number(tokenAccount.amount)); + const tokenAccount = await getAccount(connection, sourceTokenAccount, null, TOKEN_2022_PROGRAM_ID); + console.log('Token Account Balance:', Number(tokenAccount.amount)); }); }); diff --git a/tokens/token-2022/transfer-fee/anchor/migrations/deploy.ts b/tokens/token-2022/transfer-fee/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/transfer-fee/anchor/migrations/deploy.ts +++ b/tokens/token-2022/transfer-fee/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/transfer-fee/anchor/tests/transfer-fee.ts b/tokens/token-2022/transfer-fee/anchor/tests/transfer-fee.ts index c75d6b8b6..3ae10d0b0 100644 --- a/tokens/token-2022/transfer-fee/anchor/tests/transfer-fee.ts +++ b/tokens/token-2022/transfer-fee/anchor/tests/transfer-fee.ts @@ -1,15 +1,10 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { TransferFee } from "../target/types/transfer_fee"; -import { - TOKEN_2022_PROGRAM_ID, - getAssociatedTokenAddressSync, - getOrCreateAssociatedTokenAccount, - mintTo, -} from "@solana/spl-token"; -import { ASSOCIATED_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { ASSOCIATED_PROGRAM_ID } from '@coral-xyz/anchor/dist/cjs/utils/token'; +import { TOKEN_2022_PROGRAM_ID, getAssociatedTokenAddressSync, getOrCreateAssociatedTokenAccount, mintTo } from '@solana/spl-token'; +import type { TransferFee } from '../target/types/transfer_fee'; -describe("transfer-fee", () => { +describe('transfer-fee', () => { const provider = anchor.AnchorProvider.env(); const connection = provider.connection; const wallet = provider.wallet as anchor.Wallet; @@ -20,21 +15,11 @@ describe("transfer-fee", () => { const mintKeypair = new anchor.web3.Keypair(); const recipient = new anchor.web3.Keypair(); - const senderTokenAccountAddress = getAssociatedTokenAddressSync( - mintKeypair.publicKey, - wallet.publicKey, - false, - TOKEN_2022_PROGRAM_ID - ); + const senderTokenAccountAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, wallet.publicKey, false, TOKEN_2022_PROGRAM_ID); - const recipientTokenAccountAddress = getAssociatedTokenAddressSync( - mintKeypair.publicKey, - recipient.publicKey, - false, - TOKEN_2022_PROGRAM_ID - ); + const recipientTokenAccountAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, recipient.publicKey, false, TOKEN_2022_PROGRAM_ID); - it("Create Mint with Transfer Fee", async () => { + it('Create Mint with Transfer Fee', async () => { const transferFeeBasisPoints = 100; const maximumFee = 1; @@ -43,10 +28,10 @@ describe("transfer-fee", () => { .accounts({ mintAccount: mintKeypair.publicKey }) .signers([mintKeypair]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Mint Tokens", async () => { + it('Mint Tokens', async () => { await getOrCreateAssociatedTokenAccount( connection, wallet.payer, @@ -56,23 +41,13 @@ describe("transfer-fee", () => { null, null, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_PROGRAM_ID + ASSOCIATED_PROGRAM_ID, ); - await mintTo( - connection, - wallet.payer, - mintKeypair.publicKey, - senderTokenAccountAddress, - wallet.payer, - 300, - [], - null, - TOKEN_2022_PROGRAM_ID - ); + await mintTo(connection, wallet.payer, mintKeypair.publicKey, senderTokenAccountAddress, wallet.payer, 300, [], null, TOKEN_2022_PROGRAM_ID); }); - it("Transfer", async () => { + it('Transfer', async () => { const transactionSignature = await program.methods .transfer(new anchor.BN(100)) .accounts({ @@ -83,10 +58,10 @@ describe("transfer-fee", () => { recipientTokenAccount: recipientTokenAccountAddress, }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Transfer Again, fee limit by maximumFee", async () => { + it('Transfer Again, fee limit by maximumFee', async () => { const transactionSignature = await program.methods .transfer(new anchor.BN(200)) .accounts({ @@ -97,10 +72,10 @@ describe("transfer-fee", () => { recipientTokenAccount: recipientTokenAccountAddress, }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Harvest Transfer Fees to Mint Account", async () => { + it('Harvest Transfer Fees to Mint Account', async () => { const transactionSignature = await program.methods .harvest() .accounts({ mintAccount: mintKeypair.publicKey }) @@ -112,10 +87,10 @@ describe("transfer-fee", () => { }, ]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Withdraw Transfer Fees from Mint Account", async () => { + it('Withdraw Transfer Fees from Mint Account', async () => { const transactionSignature = await program.methods .withdraw() .accounts({ @@ -123,10 +98,10 @@ describe("transfer-fee", () => { tokenAccount: senderTokenAccountAddress, }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); - it("Update Transfer Fee", async () => { + it('Update Transfer Fee', async () => { const transferFeeBasisPoints = 0; const maximumFee = 0; @@ -134,6 +109,6 @@ describe("transfer-fee", () => { .updateFee(transferFeeBasisPoints, new anchor.BN(maximumFee)) .accounts({ mintAccount: mintKeypair.publicKey }) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); }); diff --git a/tokens/token-2022/transfer-fee/native/package.json b/tokens/token-2022/transfer-fee/native/package.json index 3adfa05b1..48fb3d18f 100644 --- a/tokens/token-2022/transfer-fee/native/package.json +++ b/tokens/token-2022/transfer-fee/native/package.json @@ -1,6 +1,9 @@ { "scripts": { - "test": "yarn run ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts" + "test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/test.ts", + "build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test", + "build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so", + "deploy": "solana program deploy ./program/target/so/hello_solana_program.so" }, "dependencies": { "@metaplex-foundation/mpl-token-metadata": "^2.5.2", @@ -14,8 +17,9 @@ "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.1", "@types/mocha": "^9.1.1", - "chai": "^4.3.4", + "chai": "^4.4.1", "mocha": "^9.0.3", + "solana-bankrun": "^0.3.0", "ts-mocha": "^10.0.0", "typescript": "^4.3.5" } diff --git a/tokens/token-2022/transfer-fee/native/pnpm-lock.yaml b/tokens/token-2022/transfer-fee/native/pnpm-lock.yaml new file mode 100644 index 000000000..164085a92 --- /dev/null +++ b/tokens/token-2022/transfer-fee/native/pnpm-lock.yaml @@ -0,0 +1,1780 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@metaplex-foundation/mpl-token-metadata': + specifier: ^2.5.2 + version: 2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/spl-token': + specifier: ^0.3.7 + version: 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: ^1.73.0 + version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + borsh: + specifier: ^0.7.0 + version: 0.7.0 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + fs: + specifier: ^0.0.1-security + version: 0.0.1-security + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.1 + version: 4.3.16 + '@types/mocha': + specifier: ^9.1.1 + version: 9.1.1 + chai: + specifier: ^4.4.1 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + solana-bankrun: + specifier: ^0.3.0 + version: 0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + engines: {node: '>=6.9.0'} + + '@metaplex-foundation/beet-solana@0.4.1': + resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==} + + '@metaplex-foundation/beet@0.7.2': + resolution: {integrity: sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg==} + + '@metaplex-foundation/cusper@0.0.2': + resolution: {integrity: sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA==} + + '@metaplex-foundation/mpl-token-metadata@2.13.0': + resolution: {integrity: sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fs@0.0.1-security: + resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + solana-bankrun-darwin-arm64@0.3.0: + resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + solana-bankrun-darwin-universal@0.3.0: + resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==} + engines: {node: '>= 10'} + os: [darwin] + + solana-bankrun-darwin-x64@0.3.0: + resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + solana-bankrun-linux-x64-gnu@0.3.0: + resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun-linux-x64-musl@0.3.0: + resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + solana-bankrun@0.3.0: + resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==} + engines: {node: '>= 10'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@metaplex-foundation/beet-solana@0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 5.0.0 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metaplex-foundation/beet@0.7.2': + dependencies: + ansicolors: 0.3.2 + assert: 2.1.0 + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@metaplex-foundation/cusper@0.0.2': {} + + '@metaplex-foundation/mpl-token-metadata@2.13.0(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@metaplex-foundation/beet': 0.7.2 + '@metaplex-foundation/beet-solana': 0.4.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@metaplex-foundation/cusper': 0.0.2 + '@solana/spl-token': 0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - supports-color + - utf-8-validate + + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.4.0': {} + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.1.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-preview.2': + dependencies: + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-data-structures@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-numbers@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/errors': 2.0.0-preview.2 + fastestsmallesttextencoderdecoder: 1.0.22 + + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-data-structures': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + '@solana/codecs-strings': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/options': 2.0.0-preview.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-preview.2': + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + + '@solana/options@2.0.0-preview.2': + dependencies: + '@solana/codecs-core': 2.0.0-preview.2 + '@solana/codecs-numbers': 2.0.0-preview.2 + + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)': + dependencies: + '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/spl-type-length-value': 0.1.0 + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/spl-type-length-value@0.1.0': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.24.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 7.11.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.12.12 + + '@types/chai@4.3.16': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@ungap/promise-all-settled@1.1.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansicolors@0.3.2: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@1.1.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + balanced-match@1.0.2: {} + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.0: {} + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + emoji-regex@8.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.1.2: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fs.realpath@1.0.0: {} + + fs@0.0.1-security: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + jayson@4.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + jsonparse@1.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + make-error@1.3.6: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: + optional: true + + normalize-path@3.0.0: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@7.11.0: + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + solana-bankrun-darwin-arm64@0.3.0: + optional: true + + solana-bankrun-darwin-universal@0.3.0: + optional: true + + solana-bankrun-darwin-x64@0.3.0: + optional: true + + solana-bankrun-linux-x64-gnu@0.3.0: + optional: true + + solana-bankrun-linux-x64-musl@0.3.0: + optional: true + + solana-bankrun@0.3.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@solana/web3.js': 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + bs58: 4.0.1 + optionalDependencies: + solana-bankrun-darwin-arm64: 0.3.0 + solana-bankrun-darwin-universal: 0.3.0 + solana-bankrun-darwin-x64: 0.3.0 + solana-bankrun-linux-x64-gnu: 0.3.0 + solana-bankrun-linux-x64-musl: 0.3.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.14.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-mocha@10.0.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + type-detect@4.0.8: {} + + typescript@4.9.5: {} + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/tokens/token-2022/transfer-fee/native/program/Cargo.toml b/tokens/token-2022/transfer-fee/native/program/Cargo.toml index 41ecccfe0..e53bd1936 100644 --- a/tokens/token-2022/transfer-fee/native/program/Cargo.toml +++ b/tokens/token-2022/transfer-fee/native/program/Cargo.toml @@ -4,9 +4,9 @@ version = "0.1.0" edition = "2021" [dependencies] -borsh = "0.9.3" +borsh = "0.10.3" borsh-derive = "0.9.1" -solana-program = "1.16.10" +solana-program = "=1.17.25" spl-associated-token-account = { version="2.0.0", features = [ "no-entrypoint" ] } spl-token-2022 = {version = "0.7.0", features = [ "no-entrypoint" ] } diff --git a/tokens/token-2022/transfer-fee/native/tests/test.ts b/tokens/token-2022/transfer-fee/native/tests/test.ts index d992e4de8..d150f9f12 100644 --- a/tokens/token-2022/transfer-fee/native/tests/test.ts +++ b/tokens/token-2022/transfer-fee/native/tests/test.ts @@ -1,23 +1,10 @@ -import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata"; -import { - Connection, - Keypair, - PublicKey, - SystemProgram, - SYSVAR_RENT_PUBKEY, - TransactionInstruction, - Transaction, - sendAndConfirmTransaction, -} from "@solana/web3.js"; -import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import * as borsh from "borsh"; -import { Buffer } from "buffer"; - -function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require("fs").readFileSync(path, "utf-8"))) - ); -} +import { Buffer } from 'node:buffer'; +import { describe, test } from 'node:test'; +import { TOKEN_2022_PROGRAM_ID } from '@solana/spl-token'; +import { Keypair, PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js'; +import * as borsh from 'borsh'; +import { assert } from 'chai'; +import { start } from 'solana-bankrun'; class Assignable { constructor(properties) { @@ -36,32 +23,27 @@ const CreateTokenArgsSchema = new Map([ [ CreateTokenArgs, { - kind: "struct", - fields: [["token_decimals", "u8"]], + kind: 'struct', + fields: [['token_decimals', 'u8']], }, ], ]); -describe("Create Token", async () => { - const connection = new Connection( - `https://api.devnet.solana.com/`, - "confirmed" - ); - const payer = createKeypairFromFile( - require("os").homedir() + "/.config/solana/id.json" - ); - const program = createKeypairFromFile( - "./program/target/deploy/program-keypair.json" - ); +describe('Create Token', async () => { + const PROGRAM_ID = PublicKey.unique(); + const context = await start([{ name: 'token_2022_transfer_fees_program', programId: PROGRAM_ID }], []); + const client = context.banksClient; + const payer = context.payer; - it("Create a Token-22 SPL-Token !", async () => { + test('Create a Token-22 SPL-Token !', async () => { + const blockhash = context.lastBlockhash; const mintKeypair: Keypair = Keypair.generate(); const instructionData = new CreateTokenArgs({ token_decimals: 9, }); - const instruction = new TransactionInstruction({ + const ix = new TransactionInstruction({ keys: [ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account @@ -70,17 +52,17 @@ describe("Create Token", async () => { { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program ], - programId: program.publicKey, + programId: PROGRAM_ID, data: instructionData.toBuffer(), }); - const signature = await sendAndConfirmTransaction( - connection, - new Transaction().add(instruction), - [payer, mintKeypair] - ); + const tx = new Transaction(); + tx.recentBlockhash = blockhash; + tx.add(ix).sign(payer, mintKeypair); + + const transaction = await client.processTransaction(tx); - console.log(`Token Mint Address: `, mintKeypair.publicKey.toBase58()); - console.log(`Transaction Signature: `, signature); + assert(transaction.logMessages[0].startsWith(`Program ${PROGRAM_ID}`)); + console.log('Token Mint Address: ', mintKeypair.publicKey.toBase58()); }); }); diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/package.json b/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/package.json deleted file mode 100644 index 4327c0b29..000000000 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.30.0", - "@solana/spl-token": "^0.4.0", - "@solana/web3.js": "^1.89.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "chai": "^4.3.4", - "mocha": "^9.0.3", - "prettier": "^2.6.2", - "ts-mocha": "^10.0.0", - "typescript": "^4.3.5" - } -} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/tsconfig.json b/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/tsconfig.json deleted file mode 100644 index 558b83e5e..000000000 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/package.json b/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/package.json deleted file mode 100644 index 2450a59f6..000000000 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.30.0", - "@solana/spl-token": "^0.4.0" - }, - "devDependencies": { - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "chai": "^4.3.4", - "mocha": "^9.0.3", - "prettier": "^2.6.2", - "ts-mocha": "^10.0.0", - "typescript": "^4.3.5" - } -} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/tsconfig.json b/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/tsconfig.json deleted file mode 100644 index 558b83e5e..000000000 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/package.json b/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/package.json deleted file mode 100644 index 2450a59f6..000000000 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.30.0", - "@solana/spl-token": "^0.4.0" - }, - "devDependencies": { - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "chai": "^4.3.4", - "mocha": "^9.0.3", - "prettier": "^2.6.2", - "ts-mocha": "^10.0.0", - "typescript": "^4.3.5" - } -} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/tsconfig.json b/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/tsconfig.json deleted file mode 100644 index 558b83e5e..000000000 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/migrations/deploy.ts b/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/migrations/deploy.ts deleted file mode 100644 index 82fb175fa..000000000 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/migrations/deploy.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Migrations are an early feature. Currently, they're nothing more than this -// single deploy script that's invoked from the CLI, injecting a provider -// configured from the workspace's Anchor.toml. - -const anchor = require("@coral-xyz/anchor"); - -module.exports = async function (provider) { - // Configure client to use the provider. - anchor.setProvider(provider); - - // Add your deploy script here. -}; diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/package.json b/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/package.json deleted file mode 100644 index 2450a59f6..000000000 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.30.0", - "@solana/spl-token": "^0.4.0" - }, - "devDependencies": { - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "chai": "^4.3.4", - "mocha": "^9.0.3", - "prettier": "^2.6.2", - "ts-mocha": "^10.0.0", - "typescript": "^4.3.5" - } -} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/tsconfig.json b/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/tsconfig.json deleted file mode 100644 index 558b83e5e..000000000 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/.gitignore b/tokens/token-2022/transfer-hook/counter/anchor/.gitignore similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/.gitignore rename to tokens/token-2022/transfer-hook/counter/anchor/.gitignore diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/.prettierignore b/tokens/token-2022/transfer-hook/counter/anchor/.prettierignore similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/.prettierignore rename to tokens/token-2022/transfer-hook/counter/anchor/.prettierignore diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/Anchor.toml b/tokens/token-2022/transfer-hook/counter/anchor/Anchor.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/Anchor.toml rename to tokens/token-2022/transfer-hook/counter/anchor/Anchor.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/Cargo.toml b/tokens/token-2022/transfer-hook/counter/anchor/Cargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/Cargo.toml rename to tokens/token-2022/transfer-hook/counter/anchor/Cargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/migrations/deploy.ts b/tokens/token-2022/transfer-hook/counter/anchor/migrations/deploy.ts similarity index 77% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/migrations/deploy.ts rename to tokens/token-2022/transfer-hook/counter/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/migrations/deploy.ts +++ b/tokens/token-2022/transfer-hook/counter/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/transfer-hook/counter/anchor/package.json b/tokens/token-2022/transfer-hook/counter/anchor/package.json new file mode 100644 index 000000000..87d960006 --- /dev/null +++ b/tokens/token-2022/transfer-hook/counter/anchor/package.json @@ -0,0 +1,21 @@ +{ + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.0", + "@solana/spl-token": "^0.4.0", + "@solana/web3.js": "^1.89.1" + }, + "devDependencies": { + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "mocha": "^9.0.3", + "prettier": "^2.6.2", + "ts-mocha": "^10.0.0", + "typescript": "^4.3.5" + } +} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/pnpm-lock.yaml b/tokens/token-2022/transfer-hook/counter/anchor/pnpm-lock.yaml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/pnpm-lock.yaml rename to tokens/token-2022/transfer-hook/counter/anchor/pnpm-lock.yaml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/programs/transfer-hook/Cargo.toml b/tokens/token-2022/transfer-hook/counter/anchor/programs/transfer-hook/Cargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/programs/transfer-hook/Cargo.toml rename to tokens/token-2022/transfer-hook/counter/anchor/programs/transfer-hook/Cargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/programs/transfer-hook/Xargo.toml b/tokens/token-2022/transfer-hook/counter/anchor/programs/transfer-hook/Xargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/programs/transfer-hook/Xargo.toml rename to tokens/token-2022/transfer-hook/counter/anchor/programs/transfer-hook/Xargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/programs/transfer-hook/src/lib.rs b/tokens/token-2022/transfer-hook/counter/anchor/programs/transfer-hook/src/lib.rs similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/programs/transfer-hook/src/lib.rs rename to tokens/token-2022/transfer-hook/counter/anchor/programs/transfer-hook/src/lib.rs diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/tests/transfer-hook.ts b/tokens/token-2022/transfer-hook/counter/anchor/tests/transfer-hook.ts similarity index 54% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/tests/transfer-hook.ts rename to tokens/token-2022/transfer-hook/counter/anchor/tests/transfer-hook.ts index db5372137..d5ec0524b 100644 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/tests/transfer-hook.ts +++ b/tokens/token-2022/transfer-hook/counter/anchor/tests/transfer-hook.ts @@ -1,27 +1,21 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { TransferHook } from "../target/types/transfer_hook"; -import { - PublicKey, - SystemProgram, - Transaction, - sendAndConfirmTransaction, - Keypair, -} from "@solana/web3.js"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; import { + ASSOCIATED_TOKEN_PROGRAM_ID, ExtensionType, TOKEN_2022_PROGRAM_ID, - getMintLen, + createAssociatedTokenAccountInstruction, createInitializeMintInstruction, createInitializeTransferHookInstruction, - ASSOCIATED_TOKEN_PROGRAM_ID, - createAssociatedTokenAccountInstruction, createMintToInstruction, - getAssociatedTokenAddressSync, createTransferCheckedWithTransferHookInstruction, -} from "@solana/spl-token"; + getAssociatedTokenAddressSync, + getMintLen, +} from '@solana/spl-token'; +import { Keypair, PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; +import type { TransferHook } from '../target/types/transfer_hook'; -describe("transfer-hook", () => { +describe('transfer-hook', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); @@ -40,7 +34,7 @@ describe("transfer-hook", () => { wallet.publicKey, false, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ); // Recipient token account address @@ -50,26 +44,22 @@ describe("transfer-hook", () => { recipient.publicKey, false, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ); // ExtraAccountMetaList address // Store extra accounts required by the custom transfer hook instruction const [extraAccountMetaListPDA] = PublicKey.findProgramAddressSync( - [Buffer.from("extra-account-metas"), mint.publicKey.toBuffer()], - program.programId + [Buffer.from('extra-account-metas'), mint.publicKey.toBuffer()], + program.programId, ); - const [counterPDA] = PublicKey.findProgramAddressSync( - [Buffer.from("counter")], - program.programId - ); + const [counterPDA] = PublicKey.findProgramAddressSync([Buffer.from('counter')], program.programId); - it("Create Mint Account with Transfer Hook Extension", async () => { + it('Create Mint Account with Transfer Hook Extension', async () => { const extensions = [ExtensionType.TransferHook]; const mintLen = getMintLen(extensions); - const lamports = - await provider.connection.getMinimumBalanceForRentExemption(mintLen); + const lamports = await provider.connection.getMinimumBalanceForRentExemption(mintLen); const transaction = new Transaction().add( SystemProgram.createAccount({ @@ -83,27 +73,19 @@ describe("transfer-hook", () => { mint.publicKey, wallet.publicKey, program.programId, // Transfer Hook Program ID - TOKEN_2022_PROGRAM_ID + TOKEN_2022_PROGRAM_ID, ), - createInitializeMintInstruction( - mint.publicKey, - decimals, - wallet.publicKey, - null, - TOKEN_2022_PROGRAM_ID - ) + createInitializeMintInstruction(mint.publicKey, decimals, wallet.publicKey, null, TOKEN_2022_PROGRAM_ID), ); - const txSig = await sendAndConfirmTransaction( - provider.connection, - transaction, - [wallet.payer, mint], - { skipPreflight: true, commitment: "finalized" } - ); + const txSig = await sendAndConfirmTransaction(provider.connection, transaction, [wallet.payer, mint], { + skipPreflight: true, + commitment: 'finalized', + }); const txDetails = await program.provider.connection.getTransaction(txSig, { maxSupportedTransactionVersion: 0, - commitment: "confirmed", + commitment: 'confirmed', }); console.log(txDetails.meta.logMessages); @@ -112,7 +94,7 @@ describe("transfer-hook", () => { // Create the two token accounts for the transfer-hook enabled mint // Fund the sender token account with 100 tokens - it("Create Token Accounts and Mint Tokens", async () => { + it('Create Token Accounts and Mint Tokens', async () => { // 100 tokens const amount = 100 * 10 ** decimals; @@ -123,7 +105,7 @@ describe("transfer-hook", () => { wallet.publicKey, mint.publicKey, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ), createAssociatedTokenAccountInstruction( wallet.publicKey, @@ -131,30 +113,18 @@ describe("transfer-hook", () => { recipient.publicKey, mint.publicKey, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ), - createMintToInstruction( - mint.publicKey, - sourceTokenAccount, - wallet.publicKey, - amount, - [], - TOKEN_2022_PROGRAM_ID - ) + createMintToInstruction(mint.publicKey, sourceTokenAccount, wallet.publicKey, amount, [], TOKEN_2022_PROGRAM_ID), ); - const txSig = await sendAndConfirmTransaction( - connection, - transaction, - [wallet.payer], - { skipPreflight: true } - ); + const txSig = await sendAndConfirmTransaction(connection, transaction, [wallet.payer], { skipPreflight: true }); console.log(`Transaction Signature: ${txSig}`); }); // Account to store extra accounts required by the transfer hook instruction - it("Create ExtraAccountMetaList Account", async () => { + it('Create ExtraAccountMetaList Account', async () => { const initializeExtraAccountMetaListInstruction = await program.methods .initializeExtraAccountMetaList() .accounts({ @@ -162,53 +132,37 @@ describe("transfer-hook", () => { }) .instruction(); - const transaction = new Transaction().add( - initializeExtraAccountMetaListInstruction - ); + const transaction = new Transaction().add(initializeExtraAccountMetaListInstruction); - const txSig = await sendAndConfirmTransaction( - provider.connection, - transaction, - [wallet.payer], - { skipPreflight: true, commitment: "confirmed" } - ); - console.log("Transaction Signature:", txSig); + const txSig = await sendAndConfirmTransaction(provider.connection, transaction, [wallet.payer], { skipPreflight: true, commitment: 'confirmed' }); + console.log('Transaction Signature:', txSig); }); - it("Transfer Hook with Extra Account Meta", async () => { + it('Transfer Hook with Extra Account Meta', async () => { // 1 tokens const amount = 1 * 10 ** decimals; const amountBigInt = BigInt(amount); - let transferInstructionWithHelper = - await createTransferCheckedWithTransferHookInstruction( - connection, - sourceTokenAccount, - mint.publicKey, - destinationTokenAccount, - wallet.publicKey, - amountBigInt, - decimals, - [], - "confirmed", - TOKEN_2022_PROGRAM_ID - ); - - console.log("Extra accounts meta: " + extraAccountMetaListPDA); - console.log("Counter PDA: " + counterPDA); - console.log( - "Transfer Instruction: " + - JSON.stringify(transferInstructionWithHelper, null, 2) + const transferInstructionWithHelper = await createTransferCheckedWithTransferHookInstruction( + connection, + sourceTokenAccount, + mint.publicKey, + destinationTokenAccount, + wallet.publicKey, + amountBigInt, + decimals, + [], + 'confirmed', + TOKEN_2022_PROGRAM_ID, ); + console.log(`Extra accounts meta: ${extraAccountMetaListPDA}`); + console.log(`Counter PDA: ${counterPDA}`); + console.log(`Transfer Instruction: ${JSON.stringify(transferInstructionWithHelper, null, 2)}`); + const transaction = new Transaction().add(transferInstructionWithHelper); - const txSig = await sendAndConfirmTransaction( - connection, - transaction, - [wallet.payer], - { skipPreflight: true } - ); - console.log("Transfer Signature:", txSig); + const txSig = await sendAndConfirmTransaction(connection, transaction, [wallet.payer], { skipPreflight: true }); + console.log('Transfer Signature:', txSig); }); }); diff --git a/tokens/token-2022/transfer-hook/counter/anchor/tsconfig.json b/tokens/token-2022/transfer-hook/counter/anchor/tsconfig.json new file mode 100644 index 000000000..cd5d2e3d0 --- /dev/null +++ b/tokens/token-2022/transfer-hook/counter/anchor/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/.gitignore b/tokens/token-2022/transfer-hook/hello-world/anchor/.gitignore similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/.gitignore rename to tokens/token-2022/transfer-hook/hello-world/anchor/.gitignore diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/.prettierignore b/tokens/token-2022/transfer-hook/hello-world/anchor/.prettierignore similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/.prettierignore rename to tokens/token-2022/transfer-hook/hello-world/anchor/.prettierignore diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/Anchor.toml b/tokens/token-2022/transfer-hook/hello-world/anchor/Anchor.toml similarity index 88% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/Anchor.toml rename to tokens/token-2022/transfer-hook/hello-world/anchor/Anchor.toml index 0572273f6..b8aa6f036 100644 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/Anchor.toml +++ b/tokens/token-2022/transfer-hook/hello-world/anchor/Anchor.toml @@ -15,7 +15,7 @@ cluster = "Localnet" wallet = "~/.config/solana/id.json" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" [test] startup_wait = 5000 diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/Cargo.toml b/tokens/token-2022/transfer-hook/hello-world/anchor/Cargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/Cargo.toml rename to tokens/token-2022/transfer-hook/hello-world/anchor/Cargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/migrations/deploy.ts b/tokens/token-2022/transfer-hook/hello-world/anchor/migrations/deploy.ts similarity index 77% rename from tokens/token-2022/transfer-hook/anchor/TransferHookCounter/migrations/deploy.ts rename to tokens/token-2022/transfer-hook/hello-world/anchor/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookCounter/migrations/deploy.ts +++ b/tokens/token-2022/transfer-hook/hello-world/anchor/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/token-2022/transfer-hook/hello-world/anchor/package.json b/tokens/token-2022/transfer-hook/hello-world/anchor/package.json new file mode 100644 index 000000000..72e31c157 --- /dev/null +++ b/tokens/token-2022/transfer-hook/hello-world/anchor/package.json @@ -0,0 +1,20 @@ +{ + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.0", + "@solana/spl-token": "^0.4.0" + }, + "devDependencies": { + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "mocha": "^9.0.3", + "prettier": "^2.6.2", + "ts-mocha": "^10.0.0", + "typescript": "^4.3.5" + } +} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/pnpm-lock.yaml b/tokens/token-2022/transfer-hook/hello-world/anchor/pnpm-lock.yaml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/pnpm-lock.yaml rename to tokens/token-2022/transfer-hook/hello-world/anchor/pnpm-lock.yaml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/programs/transfer-hook/Cargo.toml b/tokens/token-2022/transfer-hook/hello-world/anchor/programs/transfer-hook/Cargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/programs/transfer-hook/Cargo.toml rename to tokens/token-2022/transfer-hook/hello-world/anchor/programs/transfer-hook/Cargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/programs/transfer-hook/Xargo.toml b/tokens/token-2022/transfer-hook/hello-world/anchor/programs/transfer-hook/Xargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/programs/transfer-hook/Xargo.toml rename to tokens/token-2022/transfer-hook/hello-world/anchor/programs/transfer-hook/Xargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/programs/transfer-hook/src/lib.rs b/tokens/token-2022/transfer-hook/hello-world/anchor/programs/transfer-hook/src/lib.rs similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/programs/transfer-hook/src/lib.rs rename to tokens/token-2022/transfer-hook/hello-world/anchor/programs/transfer-hook/src/lib.rs diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/tests/transfer-hook.ts b/tokens/token-2022/transfer-hook/hello-world/anchor/tests/transfer-hook.ts similarity index 56% rename from tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/tests/transfer-hook.ts rename to tokens/token-2022/transfer-hook/hello-world/anchor/tests/transfer-hook.ts index 38b8c4f5a..1dd1bdf05 100644 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookHelloWorld/tests/transfer-hook.ts +++ b/tokens/token-2022/transfer-hook/hello-world/anchor/tests/transfer-hook.ts @@ -1,21 +1,17 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { TransferHook } from "../target/types/transfer_hook"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; import { - Transaction, - sendAndConfirmTransaction, - Keypair, -} from "@solana/web3.js"; -import { - TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID, + TOKEN_2022_PROGRAM_ID, createAssociatedTokenAccountInstruction, createMintToInstruction, - getAssociatedTokenAddressSync, createTransferCheckedWithTransferHookInstruction, -} from "@solana/spl-token"; + getAssociatedTokenAddressSync, +} from '@solana/spl-token'; +import { Keypair, Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; +import type { TransferHook } from '../target/types/transfer_hook'; -describe("transfer-hook", () => { +describe('transfer-hook', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); @@ -34,7 +30,7 @@ describe("transfer-hook", () => { wallet.publicKey, false, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ); // Recipient token account address @@ -44,21 +40,21 @@ describe("transfer-hook", () => { recipient.publicKey, false, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ); - it("Create Mint with Transfer Hook Extension", async () => { + it('Create Mint with Transfer Hook Extension', async () => { const transactionSignature = await program.methods .initialize(decimals) .accounts({ mintAccount: mint.publicKey }) .signers([mint]) .rpc({ skipPreflight: true }); - console.log("Your transaction signature", transactionSignature); + console.log('Your transaction signature', transactionSignature); }); // Create the two token accounts for the transfer-hook enabled mint // Fund the sender token account with 100 tokens - it("Create Token Accounts and Mint Tokens", async () => { + it('Create Token Accounts and Mint Tokens', async () => { // 100 tokens const amount = 100 * 10 ** decimals; @@ -69,7 +65,7 @@ describe("transfer-hook", () => { wallet.publicKey, mint.publicKey, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ), createAssociatedTokenAccountInstruction( wallet.publicKey, @@ -77,30 +73,18 @@ describe("transfer-hook", () => { recipient.publicKey, mint.publicKey, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ), - createMintToInstruction( - mint.publicKey, - sourceTokenAccount, - wallet.publicKey, - amount, - [], - TOKEN_2022_PROGRAM_ID - ) + createMintToInstruction(mint.publicKey, sourceTokenAccount, wallet.publicKey, amount, [], TOKEN_2022_PROGRAM_ID), ); - const txSig = await sendAndConfirmTransaction( - connection, - transaction, - [wallet.payer], - { skipPreflight: true } - ); + const txSig = await sendAndConfirmTransaction(connection, transaction, [wallet.payer], { skipPreflight: true }); console.log(`Transaction Signature: ${txSig}`); }); // Account to store extra accounts required by the transfer hook instruction - it("Create ExtraAccountMetaList Account", async () => { + it('Create ExtraAccountMetaList Account', async () => { const initializeExtraAccountMetaListInstruction = await program.methods .initializeExtraAccountMetaList() .accounts({ @@ -108,47 +92,34 @@ describe("transfer-hook", () => { }) .instruction(); - const transaction = new Transaction().add( - initializeExtraAccountMetaListInstruction - ); + const transaction = new Transaction().add(initializeExtraAccountMetaListInstruction); - const txSig = await sendAndConfirmTransaction( - provider.connection, - transaction, - [wallet.payer], - { skipPreflight: true, commitment: "confirmed" } - ); - console.log("Transaction Signature:", txSig); + const txSig = await sendAndConfirmTransaction(provider.connection, transaction, [wallet.payer], { skipPreflight: true, commitment: 'confirmed' }); + console.log('Transaction Signature:', txSig); }); - it("Transfer Hook with Extra Account Meta", async () => { + it('Transfer Hook with Extra Account Meta', async () => { // 1 tokens const amount = 1 * 10 ** decimals; const bigIntAmount = BigInt(amount); // Standard token transfer instruction - const transferInstruction = - await createTransferCheckedWithTransferHookInstruction( - connection, - sourceTokenAccount, - mint.publicKey, - destinationTokenAccount, - wallet.publicKey, - bigIntAmount, - decimals, - [], - "confirmed", - TOKEN_2022_PROGRAM_ID - ); + const transferInstruction = await createTransferCheckedWithTransferHookInstruction( + connection, + sourceTokenAccount, + mint.publicKey, + destinationTokenAccount, + wallet.publicKey, + bigIntAmount, + decimals, + [], + 'confirmed', + TOKEN_2022_PROGRAM_ID, + ); const transaction = new Transaction().add(transferInstruction); - const txSig = await sendAndConfirmTransaction( - connection, - transaction, - [wallet.payer], - { skipPreflight: true } - ); - console.log("Transfer Signature:", txSig); + const txSig = await sendAndConfirmTransaction(connection, transaction, [wallet.payer], { skipPreflight: true }); + console.log('Transfer Signature:', txSig); }); }); diff --git a/tokens/token-2022/transfer-hook/hello-world/anchor/tsconfig.json b/tokens/token-2022/transfer-hook/hello-world/anchor/tsconfig.json new file mode 100644 index 000000000..cd5d2e3d0 --- /dev/null +++ b/tokens/token-2022/transfer-hook/hello-world/anchor/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/.gitignore b/tokens/token-2022/transfer-hook/transfer-cost/anchor/.gitignore similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/.gitignore rename to tokens/token-2022/transfer-hook/transfer-cost/anchor/.gitignore diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/.prettierignore b/tokens/token-2022/transfer-hook/transfer-cost/anchor/.prettierignore similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/.prettierignore rename to tokens/token-2022/transfer-hook/transfer-cost/anchor/.prettierignore diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/Anchor.toml b/tokens/token-2022/transfer-hook/transfer-cost/anchor/Anchor.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/Anchor.toml rename to tokens/token-2022/transfer-hook/transfer-cost/anchor/Anchor.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/Cargo.toml b/tokens/token-2022/transfer-hook/transfer-cost/anchor/Cargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/Cargo.toml rename to tokens/token-2022/transfer-hook/transfer-cost/anchor/Cargo.toml diff --git a/tokens/token-2022/transfer-hook/transfer-cost/anchor/migrations/deploy.ts b/tokens/token-2022/transfer-hook/transfer-cost/anchor/migrations/deploy.ts new file mode 100644 index 000000000..64a1c3599 --- /dev/null +++ b/tokens/token-2022/transfer-hook/transfer-cost/anchor/migrations/deploy.ts @@ -0,0 +1,12 @@ +// Migrations are an early feature. Currently, they're nothing more than this +// single deploy script that's invoked from the CLI, injecting a provider +// configured from the workspace's Anchor.toml. + +const anchor = require('@coral-xyz/anchor'); + +module.exports = async (provider) => { + // Configure client to use the provider. + anchor.setProvider(provider); + + // Add your deploy script here. +}; diff --git a/tokens/token-2022/transfer-hook/transfer-cost/anchor/package.json b/tokens/token-2022/transfer-hook/transfer-cost/anchor/package.json new file mode 100644 index 000000000..72e31c157 --- /dev/null +++ b/tokens/token-2022/transfer-hook/transfer-cost/anchor/package.json @@ -0,0 +1,20 @@ +{ + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.0", + "@solana/spl-token": "^0.4.0" + }, + "devDependencies": { + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "mocha": "^9.0.3", + "prettier": "^2.6.2", + "ts-mocha": "^10.0.0", + "typescript": "^4.3.5" + } +} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/pnpm-lock.yaml b/tokens/token-2022/transfer-hook/transfer-cost/anchor/pnpm-lock.yaml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/pnpm-lock.yaml rename to tokens/token-2022/transfer-hook/transfer-cost/anchor/pnpm-lock.yaml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/programs/transfer-hook/Cargo.toml b/tokens/token-2022/transfer-hook/transfer-cost/anchor/programs/transfer-hook/Cargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/programs/transfer-hook/Cargo.toml rename to tokens/token-2022/transfer-hook/transfer-cost/anchor/programs/transfer-hook/Cargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/programs/transfer-hook/Xargo.toml b/tokens/token-2022/transfer-hook/transfer-cost/anchor/programs/transfer-hook/Xargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/programs/transfer-hook/Xargo.toml rename to tokens/token-2022/transfer-hook/transfer-cost/anchor/programs/transfer-hook/Xargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/programs/transfer-hook/src/lib.rs b/tokens/token-2022/transfer-hook/transfer-cost/anchor/programs/transfer-hook/src/lib.rs similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/programs/transfer-hook/src/lib.rs rename to tokens/token-2022/transfer-hook/transfer-cost/anchor/programs/transfer-hook/src/lib.rs diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/tests/transfer-hook.ts b/tokens/token-2022/transfer-hook/transfer-cost/anchor/tests/transfer-hook.ts similarity index 54% rename from tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/tests/transfer-hook.ts rename to tokens/token-2022/transfer-hook/transfer-cost/anchor/tests/transfer-hook.ts index 8cd718e1e..67cafd6e9 100644 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookTransferCost/tests/transfer-hook.ts +++ b/tokens/token-2022/transfer-hook/transfer-cost/anchor/tests/transfer-hook.ts @@ -1,38 +1,32 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { TransferHook } from "../target/types/transfer_hook"; -import { - PublicKey, - SystemProgram, - Transaction, - sendAndConfirmTransaction, - Keypair, -} from "@solana/web3.js"; +import assert from 'node:assert'; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; import { + ASSOCIATED_TOKEN_PROGRAM_ID, ExtensionType, + NATIVE_MINT, TOKEN_2022_PROGRAM_ID, - getMintLen, + TOKEN_PROGRAM_ID, + createApproveInstruction, + createAssociatedTokenAccountInstruction, createInitializeMintInstruction, createInitializeTransferHookInstruction, - ASSOCIATED_TOKEN_PROGRAM_ID, - createAssociatedTokenAccountInstruction, createMintToInstruction, - getAssociatedTokenAddressSync, - createApproveInstruction, createSyncNativeInstruction, - NATIVE_MINT, - TOKEN_PROGRAM_ID, - getAccount, - getOrCreateAssociatedTokenAccount, createTransferCheckedWithTransferHookInstruction, - getMint, - getTransferHook, + getAccount, + getAssociatedTokenAddressSync, getExtraAccountMetaAddress, getExtraAccountMetas, -} from "@solana/spl-token"; -import assert from "assert"; + getMint, + getMintLen, + getOrCreateAssociatedTokenAccount, + getTransferHook, +} from '@solana/spl-token'; +import { Keypair, PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; +import type { TransferHook } from '../target/types/transfer_hook'; -describe("transfer-hook", () => { +describe('transfer-hook', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); @@ -51,7 +45,7 @@ describe("transfer-hook", () => { wallet.publicKey, false, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ); // Recipient token account address @@ -61,53 +55,38 @@ describe("transfer-hook", () => { recipient.publicKey, false, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ); // PDA delegate to transfer wSOL tokens from sender - const [delegatePDA] = PublicKey.findProgramAddressSync( - [Buffer.from("delegate")], - program.programId - ); + const [delegatePDA] = PublicKey.findProgramAddressSync([Buffer.from('delegate')], program.programId); // Sender wSOL token account address const senderWSolTokenAccount = getAssociatedTokenAddressSync( NATIVE_MINT, // mint - wallet.publicKey // owner + wallet.publicKey, // owner ); // Delegate PDA wSOL token account address, to receive wSOL tokens from sender const delegateWSolTokenAccount = getAssociatedTokenAddressSync( NATIVE_MINT, // mint delegatePDA, // owner - true // allowOwnerOffCurve + true, // allowOwnerOffCurve ); // Create the two WSol token accounts as part of setup before(async () => { // WSol Token Account for sender - await getOrCreateAssociatedTokenAccount( - connection, - wallet.payer, - NATIVE_MINT, - wallet.publicKey - ); + await getOrCreateAssociatedTokenAccount(connection, wallet.payer, NATIVE_MINT, wallet.publicKey); // WSol Token Account for delegate PDA - await getOrCreateAssociatedTokenAccount( - connection, - wallet.payer, - NATIVE_MINT, - delegatePDA, - true - ); + await getOrCreateAssociatedTokenAccount(connection, wallet.payer, NATIVE_MINT, delegatePDA, true); }); - it("Create Mint Account with Transfer Hook Extension", async () => { + it('Create Mint Account with Transfer Hook Extension', async () => { const extensions = [ExtensionType.TransferHook]; const mintLen = getMintLen(extensions); - const lamports = - await provider.connection.getMinimumBalanceForRentExemption(mintLen); + const lamports = await provider.connection.getMinimumBalanceForRentExemption(mintLen); const transaction = new Transaction().add( SystemProgram.createAccount({ @@ -121,28 +100,18 @@ describe("transfer-hook", () => { mint.publicKey, wallet.publicKey, program.programId, // Transfer Hook Program ID - TOKEN_2022_PROGRAM_ID + TOKEN_2022_PROGRAM_ID, ), - createInitializeMintInstruction( - mint.publicKey, - decimals, - wallet.publicKey, - null, - TOKEN_2022_PROGRAM_ID - ) + createInitializeMintInstruction(mint.publicKey, decimals, wallet.publicKey, null, TOKEN_2022_PROGRAM_ID), ); - const txSig = await sendAndConfirmTransaction( - provider.connection, - transaction, - [wallet.payer, mint] - ); + const txSig = await sendAndConfirmTransaction(provider.connection, transaction, [wallet.payer, mint]); console.log(`Transaction Signature: ${txSig}`); }); // Create the two token accounts for the transfer-hook enabled mint // Fund the sender token account with 100 tokens - it("Create Token Accounts and Mint Tokens", async () => { + it('Create Token Accounts and Mint Tokens', async () => { // 100 tokens const amount = 100 * 10 ** decimals; @@ -153,7 +122,7 @@ describe("transfer-hook", () => { wallet.publicKey, mint.publicKey, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ), createAssociatedTokenAccountInstruction( wallet.publicKey, @@ -161,30 +130,18 @@ describe("transfer-hook", () => { recipient.publicKey, mint.publicKey, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ), - createMintToInstruction( - mint.publicKey, - sourceTokenAccount, - wallet.publicKey, - amount, - [], - TOKEN_2022_PROGRAM_ID - ) + createMintToInstruction(mint.publicKey, sourceTokenAccount, wallet.publicKey, amount, [], TOKEN_2022_PROGRAM_ID), ); - const txSig = await sendAndConfirmTransaction( - connection, - transaction, - [wallet.payer], - { skipPreflight: true } - ); + const txSig = await sendAndConfirmTransaction(connection, transaction, [wallet.payer], { skipPreflight: true }); console.log(`Transaction Signature: ${txSig}`); }); // Account to store extra accounts required by the transfer hook instruction - it("Create ExtraAccountMetaList Account", async () => { + it('Create ExtraAccountMetaList Account', async () => { const initializeExtraAccountMetaListInstruction = await program.methods .initializeExtraAccountMetaList() .accounts({ @@ -193,20 +150,13 @@ describe("transfer-hook", () => { }) .instruction(); - const transaction = new Transaction().add( - initializeExtraAccountMetaListInstruction - ); + const transaction = new Transaction().add(initializeExtraAccountMetaListInstruction); - const txSig = await sendAndConfirmTransaction( - provider.connection, - transaction, - [wallet.payer], - { skipPreflight: true, commitment: "confirmed" } - ); - console.log("Transaction Signature:", txSig); + const txSig = await sendAndConfirmTransaction(provider.connection, transaction, [wallet.payer], { skipPreflight: true, commitment: 'confirmed' }); + console.log('Transaction Signature:', txSig); }); - it("Transfer Hook with Extra Account Meta", async () => { + it('Transfer Hook with Extra Account Meta', async () => { // 1 tokens const amount = 1 * 10 ** decimals; const bigIntAmount = BigInt(amount); @@ -219,83 +169,45 @@ describe("transfer-hook", () => { }); // Approve delegate PDA to transfer WSol tokens from sender WSol token account - const approveInstruction = createApproveInstruction( - senderWSolTokenAccount, - delegatePDA, - wallet.publicKey, - amount, - [], - TOKEN_PROGRAM_ID - ); + const approveInstruction = createApproveInstruction(senderWSolTokenAccount, delegatePDA, wallet.publicKey, amount, [], TOKEN_PROGRAM_ID); // Sync sender WSol token account - const syncWrappedSolInstruction = createSyncNativeInstruction( - senderWSolTokenAccount - ); + const syncWrappedSolInstruction = createSyncNativeInstruction(senderWSolTokenAccount); - const mintInfo = await getMint( - connection, - mint.publicKey, - "confirmed", - TOKEN_2022_PROGRAM_ID - ); + const mintInfo = await getMint(connection, mint.publicKey, 'confirmed', TOKEN_2022_PROGRAM_ID); const transferHook = getTransferHook(mintInfo); if (transferHook != null) { - console.log( - "Transfer hook program found: " + JSON.stringify(transferHook, null, 2) - ); + console.log(`Transfer hook program found: ${JSON.stringify(transferHook, null, 2)}`); } - const extraAccountsAccount = getExtraAccountMetaAddress( - mint.publicKey, - transferHook.programId - ); - const extraAccountsInfo = await connection.getAccountInfo( - extraAccountsAccount, - "confirmed" - ); + const extraAccountsAccount = getExtraAccountMetaAddress(mint.publicKey, transferHook.programId); + const extraAccountsInfo = await connection.getAccountInfo(extraAccountsAccount, 'confirmed'); const extraAccountMetas = getExtraAccountMetas(extraAccountsInfo); for (const extraAccountMeta of extraAccountMetas) { - console.log( - "Extra account meta: " + JSON.stringify(extraAccountMeta, null, 2) - ); + console.log(`Extra account meta: ${JSON.stringify(extraAccountMeta, null, 2)}`); } // Standard token transfer instruction - const transferInstruction = - await createTransferCheckedWithTransferHookInstruction( - connection, - sourceTokenAccount, - mint.publicKey, - destinationTokenAccount, - wallet.publicKey, - bigIntAmount, - decimals, - [], - "confirmed", - TOKEN_2022_PROGRAM_ID - ); - - console.log( - "Pushed keys:", - JSON.stringify(transferInstruction.keys, null, 2) + const transferInstruction = await createTransferCheckedWithTransferHookInstruction( + connection, + sourceTokenAccount, + mint.publicKey, + destinationTokenAccount, + wallet.publicKey, + bigIntAmount, + decimals, + [], + 'confirmed', + TOKEN_2022_PROGRAM_ID, ); - const transaction = new Transaction().add( - solTransferInstruction, - syncWrappedSolInstruction, - approveInstruction, - transferInstruction - ); + console.log('Pushed keys:', JSON.stringify(transferInstruction.keys, null, 2)); - const txSig = await sendAndConfirmTransaction( - connection, - transaction, - [wallet.payer], - { skipPreflight: true } - ); - console.log("Transfer Signature:", txSig); + const transaction = new Transaction().add(solTransferInstruction, syncWrappedSolInstruction, approveInstruction, transferInstruction); + + const txSig = await sendAndConfirmTransaction(connection, transaction, [wallet.payer], { skipPreflight: true }); + console.log('Transfer Signature:', txSig); const tokenAccount = await getAccount(connection, delegateWSolTokenAccount); diff --git a/tokens/token-2022/transfer-hook/transfer-cost/anchor/tsconfig.json b/tokens/token-2022/transfer-hook/transfer-cost/anchor/tsconfig.json new file mode 100644 index 000000000..cd5d2e3d0 --- /dev/null +++ b/tokens/token-2022/transfer-hook/transfer-cost/anchor/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/.gitignore b/tokens/token-2022/transfer-hook/whitelist/anchor/.gitignore similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/.gitignore rename to tokens/token-2022/transfer-hook/whitelist/anchor/.gitignore diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/.prettierignore b/tokens/token-2022/transfer-hook/whitelist/anchor/.prettierignore similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/.prettierignore rename to tokens/token-2022/transfer-hook/whitelist/anchor/.prettierignore diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/Anchor.toml b/tokens/token-2022/transfer-hook/whitelist/anchor/Anchor.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/Anchor.toml rename to tokens/token-2022/transfer-hook/whitelist/anchor/Anchor.toml diff --git a/tokens/token-2022/nft-meta-data-pointer/anchor/program/Cargo.toml b/tokens/token-2022/transfer-hook/whitelist/anchor/Cargo.toml similarity index 99% rename from tokens/token-2022/nft-meta-data-pointer/anchor/program/Cargo.toml rename to tokens/token-2022/transfer-hook/whitelist/anchor/Cargo.toml index 29c7a9a19..f39770481 100644 --- a/tokens/token-2022/nft-meta-data-pointer/anchor/program/Cargo.toml +++ b/tokens/token-2022/transfer-hook/whitelist/anchor/Cargo.toml @@ -12,4 +12,3 @@ codegen-units = 1 opt-level = 3 incremental = false codegen-units = 1 - diff --git a/tokens/token-2022/transfer-hook/whitelist/anchor/migrations/deploy.ts b/tokens/token-2022/transfer-hook/whitelist/anchor/migrations/deploy.ts new file mode 100644 index 000000000..64a1c3599 --- /dev/null +++ b/tokens/token-2022/transfer-hook/whitelist/anchor/migrations/deploy.ts @@ -0,0 +1,12 @@ +// Migrations are an early feature. Currently, they're nothing more than this +// single deploy script that's invoked from the CLI, injecting a provider +// configured from the workspace's Anchor.toml. + +const anchor = require('@coral-xyz/anchor'); + +module.exports = async (provider) => { + // Configure client to use the provider. + anchor.setProvider(provider); + + // Add your deploy script here. +}; diff --git a/tokens/token-2022/transfer-hook/whitelist/anchor/package.json b/tokens/token-2022/transfer-hook/whitelist/anchor/package.json new file mode 100644 index 000000000..72e31c157 --- /dev/null +++ b/tokens/token-2022/transfer-hook/whitelist/anchor/package.json @@ -0,0 +1,20 @@ +{ + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.0", + "@solana/spl-token": "^0.4.0" + }, + "devDependencies": { + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "mocha": "^9.0.3", + "prettier": "^2.6.2", + "ts-mocha": "^10.0.0", + "typescript": "^4.3.5" + } +} diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/pnpm-lock.yaml b/tokens/token-2022/transfer-hook/whitelist/anchor/pnpm-lock.yaml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/pnpm-lock.yaml rename to tokens/token-2022/transfer-hook/whitelist/anchor/pnpm-lock.yaml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/programs/transfer-hook/Cargo.toml b/tokens/token-2022/transfer-hook/whitelist/anchor/programs/transfer-hook/Cargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/programs/transfer-hook/Cargo.toml rename to tokens/token-2022/transfer-hook/whitelist/anchor/programs/transfer-hook/Cargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/programs/transfer-hook/Xargo.toml b/tokens/token-2022/transfer-hook/whitelist/anchor/programs/transfer-hook/Xargo.toml similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/programs/transfer-hook/Xargo.toml rename to tokens/token-2022/transfer-hook/whitelist/anchor/programs/transfer-hook/Xargo.toml diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/programs/transfer-hook/src/lib.rs b/tokens/token-2022/transfer-hook/whitelist/anchor/programs/transfer-hook/src/lib.rs similarity index 100% rename from tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/programs/transfer-hook/src/lib.rs rename to tokens/token-2022/transfer-hook/whitelist/anchor/programs/transfer-hook/src/lib.rs diff --git a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/tests/transfer-hook.ts b/tokens/token-2022/transfer-hook/whitelist/anchor/tests/transfer-hook.ts similarity index 56% rename from tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/tests/transfer-hook.ts rename to tokens/token-2022/transfer-hook/whitelist/anchor/tests/transfer-hook.ts index 376cca99b..90e6f7d16 100644 --- a/tokens/token-2022/transfer-hook/anchor/TransferHookWhitelist/tests/transfer-hook.ts +++ b/tokens/token-2022/transfer-hook/whitelist/anchor/tests/transfer-hook.ts @@ -1,26 +1,21 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { TransferHook } from "../target/types/transfer_hook"; -import { - SystemProgram, - Transaction, - sendAndConfirmTransaction, - Keypair, -} from "@solana/web3.js"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; import { + ASSOCIATED_TOKEN_PROGRAM_ID, ExtensionType, TOKEN_2022_PROGRAM_ID, - getMintLen, + createAssociatedTokenAccountInstruction, createInitializeMintInstruction, createInitializeTransferHookInstruction, - ASSOCIATED_TOKEN_PROGRAM_ID, - createAssociatedTokenAccountInstruction, createMintToInstruction, - getAssociatedTokenAddressSync, createTransferCheckedWithTransferHookInstruction, -} from "@solana/spl-token"; + getAssociatedTokenAddressSync, + getMintLen, +} from '@solana/spl-token'; +import { Keypair, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; +import type { TransferHook } from '../target/types/transfer_hook'; -describe("transfer-hook", () => { +describe('transfer-hook', () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); @@ -39,7 +34,7 @@ describe("transfer-hook", () => { wallet.publicKey, false, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ); // Recipient token account address @@ -49,14 +44,13 @@ describe("transfer-hook", () => { recipient.publicKey, false, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ); - it("Create Mint Account with Transfer Hook Extension", async () => { + it('Create Mint Account with Transfer Hook Extension', async () => { const extensions = [ExtensionType.TransferHook]; const mintLen = getMintLen(extensions); - const lamports = - await provider.connection.getMinimumBalanceForRentExemption(mintLen); + const lamports = await provider.connection.getMinimumBalanceForRentExemption(mintLen); const transaction = new Transaction().add( SystemProgram.createAccount({ @@ -70,28 +64,18 @@ describe("transfer-hook", () => { mint.publicKey, wallet.publicKey, program.programId, // Transfer Hook Program ID - TOKEN_2022_PROGRAM_ID + TOKEN_2022_PROGRAM_ID, ), - createInitializeMintInstruction( - mint.publicKey, - decimals, - wallet.publicKey, - null, - TOKEN_2022_PROGRAM_ID - ) + createInitializeMintInstruction(mint.publicKey, decimals, wallet.publicKey, null, TOKEN_2022_PROGRAM_ID), ); - const txSig = await sendAndConfirmTransaction( - provider.connection, - transaction, - [wallet.payer, mint] - ); + const txSig = await sendAndConfirmTransaction(provider.connection, transaction, [wallet.payer, mint]); console.log(`Transaction Signature: ${txSig}`); }); // Create the two token accounts for the transfer-hook enabled mint // Fund the sender token account with 100 tokens - it("Create Token Accounts and Mint Tokens", async () => { + it('Create Token Accounts and Mint Tokens', async () => { // 100 tokens const amount = 100 * 10 ** decimals; @@ -102,7 +86,7 @@ describe("transfer-hook", () => { wallet.publicKey, mint.publicKey, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ), createAssociatedTokenAccountInstruction( wallet.publicKey, @@ -110,30 +94,18 @@ describe("transfer-hook", () => { recipient.publicKey, mint.publicKey, TOKEN_2022_PROGRAM_ID, - ASSOCIATED_TOKEN_PROGRAM_ID + ASSOCIATED_TOKEN_PROGRAM_ID, ), - createMintToInstruction( - mint.publicKey, - sourceTokenAccount, - wallet.publicKey, - amount, - [], - TOKEN_2022_PROGRAM_ID - ) + createMintToInstruction(mint.publicKey, sourceTokenAccount, wallet.publicKey, amount, [], TOKEN_2022_PROGRAM_ID), ); - const txSig = await sendAndConfirmTransaction( - connection, - transaction, - [wallet.payer], - { skipPreflight: true } - ); + const txSig = await sendAndConfirmTransaction(connection, transaction, [wallet.payer], { skipPreflight: true }); console.log(`Transaction Signature: ${txSig}`); }); // Account to store extra accounts required by the transfer hook instruction - it("Create ExtraAccountMetaList Account", async () => { + it('Create ExtraAccountMetaList Account', async () => { const initializeExtraAccountMetaListInstruction = await program.methods .initializeExtraAccountMetaList() .accounts({ @@ -141,21 +113,14 @@ describe("transfer-hook", () => { }) .instruction(); - const transaction = new Transaction().add( - initializeExtraAccountMetaListInstruction - ); + const transaction = new Transaction().add(initializeExtraAccountMetaListInstruction); - const txSig = await sendAndConfirmTransaction( - provider.connection, - transaction, - [wallet.payer], - { skipPreflight: true, commitment: "confirmed" } - ); + const txSig = await sendAndConfirmTransaction(provider.connection, transaction, [wallet.payer], { skipPreflight: true, commitment: 'confirmed' }); - console.log("Transaction Signature:", txSig); + console.log('Transaction Signature:', txSig); }); - it("Add account to white list", async () => { + it('Add account to white list', async () => { const addAccountToWhiteListInstruction = await program.methods .addToWhitelist() .accounts({ @@ -166,43 +131,32 @@ describe("transfer-hook", () => { const transaction = new Transaction().add(addAccountToWhiteListInstruction); - const txSig = await sendAndConfirmTransaction( - connection, - transaction, - [wallet.payer], - { skipPreflight: true } - ); - console.log("White Listed:", txSig); + const txSig = await sendAndConfirmTransaction(connection, transaction, [wallet.payer], { skipPreflight: true }); + console.log('White Listed:', txSig); }); - it("Transfer Hook with Extra Account Meta", async () => { + it('Transfer Hook with Extra Account Meta', async () => { // 1 tokens const amount = 1 * 10 ** decimals; const bigIntAmount = BigInt(amount); // Standard token transfer instruction - const transferInstruction = - await createTransferCheckedWithTransferHookInstruction( - connection, - sourceTokenAccount, - mint.publicKey, - destinationTokenAccount, - wallet.publicKey, - bigIntAmount, - decimals, - [], - "confirmed", - TOKEN_2022_PROGRAM_ID - ); + const transferInstruction = await createTransferCheckedWithTransferHookInstruction( + connection, + sourceTokenAccount, + mint.publicKey, + destinationTokenAccount, + wallet.publicKey, + bigIntAmount, + decimals, + [], + 'confirmed', + TOKEN_2022_PROGRAM_ID, + ); const transaction = new Transaction().add(transferInstruction); - const txSig = await sendAndConfirmTransaction( - connection, - transaction, - [wallet.payer], - { skipPreflight: true } - ); - console.log("Transfer Checked:", txSig); + const txSig = await sendAndConfirmTransaction(connection, transaction, [wallet.payer], { skipPreflight: true }); + console.log('Transfer Checked:', txSig); }); }); diff --git a/tokens/token-2022/transfer-hook/whitelist/anchor/tsconfig.json b/tokens/token-2022/transfer-hook/whitelist/anchor/tsconfig.json new file mode 100644 index 000000000..cd5d2e3d0 --- /dev/null +++ b/tokens/token-2022/transfer-hook/whitelist/anchor/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/tokens/token-swap/anchor/Anchor.toml b/tokens/token-swap/anchor/Anchor.toml index 27d9d719a..bea38412b 100644 --- a/tokens/token-swap/anchor/Anchor.toml +++ b/tokens/token-swap/anchor/Anchor.toml @@ -15,4 +15,8 @@ cluster = "Localnet" wallet = "~/.config/solana/id.json" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" + +[test] +startup_wait = 5000 +shutdown_wait = 2000 diff --git a/tokens/token-swap/anchor/pnpm-lock.yaml b/tokens/token-swap/anchor/pnpm-lock.yaml index d3fdff70c..7e5012978 100644 --- a/tokens/token-swap/anchor/pnpm-lock.yaml +++ b/tokens/token-swap/anchor/pnpm-lock.yaml @@ -1,55 +1,759 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@coral-xyz/anchor': - specifier: ^0.30.0 - version: 0.30.0 - '@solana/spl-token': - specifier: ^0.3.8 - version: 0.3.11(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22) - -devDependencies: - '@types/bn.js': - specifier: ^5.1.0 - version: 5.1.5 - '@types/chai': - specifier: ^4.3.0 - version: 4.3.16 - '@types/mocha': - specifier: ^9.0.0 - version: 9.1.1 - chai: - specifier: ^4.3.4 - version: 4.4.1 - mocha: - specifier: ^9.0.3 - version: 9.2.2 - prettier: - specifier: ^2.6.2 - version: 2.8.8 - ts-mocha: - specifier: ^10.0.0 - version: 10.0.0(mocha@9.2.2) - typescript: - specifier: ^4.3.5 - version: 4.9.5 +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: ^0.30.0 + version: 0.30.0 + '@solana/spl-token': + specifier: ^0.3.8 + version: 0.3.11(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22) + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.16 + '@types/mocha': + specifier: ^9.0.0 + version: 9.1.1 + chai: + specifier: ^4.3.4 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + prettier: + specifier: ^2.6.2 + version: 2.8.8 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 packages: - /@babel/runtime@7.24.5: + '@babel/runtime@7.24.5': resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} + + '@coral-xyz/anchor@0.30.0': + resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.30.0': + resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.11': + resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.0.0: + resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.5': dependencies: regenerator-runtime: 0.14.1 - dev: false - /@coral-xyz/anchor@0.30.0: - resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} - engines: {node: '>=11'} + '@coral-xyz/anchor@0.30.0': dependencies: '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8) '@noble/hashes': 1.4.0 @@ -69,33 +773,20 @@ packages: - bufferutil - encoding - utf-8-validate - dev: false - /@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8): - resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.68.0 + '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8)': dependencies: '@solana/web3.js': 1.91.8 bn.js: 5.2.1 buffer-layout: 1.2.2 - dev: false - /@noble/curves@1.4.0: - resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + '@noble/curves@1.4.0': dependencies: '@noble/hashes': 1.4.0 - dev: false - /@noble/hashes@1.4.0: - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - dev: false + '@noble/hashes@1.4.0': {} - /@solana/buffer-layout-utils@0.2.0: - resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} - engines: {node: '>= 10'} + '@solana/buffer-layout-utils@0.2.0': dependencies: '@solana/buffer-layout': 4.0.1 '@solana/web3.js': 1.91.8 @@ -105,49 +796,34 @@ packages: - bufferutil - encoding - utf-8-validate - dev: false - /@solana/buffer-layout@4.0.1: - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} + '@solana/buffer-layout@4.0.1': dependencies: buffer: 6.0.3 - dev: false - /@solana/codecs-core@2.0.0-preview.2: - resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + '@solana/codecs-core@2.0.0-preview.2': dependencies: '@solana/errors': 2.0.0-preview.2 - dev: false - /@solana/codecs-data-structures@2.0.0-preview.2: - resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + '@solana/codecs-data-structures@2.0.0-preview.2': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 - dev: false - /@solana/codecs-numbers@2.0.0-preview.2: - resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + '@solana/codecs-numbers@2.0.0-preview.2': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 - dev: false - /@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 fastestsmallesttextencoderdecoder: 1.0.22 - dev: false - /@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-data-structures': 2.0.0-preview.2 @@ -156,41 +832,26 @@ packages: '@solana/options': 2.0.0-preview.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: false - /@solana/errors@2.0.0-preview.2: - resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} - hasBin: true + '@solana/errors@2.0.0-preview.2': dependencies: chalk: 5.3.0 commander: 12.0.0 - dev: false - /@solana/options@2.0.0-preview.2: - resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + '@solana/options@2.0.0-preview.2': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 - dev: false - /@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.91.6 + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) '@solana/spl-type-length-value': 0.1.0 '@solana/web3.js': 1.91.8 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: false - /@solana/spl-token@0.3.11(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/buffer-layout': 4.0.1 '@solana/buffer-layout-utils': 0.2.0 @@ -202,17 +863,12 @@ packages: - encoding - fastestsmallesttextencoderdecoder - utf-8-validate - dev: false - /@solana/spl-type-length-value@0.1.0: - resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} - engines: {node: '>=16'} + '@solana/spl-type-length-value@0.1.0': dependencies: buffer: 6.0.3 - dev: false - /@solana/web3.js@1.91.8: - resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + '@solana/web3.js@1.91.8': dependencies: '@babel/runtime': 7.24.5 '@noble/curves': 1.4.0 @@ -233,211 +889,121 @@ packages: - bufferutil - encoding - utf-8-validate - dev: false - /@types/bn.js@5.1.5: - resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + '@types/bn.js@5.1.5': dependencies: '@types/node': 20.12.11 - dev: true - /@types/chai@4.3.16: - resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} - dev: true + '@types/chai@4.3.16': {} - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: '@types/node': 12.20.55 - dev: false - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - requiresBuild: true - dev: true + '@types/json5@0.0.29': optional: true - /@types/mocha@9.1.1: - resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} - dev: true + '@types/mocha@9.1.1': {} - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: false + '@types/node@12.20.55': {} - /@types/node@20.12.11: - resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} + '@types/node@20.12.11': dependencies: undici-types: 5.26.5 - dev: true - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@7.4.7': dependencies: '@types/node': 12.20.55 - dev: false - /@ungap/promise-all-settled@1.1.2: - resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - dev: true + '@ungap/promise-all-settled@1.1.2': {} - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - dev: false - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} + agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 - dev: false - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.1: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrify@1.0.1: {} - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + assertion-error@1.1.0: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base-x@3.0.9: - resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + base-x@3.0.9: dependencies: safe-buffer: 5.2.1 - dev: false - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false + base64-js@1.5.1: {} - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - requiresBuild: true + bigint-buffer@1.1.5: dependencies: bindings: 1.5.0 - dev: false - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false + bignumber.js@9.1.2: {} - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.3.0: {} - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 - dev: false - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false + bn.js@5.2.1: {} - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + borsh@0.7.0: dependencies: bn.js: 5.2.1 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - dev: false - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true + browser-stdout@1.3.1: {} - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@4.0.1: dependencies: base-x: 3.0.9 - dev: false - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer-layout@1.2.2: - resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} - engines: {node: '>=4.5'} - dev: false + buffer-layout@1.2.2: {} - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: false - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true + bufferutil@4.0.8: dependencies: node-gyp-build: 4.8.1 - dev: false - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + camelcase@6.3.0: {} - /chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} + chai@4.4.1: dependencies: assertion-error: 1.1.0 check-error: 1.0.3 @@ -446,30 +1012,19 @@ packages: loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false + chalk@5.3.0: {} - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@1.0.3: dependencies: get-func-name: 2.0.2 - dev: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.3: dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -480,195 +1035,102 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /commander@12.0.0: - resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} - engines: {node: '>=18'} - dev: false + commander@12.0.0: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false + commander@2.20.3: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + cross-fetch@3.1.8: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: false - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - dev: false + crypto-hash@1.3.0: {} - /debug@4.3.3(supports-color@8.1.1): - resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.3(supports-color@8.1.1): dependencies: ms: 2.1.2 supports-color: 8.1.1 - dev: true - /decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - dev: true + decamelize@4.0.0: {} - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} + deep-eql@4.1.3: dependencies: type-detect: 4.0.8 - dev: true - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - dev: false + delay@5.0.0: {} - /diff@3.5.0: - resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} - engines: {node: '>=0.3.1'} - dev: true + diff@3.5.0: {} - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true + diff@5.0.0: {} - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dot-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 - dev: false - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: false + es6-promise@4.2.8: {} - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - dev: false - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - dev: true + escalade@3.1.2: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false + eventemitter3@4.0.7: {} - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - dev: false + eyes@0.1.8: {} - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - dev: false + fast-stable-stringify@1.0.0: {} - /fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - dev: false + fastestsmallesttextencoderdecoder@1.0.22: {} - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: false + file-uri-to-path@1.0.0: {} - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true + flat@5.0.2: {} - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true + get-func-name@2.0.2: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + glob@7.2.0: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -676,99 +1138,51 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /growl@1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} - dev: true + growl@1.10.5: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true + he@1.2.0: {} - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - dev: false - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false + ieee754@1.2.1: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true + is-plain-obj@2.1.0: {} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isomorphic-ws@4.0.1(ws@7.5.9): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' + isomorphic-ws@4.0.1(ws@7.5.9): dependencies: ws: 7.5.9 - dev: false - /jayson@4.1.0: - resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} - engines: {node: '>=8'} - hasBin: true + jayson@4.1.0: dependencies: '@types/connect': 3.4.38 '@types/node': 12.20.55 @@ -785,92 +1199,54 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: false - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: false + json-stringify-safe@5.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - requiresBuild: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true optional: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: false + jsonparse@1.3.1: {} - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@2.3.7: dependencies: get-func-name: 2.0.2 - dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lower-case@2.0.2: dependencies: tslib: 2.6.2 - dev: false - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@4.2.1: - resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} - engines: {node: '>=10'} + minimatch@4.2.1: dependencies: brace-expansion: 1.1.11 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /mocha@9.2.2: - resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} - engines: {node: '>= 12.0.0'} - hasBin: true + mocha@9.2.2: dependencies: '@ungap/promise-all-settled': 1.1.2 ansi-colors: 4.1.1 @@ -896,124 +1272,63 @@ packages: yargs: 16.2.0 yargs-parser: 20.2.4 yargs-unparser: 2.0.0 - dev: true - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + ms@2.1.3: {} - /nanoid@3.3.1: - resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.1: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.6.2 - dev: false - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: false - /node-gyp-build@4.8.1: - resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} - hasBin: true - requiresBuild: true - dev: false + node-gyp-build@4.8.1: {} - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - dev: false + pako@2.1.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathval@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prettier@2.8.8: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false + regenerator-runtime@0.14.1: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /rpc-websockets@7.11.0: - resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + rpc-websockets@7.11.0: dependencies: eventemitter3: 4.0.7 uuid: 8.3.2 @@ -1021,126 +1336,72 @@ packages: optionalDependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 - dev: false - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.2.1: {} - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + serialize-javascript@6.0.0: dependencies: randombytes: 2.1.0 - dev: true - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - dev: false - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - requiresBuild: true - dev: true + strip-bom@3.0.0: optional: true - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /superstruct@0.14.2: - resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} - dev: false + superstruct@0.14.2: {} - /superstruct@0.15.5: - resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} - dev: false + superstruct@0.15.5: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - dev: false + text-encoding-utf-8@1.0.2: {} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: false + through@2.3.8: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - dev: false + toml@3.0.0: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false + tr46@0.0.3: {} - /ts-mocha@10.0.0(mocha@9.2.2): - resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} - engines: {node: '>= 6.X.X'} - hasBin: true - peerDependencies: - mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + ts-mocha@10.0.0(mocha@9.2.2): dependencies: mocha: 9.2.2 ts-node: 7.0.1 optionalDependencies: tsconfig-paths: 3.15.0 - dev: true - /ts-node@7.0.1: - resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} - engines: {node: '>=4.2.0'} - hasBin: true + ts-node@7.0.1: dependencies: arrify: 1.0.1 buffer-from: 1.1.2 @@ -1150,139 +1411,69 @@ packages: mkdirp: 0.5.6 source-map-support: 0.5.21 yn: 2.0.0 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - requiresBuild: true + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true optional: true - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false + tslib@2.6.2: {} - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + type-detect@4.0.8: {} - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + typescript@4.9.5: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@5.26.5: {} - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true + utf-8-validate@5.0.10: dependencies: node-gyp-build: 4.8.1 - dev: false - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false + uuid@8.3.2: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false + webidl-conversions@3.0.1: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: false - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /workerpool@6.2.0: - resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} - dev: true + workerpool@6.2.0: {} - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false + ws@7.5.9: {} - /ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 - dev: false - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.4: {} - /yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} + yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 decamelize: 4.0.0 flat: 5.0.2 is-plain-obj: 2.1.0 - dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.1.2 @@ -1291,14 +1482,7 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.4 - dev: true - /yn@2.0.0: - resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} - engines: {node: '>=4'} - dev: true + yn@2.0.0: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} diff --git a/tokens/token-swap/anchor/programs/token-swap/Cargo.toml b/tokens/token-swap/anchor/programs/token-swap/Cargo.toml index a47cf87e4..179eab9e0 100644 --- a/tokens/token-swap/anchor/programs/token-swap/Cargo.toml +++ b/tokens/token-swap/anchor/programs/token-swap/Cargo.toml @@ -18,7 +18,5 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] [dependencies] anchor-lang = { version = "0.30.0", features = ["init-if-needed"] } -anchor-spl = { version = "0.30.0" } -fixed = "1.23.1" - - +anchor-spl = { version = "0.30.0", features = ["metadata"] } +fixed = "1.27.0" diff --git a/tokens/token-swap/anchor/tests/create-amm.ts b/tokens/token-swap/anchor/tests/create-amm.ts index 53e6c58cf..66b117a75 100644 --- a/tokens/token-swap/anchor/tests/create-amm.ts +++ b/tokens/token-swap/anchor/tests/create-amm.ts @@ -1,10 +1,10 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { SwapExample } from "../target/types/swap_example"; -import { expect } from "chai"; -import { TestValues, createValues, expectRevert } from "./utils"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { expect } from 'chai'; +import type { SwapExample } from '../target/types/swap_example'; +import { type TestValues, createValues, expectRevert } from './utils'; -describe("Create AMM", () => { +describe('Create AMM', () => { const provider = anchor.AnchorProvider.env(); const connection = provider.connection; anchor.setProvider(provider); @@ -17,28 +17,18 @@ describe("Create AMM", () => { values = createValues(); }); - it("Creation", async () => { - await program.methods - .createAmm(values.id, values.fee) - .accounts({ amm: values.ammKey, admin: values.admin.publicKey }) - .rpc(); + it('Creation', async () => { + await program.methods.createAmm(values.id, values.fee).accounts({ amm: values.ammKey, admin: values.admin.publicKey }).rpc(); const ammAccount = await program.account.amm.fetch(values.ammKey); expect(ammAccount.id.toString()).to.equal(values.id.toString()); - expect(ammAccount.admin.toString()).to.equal( - values.admin.publicKey.toString() - ); + expect(ammAccount.admin.toString()).to.equal(values.admin.publicKey.toString()); expect(ammAccount.fee.toString()).to.equal(values.fee.toString()); }); - it("Invalid fee", async () => { + it('Invalid fee', async () => { values.fee = 10000; - await expectRevert( - program.methods - .createAmm(values.id, values.fee) - .accounts({ amm: values.ammKey, admin: values.admin.publicKey }) - .rpc() - ); + await expectRevert(program.methods.createAmm(values.id, values.fee).accounts({ amm: values.ammKey, admin: values.admin.publicKey }).rpc()); }); }); diff --git a/tokens/token-swap/anchor/tests/create-pool.ts b/tokens/token-swap/anchor/tests/create-pool.ts index df4d2b9f8..38f61be8e 100644 --- a/tokens/token-swap/anchor/tests/create-pool.ts +++ b/tokens/token-swap/anchor/tests/create-pool.ts @@ -1,10 +1,10 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { PublicKey } from "@solana/web3.js"; -import { SwapExample } from "../target/types/swap_example"; -import { TestValues, createValues, expectRevert, mintingTokens } from "./utils"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { PublicKey } from '@solana/web3.js'; +import type { SwapExample } from '../target/types/swap_example'; +import { type TestValues, createValues, expectRevert, mintingTokens } from './utils'; -describe("Create pool", () => { +describe('Create pool', () => { const provider = anchor.AnchorProvider.env(); const connection = provider.connection; anchor.setProvider(provider); @@ -16,10 +16,7 @@ describe("Create pool", () => { beforeEach(async () => { values = createValues(); - await program.methods - .createAmm(values.id, values.fee) - .accounts({ amm: values.ammKey, admin: values.admin.publicKey }) - .rpc(); + await program.methods.createAmm(values.id, values.fee).accounts({ amm: values.ammKey, admin: values.admin.publicKey }).rpc(); await mintingTokens({ connection, @@ -29,7 +26,7 @@ describe("Create pool", () => { }); }); - it("Creation", async () => { + it('Creation', async () => { await program.methods .createPool() .accounts({ @@ -45,25 +42,16 @@ describe("Create pool", () => { .rpc({ skipPreflight: true }); }); - it("Invalid mints", async () => { + it('Invalid mints', async () => { values = createValues({ mintBKeypair: values.mintAKeypair, poolKey: PublicKey.findProgramAddressSync( - [ - values.id.toBuffer(), - values.mintAKeypair.publicKey.toBuffer(), - values.mintBKeypair.publicKey.toBuffer(), - ], - program.programId + [values.id.toBuffer(), values.mintAKeypair.publicKey.toBuffer(), values.mintBKeypair.publicKey.toBuffer()], + program.programId, )[0], poolAuthority: PublicKey.findProgramAddressSync( - [ - values.id.toBuffer(), - values.mintAKeypair.publicKey.toBuffer(), - values.mintBKeypair.publicKey.toBuffer(), - Buffer.from("authority"), - ], - program.programId + [values.id.toBuffer(), values.mintAKeypair.publicKey.toBuffer(), values.mintBKeypair.publicKey.toBuffer(), Buffer.from('authority')], + program.programId, )[0], }); @@ -80,7 +68,7 @@ describe("Create pool", () => { poolAccountA: values.poolAccountA, poolAccountB: values.poolAccountB, }) - .rpc() + .rpc(), ); }); }); diff --git a/tokens/token-swap/anchor/tests/deposit-liquidity.ts b/tokens/token-swap/anchor/tests/deposit-liquidity.ts index 00e842208..cd07a9793 100644 --- a/tokens/token-swap/anchor/tests/deposit-liquidity.ts +++ b/tokens/token-swap/anchor/tests/deposit-liquidity.ts @@ -1,10 +1,10 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { SwapExample } from "../target/types/swap_example"; -import { expect } from "chai"; -import { TestValues, createValues, mintingTokens } from "./utils"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { expect } from 'chai'; +import type { SwapExample } from '../target/types/swap_example'; +import { type TestValues, createValues, mintingTokens } from './utils'; -describe("Deposit liquidity", () => { +describe('Deposit liquidity', () => { const provider = anchor.AnchorProvider.env(); const connection = provider.connection; anchor.setProvider(provider); @@ -16,10 +16,7 @@ describe("Deposit liquidity", () => { beforeEach(async () => { values = createValues(); - await program.methods - .createAmm(values.id, values.fee) - .accounts({ amm: values.ammKey, admin: values.admin.publicKey }) - .rpc(); + await program.methods.createAmm(values.id, values.fee).accounts({ amm: values.ammKey, admin: values.admin.publicKey }).rpc(); await mintingTokens({ connection, @@ -43,7 +40,7 @@ describe("Deposit liquidity", () => { .rpc(); }); - it("Deposit equal amounts", async () => { + it('Deposit equal amounts', async () => { await program.methods .depositLiquidity(values.depositAmountA, values.depositAmountA) .accounts({ @@ -62,22 +59,11 @@ describe("Deposit liquidity", () => { .signers([values.admin]) .rpc({ skipPreflight: true }); - const depositTokenAccountLiquditiy = - await connection.getTokenAccountBalance(values.liquidityAccount); - expect(depositTokenAccountLiquditiy.value.amount).to.equal( - values.depositAmountA.sub(values.minimumLiquidity).toString() - ); - const depositTokenAccountA = await connection.getTokenAccountBalance( - values.holderAccountA - ); - expect(depositTokenAccountA.value.amount).to.equal( - values.defaultSupply.sub(values.depositAmountA).toString() - ); - const depositTokenAccountB = await connection.getTokenAccountBalance( - values.holderAccountB - ); - expect(depositTokenAccountB.value.amount).to.equal( - values.defaultSupply.sub(values.depositAmountA).toString() - ); + const depositTokenAccountLiquditiy = await connection.getTokenAccountBalance(values.liquidityAccount); + expect(depositTokenAccountLiquditiy.value.amount).to.equal(values.depositAmountA.sub(values.minimumLiquidity).toString()); + const depositTokenAccountA = await connection.getTokenAccountBalance(values.holderAccountA); + expect(depositTokenAccountA.value.amount).to.equal(values.defaultSupply.sub(values.depositAmountA).toString()); + const depositTokenAccountB = await connection.getTokenAccountBalance(values.holderAccountB); + expect(depositTokenAccountB.value.amount).to.equal(values.defaultSupply.sub(values.depositAmountA).toString()); }); }); diff --git a/tokens/token-swap/anchor/tests/swap.ts b/tokens/token-swap/anchor/tests/swap.ts index 25cf03a19..e9f068d43 100644 --- a/tokens/token-swap/anchor/tests/swap.ts +++ b/tokens/token-swap/anchor/tests/swap.ts @@ -1,11 +1,11 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { SwapExample } from "../target/types/swap_example"; -import { expect } from "chai"; -import { TestValues, createValues, mintingTokens } from "./utils"; -import { BN } from "bn.js"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { BN } from 'bn.js'; +import { expect } from 'chai'; +import type { SwapExample } from '../target/types/swap_example'; +import { type TestValues, createValues, mintingTokens } from './utils'; -describe("Swap", () => { +describe('Swap', () => { const provider = anchor.AnchorProvider.env(); const connection = provider.connection; anchor.setProvider(provider); @@ -17,10 +17,7 @@ describe("Swap", () => { beforeEach(async () => { values = createValues(); - await program.methods - .createAmm(values.id, values.fee) - .accounts({ amm: values.ammKey, admin: values.admin.publicKey }) - .rpc(); + await program.methods.createAmm(values.id, values.fee).accounts({ amm: values.ammKey, admin: values.admin.publicKey }).rpc(); await mintingTokens({ connection, @@ -62,7 +59,7 @@ describe("Swap", () => { .rpc({ skipPreflight: true }); }); - it("Swap from A to B", async () => { + it('Swap from A to B', async () => { const input = new BN(10 ** 6); await program.methods .swapExactTokensForTokens(true, input, new BN(100)) @@ -81,20 +78,10 @@ describe("Swap", () => { .signers([values.admin]) .rpc({ skipPreflight: true }); - const traderTokenAccountA = await connection.getTokenAccountBalance( - values.holderAccountA - ); - const traderTokenAccountB = await connection.getTokenAccountBalance( - values.holderAccountB - ); - expect(traderTokenAccountA.value.amount).to.equal( - values.defaultSupply.sub(values.depositAmountA).sub(input).toString() - ); - expect(Number(traderTokenAccountB.value.amount)).to.be.greaterThan( - values.defaultSupply.sub(values.depositAmountB).toNumber() - ); - expect(Number(traderTokenAccountB.value.amount)).to.be.lessThan( - values.defaultSupply.sub(values.depositAmountB).add(input).toNumber() - ); + const traderTokenAccountA = await connection.getTokenAccountBalance(values.holderAccountA); + const traderTokenAccountB = await connection.getTokenAccountBalance(values.holderAccountB); + expect(traderTokenAccountA.value.amount).to.equal(values.defaultSupply.sub(values.depositAmountA).sub(input).toString()); + expect(Number(traderTokenAccountB.value.amount)).to.be.greaterThan(values.defaultSupply.sub(values.depositAmountB).toNumber()); + expect(Number(traderTokenAccountB.value.amount)).to.be.lessThan(values.defaultSupply.sub(values.depositAmountB).add(input).toNumber()); }); }); diff --git a/tokens/token-swap/anchor/tests/utils.ts b/tokens/token-swap/anchor/tests/utils.ts index 7fa968b34..a9b7a98e5 100644 --- a/tokens/token-swap/anchor/tests/utils.ts +++ b/tokens/token-swap/anchor/tests/utils.ts @@ -1,27 +1,20 @@ -import * as anchor from "@coral-xyz/anchor"; -import { - createMint, - getAssociatedTokenAddressSync, - getOrCreateAssociatedTokenAccount, - mintTo, -} from "@solana/spl-token"; -import { Keypair, PublicKey, Connection, Signer } from "@solana/web3.js"; -import { BN } from "bn.js"; +import * as anchor from '@coral-xyz/anchor'; +import { createMint, getAssociatedTokenAddressSync, getOrCreateAssociatedTokenAccount, mintTo } from '@solana/spl-token'; +import { type Connection, Keypair, PublicKey, type Signer } from '@solana/web3.js'; +import { BN } from 'bn.js'; export async function sleep(seconds: number) { new Promise((resolve) => setTimeout(resolve, seconds * 1000)); } export const generateSeededKeypair = (seed: string) => { - return Keypair.fromSeed( - anchor.utils.bytes.utf8.encode(anchor.utils.sha256.hash(seed)).slice(0, 32) - ); + return Keypair.fromSeed(anchor.utils.bytes.utf8.encode(anchor.utils.sha256.hash(seed)).slice(0, 32)); }; export const expectRevert = async (promise: Promise) => { try { await promise; - throw new Error("Expected a revert"); + throw new Error('Expected a revert'); } catch { return; } @@ -45,62 +38,26 @@ export const mintingTokens = async ({ decimals?: number; }) => { // Mint tokens - await connection.confirmTransaction( - await connection.requestAirdrop(creator.publicKey, 10 ** 10) - ); - await createMint( - connection, - creator, - creator.publicKey, - creator.publicKey, - decimals, - mintAKeypair - ); - await createMint( - connection, - creator, - creator.publicKey, - creator.publicKey, - decimals, - mintBKeypair - ); - await getOrCreateAssociatedTokenAccount( - connection, - holder, - mintAKeypair.publicKey, - holder.publicKey, - true - ); - await getOrCreateAssociatedTokenAccount( - connection, - holder, - mintBKeypair.publicKey, - holder.publicKey, - true - ); + await connection.confirmTransaction(await connection.requestAirdrop(creator.publicKey, 10 ** 10)); + await createMint(connection, creator, creator.publicKey, creator.publicKey, decimals, mintAKeypair); + await createMint(connection, creator, creator.publicKey, creator.publicKey, decimals, mintBKeypair); + await getOrCreateAssociatedTokenAccount(connection, holder, mintAKeypair.publicKey, holder.publicKey, true); + await getOrCreateAssociatedTokenAccount(connection, holder, mintBKeypair.publicKey, holder.publicKey, true); await mintTo( connection, creator, mintAKeypair.publicKey, - getAssociatedTokenAddressSync( - mintAKeypair.publicKey, - holder.publicKey, - true - ), + getAssociatedTokenAddressSync(mintAKeypair.publicKey, holder.publicKey, true), creator.publicKey, - mintedAmount * 10 ** decimals + mintedAmount * 10 ** decimals, ); await mintTo( connection, creator, mintBKeypair.publicKey, - getAssociatedTokenAddressSync( - mintBKeypair.publicKey, - holder.publicKey, - true - ), + getAssociatedTokenAddressSync(mintBKeypair.publicKey, holder.publicKey, true), creator.publicKey, - mintedAmount * 10 ** decimals + mintedAmount * 10 ** decimals, ); }; @@ -131,47 +88,26 @@ type TestValuesDefaults = { export function createValues(defaults?: TestValuesDefaults): TestValues { const id = defaults?.id || Keypair.generate().publicKey; const admin = Keypair.generate(); - const ammKey = PublicKey.findProgramAddressSync( - [id.toBuffer()], - anchor.workspace.SwapExample.programId - )[0]; + const ammKey = PublicKey.findProgramAddressSync([id.toBuffer()], anchor.workspace.SwapExample.programId)[0]; // Making sure tokens are in the right order const mintAKeypair = Keypair.generate(); let mintBKeypair = Keypair.generate(); - while ( - new BN(mintBKeypair.publicKey.toBytes()).lt( - new BN(mintAKeypair.publicKey.toBytes()) - ) - ) { + while (new BN(mintBKeypair.publicKey.toBytes()).lt(new BN(mintAKeypair.publicKey.toBytes()))) { mintBKeypair = Keypair.generate(); } const poolAuthority = PublicKey.findProgramAddressSync( - [ - ammKey.toBuffer(), - mintAKeypair.publicKey.toBuffer(), - mintBKeypair.publicKey.toBuffer(), - Buffer.from("authority"), - ], - anchor.workspace.SwapExample.programId + [ammKey.toBuffer(), mintAKeypair.publicKey.toBuffer(), mintBKeypair.publicKey.toBuffer(), Buffer.from('authority')], + anchor.workspace.SwapExample.programId, )[0]; const mintLiquidity = PublicKey.findProgramAddressSync( - [ - ammKey.toBuffer(), - mintAKeypair.publicKey.toBuffer(), - mintBKeypair.publicKey.toBuffer(), - Buffer.from("liquidity"), - ], - anchor.workspace.SwapExample.programId + [ammKey.toBuffer(), mintAKeypair.publicKey.toBuffer(), mintBKeypair.publicKey.toBuffer(), Buffer.from('liquidity')], + anchor.workspace.SwapExample.programId, )[0]; const poolKey = PublicKey.findProgramAddressSync( - [ - ammKey.toBuffer(), - mintAKeypair.publicKey.toBuffer(), - mintBKeypair.publicKey.toBuffer(), - ], - anchor.workspace.SwapExample.programId + [ammKey.toBuffer(), mintAKeypair.publicKey.toBuffer(), mintBKeypair.publicKey.toBuffer()], + anchor.workspace.SwapExample.programId, )[0]; return { id, @@ -183,31 +119,11 @@ export function createValues(defaults?: TestValuesDefaults): TestValues { mintLiquidity, poolKey, poolAuthority, - poolAccountA: getAssociatedTokenAddressSync( - mintAKeypair.publicKey, - poolAuthority, - true - ), - poolAccountB: getAssociatedTokenAddressSync( - mintBKeypair.publicKey, - poolAuthority, - true - ), - liquidityAccount: getAssociatedTokenAddressSync( - mintLiquidity, - admin.publicKey, - true - ), - holderAccountA: getAssociatedTokenAddressSync( - mintAKeypair.publicKey, - admin.publicKey, - true - ), - holderAccountB: getAssociatedTokenAddressSync( - mintBKeypair.publicKey, - admin.publicKey, - true - ), + poolAccountA: getAssociatedTokenAddressSync(mintAKeypair.publicKey, poolAuthority, true), + poolAccountB: getAssociatedTokenAddressSync(mintBKeypair.publicKey, poolAuthority, true), + liquidityAccount: getAssociatedTokenAddressSync(mintLiquidity, admin.publicKey, true), + holderAccountA: getAssociatedTokenAddressSync(mintAKeypair.publicKey, admin.publicKey, true), + holderAccountB: getAssociatedTokenAddressSync(mintBKeypair.publicKey, admin.publicKey, true), depositAmountA: new BN(4 * 10 ** 6), depositAmountB: new BN(1 * 10 ** 6), minimumLiquidity: new BN(100), diff --git a/tokens/token-swap/anchor/tests/withdraw-liquidity.ts b/tokens/token-swap/anchor/tests/withdraw-liquidity.ts index 9427b8f31..c5c8df632 100644 --- a/tokens/token-swap/anchor/tests/withdraw-liquidity.ts +++ b/tokens/token-swap/anchor/tests/withdraw-liquidity.ts @@ -1,10 +1,10 @@ -import * as anchor from "@coral-xyz/anchor"; -import { Program } from "@coral-xyz/anchor"; -import { SwapExample } from "../target/types/swap_example"; -import { expect } from "chai"; -import { TestValues, createValues, mintingTokens } from "./utils"; +import * as anchor from '@coral-xyz/anchor'; +import type { Program } from '@coral-xyz/anchor'; +import { expect } from 'chai'; +import type { SwapExample } from '../target/types/swap_example'; +import { type TestValues, createValues, mintingTokens } from './utils'; -describe("Withdraw liquidity", () => { +describe('Withdraw liquidity', () => { const provider = anchor.AnchorProvider.env(); const connection = provider.connection; anchor.setProvider(provider); @@ -16,10 +16,7 @@ describe("Withdraw liquidity", () => { beforeEach(async () => { values = createValues(); - await program.methods - .createAmm(values.id, values.fee) - .accounts({ amm: values.ammKey, admin: values.admin.publicKey }) - .rpc(); + await program.methods.createAmm(values.id, values.fee).accounts({ amm: values.ammKey, admin: values.admin.publicKey }).rpc(); await mintingTokens({ connection, @@ -61,7 +58,7 @@ describe("Withdraw liquidity", () => { .rpc({ skipPreflight: true }); }); - it("Withdraw everything", async () => { + it('Withdraw everything', async () => { await program.methods .withdrawLiquidity(values.depositAmountA.sub(values.minimumLiquidity)) .accounts({ @@ -81,27 +78,13 @@ describe("Withdraw liquidity", () => { .signers([values.admin]) .rpc({ skipPreflight: true }); - const liquidityTokenAccount = await connection.getTokenAccountBalance( - values.liquidityAccount - ); - const depositTokenAccountA = await connection.getTokenAccountBalance( - values.holderAccountA - ); - const depositTokenAccountB = await connection.getTokenAccountBalance( - values.holderAccountB - ); - expect(liquidityTokenAccount.value.amount).to.equal("0"); - expect(Number(depositTokenAccountA.value.amount)).to.be.lessThan( - values.defaultSupply.toNumber() - ); - expect(Number(depositTokenAccountA.value.amount)).to.be.greaterThan( - values.defaultSupply.sub(values.depositAmountA).toNumber() - ); - expect(Number(depositTokenAccountB.value.amount)).to.be.lessThan( - values.defaultSupply.toNumber() - ); - expect(Number(depositTokenAccountB.value.amount)).to.be.greaterThan( - values.defaultSupply.sub(values.depositAmountA).toNumber() - ); + const liquidityTokenAccount = await connection.getTokenAccountBalance(values.liquidityAccount); + const depositTokenAccountA = await connection.getTokenAccountBalance(values.holderAccountA); + const depositTokenAccountB = await connection.getTokenAccountBalance(values.holderAccountB); + expect(liquidityTokenAccount.value.amount).to.equal('0'); + expect(Number(depositTokenAccountA.value.amount)).to.be.lessThan(values.defaultSupply.toNumber()); + expect(Number(depositTokenAccountA.value.amount)).to.be.greaterThan(values.defaultSupply.sub(values.depositAmountA).toNumber()); + expect(Number(depositTokenAccountB.value.amount)).to.be.lessThan(values.defaultSupply.toNumber()); + expect(Number(depositTokenAccountB.value.amount)).to.be.greaterThan(values.defaultSupply.sub(values.depositAmountA).toNumber()); }); }); diff --git a/tokens/token-swap/anchor/tsconfig.json b/tokens/token-swap/anchor/tsconfig.json index 558b83e5e..cd5d2e3d0 100644 --- a/tokens/token-swap/anchor/tsconfig.json +++ b/tokens/token-swap/anchor/tsconfig.json @@ -1,11 +1,10 @@ { - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/tokens/transfer-tokens/anchor/Anchor.toml b/tokens/transfer-tokens/anchor/Anchor.toml index 0074c4815..1e6439a5f 100644 --- a/tokens/transfer-tokens/anchor/Anchor.toml +++ b/tokens/transfer-tokens/anchor/Anchor.toml @@ -11,11 +11,11 @@ transfer_tokens = "nHi9DdNjuupjQ3c8AJU9sChB5gLbZvTLsJQouY4hU67" url = "https://api.apr.dev" [provider] -cluster = "devnet" +cluster = "localnet" wallet = "~/.config/solana/id.json" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" [test] startup_wait = 5000 diff --git a/tokens/transfer-tokens/anchor/pnpm-lock.yaml b/tokens/transfer-tokens/anchor/pnpm-lock.yaml index 2c8247c25..d26c2c48f 100644 --- a/tokens/transfer-tokens/anchor/pnpm-lock.yaml +++ b/tokens/transfer-tokens/anchor/pnpm-lock.yaml @@ -1,52 +1,751 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@coral-xyz/anchor': - specifier: ^0.30.0 - version: 0.30.0 - '@solana/spl-token': - specifier: ^0.3.8 - version: 0.3.11(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22) - -devDependencies: - '@types/bn.js': - specifier: ^5.1.0 - version: 5.1.5 - '@types/chai': - specifier: ^4.3.0 - version: 4.3.16 - '@types/mocha': - specifier: ^9.0.0 - version: 9.1.1 - chai: - specifier: ^4.3.4 - version: 4.4.1 - mocha: - specifier: ^9.0.3 - version: 9.2.2 - ts-mocha: - specifier: ^10.0.0 - version: 10.0.0(mocha@9.2.2) - typescript: - specifier: ^4.3.5 - version: 4.9.5 +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: ^0.30.0 + version: 0.30.0 + '@solana/spl-token': + specifier: ^0.3.8 + version: 0.3.11(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22) + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.5 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.16 + '@types/mocha': + specifier: ^9.0.0 + version: 9.1.1 + chai: + specifier: ^4.3.4 + version: 4.4.1 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + ts-mocha: + specifier: ^10.0.0 + version: 10.0.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 packages: - /@babel/runtime@7.24.5: + '@babel/runtime@7.24.5': resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} + + '@coral-xyz/anchor@0.30.0': + resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.30.0': + resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-preview.2': + resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + + '@solana/codecs-data-structures@2.0.0-preview.2': + resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + + '@solana/codecs-numbers@2.0.0-preview.2': + resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + + '@solana/codecs-strings@2.0.0-preview.2': + resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + + '@solana/codecs@2.0.0-preview.2': + resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + + '@solana/errors@2.0.0-preview.2': + resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} + hasBin: true + + '@solana/options@2.0.0-preview.2': + resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + + '@solana/spl-token-metadata@0.1.4': + resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + + '@solana/spl-token@0.3.11': + resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.88.0 + + '@solana/spl-type-length-value@0.1.0': + resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.91.8': + resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@20.12.11': + resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@12.0.0: + resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@7.11.0: + resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.0.0: + resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.24.5': dependencies: regenerator-runtime: 0.14.1 - dev: false - /@coral-xyz/anchor@0.30.0: - resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} - engines: {node: '>=11'} + '@coral-xyz/anchor@0.30.0': dependencies: '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.8) '@noble/hashes': 1.4.0 @@ -66,33 +765,20 @@ packages: - bufferutil - encoding - utf-8-validate - dev: false - /@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8): - resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.68.0 + '@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.8)': dependencies: '@solana/web3.js': 1.91.8 bn.js: 5.2.1 buffer-layout: 1.2.2 - dev: false - /@noble/curves@1.4.0: - resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + '@noble/curves@1.4.0': dependencies: '@noble/hashes': 1.4.0 - dev: false - /@noble/hashes@1.4.0: - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - dev: false + '@noble/hashes@1.4.0': {} - /@solana/buffer-layout-utils@0.2.0: - resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} - engines: {node: '>= 10'} + '@solana/buffer-layout-utils@0.2.0': dependencies: '@solana/buffer-layout': 4.0.1 '@solana/web3.js': 1.91.8 @@ -102,49 +788,34 @@ packages: - bufferutil - encoding - utf-8-validate - dev: false - /@solana/buffer-layout@4.0.1: - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} + '@solana/buffer-layout@4.0.1': dependencies: buffer: 6.0.3 - dev: false - /@solana/codecs-core@2.0.0-preview.2: - resolution: {integrity: sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg==} + '@solana/codecs-core@2.0.0-preview.2': dependencies: '@solana/errors': 2.0.0-preview.2 - dev: false - /@solana/codecs-data-structures@2.0.0-preview.2: - resolution: {integrity: sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg==} + '@solana/codecs-data-structures@2.0.0-preview.2': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 - dev: false - /@solana/codecs-numbers@2.0.0-preview.2: - resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==} + '@solana/codecs-numbers@2.0.0-preview.2': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 - dev: false - /@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g==} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 + '@solana/codecs-strings@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 '@solana/errors': 2.0.0-preview.2 fastestsmallesttextencoderdecoder: 1.0.22 - dev: false - /@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA==} + '@solana/codecs@2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-data-structures': 2.0.0-preview.2 @@ -153,41 +824,26 @@ packages: '@solana/options': 2.0.0-preview.2 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: false - /@solana/errors@2.0.0-preview.2: - resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==} - hasBin: true + '@solana/errors@2.0.0-preview.2': dependencies: chalk: 5.3.0 commander: 12.0.0 - dev: false - /@solana/options@2.0.0-preview.2: - resolution: {integrity: sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w==} + '@solana/options@2.0.0-preview.2': dependencies: '@solana/codecs-core': 2.0.0-preview.2 '@solana/codecs-numbers': 2.0.0-preview.2 - dev: false - /@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.91.6 + '@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) '@solana/spl-type-length-value': 0.1.0 '@solana/web3.js': 1.91.8 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - dev: false - /@solana/spl-token@0.3.11(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22): - resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.88.0 + '@solana/spl-token@0.3.11(@solana/web3.js@1.91.8)(fastestsmallesttextencoderdecoder@1.0.22)': dependencies: '@solana/buffer-layout': 4.0.1 '@solana/buffer-layout-utils': 0.2.0 @@ -199,17 +855,12 @@ packages: - encoding - fastestsmallesttextencoderdecoder - utf-8-validate - dev: false - /@solana/spl-type-length-value@0.1.0: - resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==} - engines: {node: '>=16'} + '@solana/spl-type-length-value@0.1.0': dependencies: buffer: 6.0.3 - dev: false - /@solana/web3.js@1.91.8: - resolution: {integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw==} + '@solana/web3.js@1.91.8': dependencies: '@babel/runtime': 7.24.5 '@noble/curves': 1.4.0 @@ -230,211 +881,121 @@ packages: - bufferutil - encoding - utf-8-validate - dev: false - /@types/bn.js@5.1.5: - resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + '@types/bn.js@5.1.5': dependencies: '@types/node': 20.12.11 - dev: true - /@types/chai@4.3.16: - resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} - dev: true + '@types/chai@4.3.16': {} - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: '@types/node': 12.20.55 - dev: false - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - requiresBuild: true - dev: true + '@types/json5@0.0.29': optional: true - /@types/mocha@9.1.1: - resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} - dev: true + '@types/mocha@9.1.1': {} - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: false + '@types/node@12.20.55': {} - /@types/node@20.12.11: - resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} + '@types/node@20.12.11': dependencies: undici-types: 5.26.5 - dev: true - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@7.4.7': dependencies: '@types/node': 12.20.55 - dev: false - /@ungap/promise-all-settled@1.1.2: - resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - dev: true + '@ungap/promise-all-settled@1.1.2': {} - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - dev: false - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} + agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 - dev: false - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.1: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrify@1.0.1: {} - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + assertion-error@1.1.0: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base-x@3.0.9: - resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + base-x@3.0.9: dependencies: safe-buffer: 5.2.1 - dev: false - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false + base64-js@1.5.1: {} - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - requiresBuild: true + bigint-buffer@1.1.5: dependencies: bindings: 1.5.0 - dev: false - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false + bignumber.js@9.1.2: {} - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.3.0: {} - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 - dev: false - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false + bn.js@5.2.1: {} - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + borsh@0.7.0: dependencies: bn.js: 5.2.1 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - dev: false - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true + browser-stdout@1.3.1: {} - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@4.0.1: dependencies: base-x: 3.0.9 - dev: false - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer-layout@1.2.2: - resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} - engines: {node: '>=4.5'} - dev: false + buffer-layout@1.2.2: {} - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: false - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true + bufferutil@4.0.8: dependencies: node-gyp-build: 4.8.1 - dev: false - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + camelcase@6.3.0: {} - /chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} + chai@4.4.1: dependencies: assertion-error: 1.1.0 check-error: 1.0.3 @@ -443,30 +1004,19 @@ packages: loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false + chalk@5.3.0: {} - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@1.0.3: dependencies: get-func-name: 2.0.2 - dev: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.3: dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -477,195 +1027,102 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /commander@12.0.0: - resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} - engines: {node: '>=18'} - dev: false + commander@12.0.0: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false + commander@2.20.3: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + cross-fetch@3.1.8: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: false - /crypto-hash@1.3.0: - resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} - engines: {node: '>=8'} - dev: false + crypto-hash@1.3.0: {} - /debug@4.3.3(supports-color@8.1.1): - resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.3(supports-color@8.1.1): dependencies: ms: 2.1.2 supports-color: 8.1.1 - dev: true - /decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - dev: true + decamelize@4.0.0: {} - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} + deep-eql@4.1.3: dependencies: type-detect: 4.0.8 - dev: true - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - dev: false + delay@5.0.0: {} - /diff@3.5.0: - resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} - engines: {node: '>=0.3.1'} - dev: true + diff@3.5.0: {} - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true + diff@5.0.0: {} - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dot-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 - dev: false - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: false + es6-promise@4.2.8: {} - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - dev: false - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - dev: true + escalade@3.1.2: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false + eventemitter3@4.0.7: {} - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - dev: false + eyes@0.1.8: {} - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - dev: false + fast-stable-stringify@1.0.0: {} - /fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - dev: false + fastestsmallesttextencoderdecoder@1.0.22: {} - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: false + file-uri-to-path@1.0.0: {} - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true + flat@5.0.2: {} - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true + get-func-name@2.0.2: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + glob@7.2.0: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -673,99 +1130,51 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /growl@1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} - dev: true + growl@1.10.5: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true + he@1.2.0: {} - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - dev: false - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false + ieee754@1.2.1: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true + is-plain-obj@2.1.0: {} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isomorphic-ws@4.0.1(ws@7.5.9): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' + isomorphic-ws@4.0.1(ws@7.5.9): dependencies: ws: 7.5.9 - dev: false - /jayson@4.1.0: - resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} - engines: {node: '>=8'} - hasBin: true + jayson@4.1.0: dependencies: '@types/connect': 3.4.38 '@types/node': 12.20.55 @@ -782,92 +1191,54 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: false - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: false + json-stringify-safe@5.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - requiresBuild: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true optional: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: false + jsonparse@1.3.1: {} - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@2.3.7: dependencies: get-func-name: 2.0.2 - dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lower-case@2.0.2: dependencies: tslib: 2.6.2 - dev: false - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@4.2.1: - resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} - engines: {node: '>=10'} + minimatch@4.2.1: dependencies: brace-expansion: 1.1.11 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /mocha@9.2.2: - resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} - engines: {node: '>= 12.0.0'} - hasBin: true + mocha@9.2.2: dependencies: '@ungap/promise-all-settled': 1.1.2 ansi-colors: 4.1.1 @@ -893,118 +1264,61 @@ packages: yargs: 16.2.0 yargs-parser: 20.2.4 yargs-unparser: 2.0.0 - dev: true - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + ms@2.1.3: {} - /nanoid@3.3.1: - resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.1: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.6.2 - dev: false - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: false - /node-gyp-build@4.8.1: - resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} - hasBin: true - requiresBuild: true - dev: false + node-gyp-build@4.8.1: {} - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - dev: false + pako@2.1.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathval@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false + regenerator-runtime@0.14.1: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /rpc-websockets@7.11.0: - resolution: {integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w==} + rpc-websockets@7.11.0: dependencies: eventemitter3: 4.0.7 uuid: 8.3.2 @@ -1012,126 +1326,72 @@ packages: optionalDependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 - dev: false - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.2.1: {} - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + serialize-javascript@6.0.0: dependencies: randombytes: 2.1.0 - dev: true - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - dev: false - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - requiresBuild: true - dev: true + strip-bom@3.0.0: optional: true - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /superstruct@0.14.2: - resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} - dev: false + superstruct@0.14.2: {} - /superstruct@0.15.5: - resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} - dev: false + superstruct@0.15.5: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - dev: false + text-encoding-utf-8@1.0.2: {} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: false + through@2.3.8: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - dev: false + toml@3.0.0: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false + tr46@0.0.3: {} - /ts-mocha@10.0.0(mocha@9.2.2): - resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} - engines: {node: '>= 6.X.X'} - hasBin: true - peerDependencies: - mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X + ts-mocha@10.0.0(mocha@9.2.2): dependencies: mocha: 9.2.2 ts-node: 7.0.1 optionalDependencies: tsconfig-paths: 3.15.0 - dev: true - /ts-node@7.0.1: - resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} - engines: {node: '>=4.2.0'} - hasBin: true + ts-node@7.0.1: dependencies: arrify: 1.0.1 buffer-from: 1.1.2 @@ -1141,139 +1401,69 @@ packages: mkdirp: 0.5.6 source-map-support: 0.5.21 yn: 2.0.0 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - requiresBuild: true + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true optional: true - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false + tslib@2.6.2: {} - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + type-detect@4.0.8: {} - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + typescript@4.9.5: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@5.26.5: {} - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true + utf-8-validate@5.0.10: dependencies: node-gyp-build: 4.8.1 - dev: false - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false + uuid@8.3.2: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false + webidl-conversions@3.0.1: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: false - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /workerpool@6.2.0: - resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} - dev: true + workerpool@6.2.0: {} - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false + ws@7.5.9: {} - /ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 - dev: false - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.4: {} - /yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} + yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 decamelize: 4.0.0 flat: 5.0.2 is-plain-obj: 2.1.0 - dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.1.2 @@ -1282,14 +1472,7 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.4 - dev: true - /yn@2.0.0: - resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} - engines: {node: '>=4'} - dev: true + yn@2.0.0: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} diff --git a/tokens/transfer-tokens/anchor/tests/test.ts b/tokens/transfer-tokens/anchor/tests/test.ts index 52ac198a4..9d5bf24d3 100644 --- a/tokens/transfer-tokens/anchor/tests/test.ts +++ b/tokens/transfer-tokens/anchor/tests/test.ts @@ -1,19 +1,18 @@ -import * as anchor from "@coral-xyz/anchor"; -import { TransferTokens } from "../target/types/transfer_tokens"; -import { Keypair } from "@solana/web3.js"; -import { getAssociatedTokenAddressSync } from "@solana/spl-token"; +import * as anchor from '@coral-xyz/anchor'; +import { getAssociatedTokenAddressSync } from '@solana/spl-token'; +import { Keypair } from '@solana/web3.js'; +import type { TransferTokens } from '../target/types/transfer_tokens'; -describe("Transfer Tokens", () => { +describe('Transfer Tokens', () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const payer = provider.wallet as anchor.Wallet; - const program = anchor.workspace - .TransferTokens as anchor.Program; + const program = anchor.workspace.TransferTokens as anchor.Program; const metadata = { - name: "Solana Gold", - symbol: "GOLDSOL", - uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json", + name: 'Solana Gold', + symbol: 'GOLDSOL', + uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json', }; // Generate new keypair to use as address for mint account. @@ -23,18 +22,12 @@ describe("Transfer Tokens", () => { const recipient = new Keypair(); // Derive the associated token address account for the mint and payer. - const senderTokenAddress = getAssociatedTokenAddressSync( - mintKeypair.publicKey, - payer.publicKey - ); + const senderTokenAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, payer.publicKey); // Derive the associated token address account for the mint and recipient. - const recepientTokenAddress = getAssociatedTokenAddressSync( - mintKeypair.publicKey, - recipient.publicKey - ); + const recepientTokenAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, recipient.publicKey); - it("Create an SPL Token!", async () => { + it('Create an SPL Token!', async () => { const transactionSignature = await program.methods .createToken(metadata.name, metadata.symbol, metadata.uri) .accounts({ @@ -44,12 +37,12 @@ describe("Transfer Tokens", () => { .signers([mintKeypair]) .rpc(); - console.log("Success!"); + console.log('Success!'); console.log(` Mint Address: ${mintKeypair.publicKey}`); console.log(` Transaction Signature: ${transactionSignature}`); }); - it("Mint tokens!", async () => { + it('Mint tokens!', async () => { // Amount of tokens to mint. const amount = new anchor.BN(100); @@ -64,12 +57,12 @@ describe("Transfer Tokens", () => { }) .rpc(); - console.log("Success!"); + console.log('Success!'); console.log(` Associated Token Account Address: ${senderTokenAddress}`); console.log(` Transaction Signature: ${transactionSignature}`); }); - it("Transfer tokens!", async () => { + it('Transfer tokens!', async () => { // Amount of tokens to transfer. const amount = new anchor.BN(50); @@ -84,7 +77,7 @@ describe("Transfer Tokens", () => { }) .rpc(); - console.log("Success!"); + console.log('Success!'); console.log(` Transaction Signature: ${transactionSignature}`); }); }); diff --git a/tokens/transfer-tokens/native/tests/instructions.ts b/tokens/transfer-tokens/native/tests/instructions.ts index 664517e98..f433aadcd 100644 --- a/tokens/transfer-tokens/native/tests/instructions.ts +++ b/tokens/transfer-tokens/native/tests/instructions.ts @@ -1,87 +1,88 @@ -import * as borsh from "borsh"; - +import * as borsh from 'borsh'; class Assignable { - constructor(properties) { - Object.keys(properties).map((key) => { - return (this[key] = properties[key]); - }); - }; -}; + constructor(properties) { + Object.keys(properties).map((key) => { + return (this[key] = properties[key]); + }); + } +} export enum MyInstruction { - Create, - MintNft, - MintSpl, - TransferTokens, + Create = 0, + MintNft = 1, + MintSpl = 2, + TransferTokens = 3, } export class CreateTokenArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this)); + } +} const CreateTokenArgsSchema = new Map([ - [ - CreateTokenArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['token_title', 'string'], - ['token_symbol', 'string'], - ['token_uri', 'string'], - ['decimals', 'u8'], - ] - } - ] + [ + CreateTokenArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['token_title', 'string'], + ['token_symbol', 'string'], + ['token_uri', 'string'], + ['decimals', 'u8'], + ], + }, + ], ]); export class MintNftArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(MintNftArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(MintNftArgsSchema, this)); + } +} const MintNftArgsSchema = new Map([ - [ - MintNftArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ] - } - ] + [ + MintNftArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], ]); export class MintSplArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(MintSplArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(MintSplArgsSchema, this)); + } +} const MintSplArgsSchema = new Map([ - [ - MintSplArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['quantity', 'u64'], - ] - } - ] + [ + MintSplArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['quantity', 'u64'], + ], + }, + ], ]); export class TransferTokensArgs extends Assignable { - toBuffer() { - return Buffer.from(borsh.serialize(TransferTokensArgsSchema, this)); - } -}; + toBuffer() { + return Buffer.from(borsh.serialize(TransferTokensArgsSchema, this)); + } +} const TransferTokensArgsSchema = new Map([ - [ - TransferTokensArgs, { - kind: 'struct', - fields: [ - ['instruction', 'u8'], - ['quantity', 'u64'], - ] - } - ] -]); \ No newline at end of file + [ + TransferTokensArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['quantity', 'u64'], + ], + }, + ], +]); diff --git a/tokens/transfer-tokens/native/tests/test.ts b/tokens/transfer-tokens/native/tests/test.ts index 920ae968a..8c63196e6 100644 --- a/tokens/transfer-tokens/native/tests/test.ts +++ b/tokens/transfer-tokens/native/tests/test.ts @@ -1,329 +1,297 @@ -import { - PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID -} from '@metaplex-foundation/mpl-token-metadata'; +import { Buffer } from 'node:buffer'; +import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from '@metaplex-foundation/mpl-token-metadata'; +import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getAssociatedTokenAddress } from '@solana/spl-token'; import { - Connection, - Keypair, - PublicKey, - SystemProgram, - SYSVAR_RENT_PUBKEY, - TransactionInstruction, - Transaction, - sendAndConfirmTransaction, + Connection, + Keypair, + PublicKey, + SYSVAR_RENT_PUBKEY, + SystemProgram, + Transaction, + TransactionInstruction, + sendAndConfirmTransaction, } from '@solana/web3.js'; -import { - ASSOCIATED_TOKEN_PROGRAM_ID, - getAssociatedTokenAddress, - TOKEN_PROGRAM_ID, -} from '@solana/spl-token'; -import { Buffer } from "buffer"; -import { - CreateTokenArgs, - MintNftArgs, - MintSplArgs, - TransferTokensArgs, - MyInstruction, -} from './instructions'; import { BN } from 'bn.js'; - +import { CreateTokenArgs, MintNftArgs, MintSplArgs, MyInstruction, TransferTokensArgs } from './instructions'; function createKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8"))) - ) -}; - - -describe("Transferring Tokens", async () => { - - // const connection = new Connection(`http://localhost:8899`, 'confirmed'); - const connection = new Connection(`https://api.devnet.solana.com/`, 'confirmed'); - const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json'); - const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); - - const tokenMintKeypair: Keypair = Keypair.generate(); - const nftMintKeypair: Keypair = Keypair.generate(); - - const recipientWallet = Keypair.generate(); - - it("Create an SPL Token!", async () => { - - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - tokenMintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const instructionData = new CreateTokenArgs({ - instruction: MyInstruction.Create, - token_title: "Solana Gold", - token_symbol: "GOLDSOL", - token_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json", - decimals: 9, - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: tokenMintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); - - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, tokenMintKeypair] - ); - - console.log("Success!"); - console.log(` Mint Address: ${tokenMintKeypair.publicKey}`); - console.log(` Tx Signature: ${sx}`); + return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8')))); +} + +describe('Transferring Tokens', async () => { + // const connection = new Connection(`http://localhost:8899`, 'confirmed'); + const connection = new Connection('https://api.devnet.solana.com/', 'confirmed'); + const payer = createKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`); + const program = createKeypairFromFile('./program/target/deploy/program-keypair.json'); + + const tokenMintKeypair: Keypair = Keypair.generate(); + const nftMintKeypair: Keypair = Keypair.generate(); + + const recipientWallet = Keypair.generate(); + + it('Create an SPL Token!', async () => { + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), tokenMintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + + const instructionData = new CreateTokenArgs({ + instruction: MyInstruction.Create, + token_title: 'Solana Gold', + token_symbol: 'GOLDSOL', + token_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json', + decimals: 9, + }); + + const ix = new TransactionInstruction({ + keys: [ + { + pubkey: tokenMintKeypair.publicKey, + isSigner: true, + isWritable: true, + }, // Mint account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), }); - it("Create an NFT!", async () => { - - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - nftMintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const instructionData = new CreateTokenArgs({ - instruction: MyInstruction.Create, - token_title: "Homer NFT", - token_symbol: "HOMR", - token_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json", - decimals: 0, - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: nftMintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); - - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, nftMintKeypair] - ); - - console.log("Success!"); - console.log(` Mint Address: ${nftMintKeypair.publicKey}`); - console.log(` Tx Signature: ${sx}`); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, tokenMintKeypair]); + + console.log('Success!'); + console.log(` Mint Address: ${tokenMintKeypair.publicKey}`); + console.log(` Tx Signature: ${sx}`); + }); + + it('Create an NFT!', async () => { + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), nftMintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + + const instructionData = new CreateTokenArgs({ + instruction: MyInstruction.Create, + token_title: 'Homer NFT', + token_symbol: 'HOMR', + token_uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json', + decimals: 0, }); - it("Mint some tokens to your wallet!", async () => { - - const associatedTokenAccountAddress = await getAssociatedTokenAddress( - tokenMintKeypair.publicKey, - payer.publicKey, - ); - - const instructionData = new MintSplArgs({ - instruction: MyInstruction.MintSpl, - quantity: new BN(150), - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: tokenMintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: associatedTokenAccountAddress, isSigner: false, isWritable: true }, // ATA - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SystemProgram.programId, isSigner: false, isWritable: true }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); - - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer], - ); - - console.log("Success!"); - console.log(` ATA Address: ${associatedTokenAccountAddress}`); - console.log(` Tx Signature: ${sx}`); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: nftMintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), }); - it("Mint the NFT to your wallet!", async () => { - - const metadataAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - nftMintKeypair.publicKey.toBuffer(), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const editionAddress = (PublicKey.findProgramAddressSync( - [ - Buffer.from("metadata"), - TOKEN_METADATA_PROGRAM_ID.toBuffer(), - nftMintKeypair.publicKey.toBuffer(), - Buffer.from("edition"), - ], - TOKEN_METADATA_PROGRAM_ID - ))[0]; - - const associatedTokenAccountAddress = await getAssociatedTokenAddress( - nftMintKeypair.publicKey, - payer.publicKey, - ); - - const instructionData = new MintNftArgs({ - instruction: MyInstruction.MintNft, - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: nftMintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account - { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account - { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account - { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account - { pubkey: associatedTokenAccountAddress, isSigner: false, isWritable: true }, // ATA - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Associated token program - { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program - ], - programId: program.publicKey, - data: instructionData.toBuffer(), - }); - - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer], - ); - - console.log("Success!"); - console.log(` ATA Address: ${associatedTokenAccountAddress}`); - console.log(` Tx Signature: ${sx}`); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, nftMintKeypair]); + + console.log('Success!'); + console.log(` Mint Address: ${nftMintKeypair.publicKey}`); + console.log(` Tx Signature: ${sx}`); + }); + + it('Mint some tokens to your wallet!', async () => { + const associatedTokenAccountAddress = await getAssociatedTokenAddress(tokenMintKeypair.publicKey, payer.publicKey); + + const instructionData = new MintSplArgs({ + instruction: MyInstruction.MintSpl, + quantity: new BN(150), }); - it("Prep a new test wallet for transfers", async () => { - - await connection.confirmTransaction( - await connection.requestAirdrop( - recipientWallet.publicKey, - await connection.getMinimumBalanceForRentExemption(0), - ) - ); - console.log(`Recipient Pubkey: ${recipientWallet.publicKey}`); + const ix = new TransactionInstruction({ + keys: [ + { + pubkey: tokenMintKeypair.publicKey, + isSigner: false, + isWritable: true, + }, // Mint account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { + pubkey: associatedTokenAccountAddress, + isSigner: false, + isWritable: true, + }, // ATA + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SystemProgram.programId, isSigner: false, isWritable: true }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), }); - it("Transfer tokens to another wallet!", async () => { - - const fromAssociatedTokenAddress = await getAssociatedTokenAddress( - tokenMintKeypair.publicKey, - payer.publicKey - ); - console.log(`Owner Token Address: ${fromAssociatedTokenAddress}`); - const toAssociatedTokenAddress = await getAssociatedTokenAddress( - tokenMintKeypair.publicKey, - recipientWallet.publicKey - ); - console.log(`Recipient Token Address: ${toAssociatedTokenAddress}`); - - const transferToInstructionData = new TransferTokensArgs({ - instruction: MyInstruction.TransferTokens, - quantity: new BN(15), - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: tokenMintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account - { pubkey: fromAssociatedTokenAddress, isSigner: false, isWritable: true }, // Owner Token account - { pubkey: toAssociatedTokenAddress, isSigner: false, isWritable: true }, // Recipient Token account - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Owner - { pubkey: recipientWallet.publicKey, isSigner: true, isWritable: true }, // Recipient - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Associated token program - ], - programId: program.publicKey, - data: transferToInstructionData.toBuffer(), - }); - - await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, recipientWallet], - { skipPreflight: true } - ); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); + + console.log('Success!'); + console.log(` ATA Address: ${associatedTokenAccountAddress}`); + console.log(` Tx Signature: ${sx}`); + }); + + it('Mint the NFT to your wallet!', async () => { + const metadataAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), nftMintKeypair.publicKey.toBuffer()], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + + const editionAddress = PublicKey.findProgramAddressSync( + [Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), nftMintKeypair.publicKey.toBuffer(), Buffer.from('edition')], + TOKEN_METADATA_PROGRAM_ID, + )[0]; + + const associatedTokenAccountAddress = await getAssociatedTokenAddress(nftMintKeypair.publicKey, payer.publicKey); + + const instructionData = new MintNftArgs({ + instruction: MyInstruction.MintNft, }); - it("Transfer NFT to another wallet!", async () => { - - const fromAssociatedTokenAddress = await getAssociatedTokenAddress( - nftMintKeypair.publicKey, - payer.publicKey - ); - console.log(`Owner Token Address: ${fromAssociatedTokenAddress}`); - const toAssociatedTokenAddress = await getAssociatedTokenAddress( - nftMintKeypair.publicKey, - recipientWallet.publicKey - ); - console.log(`Recipient Token Address: ${toAssociatedTokenAddress}`); - - const transferToInstructionData = new TransferTokensArgs({ - instruction: MyInstruction.TransferTokens, - quantity: new BN(1), - }); - - let ix = new TransactionInstruction({ - keys: [ - { pubkey: nftMintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account - { pubkey: fromAssociatedTokenAddress, isSigner: false, isWritable: true }, // Owner Token account - { pubkey: toAssociatedTokenAddress, isSigner: false, isWritable: true }, // Recipient Token account - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Owner - { pubkey: recipientWallet.publicKey, isSigner: true, isWritable: true }, // Recipient - { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program - { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program - { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Associated token program - ], - programId: program.publicKey, - data: transferToInstructionData.toBuffer(), - }); - - await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer, recipientWallet], - { skipPreflight: true } - ); + const ix = new TransactionInstruction({ + keys: [ + { pubkey: nftMintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account + { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account + { pubkey: editionAddress, isSigner: false, isWritable: true }, // Edition account + { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account + { + pubkey: associatedTokenAccountAddress, + isSigner: false, + isWritable: true, + }, // ATA + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Associated token program + { + pubkey: TOKEN_METADATA_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Token metadata program + ], + programId: program.publicKey, + data: instructionData.toBuffer(), }); -}); \ No newline at end of file + + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); + + console.log('Success!'); + console.log(` ATA Address: ${associatedTokenAccountAddress}`); + console.log(` Tx Signature: ${sx}`); + }); + + it('Prep a new test wallet for transfers', async () => { + await connection.confirmTransaction( + await connection.requestAirdrop(recipientWallet.publicKey, await connection.getMinimumBalanceForRentExemption(0)), + ); + console.log(`Recipient Pubkey: ${recipientWallet.publicKey}`); + }); + + it('Transfer tokens to another wallet!', async () => { + const fromAssociatedTokenAddress = await getAssociatedTokenAddress(tokenMintKeypair.publicKey, payer.publicKey); + console.log(`Owner Token Address: ${fromAssociatedTokenAddress}`); + const toAssociatedTokenAddress = await getAssociatedTokenAddress(tokenMintKeypair.publicKey, recipientWallet.publicKey); + console.log(`Recipient Token Address: ${toAssociatedTokenAddress}`); + + const transferToInstructionData = new TransferTokensArgs({ + instruction: MyInstruction.TransferTokens, + quantity: new BN(15), + }); + + const ix = new TransactionInstruction({ + keys: [ + { + pubkey: tokenMintKeypair.publicKey, + isSigner: false, + isWritable: true, + }, // Mint account + { + pubkey: fromAssociatedTokenAddress, + isSigner: false, + isWritable: true, + }, // Owner Token account + { pubkey: toAssociatedTokenAddress, isSigner: false, isWritable: true }, // Recipient Token account + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Owner + { pubkey: recipientWallet.publicKey, isSigner: true, isWritable: true }, // Recipient + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Associated token program + ], + programId: program.publicKey, + data: transferToInstructionData.toBuffer(), + }); + + await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, recipientWallet], { skipPreflight: true }); + }); + + it('Transfer NFT to another wallet!', async () => { + const fromAssociatedTokenAddress = await getAssociatedTokenAddress(nftMintKeypair.publicKey, payer.publicKey); + console.log(`Owner Token Address: ${fromAssociatedTokenAddress}`); + const toAssociatedTokenAddress = await getAssociatedTokenAddress(nftMintKeypair.publicKey, recipientWallet.publicKey); + console.log(`Recipient Token Address: ${toAssociatedTokenAddress}`); + + const transferToInstructionData = new TransferTokensArgs({ + instruction: MyInstruction.TransferTokens, + quantity: new BN(1), + }); + + const ix = new TransactionInstruction({ + keys: [ + { pubkey: nftMintKeypair.publicKey, isSigner: false, isWritable: true }, // Mint account + { + pubkey: fromAssociatedTokenAddress, + isSigner: false, + isWritable: true, + }, // Owner Token account + { pubkey: toAssociatedTokenAddress, isSigner: false, isWritable: true }, // Recipient Token account + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Owner + { pubkey: recipientWallet.publicKey, isSigner: true, isWritable: true }, // Recipient + { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer + { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // Associated token program + ], + programId: program.publicKey, + data: transferToInstructionData.toBuffer(), + }); + + await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer, recipientWallet], { skipPreflight: true }); + }); +}); diff --git a/tokens/transfer-tokens/native/tsconfig.json b/tokens/transfer-tokens/native/tsconfig.json index b7d51edac..cd5d2e3d0 100644 --- a/tokens/transfer-tokens/native/tsconfig.json +++ b/tokens/transfer-tokens/native/tsconfig.json @@ -5,6 +5,6 @@ "lib": ["es2015"], "module": "commonjs", "target": "es6", - "esModuleInterop": true, + "esModuleInterop": true } } diff --git a/tokens/transfer-tokens/seahorse/migrations/deploy.ts b/tokens/transfer-tokens/seahorse/migrations/deploy.ts index 82fb175fa..64a1c3599 100644 --- a/tokens/transfer-tokens/seahorse/migrations/deploy.ts +++ b/tokens/transfer-tokens/seahorse/migrations/deploy.ts @@ -2,9 +2,9 @@ // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. -const anchor = require("@coral-xyz/anchor"); +const anchor = require('@coral-xyz/anchor'); -module.exports = async function (provider) { +module.exports = async (provider) => { // Configure client to use the provider. anchor.setProvider(provider); diff --git a/tokens/transfer-tokens/seahorse/package.json b/tokens/transfer-tokens/seahorse/package.json index 4de1ab3c2..b5355136b 100644 --- a/tokens/transfer-tokens/seahorse/package.json +++ b/tokens/transfer-tokens/seahorse/package.json @@ -1,19 +1,19 @@ { - "scripts": { - "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" - }, - "dependencies": { - "@coral-xyz/anchor": "^0.27.0" - }, - "devDependencies": { - "chai": "^4.3.4", - "mocha": "^9.0.3", - "ts-mocha": "^10.0.0", - "@types/bn.js": "^5.1.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "typescript": "^4.3.5", - "prettier": "^2.6.2" - } + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.27.0" + }, + "devDependencies": { + "chai": "^4.3.4", + "mocha": "^9.0.3", + "ts-mocha": "^10.0.0", + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "typescript": "^4.3.5", + "prettier": "^2.6.2" + } } diff --git a/tokens/transfer-tokens/seahorse/tsconfig.json b/tokens/transfer-tokens/seahorse/tsconfig.json index 558b83e5e..cd5d2e3d0 100644 --- a/tokens/transfer-tokens/seahorse/tsconfig.json +++ b/tokens/transfer-tokens/seahorse/tsconfig.json @@ -1,11 +1,10 @@ { - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } - \ No newline at end of file + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/tools/shank-and-solita/native/.crates/.crates2.json b/tools/shank-and-solita/native/.crates/.crates2.json index 0b1ea09d7..f638b54c1 100644 --- a/tools/shank-and-solita/native/.crates/.crates2.json +++ b/tools/shank-and-solita/native/.crates/.crates2.json @@ -1 +1,14 @@ -{"installs":{"shank-cli 0.0.12 (registry+https://github.com/rust-lang/crates.io-index)":{"version_req":"0.0.12","bins":["shank"],"features":[],"all_features":false,"no_default_features":false,"profile":"release","target":"aarch64-apple-darwin","rustc":"rustc 1.66.1 (90743e729 2023-01-10)\nbinary: rustc\ncommit-hash: 90743e7298aca107ddaa0c202a4d3604e29bfeb6\ncommit-date: 2023-01-10\nhost: aarch64-apple-darwin\nrelease: 1.66.1\nLLVM version: 15.0.2\n"}}} \ No newline at end of file +{ + "installs": { + "shank-cli 0.0.12 (registry+https://github.com/rust-lang/crates.io-index)": { + "version_req": "0.0.12", + "bins": ["shank"], + "features": [], + "all_features": false, + "no_default_features": false, + "profile": "release", + "target": "aarch64-apple-darwin", + "rustc": "rustc 1.66.1 (90743e729 2023-01-10)\nbinary: rustc\ncommit-hash: 90743e7298aca107ddaa0c202a4d3604e29bfeb6\ncommit-date: 2023-01-10\nhost: aarch64-apple-darwin\nrelease: 1.66.1\nLLVM version: 15.0.2\n" + } + } +} diff --git a/tools/shank-and-solita/native/.solitarc.js b/tools/shank-and-solita/native/.solitarc.js index 3494a743a..e42bad663 100644 --- a/tools/shank-and-solita/native/.solitarc.js +++ b/tools/shank-and-solita/native/.solitarc.js @@ -1,4 +1,4 @@ -const path = require('path'); +const path = require('node:path'); const programDir = path.join(__dirname, 'program'); const idlDir = path.join(programDir, 'idl'); const sdkDir = path.join(__dirname, 'tests', 'generated'); @@ -11,4 +11,4 @@ module.exports = { sdkDir, binaryInstallDir, programDir, -}; \ No newline at end of file +}; diff --git a/tools/shank-and-solita/native/program/idl/car_rental_service.json b/tools/shank-and-solita/native/program/idl/car_rental_service.json index bbfb5913c..54af8ec2d 100644 --- a/tools/shank-and-solita/native/program/idl/car_rental_service.json +++ b/tools/shank-and-solita/native/program/idl/car_rental_service.json @@ -260,4 +260,4 @@ "binaryVersion": "0.0.12", "libVersion": "0.0.12" } -} \ No newline at end of file +} diff --git a/tools/shank-and-solita/native/tests/generated/accounts/Car.ts b/tools/shank-and-solita/native/tests/generated/accounts/Car.ts index e93d935b0..5d67a76f2 100644 --- a/tools/shank-and-solita/native/tests/generated/accounts/Car.ts +++ b/tools/shank-and-solita/native/tests/generated/accounts/Car.ts @@ -5,9 +5,9 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' -import * as web3 from '@solana/web3.js' -import * as beetSolana from '@metaplex-foundation/beet-solana' +import * as beet from '@metaplex-foundation/beet'; +import * as beetSolana from '@metaplex-foundation/beet-solana'; +import * as web3 from '@solana/web3.js'; /** * Arguments used to create {@link Car} @@ -15,10 +15,10 @@ import * as beetSolana from '@metaplex-foundation/beet-solana' * @category generated */ export type CarArgs = { - year: number - make: string - model: string -} + year: number; + make: string; + model: string; +}; /** * Holds the data for the {@link Car} Account and provides de/serialization * functionality for that data @@ -30,25 +30,22 @@ export class Car implements CarArgs { private constructor( readonly year: number, readonly make: string, - readonly model: string + readonly model: string, ) {} /** * Creates a {@link Car} instance from the provided args. */ static fromArgs(args: CarArgs) { - return new Car(args.year, args.make, args.model) + return new Car(args.year, args.make, args.model); } /** * Deserializes the {@link Car} from the data of the provided {@link web3.AccountInfo}. * @returns a tuple of the account data and the offset up to which the buffer was read to obtain it. */ - static fromAccountInfo( - accountInfo: web3.AccountInfo, - offset = 0 - ): [Car, number] { - return Car.deserialize(accountInfo.data, offset) + static fromAccountInfo(accountInfo: web3.AccountInfo, offset = 0): [Car, number] { + return Car.deserialize(accountInfo.data, offset); } /** @@ -60,16 +57,13 @@ export class Car implements CarArgs { static async fromAccountAddress( connection: web3.Connection, address: web3.PublicKey, - commitmentOrConfig?: web3.Commitment | web3.GetAccountInfoConfig + commitmentOrConfig?: web3.Commitment | web3.GetAccountInfoConfig, ): Promise { - const accountInfo = await connection.getAccountInfo( - address, - commitmentOrConfig - ) + const accountInfo = await connection.getAccountInfo(address, commitmentOrConfig); if (accountInfo == null) { - throw new Error(`Unable to find Car account at ${address}`) + throw new Error(`Unable to find Car account at ${address}`); } - return Car.fromAccountInfo(accountInfo, 0)[0] + return Car.fromAccountInfo(accountInfo, 0)[0]; } /** @@ -78,12 +72,8 @@ export class Car implements CarArgs { * * @param programId - the program that owns the accounts we are filtering */ - static gpaBuilder( - programId: web3.PublicKey = new web3.PublicKey( - '8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ' - ) - ) { - return beetSolana.GpaBuilder.fromStruct(programId, carBeet) + static gpaBuilder(programId: web3.PublicKey = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ')) { + return beetSolana.GpaBuilder.fromStruct(programId, carBeet); } /** @@ -91,7 +81,7 @@ export class Car implements CarArgs { * @returns a tuple of the account data and the offset up to which the buffer was read to obtain it. */ static deserialize(buf: Buffer, offset = 0): [Car, number] { - return carBeet.deserialize(buf, offset) + return carBeet.deserialize(buf, offset); } /** @@ -99,7 +89,7 @@ export class Car implements CarArgs { * @returns a tuple of the created Buffer and the offset up to which the buffer was written to store it. */ serialize(): [Buffer, number] { - return carBeet.serialize(this) + return carBeet.serialize(this); } /** @@ -110,8 +100,8 @@ export class Car implements CarArgs { * depends on them */ static byteSize(args: CarArgs) { - const instance = Car.fromArgs(args) - return carBeet.toFixedFromValue(instance).byteSize + const instance = Car.fromArgs(args); + return carBeet.toFixedFromValue(instance).byteSize; } /** @@ -122,15 +112,8 @@ export class Car implements CarArgs { * depends on them * @param connection used to retrieve the rent exemption information */ - static async getMinimumBalanceForRentExemption( - args: CarArgs, - connection: web3.Connection, - commitment?: web3.Commitment - ): Promise { - return connection.getMinimumBalanceForRentExemption( - Car.byteSize(args), - commitment - ) + static async getMinimumBalanceForRentExemption(args: CarArgs, connection: web3.Connection, commitment?: web3.Commitment): Promise { + return connection.getMinimumBalanceForRentExemption(Car.byteSize(args), commitment); } /** @@ -142,7 +125,7 @@ export class Car implements CarArgs { year: this.year, make: this.make, model: this.model, - } + }; } } @@ -157,5 +140,5 @@ export const carBeet = new beet.FixableBeetStruct( ['model', beet.utf8String], ], Car.fromArgs, - 'Car' -) + 'Car', +); diff --git a/tools/shank-and-solita/native/tests/generated/accounts/RentalOrder.ts b/tools/shank-and-solita/native/tests/generated/accounts/RentalOrder.ts index 160dac0b1..ea2923a74 100644 --- a/tools/shank-and-solita/native/tests/generated/accounts/RentalOrder.ts +++ b/tools/shank-and-solita/native/tests/generated/accounts/RentalOrder.ts @@ -5,13 +5,10 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as web3 from '@solana/web3.js' -import * as beet from '@metaplex-foundation/beet' -import * as beetSolana from '@metaplex-foundation/beet-solana' -import { - RentalOrderStatus, - rentalOrderStatusBeet, -} from '../types/RentalOrderStatus' +import * as beet from '@metaplex-foundation/beet'; +import * as beetSolana from '@metaplex-foundation/beet-solana'; +import * as web3 from '@solana/web3.js'; +import { RentalOrderStatus, rentalOrderStatusBeet } from '../types/RentalOrderStatus'; /** * Arguments used to create {@link RentalOrder} @@ -19,13 +16,13 @@ import { * @category generated */ export type RentalOrderArgs = { - car: web3.PublicKey - name: string - pickUpDate: string - returnDate: string - price: beet.bignum - status: RentalOrderStatus -} + car: web3.PublicKey; + name: string; + pickUpDate: string; + returnDate: string; + price: beet.bignum; + status: RentalOrderStatus; +}; /** * Holds the data for the {@link RentalOrder} Account and provides de/serialization * functionality for that data @@ -40,32 +37,22 @@ export class RentalOrder implements RentalOrderArgs { readonly pickUpDate: string, readonly returnDate: string, readonly price: beet.bignum, - readonly status: RentalOrderStatus + readonly status: RentalOrderStatus, ) {} /** * Creates a {@link RentalOrder} instance from the provided args. */ static fromArgs(args: RentalOrderArgs) { - return new RentalOrder( - args.car, - args.name, - args.pickUpDate, - args.returnDate, - args.price, - args.status - ) + return new RentalOrder(args.car, args.name, args.pickUpDate, args.returnDate, args.price, args.status); } /** * Deserializes the {@link RentalOrder} from the data of the provided {@link web3.AccountInfo}. * @returns a tuple of the account data and the offset up to which the buffer was read to obtain it. */ - static fromAccountInfo( - accountInfo: web3.AccountInfo, - offset = 0 - ): [RentalOrder, number] { - return RentalOrder.deserialize(accountInfo.data, offset) + static fromAccountInfo(accountInfo: web3.AccountInfo, offset = 0): [RentalOrder, number] { + return RentalOrder.deserialize(accountInfo.data, offset); } /** @@ -77,16 +64,13 @@ export class RentalOrder implements RentalOrderArgs { static async fromAccountAddress( connection: web3.Connection, address: web3.PublicKey, - commitmentOrConfig?: web3.Commitment | web3.GetAccountInfoConfig + commitmentOrConfig?: web3.Commitment | web3.GetAccountInfoConfig, ): Promise { - const accountInfo = await connection.getAccountInfo( - address, - commitmentOrConfig - ) + const accountInfo = await connection.getAccountInfo(address, commitmentOrConfig); if (accountInfo == null) { - throw new Error(`Unable to find RentalOrder account at ${address}`) + throw new Error(`Unable to find RentalOrder account at ${address}`); } - return RentalOrder.fromAccountInfo(accountInfo, 0)[0] + return RentalOrder.fromAccountInfo(accountInfo, 0)[0]; } /** @@ -95,12 +79,8 @@ export class RentalOrder implements RentalOrderArgs { * * @param programId - the program that owns the accounts we are filtering */ - static gpaBuilder( - programId: web3.PublicKey = new web3.PublicKey( - '8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ' - ) - ) { - return beetSolana.GpaBuilder.fromStruct(programId, rentalOrderBeet) + static gpaBuilder(programId: web3.PublicKey = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ')) { + return beetSolana.GpaBuilder.fromStruct(programId, rentalOrderBeet); } /** @@ -108,7 +88,7 @@ export class RentalOrder implements RentalOrderArgs { * @returns a tuple of the account data and the offset up to which the buffer was read to obtain it. */ static deserialize(buf: Buffer, offset = 0): [RentalOrder, number] { - return rentalOrderBeet.deserialize(buf, offset) + return rentalOrderBeet.deserialize(buf, offset); } /** @@ -116,7 +96,7 @@ export class RentalOrder implements RentalOrderArgs { * @returns a tuple of the created Buffer and the offset up to which the buffer was written to store it. */ serialize(): [Buffer, number] { - return rentalOrderBeet.serialize(this) + return rentalOrderBeet.serialize(this); } /** @@ -127,8 +107,8 @@ export class RentalOrder implements RentalOrderArgs { * depends on them */ static byteSize(args: RentalOrderArgs) { - const instance = RentalOrder.fromArgs(args) - return rentalOrderBeet.toFixedFromValue(instance).byteSize + const instance = RentalOrder.fromArgs(args); + return rentalOrderBeet.toFixedFromValue(instance).byteSize; } /** @@ -139,15 +119,8 @@ export class RentalOrder implements RentalOrderArgs { * depends on them * @param connection used to retrieve the rent exemption information */ - static async getMinimumBalanceForRentExemption( - args: RentalOrderArgs, - connection: web3.Connection, - commitment?: web3.Commitment - ): Promise { - return connection.getMinimumBalanceForRentExemption( - RentalOrder.byteSize(args), - commitment - ) + static async getMinimumBalanceForRentExemption(args: RentalOrderArgs, connection: web3.Connection, commitment?: web3.Commitment): Promise { + return connection.getMinimumBalanceForRentExemption(RentalOrder.byteSize(args), commitment); } /** @@ -161,18 +134,18 @@ export class RentalOrder implements RentalOrderArgs { pickUpDate: this.pickUpDate, returnDate: this.returnDate, price: (() => { - const x = <{ toNumber: () => number }>this.price + const x = <{ toNumber: () => number }>this.price; if (typeof x.toNumber === 'function') { try { - return x.toNumber() + return x.toNumber(); } catch (_) { - return x + return x; } } - return x + return x; })(), - status: 'RentalOrderStatus.' + RentalOrderStatus[this.status], - } + status: `RentalOrderStatus.${RentalOrderStatus[this.status]}`, + }; } } @@ -180,10 +153,7 @@ export class RentalOrder implements RentalOrderArgs { * @category Accounts * @category generated */ -export const rentalOrderBeet = new beet.FixableBeetStruct< - RentalOrder, - RentalOrderArgs ->( +export const rentalOrderBeet = new beet.FixableBeetStruct( [ ['car', beetSolana.publicKey], ['name', beet.utf8String], @@ -193,5 +163,5 @@ export const rentalOrderBeet = new beet.FixableBeetStruct< ['status', rentalOrderStatusBeet], ], RentalOrder.fromArgs, - 'RentalOrder' -) + 'RentalOrder', +); diff --git a/tools/shank-and-solita/native/tests/generated/accounts/index.ts b/tools/shank-and-solita/native/tests/generated/accounts/index.ts index f3726b145..7c593175c 100644 --- a/tools/shank-and-solita/native/tests/generated/accounts/index.ts +++ b/tools/shank-and-solita/native/tests/generated/accounts/index.ts @@ -1,7 +1,7 @@ -export * from './Car' -export * from './RentalOrder' +export * from './Car'; +export * from './RentalOrder'; -import { Car } from './Car' -import { RentalOrder } from './RentalOrder' +import { Car } from './Car'; +import { RentalOrder } from './RentalOrder'; -export const accountProviders = { Car, RentalOrder } +export const accountProviders = { Car, RentalOrder }; diff --git a/tools/shank-and-solita/native/tests/generated/index.ts b/tools/shank-and-solita/native/tests/generated/index.ts index 9d9e68a72..927ad86c5 100644 --- a/tools/shank-and-solita/native/tests/generated/index.ts +++ b/tools/shank-and-solita/native/tests/generated/index.ts @@ -1,7 +1,7 @@ -import { PublicKey } from '@solana/web3.js' -export * from './accounts' -export * from './instructions' -export * from './types' +import { PublicKey } from '@solana/web3.js'; +export * from './accounts'; +export * from './instructions'; +export * from './types'; /** * Program address @@ -9,7 +9,7 @@ export * from './types' * @category constants * @category generated */ -export const PROGRAM_ADDRESS = '8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ' +export const PROGRAM_ADDRESS = '8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ'; /** * Program public key @@ -17,4 +17,4 @@ export const PROGRAM_ADDRESS = '8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ' * @category constants * @category generated */ -export const PROGRAM_ID = new PublicKey(PROGRAM_ADDRESS) +export const PROGRAM_ID = new PublicKey(PROGRAM_ADDRESS); diff --git a/tools/shank-and-solita/native/tests/generated/instructions/AddCar.ts b/tools/shank-and-solita/native/tests/generated/instructions/AddCar.ts index a51027d6e..d5cd995da 100644 --- a/tools/shank-and-solita/native/tests/generated/instructions/AddCar.ts +++ b/tools/shank-and-solita/native/tests/generated/instructions/AddCar.ts @@ -5,9 +5,9 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' -import * as web3 from '@solana/web3.js' -import { AddCarArgs, addCarArgsBeet } from '../types/AddCarArgs' +import * as beet from '@metaplex-foundation/beet'; +import * as web3 from '@solana/web3.js'; +import { type AddCarArgs, addCarArgsBeet } from '../types/AddCarArgs'; /** * @category Instructions @@ -15,8 +15,8 @@ import { AddCarArgs, addCarArgsBeet } from '../types/AddCarArgs' * @category generated */ export type AddCarInstructionArgs = { - addCarArgs: AddCarArgs -} + addCarArgs: AddCarArgs; +}; /** * @category Instructions * @category AddCar @@ -24,15 +24,15 @@ export type AddCarInstructionArgs = { */ export const AddCarStruct = new beet.FixableBeetArgsStruct< AddCarInstructionArgs & { - instructionDiscriminator: number + instructionDiscriminator: number; } >( [ ['instructionDiscriminator', beet.u8], ['addCarArgs', addCarArgsBeet], ], - 'AddCarInstructionArgs' -) + 'AddCarInstructionArgs', +); /** * Accounts required by the _AddCar_ instruction * @@ -43,12 +43,12 @@ export const AddCarStruct = new beet.FixableBeetArgsStruct< * @category generated */ export type AddCarInstructionAccounts = { - carAccount: web3.PublicKey - payer: web3.PublicKey - systemProgram?: web3.PublicKey -} + carAccount: web3.PublicKey; + payer: web3.PublicKey; + systemProgram?: web3.PublicKey; +}; -export const addCarInstructionDiscriminator = 0 +export const addCarInstructionDiscriminator = 0; /** * Creates a _AddCar_ instruction. @@ -63,12 +63,12 @@ export const addCarInstructionDiscriminator = 0 export function createAddCarInstruction( accounts: AddCarInstructionAccounts, args: AddCarInstructionArgs, - programId = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ') + programId = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ'), ) { const [data] = AddCarStruct.serialize({ instructionDiscriminator: addCarInstructionDiscriminator, ...args, - }) + }); const keys: web3.AccountMeta[] = [ { pubkey: accounts.carAccount, @@ -85,12 +85,12 @@ export function createAddCarInstruction( isWritable: false, isSigner: false, }, - ] + ]; const ix = new web3.TransactionInstruction({ programId, keys, data, - }) - return ix + }); + return ix; } diff --git a/tools/shank-and-solita/native/tests/generated/instructions/BookRental.ts b/tools/shank-and-solita/native/tests/generated/instructions/BookRental.ts index d1cef7daf..1e6bb23de 100644 --- a/tools/shank-and-solita/native/tests/generated/instructions/BookRental.ts +++ b/tools/shank-and-solita/native/tests/generated/instructions/BookRental.ts @@ -5,9 +5,9 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' -import * as web3 from '@solana/web3.js' -import { BookRentalArgs, bookRentalArgsBeet } from '../types/BookRentalArgs' +import * as beet from '@metaplex-foundation/beet'; +import * as web3 from '@solana/web3.js'; +import { type BookRentalArgs, bookRentalArgsBeet } from '../types/BookRentalArgs'; /** * @category Instructions @@ -15,8 +15,8 @@ import { BookRentalArgs, bookRentalArgsBeet } from '../types/BookRentalArgs' * @category generated */ export type BookRentalInstructionArgs = { - bookRentalArgs: BookRentalArgs -} + bookRentalArgs: BookRentalArgs; +}; /** * @category Instructions * @category BookRental @@ -24,15 +24,15 @@ export type BookRentalInstructionArgs = { */ export const BookRentalStruct = new beet.FixableBeetArgsStruct< BookRentalInstructionArgs & { - instructionDiscriminator: number + instructionDiscriminator: number; } >( [ ['instructionDiscriminator', beet.u8], ['bookRentalArgs', bookRentalArgsBeet], ], - 'BookRentalInstructionArgs' -) + 'BookRentalInstructionArgs', +); /** * Accounts required by the _BookRental_ instruction * @@ -44,13 +44,13 @@ export const BookRentalStruct = new beet.FixableBeetArgsStruct< * @category generated */ export type BookRentalInstructionAccounts = { - rentalAccount: web3.PublicKey - carAccount: web3.PublicKey - payer: web3.PublicKey - systemProgram?: web3.PublicKey -} + rentalAccount: web3.PublicKey; + carAccount: web3.PublicKey; + payer: web3.PublicKey; + systemProgram?: web3.PublicKey; +}; -export const bookRentalInstructionDiscriminator = 1 +export const bookRentalInstructionDiscriminator = 1; /** * Creates a _BookRental_ instruction. @@ -65,12 +65,12 @@ export const bookRentalInstructionDiscriminator = 1 export function createBookRentalInstruction( accounts: BookRentalInstructionAccounts, args: BookRentalInstructionArgs, - programId = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ') + programId = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ'), ) { const [data] = BookRentalStruct.serialize({ instructionDiscriminator: bookRentalInstructionDiscriminator, ...args, - }) + }); const keys: web3.AccountMeta[] = [ { pubkey: accounts.rentalAccount, @@ -92,12 +92,12 @@ export function createBookRentalInstruction( isWritable: false, isSigner: false, }, - ] + ]; const ix = new web3.TransactionInstruction({ programId, keys, data, - }) - return ix + }); + return ix; } diff --git a/tools/shank-and-solita/native/tests/generated/instructions/PickUpCar.ts b/tools/shank-and-solita/native/tests/generated/instructions/PickUpCar.ts index c5ca76d0d..f0fced5fa 100644 --- a/tools/shank-and-solita/native/tests/generated/instructions/PickUpCar.ts +++ b/tools/shank-and-solita/native/tests/generated/instructions/PickUpCar.ts @@ -5,8 +5,8 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' -import * as web3 from '@solana/web3.js' +import * as beet from '@metaplex-foundation/beet'; +import * as web3 from '@solana/web3.js'; /** * @category Instructions @@ -14,8 +14,8 @@ import * as web3 from '@solana/web3.js' * @category generated */ export const PickUpCarStruct = new beet.BeetArgsStruct<{ - instructionDiscriminator: number -}>([['instructionDiscriminator', beet.u8]], 'PickUpCarInstructionArgs') + instructionDiscriminator: number; +}>([['instructionDiscriminator', beet.u8]], 'PickUpCarInstructionArgs'); /** * Accounts required by the _PickUpCar_ instruction * @@ -27,12 +27,12 @@ export const PickUpCarStruct = new beet.BeetArgsStruct<{ * @category generated */ export type PickUpCarInstructionAccounts = { - rentalAccount: web3.PublicKey - carAccount: web3.PublicKey - payer: web3.PublicKey -} + rentalAccount: web3.PublicKey; + carAccount: web3.PublicKey; + payer: web3.PublicKey; +}; -export const pickUpCarInstructionDiscriminator = 2 +export const pickUpCarInstructionDiscriminator = 2; /** * Creates a _PickUpCar_ instruction. @@ -44,11 +44,11 @@ export const pickUpCarInstructionDiscriminator = 2 */ export function createPickUpCarInstruction( accounts: PickUpCarInstructionAccounts, - programId = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ') + programId = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ'), ) { const [data] = PickUpCarStruct.serialize({ instructionDiscriminator: pickUpCarInstructionDiscriminator, - }) + }); const keys: web3.AccountMeta[] = [ { pubkey: accounts.rentalAccount, @@ -65,12 +65,12 @@ export function createPickUpCarInstruction( isWritable: true, isSigner: false, }, - ] + ]; const ix = new web3.TransactionInstruction({ programId, keys, data, - }) - return ix + }); + return ix; } diff --git a/tools/shank-and-solita/native/tests/generated/instructions/ReturnCar.ts b/tools/shank-and-solita/native/tests/generated/instructions/ReturnCar.ts index 3c2b1a3b3..db3d7f303 100644 --- a/tools/shank-and-solita/native/tests/generated/instructions/ReturnCar.ts +++ b/tools/shank-and-solita/native/tests/generated/instructions/ReturnCar.ts @@ -5,8 +5,8 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' -import * as web3 from '@solana/web3.js' +import * as beet from '@metaplex-foundation/beet'; +import * as web3 from '@solana/web3.js'; /** * @category Instructions @@ -14,8 +14,8 @@ import * as web3 from '@solana/web3.js' * @category generated */ export const ReturnCarStruct = new beet.BeetArgsStruct<{ - instructionDiscriminator: number -}>([['instructionDiscriminator', beet.u8]], 'ReturnCarInstructionArgs') + instructionDiscriminator: number; +}>([['instructionDiscriminator', beet.u8]], 'ReturnCarInstructionArgs'); /** * Accounts required by the _ReturnCar_ instruction * @@ -27,12 +27,12 @@ export const ReturnCarStruct = new beet.BeetArgsStruct<{ * @category generated */ export type ReturnCarInstructionAccounts = { - rentalAccount: web3.PublicKey - carAccount: web3.PublicKey - payer: web3.PublicKey -} + rentalAccount: web3.PublicKey; + carAccount: web3.PublicKey; + payer: web3.PublicKey; +}; -export const returnCarInstructionDiscriminator = 3 +export const returnCarInstructionDiscriminator = 3; /** * Creates a _ReturnCar_ instruction. @@ -44,11 +44,11 @@ export const returnCarInstructionDiscriminator = 3 */ export function createReturnCarInstruction( accounts: ReturnCarInstructionAccounts, - programId = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ') + programId = new web3.PublicKey('8avNGHVXDwsELJaWMSoUZ44CirQd4zyU9Ez4ZmP4jNjZ'), ) { const [data] = ReturnCarStruct.serialize({ instructionDiscriminator: returnCarInstructionDiscriminator, - }) + }); const keys: web3.AccountMeta[] = [ { pubkey: accounts.rentalAccount, @@ -65,12 +65,12 @@ export function createReturnCarInstruction( isWritable: true, isSigner: false, }, - ] + ]; const ix = new web3.TransactionInstruction({ programId, keys, data, - }) - return ix + }); + return ix; } diff --git a/tools/shank-and-solita/native/tests/generated/instructions/index.ts b/tools/shank-and-solita/native/tests/generated/instructions/index.ts index 2400d652e..86e06563b 100644 --- a/tools/shank-and-solita/native/tests/generated/instructions/index.ts +++ b/tools/shank-and-solita/native/tests/generated/instructions/index.ts @@ -1,4 +1,4 @@ -export * from './AddCar' -export * from './BookRental' -export * from './PickUpCar' -export * from './ReturnCar' +export * from './AddCar'; +export * from './BookRental'; +export * from './PickUpCar'; +export * from './ReturnCar'; diff --git a/tools/shank-and-solita/native/tests/generated/types/AddCarArgs.ts b/tools/shank-and-solita/native/tests/generated/types/AddCarArgs.ts index db67d6f61..ba0f0fae2 100644 --- a/tools/shank-and-solita/native/tests/generated/types/AddCarArgs.ts +++ b/tools/shank-and-solita/native/tests/generated/types/AddCarArgs.ts @@ -5,12 +5,12 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' +import * as beet from '@metaplex-foundation/beet'; export type AddCarArgs = { - year: number - make: string - model: string -} + year: number; + make: string; + model: string; +}; /** * @category userTypes @@ -22,5 +22,5 @@ export const addCarArgsBeet = new beet.FixableBeetArgsStruct( ['make', beet.utf8String], ['model', beet.utf8String], ], - 'AddCarArgs' -) + 'AddCarArgs', +); diff --git a/tools/shank-and-solita/native/tests/generated/types/BookRentalArgs.ts b/tools/shank-and-solita/native/tests/generated/types/BookRentalArgs.ts index 2e0c0f37f..b1088ead6 100644 --- a/tools/shank-and-solita/native/tests/generated/types/BookRentalArgs.ts +++ b/tools/shank-and-solita/native/tests/generated/types/BookRentalArgs.ts @@ -5,25 +5,24 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' +import * as beet from '@metaplex-foundation/beet'; export type BookRentalArgs = { - name: string - pickUpDate: string - returnDate: string - price: beet.bignum -} + name: string; + pickUpDate: string; + returnDate: string; + price: beet.bignum; +}; /** * @category userTypes * @category generated */ -export const bookRentalArgsBeet = - new beet.FixableBeetArgsStruct( - [ - ['name', beet.utf8String], - ['pickUpDate', beet.utf8String], - ['returnDate', beet.utf8String], - ['price', beet.u64], - ], - 'BookRentalArgs' - ) +export const bookRentalArgsBeet = new beet.FixableBeetArgsStruct( + [ + ['name', beet.utf8String], + ['pickUpDate', beet.utf8String], + ['returnDate', beet.utf8String], + ['price', beet.u64], + ], + 'BookRentalArgs', +); diff --git a/tools/shank-and-solita/native/tests/generated/types/RentalOrderStatus.ts b/tools/shank-and-solita/native/tests/generated/types/RentalOrderStatus.ts index 4c8e9e87a..52a96ab23 100644 --- a/tools/shank-and-solita/native/tests/generated/types/RentalOrderStatus.ts +++ b/tools/shank-and-solita/native/tests/generated/types/RentalOrderStatus.ts @@ -5,21 +5,19 @@ * See: https://github.com/metaplex-foundation/solita */ -import * as beet from '@metaplex-foundation/beet' +import * as beet from '@metaplex-foundation/beet'; /** * @category enums * @category generated */ export enum RentalOrderStatus { - Created, - PickedUp, - Returned, + Created = 0, + PickedUp = 1, + Returned = 2, } /** * @category userTypes * @category generated */ -export const rentalOrderStatusBeet = beet.fixedScalarEnum( - RentalOrderStatus -) as beet.FixedSizeBeet +export const rentalOrderStatusBeet = beet.fixedScalarEnum(RentalOrderStatus) as beet.FixedSizeBeet; diff --git a/tools/shank-and-solita/native/tests/generated/types/index.ts b/tools/shank-and-solita/native/tests/generated/types/index.ts index 164709ca5..2e86601ee 100644 --- a/tools/shank-and-solita/native/tests/generated/types/index.ts +++ b/tools/shank-and-solita/native/tests/generated/types/index.ts @@ -1,3 +1,3 @@ -export * from './AddCarArgs' -export * from './BookRentalArgs' -export * from './RentalOrderStatus' +export * from './AddCarArgs'; +export * from './BookRentalArgs'; +export * from './RentalOrderStatus'; diff --git a/tools/shank-and-solita/native/tests/test.ts b/tools/shank-and-solita/native/tests/test.ts index 29d6a6ed4..5a50ee9c3 100644 --- a/tools/shank-and-solita/native/tests/test.ts +++ b/tools/shank-and-solita/native/tests/test.ts @@ -1,194 +1,146 @@ +import { Connection, Keypair, PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; +import { describe, it } from 'mocha'; import { - it, - describe, -} from 'mocha' -import { - Connection, - Keypair, - PublicKey, - sendAndConfirmTransaction, - SystemProgram, - Transaction, -} from '@solana/web3.js' -import { - AddCarArgs, - Car, - RentalOrder, - RentalOrderStatus, - createAddCarInstruction, - createBookRentalInstruction, - createPickUpCarInstruction, - createReturnCarInstruction, -} from './generated' - + type AddCarArgs, + Car, + RentalOrder, + RentalOrderStatus, + createAddCarInstruction, + createBookRentalInstruction, + createPickUpCarInstruction, + createReturnCarInstruction, +} from './generated'; function loadKeypairFromFile(path: string): Keypair { - return Keypair.fromSecretKey( - Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8"))) - ) + return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('node:fs').readFileSync(path, 'utf-8')))); } const carBmw: AddCarArgs = { - year: 2020, - make: 'BMW', - model: 'iX1', -} + year: 2020, + make: 'BMW', + model: 'iX1', +}; const carMercedes: AddCarArgs = { - year: 2019, - make: 'Mercedes-Benz', - model: 'EQS', -} + year: 2019, + make: 'Mercedes-Benz', + model: 'EQS', +}; const rentalInfo = { - name: "Fred Flinstone", - pickUpDate: "01/28/2023 8:00 AM", - returnDate: "01/28/2023 10:00 PM", - price: 300, -} - + name: 'Fred Flinstone', + pickUpDate: '01/28/2023 8:00 AM', + returnDate: '01/28/2023 10:00 PM', + price: 300, +}; -describe("Car Rental Service", () => { +describe('Car Rental Service', () => { + const connection = new Connection('https://api.devnet.solana.com', 'confirmed'); + const payer = loadKeypairFromFile(`${require('node:os').homedir()}/.config/solana/id.json`); + const program = loadKeypairFromFile('./program/target/deploy/car_rental_service-keypair.json'); - const connection = new Connection(`https://api.devnet.solana.com`, 'confirmed') - const payer = loadKeypairFromFile(require('os').homedir() + '/.config/solana/id.json') - const program = loadKeypairFromFile('./program/target/deploy/car_rental_service-keypair.json') + let bmwPublicKey: PublicKey; + let mercedesPublicKey: PublicKey; - let bmwPublicKey: PublicKey - let mercedesPublicKey: PublicKey + async function createCar(car: AddCarArgs): Promise { + const carAccountPublicKey = PublicKey.findProgramAddressSync( + [Buffer.from('car'), Buffer.from(car.make), Buffer.from(car.model)], + program.publicKey, + )[0]; + const ix = createAddCarInstruction( + { + carAccount: carAccountPublicKey, + payer: payer.publicKey, + systemProgram: SystemProgram.programId, + }, + { addCarArgs: { ...car } }, + ); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer], { skipPreflight: true }); + await connection.confirmTransaction(sx); + const carData = await Car.fromAccountAddress(connection, carAccountPublicKey); + console.log('New car created:'); + console.log(` Year : ${carData.year}`); + console.log(` Make : ${carData.make}`); + console.log(` Model : ${carData.model}`); + return carAccountPublicKey; + } - async function createCar(car: AddCarArgs): Promise { - const carAccountPublicKey = PublicKey.findProgramAddressSync( - [ - Buffer.from('car'), - Buffer.from(car.make), - Buffer.from(car.model), - ], - program.publicKey, - )[0] - const ix = createAddCarInstruction( - { - carAccount: carAccountPublicKey, - payer: payer.publicKey, - systemProgram: SystemProgram.programId, - }, - { addCarArgs: { ...car } }, - ) - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer], - { skipPreflight: true } - ) - await connection.confirmTransaction(sx) - const carData = await Car.fromAccountAddress(connection, carAccountPublicKey) - console.log('New car created:') - console.log(` Year : ${carData.year}`) - console.log(` Make : ${carData.make}`) - console.log(` Model : ${carData.model}`) - return carAccountPublicKey - } - it("Create a car that can be rented", async () => { bmwPublicKey = await createCar(carBmw) }) - it("Create another car that can be rented", async () => { mercedesPublicKey = await createCar(carMercedes) }) + it('Create a car that can be rented', async () => { + bmwPublicKey = await createCar(carBmw); + }); + it('Create another car that can be rented', async () => { + mercedesPublicKey = await createCar(carMercedes); + }); - const evaluateStatus = (status: RentalOrderStatus): string => { - if (status === RentalOrderStatus.Created) return "Created" - if (status === RentalOrderStatus.PickedUp) return "Picked Up" - return "Returned" - } + const evaluateStatus = (status: RentalOrderStatus): string => { + if (status === RentalOrderStatus.Created) return 'Created'; + if (status === RentalOrderStatus.PickedUp) return 'Picked Up'; + return 'Returned'; + }; - async function printRentalDetails(rentalPublicKey: PublicKey, carPublicKey: PublicKey) { - const rentalData = await RentalOrder.fromAccountAddress(connection, rentalPublicKey) - const carData = await Car.fromAccountAddress(connection, carPublicKey) - console.log('Rental booked:') - console.log(' Vehicle details:') - console.log(` Year : ${carData.year}`) - console.log(` Make : ${carData.make}`) - console.log(` Model : ${carData.model}`) - console.log(` Name : ${rentalData.name}`) - console.log(` Pick Up : ${rentalData.pickUpDate}`) - console.log(` Return : ${rentalData.returnDate}`) - console.log(` Price : ${rentalData.price}`) - console.log(` Status : ${evaluateStatus(rentalData.status)}`) - } + async function printRentalDetails(rentalPublicKey: PublicKey, carPublicKey: PublicKey) { + const rentalData = await RentalOrder.fromAccountAddress(connection, rentalPublicKey); + const carData = await Car.fromAccountAddress(connection, carPublicKey); + console.log('Rental booked:'); + console.log(' Vehicle details:'); + console.log(` Year : ${carData.year}`); + console.log(` Make : ${carData.make}`); + console.log(` Model : ${carData.model}`); + console.log(` Name : ${rentalData.name}`); + console.log(` Pick Up : ${rentalData.pickUpDate}`); + console.log(` Return : ${rentalData.returnDate}`); + console.log(` Price : ${rentalData.price}`); + console.log(` Status : ${evaluateStatus(rentalData.status)}`); + } - it("Book a new rental", async () => { - const rentalAccountPublicKey = PublicKey.findProgramAddressSync( - [ - Buffer.from('rental_order'), - bmwPublicKey.toBuffer(), - payer.publicKey.toBuffer(), - ], - program.publicKey, - )[0] - const ix = createBookRentalInstruction( - { - rentalAccount: rentalAccountPublicKey, - carAccount: bmwPublicKey, - payer: payer.publicKey, - systemProgram: SystemProgram.programId, - }, - { - bookRentalArgs: { ...rentalInfo } - }, - ) - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer] - ) - await connection.confirmTransaction(sx) - await printRentalDetails(rentalAccountPublicKey, bmwPublicKey) - }) + it('Book a new rental', async () => { + const rentalAccountPublicKey = PublicKey.findProgramAddressSync( + [Buffer.from('rental_order'), bmwPublicKey.toBuffer(), payer.publicKey.toBuffer()], + program.publicKey, + )[0]; + const ix = createBookRentalInstruction( + { + rentalAccount: rentalAccountPublicKey, + carAccount: bmwPublicKey, + payer: payer.publicKey, + systemProgram: SystemProgram.programId, + }, + { + bookRentalArgs: { ...rentalInfo }, + }, + ); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); + await connection.confirmTransaction(sx); + await printRentalDetails(rentalAccountPublicKey, bmwPublicKey); + }); - it("Pick up your rental car", async () => { - const rentalAccountPublicKey = PublicKey.findProgramAddressSync( - [ - Buffer.from('rental_order'), - bmwPublicKey.toBuffer(), - payer.publicKey.toBuffer(), - ], - program.publicKey, - )[0] - const ix = createPickUpCarInstruction( - { - rentalAccount: rentalAccountPublicKey, - carAccount: bmwPublicKey, - payer: payer.publicKey, - } - ) - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer] - ) - await connection.confirmTransaction(sx) - await printRentalDetails(rentalAccountPublicKey, bmwPublicKey) - }) + it('Pick up your rental car', async () => { + const rentalAccountPublicKey = PublicKey.findProgramAddressSync( + [Buffer.from('rental_order'), bmwPublicKey.toBuffer(), payer.publicKey.toBuffer()], + program.publicKey, + )[0]; + const ix = createPickUpCarInstruction({ + rentalAccount: rentalAccountPublicKey, + carAccount: bmwPublicKey, + payer: payer.publicKey, + }); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); + await connection.confirmTransaction(sx); + await printRentalDetails(rentalAccountPublicKey, bmwPublicKey); + }); - it("Return your rental car", async () => { - const rentalAccountPublicKey = PublicKey.findProgramAddressSync( - [ - Buffer.from('rental_order'), - bmwPublicKey.toBuffer(), - payer.publicKey.toBuffer(), - ], - program.publicKey, - )[0] - const ix = createReturnCarInstruction( - { - rentalAccount: rentalAccountPublicKey, - carAccount: bmwPublicKey, - payer: payer.publicKey, - } - ) - const sx = await sendAndConfirmTransaction( - connection, - new Transaction().add(ix), - [payer] - ) - await connection.confirmTransaction(sx) - await printRentalDetails(rentalAccountPublicKey, bmwPublicKey) - }) - }) - \ No newline at end of file + it('Return your rental car', async () => { + const rentalAccountPublicKey = PublicKey.findProgramAddressSync( + [Buffer.from('rental_order'), bmwPublicKey.toBuffer(), payer.publicKey.toBuffer()], + program.publicKey, + )[0]; + const ix = createReturnCarInstruction({ + rentalAccount: rentalAccountPublicKey, + carAccount: bmwPublicKey, + payer: payer.publicKey, + }); + const sx = await sendAndConfirmTransaction(connection, new Transaction().add(ix), [payer]); + await connection.confirmTransaction(sx); + await printRentalDetails(rentalAccountPublicKey, bmwPublicKey); + }); +}); diff --git a/tools/shank-and-solita/native/tests/tsconfig.test.json b/tools/shank-and-solita/native/tests/tsconfig.test.json index aaf3b0825..cd5d2e3d0 100644 --- a/tools/shank-and-solita/native/tests/tsconfig.test.json +++ b/tools/shank-and-solita/native/tests/tsconfig.test.json @@ -1,10 +1,10 @@ { - "compilerOptions": { - "types": ["mocha", "chai"], - "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], - "module": "commonjs", - "target": "es6", - "esModuleInterop": true - } - } \ No newline at end of file + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +}