├── .gitignore ├── README.md ├── config.ts ├── data ├── abi │ ├── bridge.ts │ ├── deploy-nft.ts │ ├── deploy.ts │ ├── erc20.ts │ ├── merkly.ts │ └── scrollswap.ts └── scroll-tokens.ts ├── logError.js ├── modules ├── bridge.ts ├── deploy.ts ├── merkly.ts └── scrollswap.ts ├── package-lock.json ├── package.json ├── private_keys.txt ├── start.ts ├── tsconfig.json └── utils ├── approve.ts ├── arbClient.ts ├── avaxClient.ts ├── baseClient.ts ├── common.ts ├── ethClient.ts ├── getCurrentGas.ts ├── logger.ts ├── menu.ts ├── mintfun.ts ├── optimismClient.ts ├── polygonClient.ts ├── refill.ts ├── scrollClient.ts ├── tokenBalance.ts └── wallet.ts /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | .env 3 | .idea -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### Установка 2 | 3 | `git clone https://github.com/munris-vlad/scroll` 4 | 5 | `npm install` 6 | 7 | Вписываем приватники в файл `private_keys.txt` 8 | 9 | Запуск `npm start` 10 | 11 | Настройки `config.ts` 12 | 13 | ### Возможности 14 | 15 | * Официальный бридж ETH -> Scroll 16 | * Orbiter Arbitrum -> Scroll 17 | * Merkly refuel Arbitrum, Optimism, Avalanche, Polygon, Base -> Scroll 18 | * Scrollswap 19 | * Deploy contract 20 | 21 | Все дексы делают round swap ETH -> Stable (USDC/DAI) -> ETH 22 | 23 | Есть возможность сделать рандом модуль (кроме бриджей), рандом только свап модули, свапнуть все стейблы в ETH -------------------------------------------------------------------------------- /config.ts: -------------------------------------------------------------------------------- 1 | export const generalConfig = { 2 | ethrpc: 'https://rpc.ankr.com/eth', 3 | scrollrpc: 'https://rpc.scroll.io', 4 | sleepFrom: 150, 5 | sleepTo: 250, 6 | maxGas: 16, 7 | shuffleWallets: true, 8 | shuffleCustomModules: false, 9 | customModules: [] // scrollswap 10 | } 11 | 12 | export const bridgeConfig = { 13 | type: 'official', // 'official', 'orbiter' 14 | orbiterFromNetwork: 'arbitrum', 15 | bridgeFrom: 0.001, 16 | bridgeTo: 0.002, 17 | orbiterFrom: 0.005, // min 0.005 18 | orbiterTo: 0.0055, 19 | maxGas: 10 // for official bridge Eth -> Scroll 20 | } 21 | 22 | export const swapConfig = { 23 | swapEthPercentFrom: 20, 24 | swapEthPercentTo: 30 25 | } 26 | 27 | export const merklyConfig = { 28 | refuelFrom: 0.0006, 29 | refuelTo: 0.0007, 30 | sourceNetwork: 'auto', // Scroll | to scroll: 'auto' 'random' 'Arbitrum' 'Optimism' 'Polygon' 'Avalanche' 'Base' 31 | destinationNetwork: 'Scroll', // Scroll | from scroll: 'random' 'Zora' 'Arbitrum Nova' 'Moonbeam' 'Gnosis' 'OpBNB' 'Astar' 32 | checkScrollBalance: true, // проверять наличие баланса в Scroll 33 | minBalance: 1 // если баланс >= этой суммы в USD, refuel будет пропускаться 34 | } 35 | 36 | export const deployConfig = { 37 | type: 'random' // 'own', 'merkly', 'random' 38 | } -------------------------------------------------------------------------------- /data/abi/bridge.ts: -------------------------------------------------------------------------------- 1 | export const bridgeAbi = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"l2Token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DepositERC20","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DepositETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"l2Token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"FinalizeWithdrawERC20","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"FinalizeWithdrawETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RefundERC20","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RefundETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldDefaultERC20Gateway","type":"address"},{"indexed":true,"internalType":"address","name":"newDefaultERC20Gateway","type":"address"}],"name":"SetDefaultERC20Gateway","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"oldGateway","type":"address"},{"indexed":true,"internalType":"address","name":"newGateway","type":"address"}],"name":"SetERC20Gateway","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldETHGateway","type":"address"},{"indexed":true,"internalType":"address","name":"newEthGateway","type":"address"}],"name":"SetETHGateway","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ERC20Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultERC20Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositERC20AndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositETHAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ethGateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"finalizeWithdrawERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"finalizeWithdrawETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"gatewayInContext","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getERC20Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Address","type":"address"}],"name":"getL2ERC20Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ethGateway","type":"address"},{"internalType":"address","name":"_defaultERC20Gateway","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"requestERC20","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDefaultERC20Gateway","type":"address"}],"name":"setDefaultERC20Gateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"address[]","name":"_gateways","type":"address[]"}],"name":"setERC20Gateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newEthGateway","type":"address"}],"name":"setETHGateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}] as const -------------------------------------------------------------------------------- /data/abi/deploy-nft.ts: -------------------------------------------------------------------------------- 1 | export const deployNftAbi = [ 2 | { 3 | "inputs": [ 4 | { 5 | "internalType": "string", 6 | "name": "_name", 7 | "type": "string" 8 | }, 9 | { 10 | "internalType": "string", 11 | "name": "_symbol", 12 | "type": "string" 13 | }, 14 | { 15 | "internalType": "bytes32", 16 | "name": "_root", 17 | "type": "bytes32" 18 | } 19 | ], 20 | "stateMutability": "nonpayable", 21 | "type": "constructor" 22 | }, 23 | { 24 | "inputs": [], 25 | "name": "ERC721EnumerableForbiddenBatchMint", 26 | "type": "error" 27 | }, 28 | { 29 | "inputs": [ 30 | { 31 | "internalType": "address", 32 | "name": "sender", 33 | "type": "address" 34 | }, 35 | { 36 | "internalType": "uint256", 37 | "name": "tokenId", 38 | "type": "uint256" 39 | }, 40 | { 41 | "internalType": "address", 42 | "name": "owner", 43 | "type": "address" 44 | } 45 | ], 46 | "name": "ERC721IncorrectOwner", 47 | "type": "error" 48 | }, 49 | { 50 | "inputs": [ 51 | { 52 | "internalType": "address", 53 | "name": "operator", 54 | "type": "address" 55 | }, 56 | { 57 | "internalType": "uint256", 58 | "name": "tokenId", 59 | "type": "uint256" 60 | } 61 | ], 62 | "name": "ERC721InsufficientApproval", 63 | "type": "error" 64 | }, 65 | { 66 | "inputs": [ 67 | { 68 | "internalType": "address", 69 | "name": "approver", 70 | "type": "address" 71 | } 72 | ], 73 | "name": "ERC721InvalidApprover", 74 | "type": "error" 75 | }, 76 | { 77 | "inputs": [ 78 | { 79 | "internalType": "address", 80 | "name": "operator", 81 | "type": "address" 82 | } 83 | ], 84 | "name": "ERC721InvalidOperator", 85 | "type": "error" 86 | }, 87 | { 88 | "inputs": [ 89 | { 90 | "internalType": "address", 91 | "name": "owner", 92 | "type": "address" 93 | } 94 | ], 95 | "name": "ERC721InvalidOwner", 96 | "type": "error" 97 | }, 98 | { 99 | "inputs": [ 100 | { 101 | "internalType": "address", 102 | "name": "receiver", 103 | "type": "address" 104 | } 105 | ], 106 | "name": "ERC721InvalidReceiver", 107 | "type": "error" 108 | }, 109 | { 110 | "inputs": [ 111 | { 112 | "internalType": "address", 113 | "name": "sender", 114 | "type": "address" 115 | } 116 | ], 117 | "name": "ERC721InvalidSender", 118 | "type": "error" 119 | }, 120 | { 121 | "inputs": [ 122 | { 123 | "internalType": "uint256", 124 | "name": "tokenId", 125 | "type": "uint256" 126 | } 127 | ], 128 | "name": "ERC721NonexistentToken", 129 | "type": "error" 130 | }, 131 | { 132 | "inputs": [ 133 | { 134 | "internalType": "address", 135 | "name": "owner", 136 | "type": "address" 137 | }, 138 | { 139 | "internalType": "uint256", 140 | "name": "index", 141 | "type": "uint256" 142 | } 143 | ], 144 | "name": "ERC721OutOfBoundsIndex", 145 | "type": "error" 146 | }, 147 | { 148 | "inputs": [], 149 | "name": "ReentrancyGuardReentrantCall", 150 | "type": "error" 151 | }, 152 | { 153 | "inputs": [ 154 | { 155 | "internalType": "uint256", 156 | "name": "value", 157 | "type": "uint256" 158 | }, 159 | { 160 | "internalType": "uint256", 161 | "name": "length", 162 | "type": "uint256" 163 | } 164 | ], 165 | "name": "StringsInsufficientHexLength", 166 | "type": "error" 167 | }, 168 | { 169 | "anonymous": false, 170 | "inputs": [ 171 | { 172 | "indexed": true, 173 | "internalType": "address", 174 | "name": "owner", 175 | "type": "address" 176 | }, 177 | { 178 | "indexed": true, 179 | "internalType": "address", 180 | "name": "approved", 181 | "type": "address" 182 | }, 183 | { 184 | "indexed": true, 185 | "internalType": "uint256", 186 | "name": "tokenId", 187 | "type": "uint256" 188 | } 189 | ], 190 | "name": "Approval", 191 | "type": "event" 192 | }, 193 | { 194 | "anonymous": false, 195 | "inputs": [ 196 | { 197 | "indexed": true, 198 | "internalType": "address", 199 | "name": "owner", 200 | "type": "address" 201 | }, 202 | { 203 | "indexed": true, 204 | "internalType": "address", 205 | "name": "operator", 206 | "type": "address" 207 | }, 208 | { 209 | "indexed": false, 210 | "internalType": "bool", 211 | "name": "approved", 212 | "type": "bool" 213 | } 214 | ], 215 | "name": "ApprovalForAll", 216 | "type": "event" 217 | }, 218 | { 219 | "anonymous": false, 220 | "inputs": [ 221 | { 222 | "indexed": true, 223 | "internalType": "address", 224 | "name": "from", 225 | "type": "address" 226 | }, 227 | { 228 | "indexed": true, 229 | "internalType": "address", 230 | "name": "to", 231 | "type": "address" 232 | }, 233 | { 234 | "indexed": true, 235 | "internalType": "uint256", 236 | "name": "tokenId", 237 | "type": "uint256" 238 | } 239 | ], 240 | "name": "Transfer", 241 | "type": "event" 242 | }, 243 | { 244 | "inputs": [ 245 | { 246 | "internalType": "address", 247 | "name": "to", 248 | "type": "address" 249 | }, 250 | { 251 | "internalType": "uint256", 252 | "name": "tokenId", 253 | "type": "uint256" 254 | } 255 | ], 256 | "name": "approve", 257 | "outputs": [], 258 | "stateMutability": "nonpayable", 259 | "type": "function" 260 | }, 261 | { 262 | "inputs": [ 263 | { 264 | "internalType": "address", 265 | "name": "owner", 266 | "type": "address" 267 | } 268 | ], 269 | "name": "balanceOf", 270 | "outputs": [ 271 | { 272 | "internalType": "uint256", 273 | "name": "", 274 | "type": "uint256" 275 | } 276 | ], 277 | "stateMutability": "view", 278 | "type": "function" 279 | }, 280 | { 281 | "inputs": [ 282 | { 283 | "internalType": "uint256", 284 | "name": "tokenId", 285 | "type": "uint256" 286 | } 287 | ], 288 | "name": "getApproved", 289 | "outputs": [ 290 | { 291 | "internalType": "address", 292 | "name": "", 293 | "type": "address" 294 | } 295 | ], 296 | "stateMutability": "view", 297 | "type": "function" 298 | }, 299 | { 300 | "inputs": [ 301 | { 302 | "internalType": "address", 303 | "name": "owner", 304 | "type": "address" 305 | }, 306 | { 307 | "internalType": "address", 308 | "name": "operator", 309 | "type": "address" 310 | } 311 | ], 312 | "name": "isApprovedForAll", 313 | "outputs": [ 314 | { 315 | "internalType": "bool", 316 | "name": "", 317 | "type": "bool" 318 | } 319 | ], 320 | "stateMutability": "view", 321 | "type": "function" 322 | }, 323 | { 324 | "inputs": [ 325 | { 326 | "internalType": "uint256", 327 | "name": "", 328 | "type": "uint256" 329 | } 330 | ], 331 | "name": "metadata", 332 | "outputs": [ 333 | { 334 | "internalType": "address", 335 | "name": "deployer", 336 | "type": "address" 337 | }, 338 | { 339 | "internalType": "address", 340 | "name": "firstDeployedContract", 341 | "type": "address" 342 | }, 343 | { 344 | "internalType": "address", 345 | "name": "bestDeployedContract", 346 | "type": "address" 347 | }, 348 | { 349 | "internalType": "uint256", 350 | "name": "rarityData", 351 | "type": "uint256" 352 | } 353 | ], 354 | "stateMutability": "view", 355 | "type": "function" 356 | }, 357 | { 358 | "inputs": [ 359 | { 360 | "internalType": "address", 361 | "name": "receiver", 362 | "type": "address" 363 | }, 364 | { 365 | "components": [ 366 | { 367 | "internalType": "address", 368 | "name": "deployer", 369 | "type": "address" 370 | }, 371 | { 372 | "internalType": "address", 373 | "name": "firstDeployedContract", 374 | "type": "address" 375 | }, 376 | { 377 | "internalType": "address", 378 | "name": "bestDeployedContract", 379 | "type": "address" 380 | }, 381 | { 382 | "internalType": "uint256", 383 | "name": "rarityData", 384 | "type": "uint256" 385 | } 386 | ], 387 | "internalType": "struct ScrollGenesisNFT.Metadata", 388 | "name": "meta", 389 | "type": "tuple" 390 | }, 391 | { 392 | "internalType": "bytes32[]", 393 | "name": "proof", 394 | "type": "bytes32[]" 395 | } 396 | ], 397 | "name": "mint", 398 | "outputs": [], 399 | "stateMutability": "nonpayable", 400 | "type": "function" 401 | }, 402 | { 403 | "inputs": [ 404 | { 405 | "internalType": "uint256", 406 | "name": "", 407 | "type": "uint256" 408 | } 409 | ], 410 | "name": "mintData", 411 | "outputs": [ 412 | { 413 | "internalType": "uint64", 414 | "name": "mintAt", 415 | "type": "uint64" 416 | } 417 | ], 418 | "stateMutability": "view", 419 | "type": "function" 420 | }, 421 | { 422 | "inputs": [], 423 | "name": "name", 424 | "outputs": [ 425 | { 426 | "internalType": "string", 427 | "name": "", 428 | "type": "string" 429 | } 430 | ], 431 | "stateMutability": "view", 432 | "type": "function" 433 | }, 434 | { 435 | "inputs": [ 436 | { 437 | "internalType": "uint256", 438 | "name": "tokenId", 439 | "type": "uint256" 440 | } 441 | ], 442 | "name": "ownerOf", 443 | "outputs": [ 444 | { 445 | "internalType": "address", 446 | "name": "", 447 | "type": "address" 448 | } 449 | ], 450 | "stateMutability": "view", 451 | "type": "function" 452 | }, 453 | { 454 | "inputs": [], 455 | "name": "root", 456 | "outputs": [ 457 | { 458 | "internalType": "bytes32", 459 | "name": "", 460 | "type": "bytes32" 461 | } 462 | ], 463 | "stateMutability": "view", 464 | "type": "function" 465 | }, 466 | { 467 | "inputs": [ 468 | { 469 | "internalType": "address", 470 | "name": "from", 471 | "type": "address" 472 | }, 473 | { 474 | "internalType": "address", 475 | "name": "to", 476 | "type": "address" 477 | }, 478 | { 479 | "internalType": "uint256", 480 | "name": "tokenId", 481 | "type": "uint256" 482 | } 483 | ], 484 | "name": "safeTransferFrom", 485 | "outputs": [], 486 | "stateMutability": "nonpayable", 487 | "type": "function" 488 | }, 489 | { 490 | "inputs": [ 491 | { 492 | "internalType": "address", 493 | "name": "from", 494 | "type": "address" 495 | }, 496 | { 497 | "internalType": "address", 498 | "name": "to", 499 | "type": "address" 500 | }, 501 | { 502 | "internalType": "uint256", 503 | "name": "tokenId", 504 | "type": "uint256" 505 | }, 506 | { 507 | "internalType": "bytes", 508 | "name": "data", 509 | "type": "bytes" 510 | } 511 | ], 512 | "name": "safeTransferFrom", 513 | "outputs": [], 514 | "stateMutability": "nonpayable", 515 | "type": "function" 516 | }, 517 | { 518 | "inputs": [ 519 | { 520 | "internalType": "address", 521 | "name": "operator", 522 | "type": "address" 523 | }, 524 | { 525 | "internalType": "bool", 526 | "name": "approved", 527 | "type": "bool" 528 | } 529 | ], 530 | "name": "setApprovalForAll", 531 | "outputs": [], 532 | "stateMutability": "nonpayable", 533 | "type": "function" 534 | }, 535 | { 536 | "inputs": [ 537 | { 538 | "internalType": "bytes4", 539 | "name": "interfaceId", 540 | "type": "bytes4" 541 | } 542 | ], 543 | "name": "supportsInterface", 544 | "outputs": [ 545 | { 546 | "internalType": "bool", 547 | "name": "", 548 | "type": "bool" 549 | } 550 | ], 551 | "stateMutability": "view", 552 | "type": "function" 553 | }, 554 | { 555 | "inputs": [], 556 | "name": "symbol", 557 | "outputs": [ 558 | { 559 | "internalType": "string", 560 | "name": "", 561 | "type": "string" 562 | } 563 | ], 564 | "stateMutability": "view", 565 | "type": "function" 566 | }, 567 | { 568 | "inputs": [ 569 | { 570 | "internalType": "uint256", 571 | "name": "index", 572 | "type": "uint256" 573 | } 574 | ], 575 | "name": "tokenByIndex", 576 | "outputs": [ 577 | { 578 | "internalType": "uint256", 579 | "name": "", 580 | "type": "uint256" 581 | } 582 | ], 583 | "stateMutability": "view", 584 | "type": "function" 585 | }, 586 | { 587 | "inputs": [ 588 | { 589 | "internalType": "address", 590 | "name": "owner", 591 | "type": "address" 592 | }, 593 | { 594 | "internalType": "uint256", 595 | "name": "index", 596 | "type": "uint256" 597 | } 598 | ], 599 | "name": "tokenOfOwnerByIndex", 600 | "outputs": [ 601 | { 602 | "internalType": "uint256", 603 | "name": "", 604 | "type": "uint256" 605 | } 606 | ], 607 | "stateMutability": "view", 608 | "type": "function" 609 | }, 610 | { 611 | "inputs": [ 612 | { 613 | "internalType": "uint256", 614 | "name": "tokenId", 615 | "type": "uint256" 616 | } 617 | ], 618 | "name": "tokenURI", 619 | "outputs": [ 620 | { 621 | "internalType": "string", 622 | "name": "", 623 | "type": "string" 624 | } 625 | ], 626 | "stateMutability": "view", 627 | "type": "function" 628 | }, 629 | { 630 | "inputs": [], 631 | "name": "totalSupply", 632 | "outputs": [ 633 | { 634 | "internalType": "uint256", 635 | "name": "", 636 | "type": "uint256" 637 | } 638 | ], 639 | "stateMutability": "view", 640 | "type": "function" 641 | }, 642 | { 643 | "inputs": [ 644 | { 645 | "internalType": "address", 646 | "name": "from", 647 | "type": "address" 648 | }, 649 | { 650 | "internalType": "address", 651 | "name": "to", 652 | "type": "address" 653 | }, 654 | { 655 | "internalType": "uint256", 656 | "name": "tokenId", 657 | "type": "uint256" 658 | } 659 | ], 660 | "name": "transferFrom", 661 | "outputs": [], 662 | "stateMutability": "nonpayable", 663 | "type": "function" 664 | } 665 | ] -------------------------------------------------------------------------------- /data/abi/deploy.ts: -------------------------------------------------------------------------------- 1 | export const deployAbi = [ 2 | { 3 | "inputs": [], 4 | "stateMutability": "nonpayable", 5 | "type": "constructor" 6 | }, 7 | { 8 | "inputs": [], 9 | "name": "getBalance", 10 | "outputs": [ 11 | { 12 | "internalType": "uint256", 13 | "name": "", 14 | "type": "uint256" 15 | } 16 | ], 17 | "stateMutability": "view", 18 | "type": "function" 19 | }, 20 | { 21 | "inputs": [], 22 | "name": "owner", 23 | "outputs": [ 24 | { 25 | "internalType": "address payable", 26 | "name": "", 27 | "type": "address" 28 | } 29 | ], 30 | "stateMutability": "view", 31 | "type": "function" 32 | }, 33 | { 34 | "inputs": [ 35 | { 36 | "internalType": "uint256", 37 | "name": "_amount", 38 | "type": "uint256" 39 | } 40 | ], 41 | "name": "withdraw", 42 | "outputs": [], 43 | "stateMutability": "nonpayable", 44 | "type": "function" 45 | }, 46 | { 47 | "stateMutability": "payable", 48 | "type": "receive" 49 | } 50 | ] as const 51 | 52 | export const deployData = '0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610258806100606000396000f3fe6080604052600436106100385760003560e01c806312065fe0146100445780632e1a7d4d1461006f5780638da5cb5b146100aa5761003f565b3661003f57005b600080fd5b34801561005057600080fd5b506100596100eb565b6040518082815260200191505060405180910390f35b34801561007b57600080fd5b506100a86004803603602081101561009257600080fd5b81019080803590602001909291905050506100f3565b005b3480156100b657600080fd5b506100bf6101fe565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600047905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f6e6c7920746865204f776e65722063616c6c2074686973206d6574686f640081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156101fa573d6000803e3d6000fd5b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156fea26469706673582212200e37ede00b52138cd97343ee0b979ed1ae10992c82f64d42a97932fbebb9e4e164736f6c63430007060033' as const 53 | export const deployMerklyData = '0x60806040526000805461ffff1916905534801561001b57600080fd5b5060fb8061002a6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80630c55699c146037578063b49004e914605b575b600080fd5b60005460449061ffff1681565b60405161ffff909116815260200160405180910390f35b60616063565b005b60008054600191908190607a90849061ffff166096565b92506101000a81548161ffff021916908361ffff160217905550565b61ffff81811683821601908082111560be57634e487b7160e01b600052601160045260246000fd5b509291505056fea2646970667358221220666c87ec501268817295a4ca1fc6e3859faf241f38dd688f145135970920009264736f6c63430008120033' -------------------------------------------------------------------------------- /data/abi/erc20.ts: -------------------------------------------------------------------------------- 1 | export const erc20Abi = [{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"decimals_","type":"uint8"}],"name":"setupDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] as const -------------------------------------------------------------------------------- /data/abi/merkly.ts: -------------------------------------------------------------------------------- 1 | export const merklyAbi = [{"inputs":[{"internalType":"uint256","name":"_minGasToTransfer","type":"uint256"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"},{"internalType":"uint256","name":"_startMintId","type":"uint256"},{"internalType":"uint256","name":"_endMintId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_hashedPayload","type":"bytes32"}],"name":"CreditCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_hashedPayload","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"CreditStored","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"_reason","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":true,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":true,"internalType":"address","name":"_toAddress","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"ReceiveFromChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"name":"RetryMessageSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"bytes","name":"_toAddress","type":"bytes"},{"indexed":false,"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"SendToChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"_dstChainIdToBatchLimit","type":"uint256"}],"name":"SetDstChainIdToBatchLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"_dstChainIdToTransferGas","type":"uint256"}],"name":"SetDstChainIdToTransferGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"_type","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"_minDstGas","type":"uint256"}],"name":"SetMinDstGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_minGasToTransferAndStore","type":"uint256"}],"name":"SetMinGasToTransferAndStore","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"precrime","type":"address"}],"name":"SetPrecrime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_path","type":"bytes"}],"name":"SetTrustedRemote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_remoteAddress","type":"bytes"}],"name":"SetTrustedRemoteAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_PAYLOAD_SIZE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FUNCTION_TYPE_SEND","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"address","name":"_zroPaymentAddress","type":"address"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"bridgeGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"clearCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"dstChainIdToBatchLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"dstChainIdToTransferGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bool","name":"_useZro","type":"bool"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateGasBridgeFee","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bool","name":"_useZro","type":"bool"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateSendBatchFee","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bool","name":"_useZro","type":"bool"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateSendFee","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint64","name":"","type":"uint64"}],"name":"failedMessages","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"forceResumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_configType","type":"uint256"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"}],"name":"getTrustedRemoteAddress","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"isTrustedRemote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lzEndpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMintId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"minDstGasLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minGasToTransferAndStore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextMintId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"nonblockingLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"payloadSizeLimitLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"precrime","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"address","name":"_zroPaymentAddress","type":"address"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"sendBatchFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"address","name":"_zroPaymentAddress","type":"address"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"sendFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint256","name":"_dstChainIdToBatchLimit","type":"uint256"}],"name":"setDstChainIdToBatchLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint256","name":"_dstChainIdToTransferGas","type":"uint256"}],"name":"setDstChainIdToTransferGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint16","name":"_packetType","type":"uint16"},{"internalType":"uint256","name":"_minGas","type":"uint256"}],"name":"setMinDstGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minGasToTransferAndStore","type":"uint256"}],"name":"setMinGasToTransferAndStore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint256","name":"_size","type":"uint256"}],"name":"setPayloadSizeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_precrime","type":"address"}],"name":"setPrecrime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"internalType":"bytes","name":"_path","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"internalType":"bytes","name":"_remoteAddress","type":"bytes"}],"name":"setTrustedRemoteAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"storedCredits","outputs":[{"internalType":"uint16","name":"srcChainId","type":"uint16"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"creditsRemain","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}] as const 2 | export const merklyAbiBase = [{"inputs":[{"internalType":"address","name":"_lzEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"_reason","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"name":"RetryMessageSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"_type","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"_minDstGas","type":"uint256"}],"name":"SetMinDstGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"precrime","type":"address"}],"name":"SetPrecrime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_path","type":"bytes"}],"name":"SetTrustedRemote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_remoteAddress","type":"bytes"}],"name":"SetTrustedRemoteAddress","type":"event"},{"inputs":[],"name":"DEFAULT_PAYLOAD_SIZE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_EXTRA_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PT_SEND","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"bridgeGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateSendFee","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint64","name":"","type":"uint64"}],"name":"failedMessages","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"forceResumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_configType","type":"uint256"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"}],"name":"getTrustedRemoteAddress","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"isTrustedRemote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lzEndpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"minDstGasLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"nonblockingLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"payloadSizeLimitLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"precrime","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint16","name":"_packetType","type":"uint16"},{"internalType":"uint256","name":"_minGas","type":"uint256"}],"name":"setMinDstGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint256","name":"_size","type":"uint256"}],"name":"setPayloadSizeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_precrime","type":"address"}],"name":"setPrecrime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"internalType":"bytes","name":"_path","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"internalType":"bytes","name":"_remoteAddress","type":"bytes"}],"name":"setTrustedRemoteAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"useCustomAdapterParams","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}] as const -------------------------------------------------------------------------------- /data/abi/scrollswap.ts: -------------------------------------------------------------------------------- 1 | export const scrollswapRouterAbi = [{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] as const -------------------------------------------------------------------------------- /data/scroll-tokens.ts: -------------------------------------------------------------------------------- 1 | import { Hex } from "viem" 2 | 3 | export const tokens: Record = { 4 | 'ETH_zero': '0x0000000000000000000000000000000000000000', 5 | 'ETH_native': '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', 6 | 'ETH': '0x5300000000000000000000000000000000000004', 7 | 'WETH': '0x5300000000000000000000000000000000000004', 8 | 'USDT': '0xf55BEC9cafDbE8730f096Aa55dad6D22d44099Df', 9 | 'DAI': '' 10 | } -------------------------------------------------------------------------------- /logError.js: -------------------------------------------------------------------------------- 1 | import { setUncaughtExceptionCaptureCallback } from "node:process" 2 | setUncaughtExceptionCaptureCallback(console.log) -------------------------------------------------------------------------------- /modules/bridge.ts: -------------------------------------------------------------------------------- 1 | import { formatEther, Hex, parseEther } from "viem" 2 | import { getEthWalletClient } from "../utils/ethClient" 3 | import { bridgeAbi } from "../data/abi/bridge" 4 | import { makeLogger } from "../utils/logger" 5 | 6 | export class Bridge { 7 | privateKey: Hex 8 | bridgeContractAddress:Hex = '0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6' 9 | logger: any 10 | 11 | constructor(privateKey:Hex) { 12 | this.privateKey = privateKey 13 | this.logger = makeLogger("Bridge") 14 | } 15 | 16 | async bridge(amount: string) { 17 | const ethWallet = getEthWalletClient(this.privateKey) 18 | const value: bigint = BigInt(parseEther(amount)) 19 | 20 | this.logger.info(`${ethWallet.account.address} | Official bridge ETH -> Scroll ${amount} ETH`) 21 | 22 | try { 23 | const txHash = await ethWallet.writeContract({ 24 | address: this.bridgeContractAddress, 25 | abi: bridgeAbi, 26 | functionName: 'depositETH', 27 | args: [ 28 | value, 29 | BigInt(168000) 30 | ], 31 | value: value 32 | }) 33 | 34 | this.logger.info(`${ethWallet.account.address} | Official bridge ETH -> Scroll done: https://etherscan.io/tx/${txHash}`) 35 | } catch (e) { 36 | this.logger.error(`${ethWallet.account.address} | Official bridge ETH -> Scroll error: ${e.shortMessage}`) 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /modules/deploy.ts: -------------------------------------------------------------------------------- 1 | import { Hex } from "viem" 2 | import { makeLogger } from "../utils/logger" 3 | import { getPublicScrollClient, getScrollWalletClient } from "../utils/scrollClient" 4 | import { deployAbi, deployData, deployMerklyData } from "../data/abi/deploy" 5 | import { waitGas } from "../utils/getCurrentGas" 6 | import { deployConfig } from "../config" 7 | import { random } from "../utils/common" 8 | import axios from "axios" 9 | import { deployNftAbi } from "../data/abi/deploy-nft" 10 | 11 | export class Deploy { 12 | privateKey: Hex 13 | logger: any 14 | scrollClient: any 15 | scrollWallet: any 16 | walletAddress: Hex 17 | 18 | constructor(privateKey:Hex) { 19 | this.privateKey = privateKey 20 | this.logger = makeLogger("Deploy") 21 | this.scrollClient = getPublicScrollClient() 22 | this.scrollWallet = getScrollWalletClient(privateKey) 23 | this.walletAddress = this.scrollWallet.account.address 24 | } 25 | 26 | async mint() { 27 | await waitGas() 28 | this.logger.info(`${this.walletAddress} | Mint NFT for contract deploy`) 29 | 30 | const data = await axios.get(`https://nft.scroll.io/p/${this.walletAddress}.json`).then(response => { 31 | return response.data 32 | }) 33 | 34 | const { proof, metadata } = data 35 | 36 | if (proof) { 37 | try { 38 | const txHash = await this.scrollWallet.writeContract({ 39 | address: '0x74670a3998d9d6622e32d0847ff5977c37e0ec91', 40 | abi: deployNftAbi, 41 | functionName: 'mint', 42 | args: [ 43 | this.walletAddress, 44 | metadata, 45 | proof 46 | ] 47 | }) 48 | 49 | this.logger.info(`${this.walletAddress} | Success minted: https://scrollscan.com/tx/${txHash}`) 50 | } catch (e) { 51 | this.logger.error(`${this.walletAddress} | Error ${e.toString()}`) 52 | } 53 | } else { 54 | this.logger.info(`${this.walletAddress} | No NFT for this wallet`) 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /modules/merkly.ts: -------------------------------------------------------------------------------- 1 | import { Hex, encodePacked, parseEther, parseGwei } from "viem" 2 | import { makeLogger } from "../utils/logger" 3 | import { merklyAbi, merklyAbiBase } from "../data/abi/merkly" 4 | import { getSymbolPrice, getUsdValue, random, randomFloat, sleep } from "../utils/common" 5 | import { merklyConfig } from "../config" 6 | import { refill } from "../utils/refill" 7 | import { waitGas } from "../utils/getCurrentGas" 8 | import { getPublicScrollClient, getScrollWalletClient } from "../utils/scrollClient" 9 | import { getPolygonWalletClient, getPublicPolygonClient } from "../utils/polygonClient" 10 | import { getArbWalletClient, getPublicArbClient } from "../utils/arbClient" 11 | import { getOpWalletClient, getPublicOpClient } from "../utils/optimismClient" 12 | import { getAvaxWalletClient, getPublicAvaxClient } from "../utils/avaxClient" 13 | import axios from 'axios' 14 | import { getBaseWalletClient, getPublicBaseClient } from "../utils/baseClient" 15 | 16 | export class Merkly { 17 | privateKey: Hex 18 | logger: any 19 | destNetwork: number = 214 20 | explorerLink: string = 'https://scrollscan.com' 21 | merklyContract: Hex 22 | merklyContracts: { [key: string]: Hex } = { 23 | 'optimism': '0xa2c203d7ef78ed80810da8404090f926d67cd892', 24 | 'arbitrum': '0xaa58e77238f0e4a565343a89a79b4addd744d649', 25 | 'avalanche': '0xe030543b943bdcd6559711ec8d344389c66e1d56', 26 | 'polygon': '0xa184998ec58dc1da77a1f9f1e361541257a50cf4', 27 | 'base': '0x6bf98654205b1ac38645880ae20fc00b0bb9ffca', 28 | 'scroll': '0x7dfb5e7808b5eb4fb8b9e7169537575f6ff1a218' 29 | } 30 | 31 | randomNetwork: any 32 | client: any 33 | wallet: any 34 | walletAddress: Hex = '0x' 35 | ethPrice: number = 0 36 | sourceNetwork: string = 'Auto' 37 | sourceNetworks: any = ['Polygon', 'Arbitrum', 'Optimism', 'Avalanche', 'Base'] 38 | networks = [ 39 | { 40 | id: 110, 41 | name: 'Arbitrum' 42 | }, 43 | { 44 | id: 184, 45 | name: 'Base' 46 | }, 47 | ] 48 | 49 | constructor(privateKey:Hex) { 50 | this.privateKey = privateKey 51 | this.logger = makeLogger("Merkly") 52 | this.merklyContract = this.merklyContracts.scroll 53 | this.wallet = getScrollWalletClient(privateKey) 54 | this.walletAddress = this.wallet.account.address 55 | 56 | if (merklyConfig.sourceNetwork === 'Scroll') { 57 | this.client = getPublicScrollClient() 58 | this.wallet = getScrollWalletClient(privateKey) 59 | this.walletAddress = this.wallet.account.address 60 | 61 | if (merklyConfig.destinationNetwork === 'random') { 62 | this.randomNetwork = this.networks[random(0, this.networks.length-1)] 63 | } else { 64 | this.randomNetwork = this.networks.find(network => network.name === merklyConfig.destinationNetwork) 65 | } 66 | 67 | this.destNetwork = this.randomNetwork.id 68 | } else { 69 | this.randomNetwork = { 70 | name: 'Scroll', 71 | id: 214 72 | } 73 | this.destNetwork = 214 74 | 75 | if (merklyConfig.sourceNetwork === 'random') { 76 | const randomNetwork = random(1, 4) 77 | 78 | switch (randomNetwork) { 79 | case 1: 80 | this.setSourceNetwork('Arbitrum') 81 | break 82 | case 2: 83 | this.setSourceNetwork('Optimism') 84 | break 85 | case 3: 86 | this.setSourceNetwork('Polygon') 87 | break 88 | case 4: 89 | this.setSourceNetwork('Avalanche') 90 | break 91 | case 5: 92 | this.setSourceNetwork('Base') 93 | break 94 | } 95 | } else if (merklyConfig.sourceNetwork !== 'random' && merklyConfig.sourceNetwork !== 'auto') { 96 | this.setSourceNetwork(merklyConfig.sourceNetwork) 97 | } 98 | } 99 | } 100 | 101 | setSourceNetwork(network: string) { 102 | switch (network) { 103 | case 'Arbitrum': 104 | this.client = getPublicArbClient() 105 | this.wallet = getArbWalletClient(this.privateKey) 106 | this.merklyContract = this.merklyContracts.arbitrum 107 | this.explorerLink = 'https://arbiscan.io' 108 | this.sourceNetwork = 'Arbitrum' 109 | break 110 | case 'Optimism': 111 | this.client = getPublicOpClient() 112 | this.wallet = getOpWalletClient(this.privateKey) 113 | this.merklyContract = this.merklyContracts.optimism 114 | this.explorerLink = 'https://optimistic.etherscan.io' 115 | this.sourceNetwork = 'Optimism' 116 | break 117 | case 'Polygon': 118 | this.client = getPublicPolygonClient() 119 | this.wallet = getPolygonWalletClient(this.privateKey) 120 | this.merklyContract = this.merklyContracts.polygon 121 | this.explorerLink = 'https://polygonscan.com' 122 | this.sourceNetwork = 'Polygon' 123 | break 124 | case 'Avalanche': 125 | this.client = getPublicAvaxClient() 126 | this.wallet = getAvaxWalletClient(this.privateKey) 127 | this.merklyContract = this.merklyContracts.avalanche 128 | this.explorerLink = 'https://avascan.info/blockchain/dfk' 129 | this.sourceNetwork = 'Avalanche' 130 | break 131 | case 'Base': 132 | this.client = getPublicBaseClient() 133 | this.wallet = getBaseWalletClient(this.privateKey) 134 | this.merklyContract = this.merklyContracts.base 135 | this.explorerLink = 'https://basescan.org' 136 | this.sourceNetwork = 'Base' 137 | break 138 | } 139 | this.walletAddress = this.wallet.account.address 140 | } 141 | 142 | async defineSourceNetwork() { 143 | let polygonPrice = await getSymbolPrice('MATIC') 144 | let avaxPrice = await getSymbolPrice('AVAX') 145 | 146 | let balance:any = { Polygon: 0, Avalanche: 0, Arbitrum: 0, Optimism: 0} 147 | 148 | for (const network of this.sourceNetworks) { 149 | switch (network) { 150 | case "Polygon": 151 | balance['Polygon'] = getUsdValue(await getPublicPolygonClient().getBalance({ address: this.walletAddress }), polygonPrice) 152 | break 153 | case "Avalanche": 154 | balance['Avalanche'] = getUsdValue(await getPublicAvaxClient().getBalance({ address: this.walletAddress }), avaxPrice) 155 | break 156 | case "Arbitrum": 157 | balance['Arbitrum'] = getUsdValue(await getPublicArbClient().getBalance({ address: this.walletAddress }), this.ethPrice) 158 | break 159 | case "Optimism": 160 | balance['Optimism'] = getUsdValue(await getPublicOpClient().getBalance({ address: this.walletAddress }), this.ethPrice) 161 | break 162 | case "Base": 163 | balance['Base'] = getUsdValue(await getPublicBaseClient().getBalance({ address: this.walletAddress }), this.ethPrice) 164 | break 165 | } 166 | } 167 | 168 | let topNetwork = null 169 | let topBalance = -Infinity 170 | 171 | for (const key in balance) { 172 | if (balance.hasOwnProperty(key)) { 173 | const currentBalance = balance[key] 174 | if (currentBalance > topBalance) { 175 | topBalance = currentBalance 176 | topNetwork = key 177 | } 178 | } 179 | } 180 | 181 | if (topNetwork) { 182 | this.logger.info(`${this.walletAddress} | Auto network: ${topNetwork} ($${topBalance.toFixed(2)})`) 183 | this.setSourceNetwork(topNetwork) 184 | } 185 | 186 | return topBalance 187 | } 188 | 189 | async estimateLayerzeroFee(adapterParams: any) { 190 | let value: bigint 191 | const txValue = await this.client.readContract({ 192 | address: this.merklyContract, 193 | abi: this.sourceNetwork === 'Base' ? merklyAbiBase : merklyAbi, 194 | functionName: this.sourceNetwork === 'Base' ? 'estimateSendFee' : 'estimateGasBridgeFee', 195 | args: this.sourceNetwork === 'Base' ? [this.destNetwork, '0x', adapterParams] : [this.destNetwork, false, adapterParams] 196 | }) 197 | 198 | value = txValue[0] 199 | return this.sourceNetwork === 'Base' ? BigInt(Math.round(Number(value) * 1.01)) : BigInt(value) 200 | } 201 | 202 | async refuel(value: string) { 203 | this.ethPrice = await getSymbolPrice('ETH') 204 | if (merklyConfig.checkScrollBalance) { 205 | const balance = await getPublicScrollClient().getBalance({ address: this.walletAddress }) 206 | const scrollBalance = getUsdValue(balance, this.ethPrice) 207 | if (scrollBalance >= merklyConfig.minBalance) { 208 | this.logger.info(`${this.walletAddress} | Balance in Scroll is $${scrollBalance.toFixed(2)} and enough, skip`) 209 | return false 210 | } else { 211 | this.logger.info(`${this.walletAddress} | Balance in Scroll is $${scrollBalance.toFixed(2)} and not enough, continue`) 212 | } 213 | } 214 | 215 | if (merklyConfig.sourceNetwork === 'auto') { 216 | const topBalance:number = await this.defineSourceNetwork() 217 | 218 | if ((parseFloat(value) * this.ethPrice) > topBalance) { 219 | this.logger.error(`${this.walletAddress} | Not enough balance, skip`) 220 | return false 221 | } 222 | } 223 | 224 | await waitGas() 225 | 226 | this.logger.info(`${this.walletAddress} | Refuel ${this.sourceNetwork} -> ${this.randomNetwork.name}`) 227 | let amount = BigInt(parseEther(value)) 228 | 229 | let isSuccess = false 230 | let retryCount = 1 231 | 232 | while (!isSuccess) { 233 | try { 234 | const adapterParams = encodePacked( 235 | [ 236 | "uint16", 237 | "uint", 238 | "uint", 239 | "address" 240 | ], 241 | [ 242 | 2, 243 | BigInt('250000'), 244 | amount, 245 | this.walletAddress 246 | ] 247 | ) 248 | 249 | let value = await this.estimateLayerzeroFee(adapterParams) 250 | let txHash 251 | if (this.sourceNetwork === 'Base') { 252 | txHash = await this.wallet.writeContract({ 253 | address: this.merklyContract, 254 | abi: merklyAbiBase, 255 | functionName: 'bridgeGas', 256 | args: [ 257 | this.destNetwork, 258 | this.walletAddress, 259 | adapterParams 260 | ], 261 | value: value, 262 | maxPriorityFeePerGas: parseGwei('0.000084412'), 263 | maxFeePerGas: parseGwei('0.000097240') 264 | }) 265 | } else { 266 | txHash = await this.wallet.writeContract({ 267 | address: this.merklyContract, 268 | abi: merklyAbi, 269 | functionName: 'bridgeGas', 270 | args: [ 271 | this.destNetwork, 272 | this.walletAddress, 273 | adapterParams 274 | ], 275 | value: value 276 | }) 277 | } 278 | isSuccess = true 279 | this.logger.info(`${this.walletAddress} | Success refuel to ${this.randomNetwork.name}: ${this.explorerLink}/tx/${txHash}`) 280 | } catch (e) { 281 | this.logger.info(`${this.walletAddress} | Error: ${e}`) 282 | 283 | if (retryCount <= 3) { 284 | this.logger.info(`${this.walletAddress} | Wait 30 sec and retry refuel ${retryCount}/3`) 285 | retryCount++ 286 | await sleep(30 * 1000) 287 | } else { 288 | isSuccess = true 289 | this.logger.info(`${this.walletAddress} | Refuel unsuccessful, skip`) 290 | } 291 | } 292 | } 293 | 294 | return true 295 | } 296 | } -------------------------------------------------------------------------------- /modules/scrollswap.ts: -------------------------------------------------------------------------------- 1 | import { Hex, formatEther, parseGwei } from "viem" 2 | import { makeLogger } from "../utils/logger" 3 | import { random, randomFloat, sleep } from "../utils/common" 4 | import { approve } from "../utils/approve" 5 | import { getTokenBalance } from "../utils/tokenBalance" 6 | import { generalConfig, swapConfig } from "../config" 7 | import { getPublicScrollClient, getScrollWalletClient } from "../utils/scrollClient" 8 | import { tokens } from "../data/scroll-tokens" 9 | import { scrollswapRouterAbi } from "../data/abi/scrollswap" 10 | import { waitGas } from "../utils/getCurrentGas" 11 | 12 | export class Scrollswap { 13 | privateKey: Hex 14 | logger: any 15 | scrollswapContract: Hex = '0xEfEb222F8046aAa032C56290416C3192111C0085' 16 | randomNetwork: any 17 | scrollClient: any 18 | scrollWallet: any 19 | walletAddress: Hex 20 | 21 | constructor(privateKey:Hex) { 22 | this.privateKey = privateKey 23 | this.logger = makeLogger("Scrollswap") 24 | this.scrollClient = getPublicScrollClient() 25 | this.scrollWallet = getScrollWalletClient(privateKey) 26 | this.walletAddress = this.scrollWallet.account.address 27 | } 28 | 29 | async getMinAmountOut(fromToken: Hex, toToken: Hex, amount: BigInt, slippage: number) { 30 | const minAmountOut = await this.scrollClient.readContract({ 31 | address: this.scrollswapContract, 32 | abi: scrollswapRouterAbi, 33 | functionName: 'getAmountsOut', 34 | args: [ 35 | amount, 36 | [ 37 | fromToken, 38 | toToken 39 | ] 40 | ] 41 | }) 42 | 43 | return BigInt(Math.round(Number(minAmountOut[1]) - (Number(minAmountOut[1]) /100 * slippage))) 44 | } 45 | 46 | async swapEthToToken(toToken: string = 'USDT', amount: bigint) { 47 | await waitGas() 48 | this.logger.info(`${this.walletAddress} | Swap ${formatEther(amount)} ETH -> ${toToken}`) 49 | let successSwap: boolean = false 50 | let retryCount = 1 51 | 52 | while (!successSwap) { 53 | try { 54 | const minAmountOut = await this.getMinAmountOut(tokens['ETH'], tokens[toToken], amount, 1) 55 | const deadline: number = Math.floor(Date.now() / 1000) + 1000000 56 | 57 | const txHash = await this.scrollWallet.writeContract({ 58 | address: this.scrollswapContract, 59 | abi: scrollswapRouterAbi, 60 | functionName: 'swapExactETHForTokens', 61 | args: [ 62 | minAmountOut, 63 | [ 64 | tokens['ETH'], 65 | tokens[toToken] 66 | ], 67 | this.walletAddress, 68 | deadline 69 | ], 70 | value: amount 71 | }) 72 | successSwap = true 73 | this.logger.info(`${this.walletAddress} | Success swap ${formatEther(amount)} ETH -> ${toToken}: https://scrollscan.com/tx/${txHash}`) 74 | } catch (e) { 75 | this.logger.info(`${this.walletAddress} | Error: ${e}`) 76 | if (retryCount <= 3) { 77 | this.logger.info(`${this.walletAddress} | Wait 30 sec and retry swap ${retryCount}/3`) 78 | retryCount++ 79 | await sleep(30 * 1000) 80 | } else { 81 | successSwap = true 82 | this.logger.info(`${this.walletAddress} | Swap unsuccessful, skip`) 83 | } 84 | } 85 | } 86 | } 87 | 88 | async swapTokenToEth(fromToken: string = 'USDT') { 89 | await waitGas() 90 | let amount = await getTokenBalance(this.scrollClient, tokens[fromToken], this.walletAddress) 91 | let successSwap: boolean = false 92 | let retryCount = 1 93 | 94 | this.logger.info(`${this.walletAddress} | Swap ${formatEther(amount)} ${fromToken} -> ETH`) 95 | 96 | while (!successSwap) { 97 | try { 98 | const minAmountOut = await this.getMinAmountOut(tokens[fromToken], tokens['ETH'], amount, 1) 99 | const deadline: number = Math.floor(Date.now() / 1000) + 1000000 100 | 101 | await approve(this.scrollWallet, this.scrollClient, tokens[fromToken], this.scrollswapContract, amount, this.logger) 102 | 103 | const sleepTime = random(generalConfig.sleepFrom, generalConfig.sleepTo) 104 | this.logger.info(`${this.walletAddress} | Waiting ${sleepTime} sec after approve before swap...`) 105 | await sleep(sleepTime * 1000) 106 | 107 | const txHash = await this.scrollWallet.writeContract({ 108 | address: this.scrollswapContract, 109 | abi: scrollswapRouterAbi, 110 | functionName: 'swapExactTokensForETH', 111 | args: [ 112 | amount, 113 | minAmountOut, 114 | [ 115 | tokens[fromToken], 116 | tokens['ETH'] 117 | ], 118 | this.walletAddress, 119 | deadline 120 | ] 121 | }) 122 | 123 | successSwap = true 124 | this.logger.info(`${this.walletAddress} | Success swap ${fromToken} -> ETH: https://scrollscan.com/tx/${txHash}`) 125 | } catch (e) { 126 | this.logger.info(`${this.walletAddress} | Error: ${e}`) 127 | if (retryCount <= 3) { 128 | this.logger.info(`${this.walletAddress} | Wait 30 sec and retry swap ${retryCount}/3`) 129 | retryCount++ 130 | await sleep(30 * 1000) 131 | } else { 132 | successSwap = true 133 | this.logger.info(`${this.walletAddress} | Swap unsuccessful, skip`) 134 | } 135 | } 136 | } 137 | } 138 | 139 | async roundSwap() { 140 | const randomPercent: number = random(swapConfig.swapEthPercentFrom, swapConfig.swapEthPercentTo) / 100 141 | const ethBalance: bigint = await this.scrollClient.getBalance({ address: this.walletAddress }) 142 | const randomChooice: number = random(1, 2) 143 | const randomStable = randomChooice > 1 ? 'USDT' : 'USDT' 144 | let amount: bigint = BigInt(Math.round(Number(ethBalance) * randomPercent)) 145 | const sleepTimeTo = random(generalConfig.sleepFrom, generalConfig.sleepTo) 146 | 147 | await this.swapEthToToken(randomStable, amount) 148 | 149 | this.logger.info(`${this.walletAddress} | Waiting ${sleepTimeTo} sec until next swap...`) 150 | await sleep(sleepTimeTo * 1000) 151 | 152 | await this.swapTokenToEth(randomStable) 153 | } 154 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "scroll", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "axios": "^1.6.0", 9 | "https-proxy-agent": "^7.0.2", 10 | "inquirer": "^9.2.11", 11 | "op-viem": "^0.0.1-alpha.7", 12 | "tslog": "^4.9.2", 13 | "typescript": "^5.2.2", 14 | "viem": "^1.15.1" 15 | }, 16 | "devDependencies": { 17 | "@types/express": "^4.17.17", 18 | "@types/inquirer": "^9.0.3", 19 | "@types/node": "^20.2.5", 20 | "@types/node-fetch": "^2.6.4", 21 | "ts-node": "^10.9.1", 22 | "tslib": "^2.5.3" 23 | } 24 | }, 25 | "node_modules/@adraffy/ens-normalize": { 26 | "version": "1.9.4", 27 | "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.4.tgz", 28 | "integrity": "sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==" 29 | }, 30 | "node_modules/@babel/code-frame": { 31 | "version": "7.22.13", 32 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", 33 | "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", 34 | "dependencies": { 35 | "@babel/highlight": "^7.22.13", 36 | "chalk": "^2.4.2" 37 | }, 38 | "engines": { 39 | "node": ">=6.9.0" 40 | } 41 | }, 42 | "node_modules/@babel/code-frame/node_modules/ansi-styles": { 43 | "version": "3.2.1", 44 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 45 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 46 | "dependencies": { 47 | "color-convert": "^1.9.0" 48 | }, 49 | "engines": { 50 | "node": ">=4" 51 | } 52 | }, 53 | "node_modules/@babel/code-frame/node_modules/chalk": { 54 | "version": "2.4.2", 55 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 56 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 57 | "dependencies": { 58 | "ansi-styles": "^3.2.1", 59 | "escape-string-regexp": "^1.0.5", 60 | "supports-color": "^5.3.0" 61 | }, 62 | "engines": { 63 | "node": ">=4" 64 | } 65 | }, 66 | "node_modules/@babel/code-frame/node_modules/color-convert": { 67 | "version": "1.9.3", 68 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 69 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 70 | "dependencies": { 71 | "color-name": "1.1.3" 72 | } 73 | }, 74 | "node_modules/@babel/code-frame/node_modules/color-name": { 75 | "version": "1.1.3", 76 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 77 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 78 | }, 79 | "node_modules/@babel/code-frame/node_modules/has-flag": { 80 | "version": "3.0.0", 81 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 82 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 83 | "engines": { 84 | "node": ">=4" 85 | } 86 | }, 87 | "node_modules/@babel/code-frame/node_modules/supports-color": { 88 | "version": "5.5.0", 89 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 90 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 91 | "dependencies": { 92 | "has-flag": "^3.0.0" 93 | }, 94 | "engines": { 95 | "node": ">=4" 96 | } 97 | }, 98 | "node_modules/@babel/helper-validator-identifier": { 99 | "version": "7.22.20", 100 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", 101 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", 102 | "engines": { 103 | "node": ">=6.9.0" 104 | } 105 | }, 106 | "node_modules/@babel/highlight": { 107 | "version": "7.22.20", 108 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", 109 | "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", 110 | "dependencies": { 111 | "@babel/helper-validator-identifier": "^7.22.20", 112 | "chalk": "^2.4.2", 113 | "js-tokens": "^4.0.0" 114 | }, 115 | "engines": { 116 | "node": ">=6.9.0" 117 | } 118 | }, 119 | "node_modules/@babel/highlight/node_modules/ansi-styles": { 120 | "version": "3.2.1", 121 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 122 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 123 | "dependencies": { 124 | "color-convert": "^1.9.0" 125 | }, 126 | "engines": { 127 | "node": ">=4" 128 | } 129 | }, 130 | "node_modules/@babel/highlight/node_modules/chalk": { 131 | "version": "2.4.2", 132 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 133 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 134 | "dependencies": { 135 | "ansi-styles": "^3.2.1", 136 | "escape-string-regexp": "^1.0.5", 137 | "supports-color": "^5.3.0" 138 | }, 139 | "engines": { 140 | "node": ">=4" 141 | } 142 | }, 143 | "node_modules/@babel/highlight/node_modules/color-convert": { 144 | "version": "1.9.3", 145 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 146 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 147 | "dependencies": { 148 | "color-name": "1.1.3" 149 | } 150 | }, 151 | "node_modules/@babel/highlight/node_modules/color-name": { 152 | "version": "1.1.3", 153 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 154 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 155 | }, 156 | "node_modules/@babel/highlight/node_modules/has-flag": { 157 | "version": "3.0.0", 158 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 159 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 160 | "engines": { 161 | "node": ">=4" 162 | } 163 | }, 164 | "node_modules/@babel/highlight/node_modules/supports-color": { 165 | "version": "5.5.0", 166 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 167 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 168 | "dependencies": { 169 | "has-flag": "^3.0.0" 170 | }, 171 | "engines": { 172 | "node": ">=4" 173 | } 174 | }, 175 | "node_modules/@babel/runtime": { 176 | "version": "7.23.1", 177 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", 178 | "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", 179 | "dependencies": { 180 | "regenerator-runtime": "^0.14.0" 181 | }, 182 | "engines": { 183 | "node": ">=6.9.0" 184 | } 185 | }, 186 | "node_modules/@cspotcode/source-map-support": { 187 | "version": "0.8.1", 188 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 189 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 190 | "dev": true, 191 | "dependencies": { 192 | "@jridgewell/trace-mapping": "0.3.9" 193 | }, 194 | "engines": { 195 | "node": ">=12" 196 | } 197 | }, 198 | "node_modules/@eth-optimism/contracts-ts": { 199 | "version": "0.15.0", 200 | "resolved": "https://registry.npmjs.org/@eth-optimism/contracts-ts/-/contracts-ts-0.15.0.tgz", 201 | "integrity": "sha512-qga3xsj+NhnxjY96TWktKAmc2DSYrdy0E+lVkS3NZ/b5w898IisoMj/Xvv3KoovBJmnk+/ENNnMX7kk+fwQdtA==", 202 | "dependencies": { 203 | "@testing-library/react": "^14.0.0", 204 | "react": "^18.2.0", 205 | "react-dom": "^18.2.0", 206 | "viem": "^1.3.0" 207 | }, 208 | "peerDependencies": { 209 | "@wagmi/core": ">1.0.0", 210 | "wagmi": ">1.0.0" 211 | }, 212 | "peerDependenciesMeta": { 213 | "@wagmi/core": { 214 | "optional": true 215 | }, 216 | "wagmi": { 217 | "optional": true 218 | } 219 | } 220 | }, 221 | "node_modules/@jridgewell/resolve-uri": { 222 | "version": "3.1.1", 223 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 224 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 225 | "dev": true, 226 | "engines": { 227 | "node": ">=6.0.0" 228 | } 229 | }, 230 | "node_modules/@jridgewell/sourcemap-codec": { 231 | "version": "1.4.15", 232 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 233 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 234 | "dev": true 235 | }, 236 | "node_modules/@jridgewell/trace-mapping": { 237 | "version": "0.3.9", 238 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 239 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 240 | "dev": true, 241 | "dependencies": { 242 | "@jridgewell/resolve-uri": "^3.0.3", 243 | "@jridgewell/sourcemap-codec": "^1.4.10" 244 | } 245 | }, 246 | "node_modules/@ljharb/through": { 247 | "version": "2.3.9", 248 | "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.9.tgz", 249 | "integrity": "sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==", 250 | "engines": { 251 | "node": ">= 0.4" 252 | } 253 | }, 254 | "node_modules/@noble/curves": { 255 | "version": "1.2.0", 256 | "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", 257 | "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", 258 | "dependencies": { 259 | "@noble/hashes": "1.3.2" 260 | }, 261 | "funding": { 262 | "url": "https://paulmillr.com/funding/" 263 | } 264 | }, 265 | "node_modules/@noble/hashes": { 266 | "version": "1.3.2", 267 | "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", 268 | "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", 269 | "engines": { 270 | "node": ">= 16" 271 | }, 272 | "funding": { 273 | "url": "https://paulmillr.com/funding/" 274 | } 275 | }, 276 | "node_modules/@scure/base": { 277 | "version": "1.1.3", 278 | "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", 279 | "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", 280 | "funding": { 281 | "url": "https://paulmillr.com/funding/" 282 | } 283 | }, 284 | "node_modules/@scure/bip32": { 285 | "version": "1.3.2", 286 | "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", 287 | "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", 288 | "dependencies": { 289 | "@noble/curves": "~1.2.0", 290 | "@noble/hashes": "~1.3.2", 291 | "@scure/base": "~1.1.2" 292 | }, 293 | "funding": { 294 | "url": "https://paulmillr.com/funding/" 295 | } 296 | }, 297 | "node_modules/@scure/bip39": { 298 | "version": "1.2.1", 299 | "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", 300 | "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", 301 | "dependencies": { 302 | "@noble/hashes": "~1.3.0", 303 | "@scure/base": "~1.1.0" 304 | }, 305 | "funding": { 306 | "url": "https://paulmillr.com/funding/" 307 | } 308 | }, 309 | "node_modules/@testing-library/dom": { 310 | "version": "9.3.3", 311 | "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", 312 | "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", 313 | "dependencies": { 314 | "@babel/code-frame": "^7.10.4", 315 | "@babel/runtime": "^7.12.5", 316 | "@types/aria-query": "^5.0.1", 317 | "aria-query": "5.1.3", 318 | "chalk": "^4.1.0", 319 | "dom-accessibility-api": "^0.5.9", 320 | "lz-string": "^1.5.0", 321 | "pretty-format": "^27.0.2" 322 | }, 323 | "engines": { 324 | "node": ">=14" 325 | } 326 | }, 327 | "node_modules/@testing-library/react": { 328 | "version": "14.0.0", 329 | "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", 330 | "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", 331 | "dependencies": { 332 | "@babel/runtime": "^7.12.5", 333 | "@testing-library/dom": "^9.0.0", 334 | "@types/react-dom": "^18.0.0" 335 | }, 336 | "engines": { 337 | "node": ">=14" 338 | }, 339 | "peerDependencies": { 340 | "react": "^18.0.0", 341 | "react-dom": "^18.0.0" 342 | } 343 | }, 344 | "node_modules/@tsconfig/node10": { 345 | "version": "1.0.9", 346 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", 347 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 348 | "dev": true 349 | }, 350 | "node_modules/@tsconfig/node12": { 351 | "version": "1.0.11", 352 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 353 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 354 | "dev": true 355 | }, 356 | "node_modules/@tsconfig/node14": { 357 | "version": "1.0.3", 358 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 359 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 360 | "dev": true 361 | }, 362 | "node_modules/@tsconfig/node16": { 363 | "version": "1.0.4", 364 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 365 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 366 | "dev": true 367 | }, 368 | "node_modules/@types/aria-query": { 369 | "version": "5.0.2", 370 | "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.2.tgz", 371 | "integrity": "sha512-PHKZuMN+K5qgKIWhBodXzQslTo5P+K/6LqeKXS6O/4liIDdZqaX5RXrCK++LAw+y/nptN48YmUMFiQHRSWYwtQ==" 372 | }, 373 | "node_modules/@types/body-parser": { 374 | "version": "1.19.3", 375 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", 376 | "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", 377 | "dev": true, 378 | "dependencies": { 379 | "@types/connect": "*", 380 | "@types/node": "*" 381 | } 382 | }, 383 | "node_modules/@types/connect": { 384 | "version": "3.4.36", 385 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", 386 | "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", 387 | "dev": true, 388 | "dependencies": { 389 | "@types/node": "*" 390 | } 391 | }, 392 | "node_modules/@types/express": { 393 | "version": "4.17.18", 394 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", 395 | "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", 396 | "dev": true, 397 | "dependencies": { 398 | "@types/body-parser": "*", 399 | "@types/express-serve-static-core": "^4.17.33", 400 | "@types/qs": "*", 401 | "@types/serve-static": "*" 402 | } 403 | }, 404 | "node_modules/@types/express-serve-static-core": { 405 | "version": "4.17.37", 406 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", 407 | "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", 408 | "dev": true, 409 | "dependencies": { 410 | "@types/node": "*", 411 | "@types/qs": "*", 412 | "@types/range-parser": "*", 413 | "@types/send": "*" 414 | } 415 | }, 416 | "node_modules/@types/http-errors": { 417 | "version": "2.0.2", 418 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", 419 | "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", 420 | "dev": true 421 | }, 422 | "node_modules/@types/inquirer": { 423 | "version": "9.0.3", 424 | "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.3.tgz", 425 | "integrity": "sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw==", 426 | "dev": true, 427 | "dependencies": { 428 | "@types/through": "*", 429 | "rxjs": "^7.2.0" 430 | } 431 | }, 432 | "node_modules/@types/mime": { 433 | "version": "1.3.2", 434 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", 435 | "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", 436 | "dev": true 437 | }, 438 | "node_modules/@types/node": { 439 | "version": "20.6.4", 440 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.4.tgz", 441 | "integrity": "sha512-nU6d9MPY0NBUMiE/nXd2IIoC4OLvsLpwAjheoAeuzgvDZA1Cb10QYg+91AF6zQiKWRN5i1m07x6sMe0niBznoQ==" 442 | }, 443 | "node_modules/@types/node-fetch": { 444 | "version": "2.6.6", 445 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.6.tgz", 446 | "integrity": "sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==", 447 | "dev": true, 448 | "dependencies": { 449 | "@types/node": "*", 450 | "form-data": "^4.0.0" 451 | } 452 | }, 453 | "node_modules/@types/prop-types": { 454 | "version": "15.7.7", 455 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.7.tgz", 456 | "integrity": "sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==" 457 | }, 458 | "node_modules/@types/qs": { 459 | "version": "6.9.8", 460 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", 461 | "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", 462 | "dev": true 463 | }, 464 | "node_modules/@types/range-parser": { 465 | "version": "1.2.4", 466 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", 467 | "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", 468 | "dev": true 469 | }, 470 | "node_modules/@types/react": { 471 | "version": "18.2.23", 472 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.23.tgz", 473 | "integrity": "sha512-qHLW6n1q2+7KyBEYnrZpcsAmU/iiCh9WGCKgXvMxx89+TYdJWRjZohVIo9XTcoLhfX3+/hP0Pbulu3bCZQ9PSA==", 474 | "dependencies": { 475 | "@types/prop-types": "*", 476 | "@types/scheduler": "*", 477 | "csstype": "^3.0.2" 478 | } 479 | }, 480 | "node_modules/@types/react-dom": { 481 | "version": "18.2.8", 482 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.8.tgz", 483 | "integrity": "sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw==", 484 | "dependencies": { 485 | "@types/react": "*" 486 | } 487 | }, 488 | "node_modules/@types/scheduler": { 489 | "version": "0.16.4", 490 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz", 491 | "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==" 492 | }, 493 | "node_modules/@types/send": { 494 | "version": "0.17.1", 495 | "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", 496 | "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", 497 | "dev": true, 498 | "dependencies": { 499 | "@types/mime": "^1", 500 | "@types/node": "*" 501 | } 502 | }, 503 | "node_modules/@types/serve-static": { 504 | "version": "1.15.2", 505 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", 506 | "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", 507 | "dev": true, 508 | "dependencies": { 509 | "@types/http-errors": "*", 510 | "@types/mime": "*", 511 | "@types/node": "*" 512 | } 513 | }, 514 | "node_modules/@types/through": { 515 | "version": "0.0.31", 516 | "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.31.tgz", 517 | "integrity": "sha512-LpKpmb7FGevYgXnBXYs6HWnmiFyVG07Pt1cnbgM1IhEacITTiUaBXXvOR3Y50ksaJWGSfhbEvQFivQEFGCC55w==", 518 | "dev": true, 519 | "dependencies": { 520 | "@types/node": "*" 521 | } 522 | }, 523 | "node_modules/@types/ws": { 524 | "version": "8.5.5", 525 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", 526 | "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", 527 | "dependencies": { 528 | "@types/node": "*" 529 | } 530 | }, 531 | "node_modules/abitype": { 532 | "version": "0.9.8", 533 | "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.9.8.tgz", 534 | "integrity": "sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==", 535 | "funding": [ 536 | { 537 | "type": "github", 538 | "url": "https://github.com/sponsors/wagmi-dev" 539 | } 540 | ], 541 | "peerDependencies": { 542 | "typescript": ">=5.0.4", 543 | "zod": "^3 >=3.19.1" 544 | }, 545 | "peerDependenciesMeta": { 546 | "typescript": { 547 | "optional": true 548 | }, 549 | "zod": { 550 | "optional": true 551 | } 552 | } 553 | }, 554 | "node_modules/acorn": { 555 | "version": "8.10.0", 556 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 557 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 558 | "dev": true, 559 | "bin": { 560 | "acorn": "bin/acorn" 561 | }, 562 | "engines": { 563 | "node": ">=0.4.0" 564 | } 565 | }, 566 | "node_modules/acorn-walk": { 567 | "version": "8.2.0", 568 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 569 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 570 | "dev": true, 571 | "engines": { 572 | "node": ">=0.4.0" 573 | } 574 | }, 575 | "node_modules/agent-base": { 576 | "version": "7.1.0", 577 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", 578 | "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", 579 | "dependencies": { 580 | "debug": "^4.3.4" 581 | }, 582 | "engines": { 583 | "node": ">= 14" 584 | } 585 | }, 586 | "node_modules/ansi-escapes": { 587 | "version": "4.3.2", 588 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 589 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 590 | "dependencies": { 591 | "type-fest": "^0.21.3" 592 | }, 593 | "engines": { 594 | "node": ">=8" 595 | }, 596 | "funding": { 597 | "url": "https://github.com/sponsors/sindresorhus" 598 | } 599 | }, 600 | "node_modules/ansi-regex": { 601 | "version": "5.0.1", 602 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 603 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 604 | "engines": { 605 | "node": ">=8" 606 | } 607 | }, 608 | "node_modules/ansi-styles": { 609 | "version": "4.3.0", 610 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 611 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 612 | "dependencies": { 613 | "color-convert": "^2.0.1" 614 | }, 615 | "engines": { 616 | "node": ">=8" 617 | }, 618 | "funding": { 619 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 620 | } 621 | }, 622 | "node_modules/arg": { 623 | "version": "4.1.3", 624 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 625 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 626 | "dev": true 627 | }, 628 | "node_modules/aria-query": { 629 | "version": "5.1.3", 630 | "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", 631 | "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", 632 | "dependencies": { 633 | "deep-equal": "^2.0.5" 634 | } 635 | }, 636 | "node_modules/array-buffer-byte-length": { 637 | "version": "1.0.0", 638 | "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", 639 | "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", 640 | "dependencies": { 641 | "call-bind": "^1.0.2", 642 | "is-array-buffer": "^3.0.1" 643 | }, 644 | "funding": { 645 | "url": "https://github.com/sponsors/ljharb" 646 | } 647 | }, 648 | "node_modules/asynckit": { 649 | "version": "0.4.0", 650 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 651 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 652 | }, 653 | "node_modules/available-typed-arrays": { 654 | "version": "1.0.5", 655 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 656 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", 657 | "engines": { 658 | "node": ">= 0.4" 659 | }, 660 | "funding": { 661 | "url": "https://github.com/sponsors/ljharb" 662 | } 663 | }, 664 | "node_modules/axios": { 665 | "version": "1.6.0", 666 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", 667 | "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", 668 | "dependencies": { 669 | "follow-redirects": "^1.15.0", 670 | "form-data": "^4.0.0", 671 | "proxy-from-env": "^1.1.0" 672 | } 673 | }, 674 | "node_modules/base64-js": { 675 | "version": "1.5.1", 676 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 677 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 678 | "funding": [ 679 | { 680 | "type": "github", 681 | "url": "https://github.com/sponsors/feross" 682 | }, 683 | { 684 | "type": "patreon", 685 | "url": "https://www.patreon.com/feross" 686 | }, 687 | { 688 | "type": "consulting", 689 | "url": "https://feross.org/support" 690 | } 691 | ] 692 | }, 693 | "node_modules/bl": { 694 | "version": "4.1.0", 695 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 696 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 697 | "dependencies": { 698 | "buffer": "^5.5.0", 699 | "inherits": "^2.0.4", 700 | "readable-stream": "^3.4.0" 701 | } 702 | }, 703 | "node_modules/buffer": { 704 | "version": "5.7.1", 705 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 706 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 707 | "funding": [ 708 | { 709 | "type": "github", 710 | "url": "https://github.com/sponsors/feross" 711 | }, 712 | { 713 | "type": "patreon", 714 | "url": "https://www.patreon.com/feross" 715 | }, 716 | { 717 | "type": "consulting", 718 | "url": "https://feross.org/support" 719 | } 720 | ], 721 | "dependencies": { 722 | "base64-js": "^1.3.1", 723 | "ieee754": "^1.1.13" 724 | } 725 | }, 726 | "node_modules/call-bind": { 727 | "version": "1.0.2", 728 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 729 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 730 | "dependencies": { 731 | "function-bind": "^1.1.1", 732 | "get-intrinsic": "^1.0.2" 733 | }, 734 | "funding": { 735 | "url": "https://github.com/sponsors/ljharb" 736 | } 737 | }, 738 | "node_modules/chalk": { 739 | "version": "4.1.2", 740 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 741 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 742 | "dependencies": { 743 | "ansi-styles": "^4.1.0", 744 | "supports-color": "^7.1.0" 745 | }, 746 | "engines": { 747 | "node": ">=10" 748 | }, 749 | "funding": { 750 | "url": "https://github.com/chalk/chalk?sponsor=1" 751 | } 752 | }, 753 | "node_modules/chardet": { 754 | "version": "0.7.0", 755 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 756 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 757 | }, 758 | "node_modules/cli-cursor": { 759 | "version": "3.1.0", 760 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 761 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 762 | "dependencies": { 763 | "restore-cursor": "^3.1.0" 764 | }, 765 | "engines": { 766 | "node": ">=8" 767 | } 768 | }, 769 | "node_modules/cli-spinners": { 770 | "version": "2.9.1", 771 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", 772 | "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", 773 | "engines": { 774 | "node": ">=6" 775 | }, 776 | "funding": { 777 | "url": "https://github.com/sponsors/sindresorhus" 778 | } 779 | }, 780 | "node_modules/cli-width": { 781 | "version": "4.1.0", 782 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", 783 | "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", 784 | "engines": { 785 | "node": ">= 12" 786 | } 787 | }, 788 | "node_modules/clone": { 789 | "version": "1.0.4", 790 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 791 | "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", 792 | "engines": { 793 | "node": ">=0.8" 794 | } 795 | }, 796 | "node_modules/color-convert": { 797 | "version": "2.0.1", 798 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 799 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 800 | "dependencies": { 801 | "color-name": "~1.1.4" 802 | }, 803 | "engines": { 804 | "node": ">=7.0.0" 805 | } 806 | }, 807 | "node_modules/color-name": { 808 | "version": "1.1.4", 809 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 810 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 811 | }, 812 | "node_modules/combined-stream": { 813 | "version": "1.0.8", 814 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 815 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 816 | "dependencies": { 817 | "delayed-stream": "~1.0.0" 818 | }, 819 | "engines": { 820 | "node": ">= 0.8" 821 | } 822 | }, 823 | "node_modules/create-require": { 824 | "version": "1.1.1", 825 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 826 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 827 | "dev": true 828 | }, 829 | "node_modules/csstype": { 830 | "version": "3.1.2", 831 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", 832 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" 833 | }, 834 | "node_modules/debug": { 835 | "version": "4.3.4", 836 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 837 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 838 | "dependencies": { 839 | "ms": "2.1.2" 840 | }, 841 | "engines": { 842 | "node": ">=6.0" 843 | }, 844 | "peerDependenciesMeta": { 845 | "supports-color": { 846 | "optional": true 847 | } 848 | } 849 | }, 850 | "node_modules/deep-equal": { 851 | "version": "2.2.2", 852 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", 853 | "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", 854 | "dependencies": { 855 | "array-buffer-byte-length": "^1.0.0", 856 | "call-bind": "^1.0.2", 857 | "es-get-iterator": "^1.1.3", 858 | "get-intrinsic": "^1.2.1", 859 | "is-arguments": "^1.1.1", 860 | "is-array-buffer": "^3.0.2", 861 | "is-date-object": "^1.0.5", 862 | "is-regex": "^1.1.4", 863 | "is-shared-array-buffer": "^1.0.2", 864 | "isarray": "^2.0.5", 865 | "object-is": "^1.1.5", 866 | "object-keys": "^1.1.1", 867 | "object.assign": "^4.1.4", 868 | "regexp.prototype.flags": "^1.5.0", 869 | "side-channel": "^1.0.4", 870 | "which-boxed-primitive": "^1.0.2", 871 | "which-collection": "^1.0.1", 872 | "which-typed-array": "^1.1.9" 873 | }, 874 | "funding": { 875 | "url": "https://github.com/sponsors/ljharb" 876 | } 877 | }, 878 | "node_modules/defaults": { 879 | "version": "1.0.4", 880 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", 881 | "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", 882 | "dependencies": { 883 | "clone": "^1.0.2" 884 | }, 885 | "funding": { 886 | "url": "https://github.com/sponsors/sindresorhus" 887 | } 888 | }, 889 | "node_modules/define-data-property": { 890 | "version": "1.1.0", 891 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", 892 | "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", 893 | "dependencies": { 894 | "get-intrinsic": "^1.2.1", 895 | "gopd": "^1.0.1", 896 | "has-property-descriptors": "^1.0.0" 897 | }, 898 | "engines": { 899 | "node": ">= 0.4" 900 | } 901 | }, 902 | "node_modules/define-properties": { 903 | "version": "1.2.1", 904 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 905 | "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 906 | "dependencies": { 907 | "define-data-property": "^1.0.1", 908 | "has-property-descriptors": "^1.0.0", 909 | "object-keys": "^1.1.1" 910 | }, 911 | "engines": { 912 | "node": ">= 0.4" 913 | }, 914 | "funding": { 915 | "url": "https://github.com/sponsors/ljharb" 916 | } 917 | }, 918 | "node_modules/delayed-stream": { 919 | "version": "1.0.0", 920 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 921 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 922 | "engines": { 923 | "node": ">=0.4.0" 924 | } 925 | }, 926 | "node_modules/diff": { 927 | "version": "4.0.2", 928 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 929 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 930 | "dev": true, 931 | "engines": { 932 | "node": ">=0.3.1" 933 | } 934 | }, 935 | "node_modules/dom-accessibility-api": { 936 | "version": "0.5.16", 937 | "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", 938 | "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" 939 | }, 940 | "node_modules/emoji-regex": { 941 | "version": "8.0.0", 942 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 943 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 944 | }, 945 | "node_modules/es-get-iterator": { 946 | "version": "1.1.3", 947 | "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", 948 | "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", 949 | "dependencies": { 950 | "call-bind": "^1.0.2", 951 | "get-intrinsic": "^1.1.3", 952 | "has-symbols": "^1.0.3", 953 | "is-arguments": "^1.1.1", 954 | "is-map": "^2.0.2", 955 | "is-set": "^2.0.2", 956 | "is-string": "^1.0.7", 957 | "isarray": "^2.0.5", 958 | "stop-iteration-iterator": "^1.0.0" 959 | }, 960 | "funding": { 961 | "url": "https://github.com/sponsors/ljharb" 962 | } 963 | }, 964 | "node_modules/escape-string-regexp": { 965 | "version": "1.0.5", 966 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 967 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 968 | "engines": { 969 | "node": ">=0.8.0" 970 | } 971 | }, 972 | "node_modules/external-editor": { 973 | "version": "3.1.0", 974 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 975 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 976 | "dependencies": { 977 | "chardet": "^0.7.0", 978 | "iconv-lite": "^0.4.24", 979 | "tmp": "^0.0.33" 980 | }, 981 | "engines": { 982 | "node": ">=4" 983 | } 984 | }, 985 | "node_modules/figures": { 986 | "version": "5.0.0", 987 | "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", 988 | "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", 989 | "dependencies": { 990 | "escape-string-regexp": "^5.0.0", 991 | "is-unicode-supported": "^1.2.0" 992 | }, 993 | "engines": { 994 | "node": ">=14" 995 | }, 996 | "funding": { 997 | "url": "https://github.com/sponsors/sindresorhus" 998 | } 999 | }, 1000 | "node_modules/figures/node_modules/escape-string-regexp": { 1001 | "version": "5.0.0", 1002 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 1003 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 1004 | "engines": { 1005 | "node": ">=12" 1006 | }, 1007 | "funding": { 1008 | "url": "https://github.com/sponsors/sindresorhus" 1009 | } 1010 | }, 1011 | "node_modules/follow-redirects": { 1012 | "version": "1.15.3", 1013 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", 1014 | "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", 1015 | "funding": [ 1016 | { 1017 | "type": "individual", 1018 | "url": "https://github.com/sponsors/RubenVerborgh" 1019 | } 1020 | ], 1021 | "engines": { 1022 | "node": ">=4.0" 1023 | }, 1024 | "peerDependenciesMeta": { 1025 | "debug": { 1026 | "optional": true 1027 | } 1028 | } 1029 | }, 1030 | "node_modules/for-each": { 1031 | "version": "0.3.3", 1032 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 1033 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 1034 | "dependencies": { 1035 | "is-callable": "^1.1.3" 1036 | } 1037 | }, 1038 | "node_modules/form-data": { 1039 | "version": "4.0.0", 1040 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 1041 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 1042 | "dependencies": { 1043 | "asynckit": "^0.4.0", 1044 | "combined-stream": "^1.0.8", 1045 | "mime-types": "^2.1.12" 1046 | }, 1047 | "engines": { 1048 | "node": ">= 6" 1049 | } 1050 | }, 1051 | "node_modules/function-bind": { 1052 | "version": "1.1.1", 1053 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1054 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1055 | }, 1056 | "node_modules/functions-have-names": { 1057 | "version": "1.2.3", 1058 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 1059 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 1060 | "funding": { 1061 | "url": "https://github.com/sponsors/ljharb" 1062 | } 1063 | }, 1064 | "node_modules/get-intrinsic": { 1065 | "version": "1.2.1", 1066 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 1067 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 1068 | "dependencies": { 1069 | "function-bind": "^1.1.1", 1070 | "has": "^1.0.3", 1071 | "has-proto": "^1.0.1", 1072 | "has-symbols": "^1.0.3" 1073 | }, 1074 | "funding": { 1075 | "url": "https://github.com/sponsors/ljharb" 1076 | } 1077 | }, 1078 | "node_modules/gopd": { 1079 | "version": "1.0.1", 1080 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1081 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1082 | "dependencies": { 1083 | "get-intrinsic": "^1.1.3" 1084 | }, 1085 | "funding": { 1086 | "url": "https://github.com/sponsors/ljharb" 1087 | } 1088 | }, 1089 | "node_modules/has": { 1090 | "version": "1.0.3", 1091 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1092 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1093 | "dependencies": { 1094 | "function-bind": "^1.1.1" 1095 | }, 1096 | "engines": { 1097 | "node": ">= 0.4.0" 1098 | } 1099 | }, 1100 | "node_modules/has-bigints": { 1101 | "version": "1.0.2", 1102 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 1103 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 1104 | "funding": { 1105 | "url": "https://github.com/sponsors/ljharb" 1106 | } 1107 | }, 1108 | "node_modules/has-flag": { 1109 | "version": "4.0.0", 1110 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1111 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1112 | "engines": { 1113 | "node": ">=8" 1114 | } 1115 | }, 1116 | "node_modules/has-property-descriptors": { 1117 | "version": "1.0.0", 1118 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 1119 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 1120 | "dependencies": { 1121 | "get-intrinsic": "^1.1.1" 1122 | }, 1123 | "funding": { 1124 | "url": "https://github.com/sponsors/ljharb" 1125 | } 1126 | }, 1127 | "node_modules/has-proto": { 1128 | "version": "1.0.1", 1129 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 1130 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 1131 | "engines": { 1132 | "node": ">= 0.4" 1133 | }, 1134 | "funding": { 1135 | "url": "https://github.com/sponsors/ljharb" 1136 | } 1137 | }, 1138 | "node_modules/has-symbols": { 1139 | "version": "1.0.3", 1140 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1141 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1142 | "engines": { 1143 | "node": ">= 0.4" 1144 | }, 1145 | "funding": { 1146 | "url": "https://github.com/sponsors/ljharb" 1147 | } 1148 | }, 1149 | "node_modules/has-tostringtag": { 1150 | "version": "1.0.0", 1151 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1152 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1153 | "dependencies": { 1154 | "has-symbols": "^1.0.2" 1155 | }, 1156 | "engines": { 1157 | "node": ">= 0.4" 1158 | }, 1159 | "funding": { 1160 | "url": "https://github.com/sponsors/ljharb" 1161 | } 1162 | }, 1163 | "node_modules/https-proxy-agent": { 1164 | "version": "7.0.2", 1165 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", 1166 | "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", 1167 | "dependencies": { 1168 | "agent-base": "^7.0.2", 1169 | "debug": "4" 1170 | }, 1171 | "engines": { 1172 | "node": ">= 14" 1173 | } 1174 | }, 1175 | "node_modules/iconv-lite": { 1176 | "version": "0.4.24", 1177 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1178 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1179 | "dependencies": { 1180 | "safer-buffer": ">= 2.1.2 < 3" 1181 | }, 1182 | "engines": { 1183 | "node": ">=0.10.0" 1184 | } 1185 | }, 1186 | "node_modules/ieee754": { 1187 | "version": "1.2.1", 1188 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1189 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1190 | "funding": [ 1191 | { 1192 | "type": "github", 1193 | "url": "https://github.com/sponsors/feross" 1194 | }, 1195 | { 1196 | "type": "patreon", 1197 | "url": "https://www.patreon.com/feross" 1198 | }, 1199 | { 1200 | "type": "consulting", 1201 | "url": "https://feross.org/support" 1202 | } 1203 | ] 1204 | }, 1205 | "node_modules/inherits": { 1206 | "version": "2.0.4", 1207 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1208 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1209 | }, 1210 | "node_modules/inquirer": { 1211 | "version": "9.2.11", 1212 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.11.tgz", 1213 | "integrity": "sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==", 1214 | "dependencies": { 1215 | "@ljharb/through": "^2.3.9", 1216 | "ansi-escapes": "^4.3.2", 1217 | "chalk": "^5.3.0", 1218 | "cli-cursor": "^3.1.0", 1219 | "cli-width": "^4.1.0", 1220 | "external-editor": "^3.1.0", 1221 | "figures": "^5.0.0", 1222 | "lodash": "^4.17.21", 1223 | "mute-stream": "1.0.0", 1224 | "ora": "^5.4.1", 1225 | "run-async": "^3.0.0", 1226 | "rxjs": "^7.8.1", 1227 | "string-width": "^4.2.3", 1228 | "strip-ansi": "^6.0.1", 1229 | "wrap-ansi": "^6.2.0" 1230 | }, 1231 | "engines": { 1232 | "node": ">=14.18.0" 1233 | } 1234 | }, 1235 | "node_modules/inquirer/node_modules/chalk": { 1236 | "version": "5.3.0", 1237 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 1238 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 1239 | "engines": { 1240 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 1241 | }, 1242 | "funding": { 1243 | "url": "https://github.com/chalk/chalk?sponsor=1" 1244 | } 1245 | }, 1246 | "node_modules/internal-slot": { 1247 | "version": "1.0.5", 1248 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", 1249 | "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", 1250 | "dependencies": { 1251 | "get-intrinsic": "^1.2.0", 1252 | "has": "^1.0.3", 1253 | "side-channel": "^1.0.4" 1254 | }, 1255 | "engines": { 1256 | "node": ">= 0.4" 1257 | } 1258 | }, 1259 | "node_modules/is-arguments": { 1260 | "version": "1.1.1", 1261 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", 1262 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", 1263 | "dependencies": { 1264 | "call-bind": "^1.0.2", 1265 | "has-tostringtag": "^1.0.0" 1266 | }, 1267 | "engines": { 1268 | "node": ">= 0.4" 1269 | }, 1270 | "funding": { 1271 | "url": "https://github.com/sponsors/ljharb" 1272 | } 1273 | }, 1274 | "node_modules/is-array-buffer": { 1275 | "version": "3.0.2", 1276 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", 1277 | "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", 1278 | "dependencies": { 1279 | "call-bind": "^1.0.2", 1280 | "get-intrinsic": "^1.2.0", 1281 | "is-typed-array": "^1.1.10" 1282 | }, 1283 | "funding": { 1284 | "url": "https://github.com/sponsors/ljharb" 1285 | } 1286 | }, 1287 | "node_modules/is-bigint": { 1288 | "version": "1.0.4", 1289 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 1290 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 1291 | "dependencies": { 1292 | "has-bigints": "^1.0.1" 1293 | }, 1294 | "funding": { 1295 | "url": "https://github.com/sponsors/ljharb" 1296 | } 1297 | }, 1298 | "node_modules/is-boolean-object": { 1299 | "version": "1.1.2", 1300 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 1301 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 1302 | "dependencies": { 1303 | "call-bind": "^1.0.2", 1304 | "has-tostringtag": "^1.0.0" 1305 | }, 1306 | "engines": { 1307 | "node": ">= 0.4" 1308 | }, 1309 | "funding": { 1310 | "url": "https://github.com/sponsors/ljharb" 1311 | } 1312 | }, 1313 | "node_modules/is-callable": { 1314 | "version": "1.2.7", 1315 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 1316 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 1317 | "engines": { 1318 | "node": ">= 0.4" 1319 | }, 1320 | "funding": { 1321 | "url": "https://github.com/sponsors/ljharb" 1322 | } 1323 | }, 1324 | "node_modules/is-date-object": { 1325 | "version": "1.0.5", 1326 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 1327 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 1328 | "dependencies": { 1329 | "has-tostringtag": "^1.0.0" 1330 | }, 1331 | "engines": { 1332 | "node": ">= 0.4" 1333 | }, 1334 | "funding": { 1335 | "url": "https://github.com/sponsors/ljharb" 1336 | } 1337 | }, 1338 | "node_modules/is-fullwidth-code-point": { 1339 | "version": "3.0.0", 1340 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1341 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1342 | "engines": { 1343 | "node": ">=8" 1344 | } 1345 | }, 1346 | "node_modules/is-interactive": { 1347 | "version": "1.0.0", 1348 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 1349 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", 1350 | "engines": { 1351 | "node": ">=8" 1352 | } 1353 | }, 1354 | "node_modules/is-map": { 1355 | "version": "2.0.2", 1356 | "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", 1357 | "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", 1358 | "funding": { 1359 | "url": "https://github.com/sponsors/ljharb" 1360 | } 1361 | }, 1362 | "node_modules/is-number-object": { 1363 | "version": "1.0.7", 1364 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 1365 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 1366 | "dependencies": { 1367 | "has-tostringtag": "^1.0.0" 1368 | }, 1369 | "engines": { 1370 | "node": ">= 0.4" 1371 | }, 1372 | "funding": { 1373 | "url": "https://github.com/sponsors/ljharb" 1374 | } 1375 | }, 1376 | "node_modules/is-regex": { 1377 | "version": "1.1.4", 1378 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 1379 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 1380 | "dependencies": { 1381 | "call-bind": "^1.0.2", 1382 | "has-tostringtag": "^1.0.0" 1383 | }, 1384 | "engines": { 1385 | "node": ">= 0.4" 1386 | }, 1387 | "funding": { 1388 | "url": "https://github.com/sponsors/ljharb" 1389 | } 1390 | }, 1391 | "node_modules/is-set": { 1392 | "version": "2.0.2", 1393 | "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", 1394 | "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", 1395 | "funding": { 1396 | "url": "https://github.com/sponsors/ljharb" 1397 | } 1398 | }, 1399 | "node_modules/is-shared-array-buffer": { 1400 | "version": "1.0.2", 1401 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 1402 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 1403 | "dependencies": { 1404 | "call-bind": "^1.0.2" 1405 | }, 1406 | "funding": { 1407 | "url": "https://github.com/sponsors/ljharb" 1408 | } 1409 | }, 1410 | "node_modules/is-string": { 1411 | "version": "1.0.7", 1412 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 1413 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 1414 | "dependencies": { 1415 | "has-tostringtag": "^1.0.0" 1416 | }, 1417 | "engines": { 1418 | "node": ">= 0.4" 1419 | }, 1420 | "funding": { 1421 | "url": "https://github.com/sponsors/ljharb" 1422 | } 1423 | }, 1424 | "node_modules/is-symbol": { 1425 | "version": "1.0.4", 1426 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 1427 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 1428 | "dependencies": { 1429 | "has-symbols": "^1.0.2" 1430 | }, 1431 | "engines": { 1432 | "node": ">= 0.4" 1433 | }, 1434 | "funding": { 1435 | "url": "https://github.com/sponsors/ljharb" 1436 | } 1437 | }, 1438 | "node_modules/is-typed-array": { 1439 | "version": "1.1.12", 1440 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", 1441 | "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", 1442 | "dependencies": { 1443 | "which-typed-array": "^1.1.11" 1444 | }, 1445 | "engines": { 1446 | "node": ">= 0.4" 1447 | }, 1448 | "funding": { 1449 | "url": "https://github.com/sponsors/ljharb" 1450 | } 1451 | }, 1452 | "node_modules/is-unicode-supported": { 1453 | "version": "1.3.0", 1454 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", 1455 | "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", 1456 | "engines": { 1457 | "node": ">=12" 1458 | }, 1459 | "funding": { 1460 | "url": "https://github.com/sponsors/sindresorhus" 1461 | } 1462 | }, 1463 | "node_modules/is-weakmap": { 1464 | "version": "2.0.1", 1465 | "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", 1466 | "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", 1467 | "funding": { 1468 | "url": "https://github.com/sponsors/ljharb" 1469 | } 1470 | }, 1471 | "node_modules/is-weakset": { 1472 | "version": "2.0.2", 1473 | "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", 1474 | "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", 1475 | "dependencies": { 1476 | "call-bind": "^1.0.2", 1477 | "get-intrinsic": "^1.1.1" 1478 | }, 1479 | "funding": { 1480 | "url": "https://github.com/sponsors/ljharb" 1481 | } 1482 | }, 1483 | "node_modules/isarray": { 1484 | "version": "2.0.5", 1485 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 1486 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" 1487 | }, 1488 | "node_modules/isomorphic-ws": { 1489 | "version": "5.0.0", 1490 | "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", 1491 | "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", 1492 | "peerDependencies": { 1493 | "ws": "*" 1494 | } 1495 | }, 1496 | "node_modules/js-tokens": { 1497 | "version": "4.0.0", 1498 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1499 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1500 | }, 1501 | "node_modules/lodash": { 1502 | "version": "4.17.21", 1503 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1504 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1505 | }, 1506 | "node_modules/log-symbols": { 1507 | "version": "4.1.0", 1508 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1509 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1510 | "dependencies": { 1511 | "chalk": "^4.1.0", 1512 | "is-unicode-supported": "^0.1.0" 1513 | }, 1514 | "engines": { 1515 | "node": ">=10" 1516 | }, 1517 | "funding": { 1518 | "url": "https://github.com/sponsors/sindresorhus" 1519 | } 1520 | }, 1521 | "node_modules/log-symbols/node_modules/is-unicode-supported": { 1522 | "version": "0.1.0", 1523 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1524 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1525 | "engines": { 1526 | "node": ">=10" 1527 | }, 1528 | "funding": { 1529 | "url": "https://github.com/sponsors/sindresorhus" 1530 | } 1531 | }, 1532 | "node_modules/loose-envify": { 1533 | "version": "1.4.0", 1534 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1535 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1536 | "dependencies": { 1537 | "js-tokens": "^3.0.0 || ^4.0.0" 1538 | }, 1539 | "bin": { 1540 | "loose-envify": "cli.js" 1541 | } 1542 | }, 1543 | "node_modules/lz-string": { 1544 | "version": "1.5.0", 1545 | "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", 1546 | "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", 1547 | "bin": { 1548 | "lz-string": "bin/bin.js" 1549 | } 1550 | }, 1551 | "node_modules/make-error": { 1552 | "version": "1.3.6", 1553 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1554 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 1555 | "dev": true 1556 | }, 1557 | "node_modules/mime-db": { 1558 | "version": "1.52.0", 1559 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1560 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1561 | "engines": { 1562 | "node": ">= 0.6" 1563 | } 1564 | }, 1565 | "node_modules/mime-types": { 1566 | "version": "2.1.35", 1567 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1568 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1569 | "dependencies": { 1570 | "mime-db": "1.52.0" 1571 | }, 1572 | "engines": { 1573 | "node": ">= 0.6" 1574 | } 1575 | }, 1576 | "node_modules/mimic-fn": { 1577 | "version": "2.1.0", 1578 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1579 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1580 | "engines": { 1581 | "node": ">=6" 1582 | } 1583 | }, 1584 | "node_modules/ms": { 1585 | "version": "2.1.2", 1586 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1587 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1588 | }, 1589 | "node_modules/mute-stream": { 1590 | "version": "1.0.0", 1591 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", 1592 | "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", 1593 | "engines": { 1594 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 1595 | } 1596 | }, 1597 | "node_modules/object-inspect": { 1598 | "version": "1.12.3", 1599 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 1600 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 1601 | "funding": { 1602 | "url": "https://github.com/sponsors/ljharb" 1603 | } 1604 | }, 1605 | "node_modules/object-is": { 1606 | "version": "1.1.5", 1607 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", 1608 | "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", 1609 | "dependencies": { 1610 | "call-bind": "^1.0.2", 1611 | "define-properties": "^1.1.3" 1612 | }, 1613 | "engines": { 1614 | "node": ">= 0.4" 1615 | }, 1616 | "funding": { 1617 | "url": "https://github.com/sponsors/ljharb" 1618 | } 1619 | }, 1620 | "node_modules/object-keys": { 1621 | "version": "1.1.1", 1622 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1623 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1624 | "engines": { 1625 | "node": ">= 0.4" 1626 | } 1627 | }, 1628 | "node_modules/object.assign": { 1629 | "version": "4.1.4", 1630 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", 1631 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", 1632 | "dependencies": { 1633 | "call-bind": "^1.0.2", 1634 | "define-properties": "^1.1.4", 1635 | "has-symbols": "^1.0.3", 1636 | "object-keys": "^1.1.1" 1637 | }, 1638 | "engines": { 1639 | "node": ">= 0.4" 1640 | }, 1641 | "funding": { 1642 | "url": "https://github.com/sponsors/ljharb" 1643 | } 1644 | }, 1645 | "node_modules/onetime": { 1646 | "version": "5.1.2", 1647 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1648 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1649 | "dependencies": { 1650 | "mimic-fn": "^2.1.0" 1651 | }, 1652 | "engines": { 1653 | "node": ">=6" 1654 | }, 1655 | "funding": { 1656 | "url": "https://github.com/sponsors/sindresorhus" 1657 | } 1658 | }, 1659 | "node_modules/op-viem": { 1660 | "version": "0.0.1-alpha.7", 1661 | "resolved": "https://registry.npmjs.org/op-viem/-/op-viem-0.0.1-alpha.7.tgz", 1662 | "integrity": "sha512-sVAGA4ZxGg+8LBT0t5Oon3KFM4sDnKLBhKKwhM+Z1CaTQuLiIKFRc0s8uT+w9AFSC98SMfiRJuGZMDDHzH7rbA==", 1663 | "hasInstallScript": true, 1664 | "dependencies": { 1665 | "@eth-optimism/contracts-ts": "^0.15.0" 1666 | }, 1667 | "peerDependencies": { 1668 | "typescript": ">=5.0.4", 1669 | "viem": "1.x" 1670 | }, 1671 | "peerDependenciesMeta": { 1672 | "typescript": { 1673 | "optional": true 1674 | } 1675 | } 1676 | }, 1677 | "node_modules/ora": { 1678 | "version": "5.4.1", 1679 | "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", 1680 | "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", 1681 | "dependencies": { 1682 | "bl": "^4.1.0", 1683 | "chalk": "^4.1.0", 1684 | "cli-cursor": "^3.1.0", 1685 | "cli-spinners": "^2.5.0", 1686 | "is-interactive": "^1.0.0", 1687 | "is-unicode-supported": "^0.1.0", 1688 | "log-symbols": "^4.1.0", 1689 | "strip-ansi": "^6.0.0", 1690 | "wcwidth": "^1.0.1" 1691 | }, 1692 | "engines": { 1693 | "node": ">=10" 1694 | }, 1695 | "funding": { 1696 | "url": "https://github.com/sponsors/sindresorhus" 1697 | } 1698 | }, 1699 | "node_modules/ora/node_modules/is-unicode-supported": { 1700 | "version": "0.1.0", 1701 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1702 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1703 | "engines": { 1704 | "node": ">=10" 1705 | }, 1706 | "funding": { 1707 | "url": "https://github.com/sponsors/sindresorhus" 1708 | } 1709 | }, 1710 | "node_modules/os-tmpdir": { 1711 | "version": "1.0.2", 1712 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1713 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", 1714 | "engines": { 1715 | "node": ">=0.10.0" 1716 | } 1717 | }, 1718 | "node_modules/pretty-format": { 1719 | "version": "27.5.1", 1720 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", 1721 | "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", 1722 | "dependencies": { 1723 | "ansi-regex": "^5.0.1", 1724 | "ansi-styles": "^5.0.0", 1725 | "react-is": "^17.0.1" 1726 | }, 1727 | "engines": { 1728 | "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" 1729 | } 1730 | }, 1731 | "node_modules/pretty-format/node_modules/ansi-styles": { 1732 | "version": "5.2.0", 1733 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 1734 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 1735 | "engines": { 1736 | "node": ">=10" 1737 | }, 1738 | "funding": { 1739 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1740 | } 1741 | }, 1742 | "node_modules/proxy-from-env": { 1743 | "version": "1.1.0", 1744 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1745 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 1746 | }, 1747 | "node_modules/react": { 1748 | "version": "18.2.0", 1749 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 1750 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 1751 | "dependencies": { 1752 | "loose-envify": "^1.1.0" 1753 | }, 1754 | "engines": { 1755 | "node": ">=0.10.0" 1756 | } 1757 | }, 1758 | "node_modules/react-dom": { 1759 | "version": "18.2.0", 1760 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 1761 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 1762 | "dependencies": { 1763 | "loose-envify": "^1.1.0", 1764 | "scheduler": "^0.23.0" 1765 | }, 1766 | "peerDependencies": { 1767 | "react": "^18.2.0" 1768 | } 1769 | }, 1770 | "node_modules/react-is": { 1771 | "version": "17.0.2", 1772 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 1773 | "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" 1774 | }, 1775 | "node_modules/readable-stream": { 1776 | "version": "3.6.2", 1777 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1778 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1779 | "dependencies": { 1780 | "inherits": "^2.0.3", 1781 | "string_decoder": "^1.1.1", 1782 | "util-deprecate": "^1.0.1" 1783 | }, 1784 | "engines": { 1785 | "node": ">= 6" 1786 | } 1787 | }, 1788 | "node_modules/regenerator-runtime": { 1789 | "version": "0.14.0", 1790 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", 1791 | "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" 1792 | }, 1793 | "node_modules/regexp.prototype.flags": { 1794 | "version": "1.5.1", 1795 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", 1796 | "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", 1797 | "dependencies": { 1798 | "call-bind": "^1.0.2", 1799 | "define-properties": "^1.2.0", 1800 | "set-function-name": "^2.0.0" 1801 | }, 1802 | "engines": { 1803 | "node": ">= 0.4" 1804 | }, 1805 | "funding": { 1806 | "url": "https://github.com/sponsors/ljharb" 1807 | } 1808 | }, 1809 | "node_modules/restore-cursor": { 1810 | "version": "3.1.0", 1811 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1812 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1813 | "dependencies": { 1814 | "onetime": "^5.1.0", 1815 | "signal-exit": "^3.0.2" 1816 | }, 1817 | "engines": { 1818 | "node": ">=8" 1819 | } 1820 | }, 1821 | "node_modules/run-async": { 1822 | "version": "3.0.0", 1823 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", 1824 | "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", 1825 | "engines": { 1826 | "node": ">=0.12.0" 1827 | } 1828 | }, 1829 | "node_modules/rxjs": { 1830 | "version": "7.8.1", 1831 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", 1832 | "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", 1833 | "dependencies": { 1834 | "tslib": "^2.1.0" 1835 | } 1836 | }, 1837 | "node_modules/safe-buffer": { 1838 | "version": "5.2.1", 1839 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1840 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1841 | "funding": [ 1842 | { 1843 | "type": "github", 1844 | "url": "https://github.com/sponsors/feross" 1845 | }, 1846 | { 1847 | "type": "patreon", 1848 | "url": "https://www.patreon.com/feross" 1849 | }, 1850 | { 1851 | "type": "consulting", 1852 | "url": "https://feross.org/support" 1853 | } 1854 | ] 1855 | }, 1856 | "node_modules/safer-buffer": { 1857 | "version": "2.1.2", 1858 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1859 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1860 | }, 1861 | "node_modules/scheduler": { 1862 | "version": "0.23.0", 1863 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 1864 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 1865 | "dependencies": { 1866 | "loose-envify": "^1.1.0" 1867 | } 1868 | }, 1869 | "node_modules/set-function-name": { 1870 | "version": "2.0.1", 1871 | "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", 1872 | "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", 1873 | "dependencies": { 1874 | "define-data-property": "^1.0.1", 1875 | "functions-have-names": "^1.2.3", 1876 | "has-property-descriptors": "^1.0.0" 1877 | }, 1878 | "engines": { 1879 | "node": ">= 0.4" 1880 | } 1881 | }, 1882 | "node_modules/side-channel": { 1883 | "version": "1.0.4", 1884 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1885 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1886 | "dependencies": { 1887 | "call-bind": "^1.0.0", 1888 | "get-intrinsic": "^1.0.2", 1889 | "object-inspect": "^1.9.0" 1890 | }, 1891 | "funding": { 1892 | "url": "https://github.com/sponsors/ljharb" 1893 | } 1894 | }, 1895 | "node_modules/signal-exit": { 1896 | "version": "3.0.7", 1897 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1898 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1899 | }, 1900 | "node_modules/stop-iteration-iterator": { 1901 | "version": "1.0.0", 1902 | "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", 1903 | "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", 1904 | "dependencies": { 1905 | "internal-slot": "^1.0.4" 1906 | }, 1907 | "engines": { 1908 | "node": ">= 0.4" 1909 | } 1910 | }, 1911 | "node_modules/string_decoder": { 1912 | "version": "1.3.0", 1913 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1914 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1915 | "dependencies": { 1916 | "safe-buffer": "~5.2.0" 1917 | } 1918 | }, 1919 | "node_modules/string-width": { 1920 | "version": "4.2.3", 1921 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1922 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1923 | "dependencies": { 1924 | "emoji-regex": "^8.0.0", 1925 | "is-fullwidth-code-point": "^3.0.0", 1926 | "strip-ansi": "^6.0.1" 1927 | }, 1928 | "engines": { 1929 | "node": ">=8" 1930 | } 1931 | }, 1932 | "node_modules/strip-ansi": { 1933 | "version": "6.0.1", 1934 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1935 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1936 | "dependencies": { 1937 | "ansi-regex": "^5.0.1" 1938 | }, 1939 | "engines": { 1940 | "node": ">=8" 1941 | } 1942 | }, 1943 | "node_modules/supports-color": { 1944 | "version": "7.2.0", 1945 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1946 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1947 | "dependencies": { 1948 | "has-flag": "^4.0.0" 1949 | }, 1950 | "engines": { 1951 | "node": ">=8" 1952 | } 1953 | }, 1954 | "node_modules/tmp": { 1955 | "version": "0.0.33", 1956 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1957 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1958 | "dependencies": { 1959 | "os-tmpdir": "~1.0.2" 1960 | }, 1961 | "engines": { 1962 | "node": ">=0.6.0" 1963 | } 1964 | }, 1965 | "node_modules/ts-node": { 1966 | "version": "10.9.1", 1967 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", 1968 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 1969 | "dev": true, 1970 | "dependencies": { 1971 | "@cspotcode/source-map-support": "^0.8.0", 1972 | "@tsconfig/node10": "^1.0.7", 1973 | "@tsconfig/node12": "^1.0.7", 1974 | "@tsconfig/node14": "^1.0.0", 1975 | "@tsconfig/node16": "^1.0.2", 1976 | "acorn": "^8.4.1", 1977 | "acorn-walk": "^8.1.1", 1978 | "arg": "^4.1.0", 1979 | "create-require": "^1.1.0", 1980 | "diff": "^4.0.1", 1981 | "make-error": "^1.1.1", 1982 | "v8-compile-cache-lib": "^3.0.1", 1983 | "yn": "3.1.1" 1984 | }, 1985 | "bin": { 1986 | "ts-node": "dist/bin.js", 1987 | "ts-node-cwd": "dist/bin-cwd.js", 1988 | "ts-node-esm": "dist/bin-esm.js", 1989 | "ts-node-script": "dist/bin-script.js", 1990 | "ts-node-transpile-only": "dist/bin-transpile.js", 1991 | "ts-script": "dist/bin-script-deprecated.js" 1992 | }, 1993 | "peerDependencies": { 1994 | "@swc/core": ">=1.2.50", 1995 | "@swc/wasm": ">=1.2.50", 1996 | "@types/node": "*", 1997 | "typescript": ">=2.7" 1998 | }, 1999 | "peerDependenciesMeta": { 2000 | "@swc/core": { 2001 | "optional": true 2002 | }, 2003 | "@swc/wasm": { 2004 | "optional": true 2005 | } 2006 | } 2007 | }, 2008 | "node_modules/tslib": { 2009 | "version": "2.6.2", 2010 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 2011 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" 2012 | }, 2013 | "node_modules/tslog": { 2014 | "version": "4.9.2", 2015 | "resolved": "https://registry.npmjs.org/tslog/-/tslog-4.9.2.tgz", 2016 | "integrity": "sha512-wBM+LRJoNl34Bdu8mYEFxpvmOUedpNUwMNQB/NcuPIZKwdDde6xLHUev3bBjXQU7gdurX++X/YE7gLH8eXYsiQ==", 2017 | "engines": { 2018 | "node": ">=16" 2019 | }, 2020 | "funding": { 2021 | "url": "https://github.com/fullstack-build/tslog?sponsor=1" 2022 | } 2023 | }, 2024 | "node_modules/type-fest": { 2025 | "version": "0.21.3", 2026 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 2027 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 2028 | "engines": { 2029 | "node": ">=10" 2030 | }, 2031 | "funding": { 2032 | "url": "https://github.com/sponsors/sindresorhus" 2033 | } 2034 | }, 2035 | "node_modules/typescript": { 2036 | "version": "5.2.2", 2037 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 2038 | "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 2039 | "bin": { 2040 | "tsc": "bin/tsc", 2041 | "tsserver": "bin/tsserver" 2042 | }, 2043 | "engines": { 2044 | "node": ">=14.17" 2045 | } 2046 | }, 2047 | "node_modules/util-deprecate": { 2048 | "version": "1.0.2", 2049 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2050 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2051 | }, 2052 | "node_modules/v8-compile-cache-lib": { 2053 | "version": "3.0.1", 2054 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 2055 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 2056 | "dev": true 2057 | }, 2058 | "node_modules/viem": { 2059 | "version": "1.15.1", 2060 | "resolved": "https://registry.npmjs.org/viem/-/viem-1.15.1.tgz", 2061 | "integrity": "sha512-lxk8wwUK7ZivYAUZ6pH+9Y6jjrfXXjafCOoASa4lw3ULUCT2BajU4SELarlxJQimpsFd7OZD4m4iEXYLF/bt6w==", 2062 | "funding": [ 2063 | { 2064 | "type": "github", 2065 | "url": "https://github.com/sponsors/wagmi-dev" 2066 | } 2067 | ], 2068 | "dependencies": { 2069 | "@adraffy/ens-normalize": "1.9.4", 2070 | "@noble/curves": "1.2.0", 2071 | "@noble/hashes": "1.3.2", 2072 | "@scure/bip32": "1.3.2", 2073 | "@scure/bip39": "1.2.1", 2074 | "@types/ws": "^8.5.5", 2075 | "abitype": "0.9.8", 2076 | "isomorphic-ws": "5.0.0", 2077 | "ws": "8.13.0" 2078 | }, 2079 | "peerDependencies": { 2080 | "typescript": ">=5.0.4" 2081 | }, 2082 | "peerDependenciesMeta": { 2083 | "typescript": { 2084 | "optional": true 2085 | } 2086 | } 2087 | }, 2088 | "node_modules/wcwidth": { 2089 | "version": "1.0.1", 2090 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 2091 | "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", 2092 | "dependencies": { 2093 | "defaults": "^1.0.3" 2094 | } 2095 | }, 2096 | "node_modules/which-boxed-primitive": { 2097 | "version": "1.0.2", 2098 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 2099 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 2100 | "dependencies": { 2101 | "is-bigint": "^1.0.1", 2102 | "is-boolean-object": "^1.1.0", 2103 | "is-number-object": "^1.0.4", 2104 | "is-string": "^1.0.5", 2105 | "is-symbol": "^1.0.3" 2106 | }, 2107 | "funding": { 2108 | "url": "https://github.com/sponsors/ljharb" 2109 | } 2110 | }, 2111 | "node_modules/which-collection": { 2112 | "version": "1.0.1", 2113 | "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", 2114 | "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", 2115 | "dependencies": { 2116 | "is-map": "^2.0.1", 2117 | "is-set": "^2.0.1", 2118 | "is-weakmap": "^2.0.1", 2119 | "is-weakset": "^2.0.1" 2120 | }, 2121 | "funding": { 2122 | "url": "https://github.com/sponsors/ljharb" 2123 | } 2124 | }, 2125 | "node_modules/which-typed-array": { 2126 | "version": "1.1.11", 2127 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", 2128 | "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", 2129 | "dependencies": { 2130 | "available-typed-arrays": "^1.0.5", 2131 | "call-bind": "^1.0.2", 2132 | "for-each": "^0.3.3", 2133 | "gopd": "^1.0.1", 2134 | "has-tostringtag": "^1.0.0" 2135 | }, 2136 | "engines": { 2137 | "node": ">= 0.4" 2138 | }, 2139 | "funding": { 2140 | "url": "https://github.com/sponsors/ljharb" 2141 | } 2142 | }, 2143 | "node_modules/wrap-ansi": { 2144 | "version": "6.2.0", 2145 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 2146 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 2147 | "dependencies": { 2148 | "ansi-styles": "^4.0.0", 2149 | "string-width": "^4.1.0", 2150 | "strip-ansi": "^6.0.0" 2151 | }, 2152 | "engines": { 2153 | "node": ">=8" 2154 | } 2155 | }, 2156 | "node_modules/ws": { 2157 | "version": "8.13.0", 2158 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", 2159 | "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", 2160 | "engines": { 2161 | "node": ">=10.0.0" 2162 | }, 2163 | "peerDependencies": { 2164 | "bufferutil": "^4.0.1", 2165 | "utf-8-validate": ">=5.0.2" 2166 | }, 2167 | "peerDependenciesMeta": { 2168 | "bufferutil": { 2169 | "optional": true 2170 | }, 2171 | "utf-8-validate": { 2172 | "optional": true 2173 | } 2174 | } 2175 | }, 2176 | "node_modules/yn": { 2177 | "version": "3.1.1", 2178 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 2179 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 2180 | "dev": true, 2181 | "engines": { 2182 | "node": ">=6" 2183 | } 2184 | } 2185 | } 2186 | } 2187 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "build": "tsc", 4 | "start": "node --no-warnings --max-old-space-size=8192 --experimental-specifier-resolution=node --loader ts-node/esm --import ./logError.js ./start.ts", 5 | "lint": "eslint . --ext .ts" 6 | }, 7 | "type": "module", 8 | "devDependencies": { 9 | "@types/express": "^4.17.17", 10 | "@types/inquirer": "^9.0.3", 11 | "@types/node": "^20.2.5", 12 | "@types/node-fetch": "^2.6.4", 13 | "ts-node": "^10.9.1", 14 | "tslib": "^2.5.3" 15 | }, 16 | "dependencies": { 17 | "axios": "^1.6.0", 18 | "https-proxy-agent": "^7.0.2", 19 | "inquirer": "^9.2.11", 20 | "op-viem": "^0.0.1-alpha.7", 21 | "tslog": "^4.9.2", 22 | "typescript": "^5.2.2", 23 | "viem": "^1.15.1" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /private_keys.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/munris-vlad/archive-scroll/d0d7f30839dcfb044421a59a02262c52dd497fdb/private_keys.txt -------------------------------------------------------------------------------- /start.ts: -------------------------------------------------------------------------------- 1 | import { privateKeyConvert, readWallets } from "./utils/wallet" 2 | import { random, randomFloat, shuffle, sleep } from "./utils/common" 3 | import { bridgeConfig, generalConfig, merklyConfig } from "./config" 4 | import { makeLogger } from "./utils/logger" 5 | import { entryPoint } from "./utils/menu" 6 | import { Bridge } from "./modules/bridge" 7 | import { waitGas } from "./utils/getCurrentGas" 8 | import { Deploy } from "./modules/deploy" 9 | import { Merkly } from "./modules/merkly" 10 | 11 | let privateKeys = readWallets('./private_keys.txt') 12 | 13 | if (generalConfig.shuffleWallets) { 14 | shuffle(privateKeys) 15 | } 16 | 17 | async function deployModule() { 18 | const logger = makeLogger("Deploy NFT mint") 19 | for (let privateKey of privateKeys) { 20 | const deploy = new Deploy(privateKeyConvert(privateKey)) 21 | await deploy.mint() 22 | 23 | const sleepTime = random(generalConfig.sleepFrom, generalConfig.sleepTo) 24 | logger.info(`Waiting ${sleepTime} sec until next wallet...`) 25 | await sleep(sleepTime * 1000) 26 | } 27 | } 28 | 29 | async function merklyModule() { 30 | const logger = makeLogger("Merkly") 31 | for (let privateKey of privateKeys) { 32 | const refuelSum = randomFloat(merklyConfig.refuelFrom, merklyConfig.refuelTo) 33 | const merkly = new Merkly(privateKeyConvert(privateKey)) 34 | 35 | if (await merkly.refuel(refuelSum.toString())) { 36 | const sleepTime = random(generalConfig.sleepFrom, generalConfig.sleepTo) 37 | logger.info(`Waiting ${sleepTime} sec until next wallet...`) 38 | await sleep(sleepTime * 1000) 39 | } 40 | } 41 | } 42 | 43 | 44 | async function startMenu() { 45 | let mode = await entryPoint() 46 | switch (mode) { 47 | case "merkly": 48 | await merklyModule() 49 | break 50 | case "deploy": 51 | await deployModule() 52 | break 53 | } 54 | } 55 | 56 | await startMenu() -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "ESNext", 5 | "moduleResolution": "node", 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "noFallthroughCasesInSwitch": true, 9 | "isolatedModules": false, 10 | "strict": true, 11 | "noImplicitAny": true, 12 | "useUnknownInCatchVariables": false, 13 | "inlineSourceMap": true, 14 | "outDir": "dist" 15 | }, 16 | "ts-node": { 17 | "esm": true, 18 | }, 19 | "lib": ["esnext"], 20 | "exclude": ["node_modules"], 21 | } -------------------------------------------------------------------------------- /utils/approve.ts: -------------------------------------------------------------------------------- 1 | import { Hex } from "viem" 2 | import { erc20Abi } from "../data/abi/erc20" 3 | 4 | async function checkAllowance(client: any, tokenAddress: Hex, contractAddress: Hex, walletAddress: Hex) { 5 | const allowance = await client.readContract({ 6 | address: tokenAddress, 7 | abi: erc20Abi, 8 | functionName: 'allowance', 9 | args: [ 10 | walletAddress, 11 | contractAddress 12 | ] 13 | }) 14 | 15 | return allowance 16 | } 17 | 18 | export async function approve(walletClient: any, client: any, tokenAddress: Hex, contractAddress: Hex, amount: bigint, logger: any) { 19 | const allowance = await checkAllowance(client, tokenAddress, contractAddress, walletClient.account.address) 20 | 21 | if (allowance < amount) { 22 | const txHash = await walletClient.writeContract({ 23 | address: tokenAddress, 24 | abi: erc20Abi, 25 | functionName: 'approve', 26 | args: [ 27 | contractAddress, 28 | amount 29 | ] 30 | }) 31 | 32 | logger.info(`${walletClient.account.address} | Success approve: https://basescan.org/tx/${txHash}`) 33 | } else { 34 | logger.info(`${walletClient.account.address} | Already approved`) 35 | } 36 | } -------------------------------------------------------------------------------- /utils/arbClient.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Chain, 3 | createPublicClient, 4 | createWalletClient, defineChain, 5 | Hex, 6 | http, 7 | HttpTransport, 8 | PrivateKeyAccount, PublicClient, 9 | WalletClient 10 | } from "viem" 11 | import {privateKeyToAccount} from "viem/accounts" 12 | import {arbitrum} from "viem/chains" 13 | 14 | function getPublicArbClient(): PublicClient { 15 | return createPublicClient({ chain: arbitrum, transport: http() }) 16 | } 17 | 18 | function getArbWalletClient(privateKey: Hex): WalletClient { 19 | return createWalletClient({ chain: arbitrum, account: privateKeyToAccount(privateKey), transport: http() }) 20 | } 21 | 22 | export { getPublicArbClient, getArbWalletClient } -------------------------------------------------------------------------------- /utils/avaxClient.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Chain, 3 | createPublicClient, 4 | createWalletClient, defineChain, 5 | Hex, 6 | http, 7 | HttpTransport, 8 | PrivateKeyAccount, PublicClient, 9 | WalletClient 10 | } from "viem" 11 | import {privateKeyToAccount} from "viem/accounts" 12 | import {avalanche} from "viem/chains" 13 | 14 | function getPublicAvaxClient(): PublicClient { 15 | return createPublicClient({ chain: avalanche, transport: http() }) 16 | } 17 | 18 | function getAvaxWalletClient(privateKey: Hex): WalletClient { 19 | return createWalletClient({ chain: avalanche, account: privateKeyToAccount(privateKey), transport: http() }) 20 | } 21 | 22 | export { getPublicAvaxClient, getAvaxWalletClient } -------------------------------------------------------------------------------- /utils/baseClient.ts: -------------------------------------------------------------------------------- 1 | import { publicL1OpStackActions, publicL2OpStackActions, walletL1OpStackActions } from "op-viem" 2 | import { 3 | Chain, 4 | createPublicClient, 5 | createWalletClient, defineChain, 6 | Hex, 7 | http, 8 | HttpTransport, 9 | PrivateKeyAccount, PublicClient, 10 | WalletClient 11 | } from "viem" 12 | import {privateKeyToAccount} from "viem/accounts" 13 | import { generalConfig } from "../config" 14 | 15 | export const base = defineChain({ 16 | id: 8453, 17 | name: 'Base', 18 | network: 'base', 19 | nativeCurrency: { 20 | decimals: 18, 21 | name: 'Ether', 22 | symbol: 'ETH', 23 | }, 24 | rpcUrls: { 25 | default: { 26 | http: ['https://rpc.ankr.com/base'] 27 | }, 28 | public: { 29 | http: ['https://rpc.ankr.com/base'] 30 | }, 31 | }, 32 | blockExplorers: { 33 | default: { name: 'Explorer', url: 'https://basescan.org/' }, 34 | }, 35 | contracts: { 36 | multicall3: { 37 | address: '0xca11bde05977b3631167028862be2a173976ca11', 38 | blockCreated: 5022, 39 | }, 40 | }, 41 | }) 42 | 43 | function getPublicBaseClient(): PublicClient { 44 | return createPublicClient({ chain: base, transport: http() }).extend(publicL1OpStackActions) 45 | } 46 | 47 | function getBaseWalletClient(privateKey:Hex): WalletClient { 48 | return createWalletClient({ chain: base, account: privateKeyToAccount(privateKey), transport: http() }).extend(walletL1OpStackActions) 49 | } 50 | 51 | export { getPublicBaseClient, getBaseWalletClient } -------------------------------------------------------------------------------- /utils/common.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { formatEther } from "viem" 3 | 4 | export function random(min: number, max: number): number { 5 | min = Math.ceil(min) 6 | max = Math.floor(max) 7 | return Math.floor(Math.random() * (max - min + 1) + min) 8 | } 9 | 10 | export function randomFloat(min: number, max: number): number { 11 | return Math.random() * (max - min) + min; 12 | } 13 | 14 | export const sleep = async (millis: number) => new Promise(resolve => setTimeout(resolve, millis)) 15 | 16 | export function shuffle(array: Array) { 17 | let currentIndex = array.length, randomIndex 18 | while (currentIndex > 0) { 19 | randomIndex = Math.floor(Math.random() * currentIndex); 20 | currentIndex--; 21 | [array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]] 22 | } 23 | 24 | return array 25 | } 26 | 27 | export function getUsdValue(value: bigint, usdPrice: number) { 28 | return parseFloat(formatEther(value)) * usdPrice 29 | } 30 | 31 | export async function getSymbolPrice(symbol: string = 'ETH') { 32 | return await axios.get(`https://min-api.cryptocompare.com/data/price?fsym=${symbol}&tsyms=USD`).then(response => { 33 | return response.data.USD 34 | }) 35 | } -------------------------------------------------------------------------------- /utils/ethClient.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Chain, 3 | createPublicClient, 4 | createWalletClient, defineChain, 5 | Hex, 6 | http, 7 | HttpTransport, 8 | PrivateKeyAccount, PublicClient, 9 | WalletClient 10 | } from "viem" 11 | import {privateKeyToAccount} from "viem/accounts" 12 | import { generalConfig } from "../config" 13 | 14 | const eth = defineChain({ 15 | id: 1, 16 | network: 'homestead', 17 | name: 'Ethereum', 18 | nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, 19 | rpcUrls: { 20 | default: { 21 | http: [generalConfig.ethrpc], 22 | }, 23 | public: { 24 | http: [generalConfig.ethrpc], 25 | }, 26 | }, 27 | blockExplorers: { 28 | etherscan: { 29 | name: 'Etherscan', 30 | url: 'https://etherscan.io', 31 | }, 32 | default: { 33 | name: 'Etherscan', 34 | url: 'https://etherscan.io', 35 | }, 36 | }, 37 | contracts: { 38 | ensRegistry: { 39 | address: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', 40 | }, 41 | ensUniversalResolver: { 42 | address: '0xc0497E381f536Be9ce14B0dD3817cBcAe57d2F62', 43 | blockCreated: 16966585, 44 | }, 45 | multicall3: { 46 | address: '0xca11bde05977b3631167028862be2a173976ca11', 47 | blockCreated: 14353601, 48 | }, 49 | }, 50 | }) 51 | 52 | function getPublicEthClient(): PublicClient { 53 | return createPublicClient({ chain: eth, transport: http() }) 54 | } 55 | 56 | function getEthWalletClient(privateKey: Hex): WalletClient { 57 | return createWalletClient({ chain: eth, account: privateKeyToAccount(privateKey), transport: http() }) 58 | } 59 | 60 | export { getPublicEthClient, getEthWalletClient } -------------------------------------------------------------------------------- /utils/getCurrentGas.ts: -------------------------------------------------------------------------------- 1 | import { formatGwei } from "viem" 2 | import { getPublicEthClient } from "./ethClient" 3 | import { bridgeConfig, generalConfig } from "../config" 4 | import { makeLogger } from "./logger" 5 | import { sleep } from "./common" 6 | 7 | export async function getCurrentGas() { 8 | const client = getPublicEthClient() 9 | const gas = await client.getGasPrice() 10 | 11 | return parseFloat(formatGwei(gas)) 12 | } 13 | 14 | export async function waitGas(type: string = 'regular') { 15 | let maxGas = generalConfig.maxGas 16 | if (type === 'bridge') { 17 | maxGas = bridgeConfig.maxGas 18 | } 19 | 20 | const logger = makeLogger("Gas checker") 21 | let isGoodGas = false 22 | while (!isGoodGas) { 23 | try { 24 | const currentGas = await getCurrentGas() 25 | if (currentGas > maxGas) { 26 | logger.info(`Wait for gas ${maxGas}. Current gas: ${currentGas.toFixed(1)}`) 27 | await sleep(10 * 1000) 28 | } else { 29 | return true 30 | } 31 | } catch (e) { 32 | logger.error(`Error ${e.toString()}`) 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /utils/logger.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from "tslog" 2 | import { appendFileSync } from "fs" 3 | 4 | export function makeLogger(name: string) { 5 | const logger = new Logger({ 6 | hideLogPositionForProduction: true, 7 | name: name, 8 | prettyLogTemplate: '{{dd}}.{{mm}} {{hh}}:{{MM}}:{{ss}}\t{{logLevelName}}\t{{name}}\t' 9 | }) 10 | 11 | logger.attachTransport((logObj) => { 12 | appendFileSync("./log.txt", JSON.stringify(logObj) + "\n") 13 | }) 14 | 15 | return logger 16 | } -------------------------------------------------------------------------------- /utils/menu.ts: -------------------------------------------------------------------------------- 1 | import inquirer from "inquirer" 2 | 3 | export const entryPoint = async () => { 4 | const questions = [ 5 | { 6 | name: "choice", 7 | type: "list", 8 | message: "Действие:", 9 | choices: [ 10 | { 11 | name: "Merkly", 12 | value: "merkly", 13 | }, 14 | { 15 | name: "Deploy NFT mint", 16 | value: "deploy", 17 | } 18 | ], 19 | loop: false, 20 | }, 21 | ] 22 | 23 | const answers = await inquirer.prompt(questions) 24 | return answers.choice 25 | } -------------------------------------------------------------------------------- /utils/mintfun.ts: -------------------------------------------------------------------------------- 1 | import { Hex } from "viem" 2 | import { random } from "./common" 3 | import axios from "axios" 4 | 5 | export function getRandomContract(contracts: string[]) { 6 | return contracts[random(0, contracts.length-1)] as Hex 7 | } 8 | 9 | export async function submitTx(address: string, hash: string, chainId = 8453) { 10 | axios.post("https://mint.fun/api/mintfun/submit-tx", { 11 | address: address, 12 | chainId: chainId, 13 | hash: hash, 14 | isAllowlist: false, 15 | source: 'projectPage' 16 | }) 17 | .then(function (response) {}) 18 | .catch(function (error) { 19 | console.log(error) 20 | }) 21 | } -------------------------------------------------------------------------------- /utils/optimismClient.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Chain, 3 | createPublicClient, 4 | createWalletClient, defineChain, 5 | Hex, 6 | http, 7 | HttpTransport, 8 | PrivateKeyAccount, PublicClient, 9 | WalletClient 10 | } from "viem" 11 | import { privateKeyToAccount } from "viem/accounts" 12 | import { publicL2OpStackActions } from 'op-viem' 13 | 14 | export const optimism = defineChain({ 15 | id: 10, 16 | name: 'Optimism', 17 | network: 'optimism', 18 | nativeCurrency: { 19 | decimals: 18, 20 | name: 'Ether', 21 | symbol: 'ETH', 22 | }, 23 | rpcUrls: { 24 | default: { 25 | http: ['https://optimism.llamarpc.com'], 26 | webSocket: ['wss://https://optimism.llamarpc.com'], 27 | }, 28 | public: { 29 | http: ['https://optimism.llamarpc.com'], 30 | webSocket: ['wss://https://optimism.llamarpc.com'], 31 | }, 32 | }, 33 | blockExplorers: { 34 | default: { name: 'Explorer', url: 'https://optimistic.etherscan.io/' }, 35 | } 36 | }) 37 | 38 | function getPublicOpClient(): PublicClient { 39 | return createPublicClient({ chain: optimism, transport: http() }).extend(publicL2OpStackActions) 40 | } 41 | 42 | function getOpWalletClient(privateKey: Hex): WalletClient { 43 | return createWalletClient({ chain: optimism, account: privateKeyToAccount(privateKey), transport: http() }) 44 | } 45 | 46 | export { getPublicOpClient, getOpWalletClient } -------------------------------------------------------------------------------- /utils/polygonClient.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Chain, 3 | createPublicClient, 4 | createWalletClient, defineChain, 5 | Hex, 6 | http, 7 | HttpTransport, 8 | PrivateKeyAccount, PublicClient, 9 | WalletClient 10 | } from "viem" 11 | import {privateKeyToAccount} from "viem/accounts" 12 | import {polygon} from "viem/chains" 13 | 14 | function getPublicPolygonClient(): PublicClient { 15 | return createPublicClient({ chain: polygon, transport: http() }) 16 | } 17 | 18 | function getPolygonWalletClient(privateKey: Hex): WalletClient { 19 | return createWalletClient({ chain: polygon, account: privateKeyToAccount(privateKey), transport: http() }) 20 | } 21 | 22 | export { getPublicPolygonClient, getPolygonWalletClient } -------------------------------------------------------------------------------- /utils/refill.ts: -------------------------------------------------------------------------------- 1 | import { Hex } from "viem" 2 | import { random, randomFloat } from "./common" 3 | import { binanceConfig, generalConfig } from "../config" 4 | import { Binance } from "../modules/binance" 5 | import { privateKeyConvert } from "./wallet" 6 | import { makeLogger } from "./logger" 7 | 8 | export async function refill(privateKey: Hex) { 9 | const logger = makeLogger("Binance") 10 | const sum = randomFloat(binanceConfig.withdrawFrom, binanceConfig.withdrawTo) 11 | const binance = new Binance(privateKeyConvert(privateKey)) 12 | await binance.withdraw(sum.toString()) 13 | 14 | const sleepTime = random(generalConfig.sleepFrom, generalConfig.sleepTo) 15 | logger.info(`Waiting ${sleepTime} sec after refill...`) 16 | } -------------------------------------------------------------------------------- /utils/scrollClient.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Chain, 3 | createPublicClient, 4 | createWalletClient, defineChain, 5 | Hex, 6 | http, 7 | HttpTransport, 8 | PrivateKeyAccount, PublicClient, 9 | WalletClient 10 | } from "viem" 11 | import { privateKeyToAccount } from "viem/accounts" 12 | import { generalConfig } from "../config" 13 | 14 | export const scroll = defineChain({ 15 | id: 534352, 16 | name: 'Scroll', 17 | network: 'scroll', 18 | nativeCurrency: { 19 | decimals: 18, 20 | name: 'Ether', 21 | symbol: 'ETH', 22 | }, 23 | rpcUrls: { 24 | default: { 25 | http: [generalConfig.scrollrpc], 26 | }, 27 | public: { 28 | http: [generalConfig.scrollrpc], 29 | }, 30 | }, 31 | blockExplorers: { 32 | default: { name: 'Explorer', url: 'https://blockscout.scroll.io/' }, 33 | } 34 | }) 35 | 36 | function getPublicScrollClient(): PublicClient { 37 | return createPublicClient({ chain: scroll, transport: http() }) 38 | } 39 | 40 | function getScrollWalletClient(privateKey: Hex): WalletClient { 41 | return createWalletClient({ chain: scroll, account: privateKeyToAccount(privateKey), transport: http() }) 42 | } 43 | 44 | export { getPublicScrollClient, getScrollWalletClient } -------------------------------------------------------------------------------- /utils/tokenBalance.ts: -------------------------------------------------------------------------------- 1 | import { Hex } from "viem" 2 | import { erc20Abi } from "../data/abi/erc20" 3 | 4 | export async function getTokenBalance(client: any, tokenAddress: Hex, address: Hex): Promise { 5 | 6 | const balance = await client.readContract({ 7 | address: tokenAddress, 8 | abi: erc20Abi, 9 | functionName: 'balanceOf', 10 | args: [ 11 | address 12 | ] 13 | }) 14 | 15 | return balance 16 | } -------------------------------------------------------------------------------- /utils/wallet.ts: -------------------------------------------------------------------------------- 1 | import { Hex } from "viem" 2 | import fs from "fs" 3 | 4 | export function privateKeyConvert(privateKey: string): Hex { 5 | if (privateKey.startsWith('0x')) { 6 | return privateKey as Hex 7 | } else { 8 | return `0x${privateKey}` 9 | } 10 | } 11 | 12 | export function readWallets(filePath: string) { 13 | try { 14 | const fileContent = fs.readFileSync(filePath, 'utf-8') 15 | const lines = fileContent.split('\n').map(line => line.trim()).filter(line => line !== '') 16 | return lines 17 | } catch (error) { 18 | console.error('Error reading the file:', error.message) 19 | return [] 20 | } 21 | } --------------------------------------------------------------------------------