├── .github └── PULL_REQUEST_TEMPLATE.md ├── challenge ├── package.json ├── .env.template ├── tsconfig.json ├── LICENSE ├── index.ts └── package-lock.json ├── .gitignore └── README.md /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Algorand Coding Challenge Submission 2 | 3 | **What was the bug?** 4 | 5 | 6 | 7 | **How did you fix the bug?** 8 | 9 | 10 | 11 | **Console Screenshot:** 12 | 13 | 14 | -------------------------------------------------------------------------------- /challenge/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "algorand-puzzle-1", 3 | "scripts": { 4 | "start": "tsx -r dotenv/config index.ts" 5 | }, 6 | "module": "index.ts", 7 | "type": "module", 8 | "peerDependencies": { 9 | "typescript": "^5.0.0" 10 | }, 11 | "dependencies": { 12 | "@algorandfoundation/algokit-utils": "^5.3.2", 13 | "algosdk": "^2.7.0", 14 | "dotenv": "^16.4.1", 15 | "tsx": "^4.7.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /challenge/.env.template: -------------------------------------------------------------------------------- 1 | # this file should contain environment variables specific to algokit localnet 2 | ALGOD_TOKEN=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 | ALGOD_SERVER=http://localhost 4 | ALGOD_PORT=4001 5 | INDEXER_TOKEN=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 6 | INDEXER_SERVER=http://localhost 7 | INDEXER_PORT=8980 8 | 9 | KMD_TOKEN=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 10 | KMD_SERVER=http://localhost 11 | KMD_PORT=4002 12 | KMD_WALLET="unencrypted-default-wallet" 13 | KMD_PASSWORD="" -------------------------------------------------------------------------------- /challenge/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["ESNext"], 4 | "target": "ESNext", 5 | "module": "ESNext", 6 | "moduleDetection": "force", 7 | "jsx": "react-jsx", 8 | "allowJs": true, 9 | 10 | /* Bundler mode */ 11 | "moduleResolution": "bundler", 12 | "allowImportingTsExtensions": true, 13 | "verbatimModuleSyntax": true, 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "skipLibCheck": true, 18 | "strict": true, 19 | "noFallthroughCasesInSwitch": true, 20 | "forceConsistentCasingInFileNames": true 21 | } 22 | } -------------------------------------------------------------------------------- /challenge/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Algorand Foundation 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /challenge/index.ts: -------------------------------------------------------------------------------- 1 | import algosdk from "algosdk"; 2 | import * as algokit from '@algorandfoundation/algokit-utils'; 3 | 4 | const algodClient = algokit.getAlgoClient() 5 | 6 | // Retrieve 2 accounts from localnet kmd 7 | const sender = await algokit.getLocalNetDispenserAccount(algodClient) 8 | const receiver = await algokit.mnemonicAccountFromEnvironment( 9 | {name: 'RECEIVER', fundWith: algokit.algos(100)}, 10 | algodClient, 11 | ) 12 | 13 | /* 14 | TODO: edit code below 15 | 16 | Puzzle: 17 | The below code is trying to send a payment from accounts[0] to accounts[1]. 18 | However, the code is not working. fix the code so that the payment is sent 19 | successfully. 20 | 21 | When solved correctly, the console should print out the following: 22 | "Payment of 1000000 microAlgos was sent to RRYKB23LFR62G3P4SFINZDQ4FVDUNWWQ4NOF7K6TP5GO65BQCHYMNTR3CU at confirmed round 59" 23 | */ 24 | const suggestedParams = await algodClient.getTransactionParams().do(); 25 | const txn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ 26 | from: sender.addr, 27 | suggestedParams, 28 | to: receiver.addr, 29 | amount: 1000000, 30 | }); 31 | 32 | await algodClient.sendRawTransaction(txn).do(); 33 | const result = await algosdk.waitForConfirmation( 34 | algodClient, 35 | txn.txID().toString(), 36 | 3 37 | ); 38 | 39 | console.log(`Payment of ${result.txn.txn.amt} microAlgos was sent to ${receiver.addr} at confirmed round ${result['confirmed-round']}`); -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Caches 14 | 15 | .cache 16 | 17 | # Diagnostic reports (https://nodejs.org/api/report.html) 18 | 19 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 20 | 21 | # Runtime data 22 | 23 | pids 24 | _.pid 25 | _.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | 30 | lib-cov 31 | 32 | # Coverage directory used by tools like istanbul 33 | 34 | coverage 35 | *.lcov 36 | 37 | # nyc test coverage 38 | 39 | .nyc_output 40 | 41 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 42 | 43 | .grunt 44 | 45 | # Bower dependency directory (https://bower.io/) 46 | 47 | bower_components 48 | 49 | # node-waf configuration 50 | 51 | .lock-wscript 52 | 53 | # Compiled binary addons (https://nodejs.org/api/addons.html) 54 | 55 | build/Release 56 | 57 | # Dependency directories 58 | 59 | node_modules/ 60 | jspm_packages/ 61 | 62 | # Snowpack dependency directory (https://snowpack.dev/) 63 | 64 | web_modules/ 65 | 66 | # TypeScript cache 67 | 68 | *.tsbuildinfo 69 | 70 | # Optional npm cache directory 71 | 72 | .npm 73 | 74 | # Optional eslint cache 75 | 76 | .eslintcache 77 | 78 | # Optional stylelint cache 79 | 80 | .stylelintcache 81 | 82 | # Microbundle cache 83 | 84 | .rpt2_cache/ 85 | .rts2_cache_cjs/ 86 | .rts2_cache_es/ 87 | .rts2_cache_umd/ 88 | 89 | # Optional REPL history 90 | 91 | .node_repl_history 92 | 93 | # Output of 'npm pack' 94 | 95 | *.tgz 96 | 97 | # Yarn Integrity file 98 | 99 | .yarn-integrity 100 | 101 | # dotenv environment variable files 102 | 103 | .env 104 | .env.development.local 105 | .env.test.local 106 | .env.production.local 107 | .env.local 108 | 109 | # parcel-bundler cache (https://parceljs.org/) 110 | 111 | .parcel-cache 112 | 113 | # Next.js build output 114 | 115 | .next 116 | out 117 | 118 | # Nuxt.js build / generate output 119 | 120 | .nuxt 121 | dist 122 | 123 | # Gatsby files 124 | 125 | # Comment in the public line in if your project uses Gatsby and not Next.js 126 | 127 | # https://nextjs.org/blog/next-9-1#public-directory-support 128 | 129 | # public 130 | 131 | # vuepress build output 132 | 133 | .vuepress/dist 134 | 135 | # vuepress v2.x temp and cache directory 136 | 137 | .temp 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.* 170 | 171 | # IntelliJ based IDEs 172 | .idea 173 | 174 | # Finder (MacOS) folder config 175 | .DS_Store 176 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🎮 Algorand Coding Challenge: Fix The Bug 🐞! 2 | 3 | ## 🚩 Challenge 1: I Can't Send My Transaction! 😭 4 | 5 | > I want to send 1 ALGO to my friend to show how amazing Algorand is but I can't send my transaction! what's wrong??? 6 | 7 | Inside of `index.ts` file, there is a script that sends a payment transaction that sends 1,000,000 microAlgos (1 ALGO) to the receiver's wallet. However if you try running the `index.ts` file after opening Docker Desktop and then running: 8 | ```bash 9 | algokit bootstrap all 10 | algokit localnet start 11 | npm run start 12 | ``` 13 | it will fail and show this error: `TypeError: Argument must be byte array` 14 | 15 | This repository has the `challenge` folder on the root level, which contains the fix the bug challenge codebase. 16 | Find the `index.ts` file inside of the `challenge` folder and **fix the bug! 🐞** 17 | 18 | > 💬 Meet other hackers working on this challenge and get help in the [JavaScript SDK Discord Channel](https://discord.com/channels/491256308461207573/631209194967531559)! 19 | 20 | ## Checkpoint 1: 🧰 Prerequisites 21 | 22 | 1. [Install AlgoKit](https://github.com/algorandfoundation/algokit-cli/tree/main?tab=readme-ov-file#install). 23 | 2. Install [Docker](https://www.docker.com/products/docker-desktop/). It is used to run a local Algorand network for development. 24 | 3. Install [Node.JS / npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) 25 | 26 | **Make sure to install these 3 prerequisites before continuing!** 27 | 28 | ## Checkpoint 2: 💻 Set up your development environment 29 | 30 | 1. [Fork this repository.](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) 31 | 2. Clone the repository 32 | ```bash 33 | cd [DIRECTORY_OF_YOUR_CHOICE] 34 | git clone [FORKED_REPO_URL] 35 | ``` 36 | 3. Open the cloned repository with the code editor of your choosing. 37 | 4. Go into the `challenge` directory and run the following in your terminal: 38 | ```bash 39 | algokit bootstrap all 40 | ``` 41 | 42 | Video walkthrough of forking and cloning this repository: 43 | 44 | https://github.com/algorand-fix-the-bug-campaign/challenge-1/assets/52557585/acde8053-a8dd-4f53-8bad-45de1068bfda 45 | 46 | Now you are ready to fix the bug! 47 | 48 | ## Checkpoint 3: 🐞 Fix the bug 🧐 49 | 50 | 1. Open Docker Desktop and launch Algorand localnet by running `algokit localnet start` in your terminal [For more info click me!](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/localnet.md#creating--starting-the-localnet). 51 | 2. Make sure you are inside the `challenge` directory and run `npm run start` in your terminal to run the `index.ts` file and see the error message. 52 | 3. Go to `index.ts` file and fix the code to make it work. 53 | 4. Run `npm run start` inside of `challenge` directory again to run the `index.ts` file. 54 | If you see: `Payment of 1000000 microAlgos was sent to [receiver's address]` in the console, you successfully fixed the bug! 👏 55 | 56 | **😰 Are you struggling?** 57 | Here is a hint for you: https://developer.algorand.org/docs/sdks/javascript/ 58 | 59 | ## Checkpoint 4: 💯 Submit your answer 60 | 61 | 1. After fixing the bug, push your code to your forked Github repo and [make a PR to the original repo.](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) 62 | 2. Inside the PR include: 63 | 1. What was the problem? 64 | 2. How did you solve the problem? 65 | 3. Screenshot of your terminal showing the logged sentence. `Payment of 1000000 microAlgos was sent to [receiver's address]` 66 | 67 | ## Checkpoint 5: 🏆 Claim your certificate of completion NFT! 🎓 68 | 69 | The Algorand Developer Relations team will review the submission and "approve" the PR by labeling it `Approved`. Once it's approved, we will share the magic link to claim your certificate of completion NFT in the comment of the PR! 70 | 71 | 🎉 Congratulations on completing the challenge Algodev! Now on to the next one 💪 72 | -------------------------------------------------------------------------------- /challenge/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "algorand-puzzle-1", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "algorand-puzzle-1", 8 | "dependencies": { 9 | "@algorandfoundation/algokit-utils": "^5.3.2", 10 | "algosdk": "^2.7.0", 11 | "dotenv": "^16.4.1", 12 | "tsx": "^4.7.0" 13 | }, 14 | "peerDependencies": { 15 | "typescript": "^5.0.0" 16 | } 17 | }, 18 | "node_modules/@algorandfoundation/algokit-utils": { 19 | "version": "5.3.2", 20 | "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-5.3.2.tgz", 21 | "integrity": "sha512-HBaXttZrjgHRgh4vGeD3m5l9G4jkq07A8pFVKBTf5yQqckZ7aSGSIWHGpNw6x5FDZwq3s9i9Pw4LXoen4l8Yug==", 22 | "dependencies": { 23 | "buffer": "^6.0.3" 24 | }, 25 | "engines": { 26 | "node": ">=18.0" 27 | }, 28 | "peerDependencies": { 29 | "algosdk": "^2.7.0" 30 | } 31 | }, 32 | "node_modules/@esbuild/aix-ppc64": { 33 | "version": "0.19.12", 34 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", 35 | "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", 36 | "cpu": [ 37 | "ppc64" 38 | ], 39 | "optional": true, 40 | "os": [ 41 | "aix" 42 | ], 43 | "engines": { 44 | "node": ">=12" 45 | } 46 | }, 47 | "node_modules/@esbuild/android-arm": { 48 | "version": "0.19.12", 49 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", 50 | "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", 51 | "cpu": [ 52 | "arm" 53 | ], 54 | "optional": true, 55 | "os": [ 56 | "android" 57 | ], 58 | "engines": { 59 | "node": ">=12" 60 | } 61 | }, 62 | "node_modules/@esbuild/android-arm64": { 63 | "version": "0.19.12", 64 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", 65 | "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", 66 | "cpu": [ 67 | "arm64" 68 | ], 69 | "optional": true, 70 | "os": [ 71 | "android" 72 | ], 73 | "engines": { 74 | "node": ">=12" 75 | } 76 | }, 77 | "node_modules/@esbuild/android-x64": { 78 | "version": "0.19.12", 79 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", 80 | "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", 81 | "cpu": [ 82 | "x64" 83 | ], 84 | "optional": true, 85 | "os": [ 86 | "android" 87 | ], 88 | "engines": { 89 | "node": ">=12" 90 | } 91 | }, 92 | "node_modules/@esbuild/darwin-arm64": { 93 | "version": "0.19.12", 94 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", 95 | "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", 96 | "cpu": [ 97 | "arm64" 98 | ], 99 | "optional": true, 100 | "os": [ 101 | "darwin" 102 | ], 103 | "engines": { 104 | "node": ">=12" 105 | } 106 | }, 107 | "node_modules/@esbuild/darwin-x64": { 108 | "version": "0.19.12", 109 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", 110 | "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", 111 | "cpu": [ 112 | "x64" 113 | ], 114 | "optional": true, 115 | "os": [ 116 | "darwin" 117 | ], 118 | "engines": { 119 | "node": ">=12" 120 | } 121 | }, 122 | "node_modules/@esbuild/freebsd-arm64": { 123 | "version": "0.19.12", 124 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", 125 | "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", 126 | "cpu": [ 127 | "arm64" 128 | ], 129 | "optional": true, 130 | "os": [ 131 | "freebsd" 132 | ], 133 | "engines": { 134 | "node": ">=12" 135 | } 136 | }, 137 | "node_modules/@esbuild/freebsd-x64": { 138 | "version": "0.19.12", 139 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", 140 | "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", 141 | "cpu": [ 142 | "x64" 143 | ], 144 | "optional": true, 145 | "os": [ 146 | "freebsd" 147 | ], 148 | "engines": { 149 | "node": ">=12" 150 | } 151 | }, 152 | "node_modules/@esbuild/linux-arm": { 153 | "version": "0.19.12", 154 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", 155 | "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", 156 | "cpu": [ 157 | "arm" 158 | ], 159 | "optional": true, 160 | "os": [ 161 | "linux" 162 | ], 163 | "engines": { 164 | "node": ">=12" 165 | } 166 | }, 167 | "node_modules/@esbuild/linux-arm64": { 168 | "version": "0.19.12", 169 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", 170 | "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", 171 | "cpu": [ 172 | "arm64" 173 | ], 174 | "optional": true, 175 | "os": [ 176 | "linux" 177 | ], 178 | "engines": { 179 | "node": ">=12" 180 | } 181 | }, 182 | "node_modules/@esbuild/linux-ia32": { 183 | "version": "0.19.12", 184 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", 185 | "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", 186 | "cpu": [ 187 | "ia32" 188 | ], 189 | "optional": true, 190 | "os": [ 191 | "linux" 192 | ], 193 | "engines": { 194 | "node": ">=12" 195 | } 196 | }, 197 | "node_modules/@esbuild/linux-loong64": { 198 | "version": "0.19.12", 199 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", 200 | "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", 201 | "cpu": [ 202 | "loong64" 203 | ], 204 | "optional": true, 205 | "os": [ 206 | "linux" 207 | ], 208 | "engines": { 209 | "node": ">=12" 210 | } 211 | }, 212 | "node_modules/@esbuild/linux-mips64el": { 213 | "version": "0.19.12", 214 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", 215 | "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", 216 | "cpu": [ 217 | "mips64el" 218 | ], 219 | "optional": true, 220 | "os": [ 221 | "linux" 222 | ], 223 | "engines": { 224 | "node": ">=12" 225 | } 226 | }, 227 | "node_modules/@esbuild/linux-ppc64": { 228 | "version": "0.19.12", 229 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", 230 | "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", 231 | "cpu": [ 232 | "ppc64" 233 | ], 234 | "optional": true, 235 | "os": [ 236 | "linux" 237 | ], 238 | "engines": { 239 | "node": ">=12" 240 | } 241 | }, 242 | "node_modules/@esbuild/linux-riscv64": { 243 | "version": "0.19.12", 244 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", 245 | "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", 246 | "cpu": [ 247 | "riscv64" 248 | ], 249 | "optional": true, 250 | "os": [ 251 | "linux" 252 | ], 253 | "engines": { 254 | "node": ">=12" 255 | } 256 | }, 257 | "node_modules/@esbuild/linux-s390x": { 258 | "version": "0.19.12", 259 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", 260 | "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", 261 | "cpu": [ 262 | "s390x" 263 | ], 264 | "optional": true, 265 | "os": [ 266 | "linux" 267 | ], 268 | "engines": { 269 | "node": ">=12" 270 | } 271 | }, 272 | "node_modules/@esbuild/linux-x64": { 273 | "version": "0.19.12", 274 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", 275 | "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", 276 | "cpu": [ 277 | "x64" 278 | ], 279 | "optional": true, 280 | "os": [ 281 | "linux" 282 | ], 283 | "engines": { 284 | "node": ">=12" 285 | } 286 | }, 287 | "node_modules/@esbuild/netbsd-x64": { 288 | "version": "0.19.12", 289 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", 290 | "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", 291 | "cpu": [ 292 | "x64" 293 | ], 294 | "optional": true, 295 | "os": [ 296 | "netbsd" 297 | ], 298 | "engines": { 299 | "node": ">=12" 300 | } 301 | }, 302 | "node_modules/@esbuild/openbsd-x64": { 303 | "version": "0.19.12", 304 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", 305 | "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", 306 | "cpu": [ 307 | "x64" 308 | ], 309 | "optional": true, 310 | "os": [ 311 | "openbsd" 312 | ], 313 | "engines": { 314 | "node": ">=12" 315 | } 316 | }, 317 | "node_modules/@esbuild/sunos-x64": { 318 | "version": "0.19.12", 319 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", 320 | "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", 321 | "cpu": [ 322 | "x64" 323 | ], 324 | "optional": true, 325 | "os": [ 326 | "sunos" 327 | ], 328 | "engines": { 329 | "node": ">=12" 330 | } 331 | }, 332 | "node_modules/@esbuild/win32-arm64": { 333 | "version": "0.19.12", 334 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", 335 | "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", 336 | "cpu": [ 337 | "arm64" 338 | ], 339 | "optional": true, 340 | "os": [ 341 | "win32" 342 | ], 343 | "engines": { 344 | "node": ">=12" 345 | } 346 | }, 347 | "node_modules/@esbuild/win32-ia32": { 348 | "version": "0.19.12", 349 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", 350 | "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", 351 | "cpu": [ 352 | "ia32" 353 | ], 354 | "optional": true, 355 | "os": [ 356 | "win32" 357 | ], 358 | "engines": { 359 | "node": ">=12" 360 | } 361 | }, 362 | "node_modules/@esbuild/win32-x64": { 363 | "version": "0.19.12", 364 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", 365 | "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", 366 | "cpu": [ 367 | "x64" 368 | ], 369 | "optional": true, 370 | "os": [ 371 | "win32" 372 | ], 373 | "engines": { 374 | "node": ">=12" 375 | } 376 | }, 377 | "node_modules/algo-msgpack-with-bigint": { 378 | "version": "2.1.1", 379 | "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", 380 | "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", 381 | "engines": { 382 | "node": ">= 10" 383 | } 384 | }, 385 | "node_modules/algosdk": { 386 | "version": "2.7.0", 387 | "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.7.0.tgz", 388 | "integrity": "sha512-sBE9lpV7bup3rZ+q2j3JQaFAE9JwZvjWKX00vPlG8e9txctXbgLL56jZhSWZndqhDI9oI+0P4NldkuQIWdrUyg==", 389 | "dependencies": { 390 | "algo-msgpack-with-bigint": "^2.1.1", 391 | "buffer": "^6.0.3", 392 | "hi-base32": "^0.5.1", 393 | "js-sha256": "^0.9.0", 394 | "js-sha3": "^0.8.0", 395 | "js-sha512": "^0.8.0", 396 | "json-bigint": "^1.0.0", 397 | "tweetnacl": "^1.0.3", 398 | "vlq": "^2.0.4" 399 | }, 400 | "engines": { 401 | "node": ">=18.0.0" 402 | } 403 | }, 404 | "node_modules/base64-js": { 405 | "version": "1.5.1", 406 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 407 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 408 | "funding": [ 409 | { 410 | "type": "github", 411 | "url": "https://github.com/sponsors/feross" 412 | }, 413 | { 414 | "type": "patreon", 415 | "url": "https://www.patreon.com/feross" 416 | }, 417 | { 418 | "type": "consulting", 419 | "url": "https://feross.org/support" 420 | } 421 | ] 422 | }, 423 | "node_modules/bignumber.js": { 424 | "version": "9.1.2", 425 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", 426 | "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", 427 | "engines": { 428 | "node": "*" 429 | } 430 | }, 431 | "node_modules/buffer": { 432 | "version": "6.0.3", 433 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 434 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 435 | "funding": [ 436 | { 437 | "type": "github", 438 | "url": "https://github.com/sponsors/feross" 439 | }, 440 | { 441 | "type": "patreon", 442 | "url": "https://www.patreon.com/feross" 443 | }, 444 | { 445 | "type": "consulting", 446 | "url": "https://feross.org/support" 447 | } 448 | ], 449 | "dependencies": { 450 | "base64-js": "^1.3.1", 451 | "ieee754": "^1.2.1" 452 | } 453 | }, 454 | "node_modules/dotenv": { 455 | "version": "16.4.1", 456 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", 457 | "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", 458 | "engines": { 459 | "node": ">=12" 460 | }, 461 | "funding": { 462 | "url": "https://github.com/motdotla/dotenv?sponsor=1" 463 | } 464 | }, 465 | "node_modules/esbuild": { 466 | "version": "0.19.12", 467 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", 468 | "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", 469 | "hasInstallScript": true, 470 | "bin": { 471 | "esbuild": "bin/esbuild" 472 | }, 473 | "engines": { 474 | "node": ">=12" 475 | }, 476 | "optionalDependencies": { 477 | "@esbuild/aix-ppc64": "0.19.12", 478 | "@esbuild/android-arm": "0.19.12", 479 | "@esbuild/android-arm64": "0.19.12", 480 | "@esbuild/android-x64": "0.19.12", 481 | "@esbuild/darwin-arm64": "0.19.12", 482 | "@esbuild/darwin-x64": "0.19.12", 483 | "@esbuild/freebsd-arm64": "0.19.12", 484 | "@esbuild/freebsd-x64": "0.19.12", 485 | "@esbuild/linux-arm": "0.19.12", 486 | "@esbuild/linux-arm64": "0.19.12", 487 | "@esbuild/linux-ia32": "0.19.12", 488 | "@esbuild/linux-loong64": "0.19.12", 489 | "@esbuild/linux-mips64el": "0.19.12", 490 | "@esbuild/linux-ppc64": "0.19.12", 491 | "@esbuild/linux-riscv64": "0.19.12", 492 | "@esbuild/linux-s390x": "0.19.12", 493 | "@esbuild/linux-x64": "0.19.12", 494 | "@esbuild/netbsd-x64": "0.19.12", 495 | "@esbuild/openbsd-x64": "0.19.12", 496 | "@esbuild/sunos-x64": "0.19.12", 497 | "@esbuild/win32-arm64": "0.19.12", 498 | "@esbuild/win32-ia32": "0.19.12", 499 | "@esbuild/win32-x64": "0.19.12" 500 | } 501 | }, 502 | "node_modules/fsevents": { 503 | "version": "2.3.3", 504 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 505 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 506 | "hasInstallScript": true, 507 | "optional": true, 508 | "os": [ 509 | "darwin" 510 | ], 511 | "engines": { 512 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 513 | } 514 | }, 515 | "node_modules/get-tsconfig": { 516 | "version": "4.7.2", 517 | "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", 518 | "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", 519 | "dependencies": { 520 | "resolve-pkg-maps": "^1.0.0" 521 | }, 522 | "funding": { 523 | "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 524 | } 525 | }, 526 | "node_modules/hi-base32": { 527 | "version": "0.5.1", 528 | "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", 529 | "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==" 530 | }, 531 | "node_modules/ieee754": { 532 | "version": "1.2.1", 533 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 534 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 535 | "funding": [ 536 | { 537 | "type": "github", 538 | "url": "https://github.com/sponsors/feross" 539 | }, 540 | { 541 | "type": "patreon", 542 | "url": "https://www.patreon.com/feross" 543 | }, 544 | { 545 | "type": "consulting", 546 | "url": "https://feross.org/support" 547 | } 548 | ] 549 | }, 550 | "node_modules/js-sha256": { 551 | "version": "0.9.0", 552 | "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", 553 | "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" 554 | }, 555 | "node_modules/js-sha3": { 556 | "version": "0.8.0", 557 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", 558 | "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" 559 | }, 560 | "node_modules/js-sha512": { 561 | "version": "0.8.0", 562 | "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", 563 | "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" 564 | }, 565 | "node_modules/json-bigint": { 566 | "version": "1.0.0", 567 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", 568 | "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", 569 | "dependencies": { 570 | "bignumber.js": "^9.0.0" 571 | } 572 | }, 573 | "node_modules/resolve-pkg-maps": { 574 | "version": "1.0.0", 575 | "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 576 | "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 577 | "funding": { 578 | "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 579 | } 580 | }, 581 | "node_modules/tsx": { 582 | "version": "4.7.0", 583 | "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.0.tgz", 584 | "integrity": "sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==", 585 | "dependencies": { 586 | "esbuild": "~0.19.10", 587 | "get-tsconfig": "^4.7.2" 588 | }, 589 | "bin": { 590 | "tsx": "dist/cli.mjs" 591 | }, 592 | "engines": { 593 | "node": ">=18.0.0" 594 | }, 595 | "optionalDependencies": { 596 | "fsevents": "~2.3.3" 597 | } 598 | }, 599 | "node_modules/tweetnacl": { 600 | "version": "1.0.3", 601 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", 602 | "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" 603 | }, 604 | "node_modules/typescript": { 605 | "version": "5.3.3", 606 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", 607 | "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", 608 | "peer": true, 609 | "bin": { 610 | "tsc": "bin/tsc", 611 | "tsserver": "bin/tsserver" 612 | }, 613 | "engines": { 614 | "node": ">=14.17" 615 | } 616 | }, 617 | "node_modules/vlq": { 618 | "version": "2.0.4", 619 | "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", 620 | "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==" 621 | } 622 | } 623 | } 624 | --------------------------------------------------------------------------------