diff --git a/package-lock.json b/package-lock.json index b0240f730..66fe492cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,10 @@ "@angular/platform-browser-dynamic": "~14.0.4", "@angular/router": "~14.0.4", "@apollo/client": "^3.0.0", + "@axelar-network/axelarjs-sdk": "^0.12.8", "@cosmos-client/core": "0.47.4-rc1", + "@cosmos-client/cosmwasm": "^0.40.3", + "@cosmos-client/ibc": "^7.0.3", "@metamask/detect-provider": "^1.2.0", "angular-google-charts": "^2.2.3", "apollo-angular": "^4.2.0", @@ -31,7 +34,7 @@ "date-fns": "^2.30.0", "decimal.js": "^10.4.3", "dexie": "^3.0.3", - "ethers": "^5.6.8", + "ethers": "^5.7.2", "graphql": "^16", "https-browserify": "^1.0.0", "ngx-dropzone": "^3.1.0", @@ -2279,6 +2282,89 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@axelar-network/axelar-cgp-solidity": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-solidity/-/axelar-cgp-solidity-4.5.0.tgz", + "integrity": "sha512-4F4rmHei0cmzeUR7/mW4Bap5rc/KlPV2crD9HA7HTRfl15mVcN6/3z8p+pAm9We6bOrQplNW9KBZ3HJFP3C1Gw==", + "engines": { + "node": "^16.0.0 || ^18.0.0" + } + }, + "node_modules/@axelar-network/axelarjs-sdk": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/@axelar-network/axelarjs-sdk/-/axelarjs-sdk-0.12.8.tgz", + "integrity": "sha512-4pb82LMiDOifE69q3OtUbOzcotL06VOU7Vhyk7vS7py+uO4Blu1kWd/pkzv+TH3IXgpIYl961f2ip4njK04qHQ==", + "dependencies": { + "@axelar-network/axelar-cgp-solidity": "^4.5.0", + "@axelar-network/axelarjs-types": "^0.27.0", + "@cosmjs/json-rpc": "^0.30.1", + "@cosmjs/stargate": "^0.28.4", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/networks": "^5.7.1", + "@ethersproject/providers": "^5.7.2", + "@types/uuid": "^8.3.1", + "bech32": "^2.0.0", + "clone-deep": "^4.0.1", + "cross-fetch": "^3.1.5", + "ethers": "^5.7.2", + "socket.io-client": "^4.6.1", + "standard-http-error": "^2.0.1", + "string-similarity-js": "^2.1.4", + "uuid": "^8.3.2", + "ws": "^8.13.0" + } + }, + "node_modules/@axelar-network/axelarjs-sdk/node_modules/@cosmjs/json-rpc": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz", + "integrity": "sha512-pitfC/2YN9t+kXZCbNuyrZ6M8abnCC2n62m+JtU9vQUfaEtVsgy+1Fk4TRQ175+pIWSdBMFi2wT8FWVEE4RhxQ==", + "dependencies": { + "@cosmjs/stream": "^0.30.1", + "xstream": "^11.14.0" + } + }, + "node_modules/@axelar-network/axelarjs-sdk/node_modules/@cosmjs/stream": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.30.1.tgz", + "integrity": "sha512-Fg0pWz1zXQdoxQZpdHRMGvUH5RqS6tPv+j9Eh7Q953UjMlrwZVo0YFLC8OTf/HKVf10E4i0u6aM8D69Q6cNkgQ==", + "dependencies": { + "xstream": "^11.14.0" + } + }, + "node_modules/@axelar-network/axelarjs-sdk/node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + }, + "node_modules/@axelar-network/axelarjs-sdk/node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@axelar-network/axelarjs-types": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelarjs-types/-/axelarjs-types-0.27.0.tgz", + "integrity": "sha512-+ZsNgZc815FEBQnP8wxrtYjEqPMeibGFzKypkj1h0nwsvC051ABB/4xePX41E7G58e5RANhDTOxlvCSAx4MpyA==", + "dependencies": { + "long": "^4.0.0", + "protobufjs": "~6.11.2" + } + }, "node_modules/@babel/code-frame": { "version": "7.18.6", "dev": true, @@ -3913,7 +3999,6 @@ }, "node_modules/@babel/runtime": { "version": "7.17.9", - "dev": true, "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.4" @@ -4435,6 +4520,454 @@ "node": ">=8" } }, + "node_modules/@confio/ics23": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@confio/ics23/-/ics23-0.6.8.tgz", + "integrity": "sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w==", + "dependencies": { + "@noble/hashes": "^1.0.0", + "protobufjs": "^6.8.8" + } + }, + "node_modules/@cosmjs/amino": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.28.13.tgz", + "integrity": "sha512-IHnH2zGwaY69qT4mVAavr/pfzx6YE+ud1NHJbvVePlbGiz68CXTi5LHR+K0lrKB5mQ7E+ZErWz2mw5U/x+V1wQ==", + "dependencies": { + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13" + } + }, + "node_modules/@cosmjs/amino/node_modules/@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "dependencies": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "node_modules/@cosmjs/amino/node_modules/@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "dependencies": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "node_modules/@cosmjs/amino/node_modules/@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/@cosmjs/amino/node_modules/@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "node_modules/@cosmjs/amino/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@cosmjs/cli": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/cli/-/cli-0.28.13.tgz", + "integrity": "sha512-6mbtKmaamKYgaXblSyLCsyEUJTa0GpZLt+ODfwdEUpEdx/Ebwqt09yuCmk0kOQ/TqmruX8aN/ty1py3Opxa/FQ==", + "dependencies": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/cosmwasm-stargate": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/faucet-client": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/proto-signing": "0.28.13", + "@cosmjs/stargate": "0.28.13", + "@cosmjs/tendermint-rpc": "0.28.13", + "@cosmjs/utils": "0.28.13", + "axios": "^0.21.2", + "babylon": "^6.18.0", + "chalk": "^4", + "cosmjs-types": "^0.4.0", + "diff": "^4", + "recast": "^0.20", + "ts-node": "^8", + "typescript": "~4.4", + "yargs": "^15.3.1" + }, + "bin": { + "cosmjs-cli": "bin/cosmjs-cli" + } + }, + "node_modules/@cosmjs/cli/node_modules/@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "dependencies": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "node_modules/@cosmjs/cli/node_modules/@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "dependencies": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "node_modules/@cosmjs/cli/node_modules/@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/@cosmjs/cli/node_modules/@cosmjs/proto-signing": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.28.13.tgz", + "integrity": "sha512-nSl/2ZLsUJYz3Ad0RY3ihZUgRHIow2OnYqKsESMu+3RA/jTi9bDYhiBu8mNMHI0xrEJry918B2CyI56pOUHdPQ==", + "dependencies": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0" + } + }, + "node_modules/@cosmjs/cli/node_modules/@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "node_modules/@cosmjs/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@cosmjs/cli/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/@cosmjs/cli/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@cosmjs/cli/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@cosmjs/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@cosmjs/cli/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@cosmjs/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@cosmjs/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@cosmjs/cli/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@cosmjs/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@cosmjs/cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@cosmjs/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cosmjs/cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@cosmjs/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@cosmjs/cli/node_modules/ts-node": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "dependencies": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/@cosmjs/cli/node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@cosmjs/cli/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@cosmjs/cli/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/@cosmjs/cli/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@cosmjs/cli/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@cosmjs/cosmwasm-stargate": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.28.13.tgz", + "integrity": "sha512-dVZNOiRd8btQreRUabncGhVXGCS2wToXqxi9l3KEHwCJQ2RWTshuqV+EZAdCaYHE5W6823s2Ol2W/ukA9AXJPw==", + "dependencies": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/proto-signing": "0.28.13", + "@cosmjs/stargate": "0.28.13", + "@cosmjs/tendermint-rpc": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0", + "pako": "^2.0.2" + } + }, + "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "dependencies": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "dependencies": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/proto-signing": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.28.13.tgz", + "integrity": "sha512-nSl/2ZLsUJYz3Ad0RY3ihZUgRHIow2OnYqKsESMu+3RA/jTi9bDYhiBu8mNMHI0xrEJry918B2CyI56pOUHdPQ==", + "dependencies": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0" + } + }, + "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "node_modules/@cosmjs/cosmwasm-stargate/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@cosmjs/cosmwasm-stargate/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, "node_modules/@cosmjs/crypto": { "version": "0.24.1", "dev": true, @@ -4464,6 +4997,31 @@ "readonly-date": "^1.0.0" } }, + "node_modules/@cosmjs/faucet-client": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/faucet-client/-/faucet-client-0.28.13.tgz", + "integrity": "sha512-M6f0Wbw3hvdfYbVpfGDXwjbRAcCgMRm5slWK6cU8BpotckLvBb0xoBvrhklG/ooz6ZTZfAc2e/EJ8GVhksdvpA==", + "dependencies": { + "axios": "^0.21.2" + } + }, + "node_modules/@cosmjs/faucet-client/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@cosmjs/json-rpc": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.28.13.tgz", + "integrity": "sha512-fInSvg7x9P6p+GWqet+TMhrMTM3OWWdLJOGS5w2ryubMjgpR1rLiAx77MdTNkArW+/6sUwku0sN4veM4ENQu6A==", + "dependencies": { + "@cosmjs/stream": "0.28.13", + "xstream": "^11.14.0" + } + }, "node_modules/@cosmjs/launchpad": { "version": "0.24.1", "dev": true, @@ -4485,6 +5043,62 @@ "follow-redirects": "^1.14.0" } }, + "node_modules/@cosmjs/ledger-amino": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/ledger-amino/-/ledger-amino-0.28.13.tgz", + "integrity": "sha512-KSwYjIFu/KXarvxxEyq3lpcJl5VvV0gAbY+tebeOvuCGHy9Px7CDOLOEHsR3ykJjYWh0hGrYwYmVk9zVHd474A==", + "dependencies": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "ledger-cosmos-js": "^2.1.8", + "semver": "^7.3.2" + } + }, + "node_modules/@cosmjs/ledger-amino/node_modules/@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "dependencies": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "node_modules/@cosmjs/ledger-amino/node_modules/@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "dependencies": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "node_modules/@cosmjs/ledger-amino/node_modules/@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/@cosmjs/ledger-amino/node_modules/@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "node_modules/@cosmjs/ledger-amino/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "node_modules/@cosmjs/math": { "version": "0.24.1", "dev": true, @@ -4533,6 +5147,167 @@ "pbts": "bin/pbts" } }, + "node_modules/@cosmjs/socket": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.28.13.tgz", + "integrity": "sha512-lavwGxQ5VdeltyhpFtwCRVfxeWjH5D5mmN7jgx9nuCf3XSFbTcOYxrk2pQ4usenu1Q1KZdL4Yl5RCNrJuHD9Ug==", + "dependencies": { + "@cosmjs/stream": "0.28.13", + "isomorphic-ws": "^4.0.1", + "ws": "^7", + "xstream": "^11.14.0" + } + }, + "node_modules/@cosmjs/stargate": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.28.13.tgz", + "integrity": "sha512-dVBMazDz8/eActHsRcZjDHHptOBMqvibj5CFgEtZBp22gP6ASzoAUXTlkSVk5FBf4sfuUHoff6st134/+PGMAg==", + "dependencies": { + "@confio/ics23": "^0.6.8", + "@cosmjs/amino": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/proto-signing": "0.28.13", + "@cosmjs/stream": "0.28.13", + "@cosmjs/tendermint-rpc": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0", + "protobufjs": "~6.11.3", + "xstream": "^11.14.0" + } + }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "dependencies": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "dependencies": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/proto-signing": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.28.13.tgz", + "integrity": "sha512-nSl/2ZLsUJYz3Ad0RY3ihZUgRHIow2OnYqKsESMu+3RA/jTi9bDYhiBu8mNMHI0xrEJry918B2CyI56pOUHdPQ==", + "dependencies": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0" + } + }, + "node_modules/@cosmjs/stargate/node_modules/@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "node_modules/@cosmjs/stargate/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@cosmjs/stream": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.28.13.tgz", + "integrity": "sha512-AnjtfwT8NwPPkd3lhZhjOlOzT0Kn9bgEu2IPOZjQ1nmG2bplsr6TJmnwn0dJxHT7UGtex17h6whKB5N4wU37Wg==", + "dependencies": { + "xstream": "^11.14.0" + } + }, + "node_modules/@cosmjs/tendermint-rpc": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.28.13.tgz", + "integrity": "sha512-GB+ZmfuJIGQm0hsRtLYjeR3lOxF7Z6XyCBR0cX5AAYOZzSEBJjevPgUHD6tLn8zIhvzxaW3/VKnMB+WmlxdH4w==", + "dependencies": { + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/json-rpc": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/socket": "0.28.13", + "@cosmjs/stream": "0.28.13", + "@cosmjs/utils": "0.28.13", + "axios": "^0.21.2", + "readonly-date": "^1.0.0", + "xstream": "^11.14.0" + } + }, + "node_modules/@cosmjs/tendermint-rpc/node_modules/@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "dependencies": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "node_modules/@cosmjs/tendermint-rpc/node_modules/@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "dependencies": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "node_modules/@cosmjs/tendermint-rpc/node_modules/@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/@cosmjs/tendermint-rpc/node_modules/@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "node_modules/@cosmjs/tendermint-rpc/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@cosmjs/tendermint-rpc/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "node_modules/@cosmjs/utils": { "version": "0.24.1", "dev": true, @@ -4561,6 +5336,76 @@ "tslib": "^2.1.0" } }, + "node_modules/@cosmos-client/cosmwasm": { + "version": "0.40.3", + "resolved": "https://registry.npmjs.org/@cosmos-client/cosmwasm/-/cosmwasm-0.40.3.tgz", + "integrity": "sha512-iInWF5wT0zcXZ5AC2DtnY7abwxVpug3CQPDK6+sW32ZlesBZkRVdtZ3ckKXhzaOy1INbzKSY/oah9KZPIHpQvg==", + "dependencies": { + "axios": "^0.23.0", + "bech32": "^1.1.4", + "bip32": "^2.0.6", + "bip39": "^3.0.4", + "cosmwasm": "^1.1.1", + "process": "^0.11.10", + "protobufjs": "^6.11.2", + "rxjs": "^7.4.0", + "tiny-secp256k1": "^2.0.1", + "tweetnacl": "^1.0.3" + } + }, + "node_modules/@cosmos-client/cosmwasm/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@cosmos-client/cosmwasm/node_modules/tiny-secp256k1": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz", + "integrity": "sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==", + "dependencies": { + "uint8array-tools": "0.0.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@cosmos-client/ibc": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@cosmos-client/ibc/-/ibc-7.0.3.tgz", + "integrity": "sha512-Ms3bdWIprEZGelXPUUx6YzYXanJJs9lXVd3eY/QRIQlFKTEu8Q9/DW7PWwUpenBI3GDWoVrZMfqDMc7BghkpPA==", + "dependencies": { + "axios": "^0.23.0", + "bech32": "^1.1.4", + "bip32": "^2.0.6", + "bip39": "^3.0.4", + "protobufjs": "^6.11.2", + "rxjs": "^7.4.0", + "tiny-secp256k1": "^2.0.1", + "tweetnacl": "^1.0.3" + } + }, + "node_modules/@cosmos-client/ibc/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@cosmos-client/ibc/node_modules/tiny-secp256k1": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz", + "integrity": "sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==", + "dependencies": { + "uint8array-tools": "0.0.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@csstools/postcss-color-function": { "version": "1.1.1", "dev": true, @@ -6577,6 +7422,37 @@ "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" }, + "node_modules/@ledgerhq/devices": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", + "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", + "dependencies": { + "@ledgerhq/errors": "^5.50.0", + "@ledgerhq/logs": "^5.50.0", + "rxjs": "6", + "semver": "^7.3.5" + } + }, + "node_modules/@ledgerhq/errors": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", + "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" + }, + "node_modules/@ledgerhq/hw-transport": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", + "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", + "dependencies": { + "@ledgerhq/devices": "^5.51.1", + "@ledgerhq/errors": "^5.50.0", + "events": "^3.3.0" + } + }, + "node_modules/@ledgerhq/logs": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", + "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "dev": true, @@ -7496,6 +8372,11 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, "node_modules/@testing-library/cypress": { "version": "8.0.7", "dev": true, @@ -8033,6 +8914,11 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, "node_modules/@types/ws": { "version": "8.5.4", "dev": true, @@ -8785,7 +9671,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8954,6 +9839,17 @@ "node": ">=0.8" } }, + "node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "dev": true, @@ -9286,6 +10182,14 @@ "@babel/core": "^7.0.0" } }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "bin": { + "babylon": "bin/babylon.js" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "dev": true, @@ -9300,7 +10204,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "dev": true, "funding": [ { "type": "github", @@ -9672,7 +10575,6 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "dev": true, "license": "MIT" }, "node_modules/buffer-xor": { @@ -9775,7 +10677,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -10043,7 +10944,6 @@ }, "node_modules/clone-deep": { "version": "4.0.1", - "dev": true, "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", @@ -10463,6 +11363,92 @@ "node": ">=10" } }, + "node_modules/cosmjs-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.4.1.tgz", + "integrity": "sha512-I7E/cHkIgoJzMNQdFF0YVqPlaTqrqKHrskuSTIqlEyxfB5Lf3WKCajSXVK2yHOfOFfSux/RxEdpMzw/eO4DIog==", + "dependencies": { + "long": "^4.0.0", + "protobufjs": "~6.11.2" + } + }, + "node_modules/cosmwasm": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cosmwasm/-/cosmwasm-1.1.1.tgz", + "integrity": "sha512-tjpjwnRIQ6VEcTVB0Pq8+F+Xp6jdnC3BcXmcDHCJHIc5Gg4Mm++AA+6fTfR0yuiPbEAk6wYkokfLtv12I0sPNQ==", + "dependencies": { + "@cosmjs/amino": "^0.28.3", + "@cosmjs/cli": "^0.28.3", + "@cosmjs/cosmwasm-stargate": "^0.28.3", + "@cosmjs/crypto": "^0.28.3", + "@cosmjs/encoding": "^0.28.3", + "@cosmjs/faucet-client": "^0.28.3", + "@cosmjs/ledger-amino": "^0.28.3", + "@cosmjs/math": "^0.28.3", + "@cosmjs/proto-signing": "^0.28.3", + "@cosmjs/stargate": "^0.28.3", + "@cosmjs/utils": "^0.28.3" + }, + "bin": { + "cosmwasm": "src/cli/bin/cli" + } + }, + "node_modules/cosmwasm/node_modules/@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "dependencies": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "node_modules/cosmwasm/node_modules/@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "dependencies": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "node_modules/cosmwasm/node_modules/@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/cosmwasm/node_modules/@cosmjs/proto-signing": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.28.13.tgz", + "integrity": "sha512-nSl/2ZLsUJYz3Ad0RY3ihZUgRHIow2OnYqKsESMu+3RA/jTi9bDYhiBu8mNMHI0xrEJry918B2CyI56pOUHdPQ==", + "dependencies": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0" + } + }, + "node_modules/cosmwasm/node_modules/@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "node_modules/cosmwasm/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "node_modules/create-ecdh": { "version": "4.0.4", "license": "MIT", @@ -10581,6 +11567,14 @@ "node": ">=8" } }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "dev": true, @@ -11099,7 +12093,6 @@ }, "node_modules/debug": { "version": "4.3.4", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.1.2" @@ -11115,7 +12108,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11291,7 +12283,6 @@ }, "node_modules/diff": { "version": "4.0.2", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -11507,7 +12498,6 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, "license": "MIT" }, "node_modules/emojis-list": { @@ -11528,7 +12518,6 @@ }, "node_modules/encoding": { "version": "0.1.13", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -11537,7 +12526,6 @@ }, "node_modules/encoding/node_modules/iconv-lite": { "version": "0.6.3", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -11555,6 +12543,46 @@ "once": "^1.4.0" } }, + "node_modules/engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.12.0", "dev": true, @@ -12111,7 +13139,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -12190,6 +13217,8 @@ }, "node_modules/ethers": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "funding": [ { "type": "individual", @@ -12200,7 +13229,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -12251,7 +13279,6 @@ }, "node_modules/events": { "version": "3.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -13491,11 +14518,6 @@ "node": ">=4" } }, - "node_modules/firebase-tools/node_modules/ast-types/node_modules/tslib": { - "version": "2.3.1", - "dev": true, - "license": "0BSD" - }, "node_modules/firebase-tools/node_modules/async": { "version": "2.6.4", "dev": true, @@ -17161,25 +18183,6 @@ "lodash.toarray": "^4.4.0" } }, - "node_modules/firebase-tools/node_modules/node-fetch": { - "version": "2.6.7", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/firebase-tools/node_modules/node-gyp": { "version": "8.4.1", "dev": true, @@ -18877,11 +19880,6 @@ "lodash": "^4.17.10" } }, - "node_modules/firebase-tools/node_modules/tr46": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, "node_modules/firebase-tools/node_modules/traverse": { "version": "0.3.9", "dev": true, @@ -19353,20 +20351,6 @@ "defaults": "^1.0.3" } }, - "node_modules/firebase-tools/node_modules/webidl-conversions": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/firebase-tools/node_modules/whatwg-url": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/firebase-tools/node_modules/which": { "version": "1.3.1", "dev": true, @@ -19775,7 +20759,6 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -19911,6 +20894,20 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "dev": true, @@ -20708,7 +21705,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20827,7 +21823,6 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", - "dev": true, "license": "MIT", "dependencies": { "isobject": "^3.0.1" @@ -20924,12 +21919,19 @@ }, "node_modules/isobject": { "version": "3.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "peerDependencies": { + "ws": "*" + } + }, "node_modules/isstream": { "version": "0.1.2", "dev": true, @@ -23947,7 +24949,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -23977,6 +24978,17 @@ "node": "> 0.8" } }, + "node_modules/ledger-cosmos-js": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/ledger-cosmos-js/-/ledger-cosmos-js-2.1.8.tgz", + "integrity": "sha512-Gl7SWMq+3R9OTkF1hLlg5+1geGOmcHX9OdS+INDsGNxSiKRWlsWCvQipGoDnRIQ6CPo2i/Ze58Dw0Mt/l3UYyA==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@ledgerhq/hw-transport": "^5.25.0", + "bech32": "^1.1.4", + "ripemd160": "^2.0.2" + } + }, "node_modules/less": { "version": "4.1.2", "dev": true, @@ -24083,12 +25095,10 @@ }, "node_modules/libsodium": { "version": "0.7.11", - "dev": true, "license": "ISC" }, "node_modules/libsodium-wrappers": { "version": "0.7.11", - "dev": true, "license": "ISC", "dependencies": { "libsodium": "^0.7.11" @@ -24439,7 +25449,6 @@ }, "node_modules/make-error": { "version": "1.3.6", - "dev": true, "license": "ISC" }, "node_modules/make-fetch-happen": { @@ -25037,7 +26046,6 @@ }, "node_modules/ms": { "version": "2.1.2", - "dev": true, "license": "MIT" }, "node_modules/multicast-dns": { @@ -25374,6 +26382,44 @@ "dev": true, "license": "MIT" }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-forge": { "version": "1.3.1", "dev": true, @@ -26092,7 +27138,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -26243,7 +27288,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -27716,9 +28760,30 @@ }, "node_modules/readonly-date": { "version": "1.0.0", - "dev": true, "license": "Apache-2.0" }, + "node_modules/recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "dependencies": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/redent": { "version": "3.0.0", "dev": true, @@ -27754,7 +28819,6 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.9", - "dev": true, "license": "MIT" }, "node_modules/regenerator-transform": { @@ -27814,7 +28878,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -27828,6 +28891,11 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/requires-port": { "version": "1.0.0", "dev": true, @@ -28339,7 +29407,6 @@ }, "node_modules/semver": { "version": "7.3.7", - "dev": true, "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -28353,7 +29420,6 @@ }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -28364,7 +29430,6 @@ }, "node_modules/semver/node_modules/yallist": { "version": "4.0.0", - "dev": true, "license": "ISC" }, "node_modules/send": { @@ -28502,7 +29567,6 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "dev": true, "license": "ISC" }, "node_modules/setprototypeof": { @@ -28554,7 +29618,6 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", - "dev": true, "license": "MIT", "dependencies": { "kind-of": "^6.0.2" @@ -28665,6 +29728,32 @@ "npm": ">= 3.0.0" } }, + "node_modules/socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/sockjs": { "version": "0.3.24", "dev": true, @@ -28759,7 +29848,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -28768,7 +29856,6 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -28907,6 +29994,19 @@ "node": ">=8" } }, + "node_modules/standard-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/standard-error/-/standard-error-1.1.0.tgz", + "integrity": "sha512-4v7qzU7oLJfMI5EltUSHCaaOd65J6S4BqKRWgzMi4EYaE5fvNabPxmAPGdxpGXqrcWjhDGI/H09CIdEuUOUeXg==" + }, + "node_modules/standard-http-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/standard-http-error/-/standard-http-error-2.0.1.tgz", + "integrity": "sha512-DX/xPIoyXQTuY6BMZK4Utyi4l3A4vFoafsfqrU6/dO4Oe/59c7PyqPd2IQj9m+ZieDg2K3RL9xOYJsabcD9IUA==", + "dependencies": { + "standard-error": ">= 1.1.0 < 2" + } + }, "node_modules/statuses": { "version": "2.0.1", "dev": true, @@ -28952,9 +30052,13 @@ "node": ">=10" } }, + "node_modules/string-similarity-js": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/string-similarity-js/-/string-similarity-js-2.1.4.tgz", + "integrity": "sha512-uApODZNjCHGYROzDSAdCmAHf60L/pMDHnP/yk6TAbvGg7JSPZlSto/ceCI7hZEqzc53/juU2aOJFkM2yUVTMTA==" + }, "node_modules/string-width": { "version": "4.2.3", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -28967,7 +30071,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -30034,6 +31137,14 @@ "node": ">=4.2.0" } }, + "node_modules/uint8array-tools": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.7.tgz", + "integrity": "sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "dev": true, @@ -30223,7 +31334,6 @@ }, "node_modules/uuid": { "version": "8.3.2", - "dev": true, "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -30775,6 +31885,11 @@ "node": ">= 8" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, "node_modules/which-typed-array": { "version": "1.1.9", "license": "MIT", @@ -30916,6 +32031,31 @@ "dev": true, "license": "MIT" }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xstream": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/xstream/-/xstream-11.14.0.tgz", + "integrity": "sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw==", + "dependencies": { + "globalthis": "^1.0.1", + "symbol-observable": "^2.0.3" + } + }, + "node_modules/xstream/node_modules/symbol-observable": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", + "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/xtend": { "version": "4.0.2", "license": "MIT", @@ -30996,7 +32136,6 @@ }, "node_modules/yn": { "version": "3.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -32437,6 +33576,74 @@ "version": "0.10.1", "dev": true }, + "@axelar-network/axelar-cgp-solidity": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-solidity/-/axelar-cgp-solidity-4.5.0.tgz", + "integrity": "sha512-4F4rmHei0cmzeUR7/mW4Bap5rc/KlPV2crD9HA7HTRfl15mVcN6/3z8p+pAm9We6bOrQplNW9KBZ3HJFP3C1Gw==" + }, + "@axelar-network/axelarjs-sdk": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/@axelar-network/axelarjs-sdk/-/axelarjs-sdk-0.12.8.tgz", + "integrity": "sha512-4pb82LMiDOifE69q3OtUbOzcotL06VOU7Vhyk7vS7py+uO4Blu1kWd/pkzv+TH3IXgpIYl961f2ip4njK04qHQ==", + "requires": { + "@axelar-network/axelar-cgp-solidity": "^4.5.0", + "@axelar-network/axelarjs-types": "^0.27.0", + "@cosmjs/json-rpc": "^0.30.1", + "@cosmjs/stargate": "^0.28.4", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/networks": "^5.7.1", + "@ethersproject/providers": "^5.7.2", + "@types/uuid": "^8.3.1", + "bech32": "^2.0.0", + "clone-deep": "^4.0.1", + "cross-fetch": "^3.1.5", + "ethers": "^5.7.2", + "socket.io-client": "^4.6.1", + "standard-http-error": "^2.0.1", + "string-similarity-js": "^2.1.4", + "uuid": "^8.3.2", + "ws": "^8.13.0" + }, + "dependencies": { + "@cosmjs/json-rpc": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz", + "integrity": "sha512-pitfC/2YN9t+kXZCbNuyrZ6M8abnCC2n62m+JtU9vQUfaEtVsgy+1Fk4TRQ175+pIWSdBMFi2wT8FWVEE4RhxQ==", + "requires": { + "@cosmjs/stream": "^0.30.1", + "xstream": "^11.14.0" + } + }, + "@cosmjs/stream": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.30.1.tgz", + "integrity": "sha512-Fg0pWz1zXQdoxQZpdHRMGvUH5RqS6tPv+j9Eh7Q953UjMlrwZVo0YFLC8OTf/HKVf10E4i0u6aM8D69Q6cNkgQ==", + "requires": { + "xstream": "^11.14.0" + } + }, + "bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + }, + "ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "requires": {} + } + } + }, + "@axelar-network/axelarjs-types": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelarjs-types/-/axelarjs-types-0.27.0.tgz", + "integrity": "sha512-+ZsNgZc815FEBQnP8wxrtYjEqPMeibGFzKypkj1h0nwsvC051ABB/4xePX41E7G58e5RANhDTOxlvCSAx4MpyA==", + "requires": { + "long": "^4.0.0", + "protobufjs": "~6.11.2" + } + }, "@babel/code-frame": { "version": "7.18.6", "dev": true, @@ -33454,7 +34661,6 @@ }, "@babel/runtime": { "version": "7.17.9", - "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } @@ -33797,6 +35003,393 @@ } } }, + "@confio/ics23": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@confio/ics23/-/ics23-0.6.8.tgz", + "integrity": "sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w==", + "requires": { + "@noble/hashes": "^1.0.0", + "protobufjs": "^6.8.8" + } + }, + "@cosmjs/amino": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.28.13.tgz", + "integrity": "sha512-IHnH2zGwaY69qT4mVAavr/pfzx6YE+ud1NHJbvVePlbGiz68CXTi5LHR+K0lrKB5mQ7E+ZErWz2mw5U/x+V1wQ==", + "requires": { + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13" + }, + "dependencies": { + "@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "requires": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "requires": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, + "@cosmjs/cli": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/cli/-/cli-0.28.13.tgz", + "integrity": "sha512-6mbtKmaamKYgaXblSyLCsyEUJTa0GpZLt+ODfwdEUpEdx/Ebwqt09yuCmk0kOQ/TqmruX8aN/ty1py3Opxa/FQ==", + "requires": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/cosmwasm-stargate": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/faucet-client": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/proto-signing": "0.28.13", + "@cosmjs/stargate": "0.28.13", + "@cosmjs/tendermint-rpc": "0.28.13", + "@cosmjs/utils": "0.28.13", + "axios": "^0.21.2", + "babylon": "^6.18.0", + "chalk": "^4", + "cosmjs-types": "^0.4.0", + "diff": "^4", + "recast": "^0.20", + "ts-node": "^8", + "typescript": "~4.4", + "yargs": "^15.3.1" + }, + "dependencies": { + "@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "requires": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "requires": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "@cosmjs/proto-signing": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.28.13.tgz", + "integrity": "sha512-nSl/2ZLsUJYz3Ad0RY3ihZUgRHIow2OnYqKsESMu+3RA/jTi9bDYhiBu8mNMHI0xrEJry918B2CyI56pOUHdPQ==", + "requires": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0" + } + }, + "@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "ts-node": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@cosmjs/cosmwasm-stargate": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.28.13.tgz", + "integrity": "sha512-dVZNOiRd8btQreRUabncGhVXGCS2wToXqxi9l3KEHwCJQ2RWTshuqV+EZAdCaYHE5W6823s2Ol2W/ukA9AXJPw==", + "requires": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/proto-signing": "0.28.13", + "@cosmjs/stargate": "0.28.13", + "@cosmjs/tendermint-rpc": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0", + "pako": "^2.0.2" + }, + "dependencies": { + "@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "requires": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "requires": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "@cosmjs/proto-signing": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.28.13.tgz", + "integrity": "sha512-nSl/2ZLsUJYz3Ad0RY3ihZUgRHIow2OnYqKsESMu+3RA/jTi9bDYhiBu8mNMHI0xrEJry918B2CyI56pOUHdPQ==", + "requires": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0" + } + }, + "@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + } + } + }, "@cosmjs/crypto": { "version": "0.24.1", "dev": true, @@ -33824,6 +35417,33 @@ "readonly-date": "^1.0.0" } }, + "@cosmjs/faucet-client": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/faucet-client/-/faucet-client-0.28.13.tgz", + "integrity": "sha512-M6f0Wbw3hvdfYbVpfGDXwjbRAcCgMRm5slWK6cU8BpotckLvBb0xoBvrhklG/ooz6ZTZfAc2e/EJ8GVhksdvpA==", + "requires": { + "axios": "^0.21.2" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + } + } + }, + "@cosmjs/json-rpc": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.28.13.tgz", + "integrity": "sha512-fInSvg7x9P6p+GWqet+TMhrMTM3OWWdLJOGS5w2ryubMjgpR1rLiAx77MdTNkArW+/6sUwku0sN4veM4ENQu6A==", + "requires": { + "@cosmjs/stream": "0.28.13", + "xstream": "^11.14.0" + } + }, "@cosmjs/launchpad": { "version": "0.24.1", "dev": true, @@ -33845,6 +35465,64 @@ } } }, + "@cosmjs/ledger-amino": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/ledger-amino/-/ledger-amino-0.28.13.tgz", + "integrity": "sha512-KSwYjIFu/KXarvxxEyq3lpcJl5VvV0gAbY+tebeOvuCGHy9Px7CDOLOEHsR3ykJjYWh0hGrYwYmVk9zVHd474A==", + "requires": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "ledger-cosmos-js": "^2.1.8", + "semver": "^7.3.2" + }, + "dependencies": { + "@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "requires": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "requires": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, "@cosmjs/math": { "version": "0.24.1", "dev": true, @@ -33886,6 +35564,171 @@ } } }, + "@cosmjs/socket": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.28.13.tgz", + "integrity": "sha512-lavwGxQ5VdeltyhpFtwCRVfxeWjH5D5mmN7jgx9nuCf3XSFbTcOYxrk2pQ4usenu1Q1KZdL4Yl5RCNrJuHD9Ug==", + "requires": { + "@cosmjs/stream": "0.28.13", + "isomorphic-ws": "^4.0.1", + "ws": "^7", + "xstream": "^11.14.0" + } + }, + "@cosmjs/stargate": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.28.13.tgz", + "integrity": "sha512-dVBMazDz8/eActHsRcZjDHHptOBMqvibj5CFgEtZBp22gP6ASzoAUXTlkSVk5FBf4sfuUHoff6st134/+PGMAg==", + "requires": { + "@confio/ics23": "^0.6.8", + "@cosmjs/amino": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/proto-signing": "0.28.13", + "@cosmjs/stream": "0.28.13", + "@cosmjs/tendermint-rpc": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0", + "protobufjs": "~6.11.3", + "xstream": "^11.14.0" + }, + "dependencies": { + "@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "requires": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "requires": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "@cosmjs/proto-signing": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.28.13.tgz", + "integrity": "sha512-nSl/2ZLsUJYz3Ad0RY3ihZUgRHIow2OnYqKsESMu+3RA/jTi9bDYhiBu8mNMHI0xrEJry918B2CyI56pOUHdPQ==", + "requires": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0" + } + }, + "@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, + "@cosmjs/stream": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.28.13.tgz", + "integrity": "sha512-AnjtfwT8NwPPkd3lhZhjOlOzT0Kn9bgEu2IPOZjQ1nmG2bplsr6TJmnwn0dJxHT7UGtex17h6whKB5N4wU37Wg==", + "requires": { + "xstream": "^11.14.0" + } + }, + "@cosmjs/tendermint-rpc": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.28.13.tgz", + "integrity": "sha512-GB+ZmfuJIGQm0hsRtLYjeR3lOxF7Z6XyCBR0cX5AAYOZzSEBJjevPgUHD6tLn8zIhvzxaW3/VKnMB+WmlxdH4w==", + "requires": { + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/json-rpc": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/socket": "0.28.13", + "@cosmjs/stream": "0.28.13", + "@cosmjs/utils": "0.28.13", + "axios": "^0.21.2", + "readonly-date": "^1.0.0", + "xstream": "^11.14.0" + }, + "dependencies": { + "@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "requires": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "requires": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, "@cosmjs/utils": { "version": "0.24.1", "dev": true @@ -33914,6 +35757,74 @@ } } }, + "@cosmos-client/cosmwasm": { + "version": "0.40.3", + "resolved": "https://registry.npmjs.org/@cosmos-client/cosmwasm/-/cosmwasm-0.40.3.tgz", + "integrity": "sha512-iInWF5wT0zcXZ5AC2DtnY7abwxVpug3CQPDK6+sW32ZlesBZkRVdtZ3ckKXhzaOy1INbzKSY/oah9KZPIHpQvg==", + "requires": { + "axios": "^0.23.0", + "bech32": "^1.1.4", + "bip32": "^2.0.6", + "bip39": "^3.0.4", + "cosmwasm": "^1.1.1", + "process": "^0.11.10", + "protobufjs": "^6.11.2", + "rxjs": "^7.4.0", + "tiny-secp256k1": "^2.0.1", + "tweetnacl": "^1.0.3" + }, + "dependencies": { + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "tiny-secp256k1": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz", + "integrity": "sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==", + "requires": { + "uint8array-tools": "0.0.7" + } + } + } + }, + "@cosmos-client/ibc": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@cosmos-client/ibc/-/ibc-7.0.3.tgz", + "integrity": "sha512-Ms3bdWIprEZGelXPUUx6YzYXanJJs9lXVd3eY/QRIQlFKTEu8Q9/DW7PWwUpenBI3GDWoVrZMfqDMc7BghkpPA==", + "requires": { + "axios": "^0.23.0", + "bech32": "^1.1.4", + "bip32": "^2.0.6", + "bip39": "^3.0.4", + "protobufjs": "^6.11.2", + "rxjs": "^7.4.0", + "tiny-secp256k1": "^2.0.1", + "tweetnacl": "^1.0.3" + }, + "dependencies": { + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "tiny-secp256k1": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz", + "integrity": "sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==", + "requires": { + "uint8array-tools": "0.0.7" + } + } + } + }, "@csstools/postcss-color-function": { "version": "1.1.1", "dev": true, @@ -35118,6 +37029,37 @@ "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" }, + "@ledgerhq/devices": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", + "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", + "requires": { + "@ledgerhq/errors": "^5.50.0", + "@ledgerhq/logs": "^5.50.0", + "rxjs": "6", + "semver": "^7.3.5" + } + }, + "@ledgerhq/errors": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", + "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" + }, + "@ledgerhq/hw-transport": { + "version": "5.51.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", + "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", + "requires": { + "@ledgerhq/devices": "^5.51.1", + "@ledgerhq/errors": "^5.50.0", + "events": "^3.3.0" + } + }, + "@ledgerhq/logs": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", + "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" + }, "@leichtgewicht/ip-codec": { "version": "2.0.4", "dev": true @@ -35713,6 +37655,11 @@ "@sinonjs/commons": "^1.7.0" } }, + "@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, "@testing-library/cypress": { "version": "8.0.7", "dev": true, @@ -36134,6 +38081,11 @@ "version": "4.0.2", "dev": true }, + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, "@types/ws": { "version": "8.5.4", "dev": true, @@ -36609,8 +38561,7 @@ "dev": true }, "ansi-regex": { - "version": "5.0.1", - "dev": true + "version": "5.0.1" }, "ansi-styles": { "version": "3.2.1", @@ -36713,6 +38664,14 @@ "version": "1.0.0", "dev": true }, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "requires": { + "tslib": "^2.0.1" + } + }, "astral-regex": { "version": "2.0.0", "dev": true @@ -36916,6 +38875,11 @@ "babel-preset-current-node-syntax": "^1.0.0" } }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, "balanced-match": { "version": "1.0.2", "dev": true @@ -36927,8 +38891,7 @@ } }, "base64-js": { - "version": "1.5.1", - "dev": true + "version": "1.5.1" }, "batch": { "version": "0.6.1", @@ -37194,8 +39157,7 @@ "dev": true }, "buffer-from": { - "version": "1.1.2", - "dev": true + "version": "1.1.2" }, "buffer-xor": { "version": "1.0.3" @@ -37264,8 +39226,7 @@ "dev": true }, "camelcase": { - "version": "5.3.1", - "dev": true + "version": "5.3.1" }, "camelcase-css": { "version": "2.0.1", @@ -37414,7 +39375,6 @@ }, "clone-deep": { "version": "4.0.1", - "dev": true, "requires": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -37684,6 +39644,91 @@ "yaml": "^1.10.0" } }, + "cosmjs-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.4.1.tgz", + "integrity": "sha512-I7E/cHkIgoJzMNQdFF0YVqPlaTqrqKHrskuSTIqlEyxfB5Lf3WKCajSXVK2yHOfOFfSux/RxEdpMzw/eO4DIog==", + "requires": { + "long": "^4.0.0", + "protobufjs": "~6.11.2" + } + }, + "cosmwasm": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cosmwasm/-/cosmwasm-1.1.1.tgz", + "integrity": "sha512-tjpjwnRIQ6VEcTVB0Pq8+F+Xp6jdnC3BcXmcDHCJHIc5Gg4Mm++AA+6fTfR0yuiPbEAk6wYkokfLtv12I0sPNQ==", + "requires": { + "@cosmjs/amino": "^0.28.3", + "@cosmjs/cli": "^0.28.3", + "@cosmjs/cosmwasm-stargate": "^0.28.3", + "@cosmjs/crypto": "^0.28.3", + "@cosmjs/encoding": "^0.28.3", + "@cosmjs/faucet-client": "^0.28.3", + "@cosmjs/ledger-amino": "^0.28.3", + "@cosmjs/math": "^0.28.3", + "@cosmjs/proto-signing": "^0.28.3", + "@cosmjs/stargate": "^0.28.3", + "@cosmjs/utils": "^0.28.3" + }, + "dependencies": { + "@cosmjs/crypto": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.13.tgz", + "integrity": "sha512-ynKfM0q/tMBQMHJby6ad8lR3gkgBKaelQhIsCZTjClsnuC7oYT9y3ThSZCUWr7Pa9h0J8ahU2YV2oFWFVWJQzQ==", + "requires": { + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "@noble/hashes": "^1", + "bn.js": "^5.2.0", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6" + } + }, + "@cosmjs/encoding": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.13.tgz", + "integrity": "sha512-jtXbAYtV77rLHxoIrjGFsvgGjeTKttuHRv6cvuy3toCZzY7JzTclKH5O2g36IIE4lXwD9xwuhGJ2aa6A3dhNkA==", + "requires": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "@cosmjs/math": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.13.tgz", + "integrity": "sha512-PDpL8W/kbyeWi0mQ2OruyqE8ZUAdxPs1xCbDX3WXJwy2oU+X2UTbkuweJHVpS9CIqmZulBoWQAmlf6t6zr1N/g==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "@cosmjs/proto-signing": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.28.13.tgz", + "integrity": "sha512-nSl/2ZLsUJYz3Ad0RY3ihZUgRHIow2OnYqKsESMu+3RA/jTi9bDYhiBu8mNMHI0xrEJry918B2CyI56pOUHdPQ==", + "requires": { + "@cosmjs/amino": "0.28.13", + "@cosmjs/crypto": "0.28.13", + "@cosmjs/encoding": "0.28.13", + "@cosmjs/math": "0.28.13", + "@cosmjs/utils": "0.28.13", + "cosmjs-types": "^0.4.0", + "long": "^4.0.0" + } + }, + "@cosmjs/utils": { + "version": "0.28.13", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.13.tgz", + "integrity": "sha512-dVeMBiyg+46x7XBZEfJK8yTihphbCFpjVYmLJVqmTsHfJwymQ65cpyW/C+V/LgWARGK8hWQ/aX9HM5Ao8QmMSg==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, "create-ecdh": { "version": "4.0.4", "requires": { @@ -37771,6 +39816,14 @@ } } }, + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "requires": { + "node-fetch": "^2.6.12" + } + }, "cross-spawn": { "version": "7.0.3", "dev": true, @@ -38109,14 +40162,12 @@ }, "debug": { "version": "4.3.4", - "dev": true, "requires": { "ms": "2.1.2" } }, "decamelize": { - "version": "1.2.0", - "dev": true + "version": "1.2.0" }, "decamelize-keys": { "version": "1.1.1", @@ -38219,8 +40270,7 @@ "dev": true }, "diff": { - "version": "4.0.2", - "dev": true + "version": "4.0.2" }, "diff-sequences": { "version": "27.5.1", @@ -38358,8 +40408,7 @@ "dev": true }, "emoji-regex": { - "version": "8.0.0", - "dev": true + "version": "8.0.0" }, "emojis-list": { "version": "3.0.0", @@ -38371,7 +40420,6 @@ }, "encoding": { "version": "0.1.13", - "dev": true, "optional": true, "requires": { "iconv-lite": "^0.6.2" @@ -38379,7 +40427,6 @@ "dependencies": { "iconv-lite": { "version": "0.6.3", - "dev": true, "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -38394,6 +40441,31 @@ "once": "^1.4.0" } }, + "engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + }, + "dependencies": { + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + } + } + }, + "engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==" + }, "enhanced-resolve": { "version": "5.12.0", "dev": true, @@ -38743,8 +40815,7 @@ } }, "esprima": { - "version": "4.0.1", - "dev": true + "version": "4.0.1" }, "esquery": { "version": "1.5.0", @@ -38790,6 +40861,8 @@ }, "ethers": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "requires": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -38836,8 +40909,7 @@ "dev": true }, "events": { - "version": "3.3.0", - "dev": true + "version": "3.3.0" }, "evp_bytestokey": { "version": "1.0.3", @@ -39716,12 +41788,6 @@ "dev": true, "requires": { "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "dev": true - } } }, "async": { @@ -42266,13 +44332,6 @@ "lodash.toarray": "^4.4.0" } }, - "node-fetch": { - "version": "2.6.7", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, "node-gyp": { "version": "8.4.1", "dev": true, @@ -43428,10 +45487,6 @@ "lodash": "^4.17.10" } }, - "tr46": { - "version": "0.0.3", - "dev": true - }, "traverse": { "version": "0.3.9", "dev": true @@ -43744,18 +45799,6 @@ "defaults": "^1.0.3" } }, - "webidl-conversions": { - "version": "3.0.1", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "which": { "version": "1.3.1", "dev": true, @@ -44018,8 +46061,7 @@ "dev": true }, "get-caller-file": { - "version": "2.0.5", - "dev": true + "version": "2.0.5" }, "get-intrinsic": { "version": "1.2.0", @@ -44102,6 +46144,14 @@ "version": "11.12.0", "dev": true }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "requires": { + "define-properties": "^1.1.3" + } + }, "globby": { "version": "11.1.0", "dev": true, @@ -44602,8 +46652,7 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true + "version": "3.0.0" }, "is-generator-fn": { "version": "2.1.0", @@ -44667,7 +46716,6 @@ }, "is-plain-object": { "version": "2.0.4", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -44725,8 +46773,13 @@ "dev": true }, "isobject": { - "version": "3.0.1", - "dev": true + "version": "3.0.1" + }, + "isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "requires": {} }, "isstream": { "version": "0.1.2", @@ -46755,8 +48808,7 @@ } }, "kind-of": { - "version": "6.0.3", - "dev": true + "version": "6.0.3" }, "kleur": { "version": "3.0.3", @@ -46770,6 +48822,17 @@ "version": "1.6.0", "dev": true }, + "ledger-cosmos-js": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/ledger-cosmos-js/-/ledger-cosmos-js-2.1.8.tgz", + "integrity": "sha512-Gl7SWMq+3R9OTkF1hLlg5+1geGOmcHX9OdS+INDsGNxSiKRWlsWCvQipGoDnRIQ6CPo2i/Ze58Dw0Mt/l3UYyA==", + "requires": { + "@babel/runtime": "^7.11.2", + "@ledgerhq/hw-transport": "^5.25.0", + "bech32": "^1.1.4", + "ripemd160": "^2.0.2" + } + }, "less": { "version": "4.1.2", "dev": true, @@ -46832,12 +48895,10 @@ } }, "libsodium": { - "version": "0.7.11", - "dev": true + "version": "0.7.11" }, "libsodium-wrappers": { "version": "0.7.11", - "dev": true, "requires": { "libsodium": "^0.7.11" } @@ -47059,8 +49120,7 @@ } }, "make-error": { - "version": "1.3.6", - "dev": true + "version": "1.3.6" }, "make-fetch-happen": { "version": "9.1.0", @@ -47455,8 +49515,7 @@ "dev": true }, "ms": { - "version": "2.1.2", - "dev": true + "version": "2.1.2" }, "multicast-dns": { "version": "7.2.5", @@ -47680,6 +49739,35 @@ "version": "3.2.1", "dev": true }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, "node-forge": { "version": "1.3.1", "dev": true @@ -48150,8 +50238,7 @@ } }, "p-try": { - "version": "2.2.0", - "dev": true + "version": "2.2.0" }, "pacote": { "version": "13.3.0", @@ -48267,8 +50354,7 @@ "version": "1.0.1" }, "path-exists": { - "version": "4.0.0", - "dev": true + "version": "4.0.0" }, "path-is-absolute": { "version": "1.0.1", @@ -49093,8 +51179,25 @@ } }, "readonly-date": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" + }, + "recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "requires": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } }, "redent": { "version": "3.0.0", @@ -49120,8 +51223,7 @@ } }, "regenerator-runtime": { - "version": "0.13.9", - "dev": true + "version": "0.13.9" }, "regenerator-transform": { "version": "0.15.1", @@ -49167,13 +51269,17 @@ } }, "require-directory": { - "version": "2.1.1", - "dev": true + "version": "2.1.1" }, "require-from-string": { "version": "2.0.2", "dev": true }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "requires-port": { "version": "1.0.0", "dev": true @@ -49483,21 +51589,18 @@ }, "semver": { "version": "7.3.7", - "dev": true, "requires": { "lru-cache": "^6.0.0" }, "dependencies": { "lru-cache": { "version": "6.0.0", - "dev": true, "requires": { "yallist": "^4.0.0" } }, "yallist": { - "version": "4.0.0", - "dev": true + "version": "4.0.0" } } }, @@ -49609,8 +51712,7 @@ } }, "set-blocking": { - "version": "2.0.0", - "dev": true + "version": "2.0.0" }, "setprototypeof": { "version": "1.2.0", @@ -49642,7 +51744,6 @@ }, "shallow-clone": { "version": "3.0.1", - "dev": true, "requires": { "kind-of": "^6.0.2" } @@ -49712,6 +51813,26 @@ "version": "4.2.0", "dev": true }, + "socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + } + }, + "socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + } + }, "sockjs": { "version": "0.3.24", "dev": true, @@ -49774,15 +51895,13 @@ }, "source-map-support": { "version": "0.5.21", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" }, "dependencies": { "source-map": { - "version": "0.6.1", - "dev": true + "version": "0.6.1" } } }, @@ -49889,6 +52008,19 @@ } } }, + "standard-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/standard-error/-/standard-error-1.1.0.tgz", + "integrity": "sha512-4v7qzU7oLJfMI5EltUSHCaaOd65J6S4BqKRWgzMi4EYaE5fvNabPxmAPGdxpGXqrcWjhDGI/H09CIdEuUOUeXg==" + }, + "standard-http-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/standard-http-error/-/standard-http-error-2.0.1.tgz", + "integrity": "sha512-DX/xPIoyXQTuY6BMZK4Utyi4l3A4vFoafsfqrU6/dO4Oe/59c7PyqPd2IQj9m+ZieDg2K3RL9xOYJsabcD9IUA==", + "requires": { + "standard-error": ">= 1.1.0 < 2" + } + }, "statuses": { "version": "2.0.1", "dev": true @@ -49923,9 +52055,13 @@ "strip-ansi": "^6.0.0" } }, + "string-similarity-js": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/string-similarity-js/-/string-similarity-js-2.1.4.tgz", + "integrity": "sha512-uApODZNjCHGYROzDSAdCmAHf60L/pMDHnP/yk6TAbvGg7JSPZlSto/ceCI7hZEqzc53/juU2aOJFkM2yUVTMTA==" + }, "string-width": { "version": "4.2.3", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -49934,7 +52070,6 @@ }, "strip-ansi": { "version": "6.0.1", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -50608,6 +52743,11 @@ "version": "4.6.4", "dev": true }, + "uint8array-tools": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.7.tgz", + "integrity": "sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==" + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "dev": true @@ -50736,8 +52876,7 @@ "dev": true }, "uuid": { - "version": "8.3.2", - "dev": true + "version": "8.3.2" }, "v8-compile-cache": { "version": "2.3.0", @@ -51080,6 +53219,11 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, "which-typed-array": { "version": "1.1.9", "requires": { @@ -51165,6 +53309,27 @@ "version": "2.2.0", "dev": true }, + "xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + }, + "xstream": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/xstream/-/xstream-11.14.0.tgz", + "integrity": "sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw==", + "requires": { + "globalthis": "^1.0.1", + "symbol-observable": "^2.0.3" + }, + "dependencies": { + "symbol-observable": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", + "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==" + } + } + }, "xtend": { "version": "4.0.2" }, @@ -51219,8 +53384,7 @@ } }, "yn": { - "version": "3.1.1", - "dev": true + "version": "3.1.1" }, "yocto-queue": { "version": "0.1.0", diff --git a/package.json b/package.json index 90a1530c9..5d93ae20f 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,10 @@ "@angular/platform-browser-dynamic": "~14.0.4", "@angular/router": "~14.0.4", "@apollo/client": "^3.0.0", + "@axelar-network/axelarjs-sdk": "^0.12.8", "@cosmos-client/core": "0.47.4-rc1", + "@cosmos-client/cosmwasm": "^0.40.3", + "@cosmos-client/ibc": "^7.0.3", "@metamask/detect-provider": "^1.2.0", "angular-google-charts": "^2.2.3", "apollo-angular": "^4.2.0", @@ -63,7 +66,7 @@ "date-fns": "^2.30.0", "decimal.js": "^10.4.3", "dexie": "^3.0.3", - "ethers": "^5.6.8", + "ethers": "^5.7.2", "graphql": "^16", "https-browserify": "^1.0.0", "ngx-dropzone": "^3.1.0", diff --git a/projects/explorer/editions/ununifi/launch/ununifi-alpha-test/firebase-hosting/config.js b/projects/explorer/editions/ununifi/launch/ununifi-alpha-test/firebase-hosting/config.js index b3ff27195..7f6de258d 100644 --- a/projects/explorer/editions/ununifi/launch/ununifi-alpha-test/firebase-hosting/config.js +++ b/projects/explorer/editions/ununifi/launch/ununifi-alpha-test/firebase-hosting/config.js @@ -32,18 +32,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', + 'nft', + 'wasm', + 'yieldaggregator', + 'derivatives', 'pricefeed', -]; - -const apps = [ - { name: 'Utilities', link: '/', icon: 'assistant' }, - { name: 'NFT Backed Loan', link: '/nft-backed-loan', icon: 'loyalty' }, - { name: 'Yield Aggregator', link: '/yield-aggregator/vaults', icon: 'pie_chart' }, - // { name: 'Derivatives', link: '/derivatives/perpetual-futures', icon: 'show_chart' }, + 'nftbackedloan', + 'nftfactory', + 'ecosystemincentive', ]; const denomMetadata = [ @@ -191,7 +187,6 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, extension: { faucet: [ diff --git a/projects/explorer/editions/ununifi/launch/ununifi-beta-test/firebase-hosting/config.js b/projects/explorer/editions/ununifi/launch/ununifi-beta-test/firebase-hosting/config.js index 2f748efbb..ae03568c8 100644 --- a/projects/explorer/editions/ununifi/launch/ununifi-beta-test/firebase-hosting/config.js +++ b/projects/explorer/editions/ununifi/launch/ununifi-beta-test/firebase-hosting/config.js @@ -32,18 +32,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', + 'nft', + 'wasm', + 'yieldaggregator', + 'derivatives', 'pricefeed', -]; - -const apps = [ - { name: 'Utilities', link: '/', icon: 'assistant' }, - { name: 'NFT Backed Loan', link: '/nft-backed-loan', icon: 'loyalty' }, - { name: 'Yield Aggregator', link: '/yield-aggregator/vaults', icon: 'pie_chart' }, - { name: 'Derivatives', link: '/derivatives/perpetual-futures', icon: 'show_chart' }, + 'nftbackedloan', + 'nftfactory', + 'ecosystemincentive', ]; const denomMetadata = [ @@ -191,7 +187,6 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, extension: { faucet: [ diff --git a/projects/explorer/editions/ununifi/launch/ununifi-stable/firebase-hosting/config.js b/projects/explorer/editions/ununifi/launch/ununifi-stable/firebase-hosting/config.js index 5d35139a8..5ccd7a40e 100644 --- a/projects/explorer/editions/ununifi/launch/ununifi-stable/firebase-hosting/config.js +++ b/projects/explorer/editions/ununifi/launch/ununifi-stable/firebase-hosting/config.js @@ -31,18 +31,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', + 'nft', + 'wasm', + 'yieldaggregator', + 'derivatives', 'pricefeed', -]; - -const apps = [ - { name: 'Utilities', link: '/', icon: 'assistant' }, - { name: 'NFT Backed Loan', link: '/nft-backed-loan', icon: 'loyalty' }, - { name: 'Yield Aggregator', link: '/yield-aggregator/vaults', icon: 'pie_chart' }, - { name: 'Derivatives', link: '/derivatives/perpetual-futures', icon: 'show_chart' }, + 'nftbackedloan', + 'nftfactory', + 'ecosystemincentive', ]; const denomMetadata = [ @@ -190,7 +186,6 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, extension: { faucet: [ diff --git a/projects/explorer/editions/ununifi/launch/ununifi-test/firebase-hosting/config.js b/projects/explorer/editions/ununifi/launch/ununifi-test/firebase-hosting/config.js index e7e255a83..1fae0fc61 100644 --- a/projects/explorer/editions/ununifi/launch/ununifi-test/firebase-hosting/config.js +++ b/projects/explorer/editions/ununifi/launch/ununifi-test/firebase-hosting/config.js @@ -34,18 +34,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', - 'pricefeed', -]; - -const apps = [ - { name: 'Utilities', link: '/', icon: 'assistant' }, - // { name: 'NFT Backed Loan', link: '/nft-backed-loan', icon: 'loyalty' }, - { name: 'Yield Aggregator', link: '/yield-aggregator/vaults', icon: 'pie_chart' }, - // { name: 'Derivatives', link: '/derivatives/perpetual-futures', icon: 'show_chart' }, + 'nft', + 'wasm', + 'yieldaggregator', + // 'derivatives', + // 'pricefeed', + // 'nftbackedloan', + // 'nftfactory', + // 'ecosystemincentive', ]; const denomMetadata = [ @@ -124,96 +120,49 @@ const denomMetadata = [ symbol: 'DLP', }, { - description: 'ATOM from Osmosis', + description: 'IBC token from transfer/channel-996/uatom', denom_units: [ { - denom: 'ibc/ACBD2CEFAC2CC3ED6EEAF67BBDFDF168F1E4EDA159DFE1CA6B4A57A9CAF4DA11', + denom: 'uatom', exponent: 0, aliases: [], }, ], base: 'ibc/ACBD2CEFAC2CC3ED6EEAF67BBDFDF168F1E4EDA159DFE1CA6B4A57A9CAF4DA11', - name: 'ATOM from Osmosis', + name: 'transfer/channel-996/uatom', display: 'ATOM.osmosis', symbol: 'ATOM', }, { - description: 'OSMO from Osmosis (deprecated)', + description: 'IBC token from transfer/channel-996/uosmo (deprecated)', denom_units: [ { - denom: 'ibc/13B2C536BB057AC79D5616B8EA1B9540EC1F2170718CAFF6F0083C966FFFED0B', + denom: 'uosmo', exponent: 0, aliases: [], }, ], base: 'ibc/13B2C536BB057AC79D5616B8EA1B9540EC1F2170718CAFF6F0083C966FFFED0B', - name: 'OSMO (deprecated)', + name: 'IBC token from transfer/channel-996/uosmo (deprecated)', display: 'OSMO (deprecated)', - symbol: 'OSMO (deprecated)', + symbol: 'OSMO', }, { - description: 'OSMO from Osmosis', + description: 'IBC token from transfer/channel-1493/uosmo', denom_units: [ { - denom: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', + denom: 'uosmo', exponent: 0, aliases: [], }, ], base: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', - name: 'OSMO', + name: 'transfer/channel-1493/uosmo IBC token', display: 'OSMO', symbol: 'OSMO', }, ]; -const strategiesInfo = [ - { - id: '0', - denom: 'ibc/13B2C536BB057AC79D5616B8EA1B9540EC1F2170718CAFF6F0083C966FFFED0B', - name: 'MARS/OSMO strategy', - description: '', - gitUrl: '', - poolInfo: { - type: 'osmosis', - poolId: '907', - }, - }, - { - id: '0', - denom: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', - name: 'MARS/OSMO strategy v2', - description: '', - gitUrl: '', - poolInfo: { - type: 'osmosis', - poolId: '907', - }, - }, - { - id: '1', - denom: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', - name: 'ATOM/OSMO strategy v2', - description: '', - gitUrl: '', - poolInfo: { - type: 'osmosis', - poolId: '1', - }, - }, - { - id: '0', - denom: 'ibc/ACBD2CEFAC2CC3ED6EEAF67BBDFDF168F1E4EDA159DFE1CA6B4A57A9CAF4DA11', - name: 'Osmosis ATOM/OSMO Farm', - description: '', - gitUrl: '', - poolInfo: { - type: 'osmosis', - poolId: '1', - }, - }, -]; - const configs = [ // CauchyE A node without Monitor { @@ -229,9 +178,7 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, - strategiesInfo, extension: { faucet: [ { @@ -261,9 +208,7 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, - strategiesInfo, extension: { faucet: [ { @@ -293,9 +238,7 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, - strategiesInfo, extension: { faucet: [ { @@ -325,9 +268,7 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, - strategiesInfo, extension: { faucet: [ { diff --git a/projects/explorer/editions/ununifi/launch/ununifi/firebase-hosting/config.js b/projects/explorer/editions/ununifi/launch/ununifi/firebase-hosting/config.js index e3c3317f6..3a84f0705 100644 --- a/projects/explorer/editions/ununifi/launch/ununifi/firebase-hosting/config.js +++ b/projects/explorer/editions/ununifi/launch/ununifi/firebase-hosting/config.js @@ -31,18 +31,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', - 'pricefeed', -]; - -const apps = [ - { name: 'Utilities', link: '/', icon: 'assistant' }, - // { name: 'NFT Backed Loan', link: '/nft-backed-loan', icon: 'loyalty' }, - { name: 'Yield Aggregator', link: '/yield-aggregator/vaults', icon: 'pie_chart' }, - // { name: 'Derivatives', link: '/derivatives/perpetual-futures', icon: 'show_chart' }, + 'nft', + 'wasm', + 'yieldaggregator', + // 'derivatives', + // 'pricefeed', + // 'nftbackedloan', + // 'nftfactory', + // 'ecosystemincentive', ]; const denomMetadata = [ @@ -232,7 +228,6 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, extension: { faucet: [ @@ -263,7 +258,6 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, extension: { faucet: [ @@ -294,7 +288,6 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, extension: { faucet: [], @@ -317,7 +310,6 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, extension: { faucet: [], diff --git a/projects/explorer/src/app/pages/dashboard/txs/txs.component.html b/projects/explorer/src/app/pages/dashboard/txs/txs.component.html index 8fc623717..a48931adf 100644 --- a/projects/explorer/src/app/pages/dashboard/txs/txs.component.html +++ b/projects/explorer/src/app/pages/dashboard/txs/txs.component.html @@ -1,5 +1,6 @@ diff --git a/projects/explorer/src/app/pages/txs/txs.component.html b/projects/explorer/src/app/pages/txs/txs.component.html index e6754172a..5c8b946d4 100644 --- a/projects/explorer/src/app/pages/txs/txs.component.html +++ b/projects/explorer/src/app/pages/txs/txs.component.html @@ -1,5 +1,6 @@ = new EventEmitter(); - constructor() { - this.txTypeOptions = ['bank', 'distribution', 'gov', 'ibc', 'staking']; - } + constructor() {} ngOnInit(): void {} diff --git a/projects/explorer/src/app/views/txs/txs.component.ts b/projects/explorer/src/app/views/txs/txs.component.ts index 4b8488603..3bf505f69 100644 --- a/projects/explorer/src/app/views/txs/txs.component.ts +++ b/projects/explorer/src/app/views/txs/txs.component.ts @@ -11,7 +11,8 @@ import { BroadcastTx200ResponseTxResponse } from '@cosmos-client/core/esm/openap export class TxsComponent implements OnInit { @Input() txs?: BroadcastTx200ResponseTxResponse[] | null; - txTypeOptions: string[]; + @Input() + txTypeOptions?: string[] | null; @Input() selectedTxType?: string | null; @@ -31,7 +32,6 @@ export class TxsComponent implements OnInit { constructor() { this.paginationChange = new EventEmitter(); - this.txTypeOptions = ['bank', 'distribution', 'gov', 'ibc', 'staking']; } ngOnInit(): void {} diff --git a/projects/explorer/src/assets/config.js b/projects/explorer/src/assets/config.js index 0a25c9419..70e99fd79 100644 --- a/projects/explorer/src/assets/config.js +++ b/projects/explorer/src/assets/config.js @@ -34,18 +34,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', + 'nft', + 'wasm', + 'yieldaggregator', + 'derivatives', 'pricefeed', -]; - -const apps = [ - { name: 'Utilities', link: '/', icon: 'assistant' }, - // { name: 'NFT Backed Loan', link: '/nft-backed-loan', icon: 'loyalty' }, - { name: 'Yield Aggregator', link: '/yield-aggregator/vaults', icon: 'pie_chart' }, - // { name: 'Derivatives', link: '/derivatives/perpetual-futures', icon: 'show_chart' }, + 'nftbackedloan', + 'nftfactory', + 'ecosystemincentive', ]; const denomMetadata = [ @@ -167,162 +163,6 @@ const denomMetadata = [ }, ]; -const strategiesInfo = [ - { - id: '0', - denom: 'ibc/13B2C536BB057AC79D5616B8EA1B9540EC1F2170718CAFF6F0083C966FFFED0B', - name: 'MARS/OSMO strategy', - description: '', - gitUrl: '', - poolInfo: { - type: 'osmosis', - poolId: '907', - }, - }, - { - id: '0', - denom: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', - name: 'MARS/OSMO strategy v2', - description: '', - gitUrl: '', - poolInfo: { - type: 'osmosis', - poolId: '907', - }, - }, - { - id: '1', - denom: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', - name: 'ATOM/OSMO strategy v2', - description: '', - gitUrl: '', - poolInfo: { - type: 'osmosis', - poolId: '1', - }, - }, - { - id: '0', - denom: 'ibc/ACBD2CEFAC2CC3ED6EEAF67BBDFDF168F1E4EDA159DFE1CA6B4A57A9CAF4DA11', - name: 'Osmosis ATOM/OSMO Farm', - description: '', - gitUrl: '', - poolInfo: { - type: 'osmosis', - poolId: '1', - }, - }, -]; - -const externalChains = [ - { - id: 'cosmoshub', - chainId: 'cosmoshub-4', - chainName: 'Cosmos Hub', - rpc: 'https://rpc-cosmoshub.keplr.app', - rest: 'https://lcd-cosmoshub.keplr.app', - bip44: { coinType: 118 }, - bech32Config: { - bech32PrefixAccAddr: 'cosmos', - bech32PrefixAccPub: 'cosmospub', - bech32PrefixConsAddr: 'cosmosvalcons', - bech32PrefixConsPub: 'cosmosvalconspub', - bech32PrefixValAddr: 'cosmosvaloper', - bech32PrefixValPub: 'cosmosvaloperpub', - }, - currencies: [ - { - coinDecimals: 6, - coinDenom: 'ATOM', - coinGeckoId: 'cosmos', - coinMinimalDenom: 'uatom', - coinImageUrl: - 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', - }, - ], - feeCurrencies: [ - { - coinDecimals: 6, - coinDenom: 'ATOM', - coinGeckoId: 'cosmos', - coinMinimalDenom: 'uatom', - coinImageUrl: - 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', - gasPriceStep: { - average: 0.025, - high: 0.03, - low: 0.01, - }, - }, - ], - stakeCurrency: { - coinDecimals: 6, - coinDenom: 'ATOM', - coinGeckoId: 'cosmos', - coinMinimalDenom: 'uatom', - coinImageUrl: - 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', - }, - }, - { - id: 'osmosis', - chainId: 'osmosis-1', - chainName: 'Osmosis', - rpc: 'https://rpc-osmosis.keplr.app', - rest: 'https://lcd-osmosis.keplr.app', - bip44: { coinType: 118 }, - bech32Config: { - bech32PrefixAccAddr: 'osmo', - bech32PrefixAccPub: 'osmopub', - bech32PrefixValAddr: 'osmovaloper', - bech32PrefixValPub: 'osmovaloperpub', - bech32PrefixConsAddr: 'osmovalcons', - bech32PrefixConsPub: 'osmovalconspub', - }, - currencies: [ - { - coinDenom: 'OSMO', - coinMinimalDenom: 'uosmo', - coinDecimals: 6, - coinGeckoId: 'osmosis', - coinImageUrl: - 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', - }, - { - coinDenom: 'ION', - coinMinimalDenom: 'uion', - coinDecimals: 6, - coinGeckoId: 'ion', - coinImageUrl: - 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uion.png', - }, - ], - feeCurrencies: [ - { - coinDenom: 'OSMO', - coinMinimalDenom: 'uosmo', - coinDecimals: 6, - coinGeckoId: 'osmosis', - coinImageUrl: - 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', - gasPriceStep: { - low: 0.0025, - average: 0.025, - high: 0.04, - }, - }, - ], - stakeCurrency: { - coinDenom: 'OSMO', - coinMinimalDenom: 'uosmo', - coinDecimals: 6, - coinGeckoId: 'osmosis', - coinImageUrl: - 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', - }, - }, -]; - const configs = [ // CauchyE A node without Monitor { @@ -338,10 +178,7 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, - strategiesInfo, - externalChains, extension: { faucet: [ { @@ -371,10 +208,7 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, - strategiesInfo, - externalChains, extension: { faucet: [ { @@ -404,10 +238,7 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, - strategiesInfo, - externalChains, extension: { faucet: [ { @@ -437,10 +268,7 @@ const configs = [ amount: 0.015, }, ], - apps, denomMetadata, - strategiesInfo, - externalChains, extension: { faucet: [ { diff --git a/projects/portal/editions/ununifi/launch/ununifi-alpha-test/firebase-hosting/config.js b/projects/portal/editions/ununifi/launch/ununifi-alpha-test/firebase-hosting/config.js index b3ff27195..ed200bd2e 100644 --- a/projects/portal/editions/ununifi/launch/ununifi-alpha-test/firebase-hosting/config.js +++ b/projects/portal/editions/ununifi/launch/ununifi-alpha-test/firebase-hosting/config.js @@ -12,6 +12,9 @@ const domainCauchyEA = 'ununifi-alpha-test.cauchye.net'; const chainID = 'ununifi-alpha-test'; const chainName = 'UnUniFi (alpha-test)'; +const yieldAggregatorContractAddress = + 'ununifi1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqhp8g9l'; + const bech32Prefix = { accAddr: 'ununifi', accPub: 'ununifipub', @@ -32,11 +35,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', + 'nft', + 'wasm', + 'yieldaggregator', + 'derivatives', 'pricefeed', + 'nftbackedloan', + 'nftfactory', + 'ecosystemincentive', ]; const apps = [ @@ -174,6 +180,173 @@ const denomMetadata = [ display: 'DLP', symbol: 'DLP', }, + { + description: 'IBC token from transfer/channel-1786/uosmo', + denom_units: [ + { + denom: 'uosmo', + exponent: 0, + aliases: [], + }, + ], + base: 'ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518', + name: 'IBC token from transfer/channel-1786/uosmo', + display: 'OSMO.osmosis', + symbol: 'OSMO', + }, +]; + +const externalChains = [ + { + chainId: 'theta-testnet-001', + chainName: 'cosmoshub(test)', + display: 'Cosmoshub Theta Testnet', + disabled: true, + cosmos: true, + rpc: 'https://rpc.sentry-01.theta-testnet.polypore.xyz', + rest: 'https://rest.sentry-01.theta-testnet.polypore.xyz', + bip44: { coinType: 118 }, + bech32Config: { + bech32PrefixAccAddr: 'cosmos', + bech32PrefixAccPub: 'cosmospub', + bech32PrefixConsAddr: 'cosmosvalcons', + bech32PrefixConsPub: 'cosmosvalconspub', + bech32PrefixValAddr: 'cosmosvaloper', + bech32PrefixValPub: 'cosmosvaloperpub', + }, + currencies: [ + { + coinDecimals: 6, + coinDenom: 'ATOM', + coinGeckoId: 'cosmos', + coinMinimalDenom: 'uatom', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', + }, + ], + feeCurrencies: [ + { + coinDecimals: 6, + coinDenom: 'ATOM', + coinGeckoId: 'cosmos', + coinMinimalDenom: 'uatom', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', + gasPriceStep: { + average: 0.025, + high: 0.03, + low: 0.01, + }, + }, + ], + stakeCurrency: { + coinDecimals: 6, + coinDenom: 'ATOM', + coinGeckoId: 'cosmos', + coinMinimalDenom: 'uatom', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', + }, + }, + { + chainId: 'osmo-test-5', + chainName: 'osmosis(test)', + display: 'Osmosis testnet 5', + disabled: false, + cosmos: true, + rpc: 'https://rpc.osmotest5.osmosis.zone', + rest: 'https://lcd.osmotest5.osmosis.zone', + ibcSourcePort: 'transfer', + ibcSourceChannel: 'channel-1858', + bip44: { coinType: 118 }, + bech32Config: { + bech32PrefixAccAddr: 'osmo', + bech32PrefixAccPub: 'osmopub', + bech32PrefixValAddr: 'osmovaloper', + bech32PrefixValPub: 'osmovaloperpub', + bech32PrefixConsAddr: 'osmovalcons', + bech32PrefixConsPub: 'osmovalconspub', + }, + currencies: [ + { + coinDenom: 'OSMO', + coinMinimalDenom: 'uosmo', + coinDecimals: 6, + coinGeckoId: 'osmosis', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', + }, + { + coinDenom: 'ION', + coinMinimalDenom: 'uion', + coinDecimals: 6, + coinGeckoId: 'ion', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uion.png', + }, + ], + feeCurrencies: [ + { + coinDenom: 'OSMO', + coinMinimalDenom: 'uosmo', + coinDecimals: 6, + coinGeckoId: 'osmosis', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', + gasPriceStep: { + low: 0.0025, + average: 0.025, + high: 0.04, + }, + }, + ], + stakeCurrency: { + coinDenom: 'OSMO', + coinMinimalDenom: 'uosmo', + coinDecimals: 6, + coinGeckoId: 'osmosis', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', + }, + availableTokens: [ + { + symbol: 'OSMO', + denom: 'uosmo', + contractAddress: '', + decimal: 6, + }, + ], + }, + { + chainId: '5', + chainName: 'ethereum-2', + display: 'Ethereum Goerli Testnet', + disabled: false, + cosmos: false, + yieldAggregatorContractAddress: '0x75d8dCEa1Fa5E47526020eE8ADbfAbd583A9a134', + availableTokens: [ + { + symbol: 'aUSDC', + contractAddress: '0x254d06f33bDc5b8ee05b2ea472107E300226659A', + decimal: 6, + }, + ], + }, + { + chainId: '80001', + chainName: 'Polygon', + display: 'Polygon Mumbai Testnet', + disabled: false, + cosmos: false, + yieldAggregatorContractAddress: '0xa5609cb1af27a7C29466A83FC46D84F32e197D4e', + availableTokens: [ + { + symbol: 'aUSDC', + contractAddress: '0x2c852e740B62308c46DD29B982FBb650D063Bd07', + decimal: 6, + }, + ], + }, ]; const configs = [ @@ -193,6 +366,8 @@ const configs = [ ], apps, denomMetadata, + externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { diff --git a/projects/portal/editions/ununifi/launch/ununifi-beta-test/firebase-hosting/config.js b/projects/portal/editions/ununifi/launch/ununifi-beta-test/firebase-hosting/config.js index 2f748efbb..97d5cb28e 100644 --- a/projects/portal/editions/ununifi/launch/ununifi-beta-test/firebase-hosting/config.js +++ b/projects/portal/editions/ununifi/launch/ununifi-beta-test/firebase-hosting/config.js @@ -32,11 +32,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', + 'nft', + 'wasm', + 'yieldaggregator', + 'derivatives', 'pricefeed', + 'nftbackedloan', + 'nftfactory', + 'ecosystemincentive', ]; const apps = [ diff --git a/projects/portal/editions/ununifi/launch/ununifi-stable/firebase-hosting/config.js b/projects/portal/editions/ununifi/launch/ununifi-stable/firebase-hosting/config.js index 5d35139a8..d35486f5d 100644 --- a/projects/portal/editions/ununifi/launch/ununifi-stable/firebase-hosting/config.js +++ b/projects/portal/editions/ununifi/launch/ununifi-stable/firebase-hosting/config.js @@ -31,11 +31,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', + 'nft', + 'wasm', + 'yieldaggregator', + 'derivatives', 'pricefeed', + 'nftbackedloan', + 'nftfactory', + 'ecosystemincentive', ]; const apps = [ diff --git a/projects/portal/editions/ununifi/launch/ununifi-test/firebase-hosting/config.js b/projects/portal/editions/ununifi/launch/ununifi-test/firebase-hosting/config.js index 526df9229..289711089 100644 --- a/projects/portal/editions/ununifi/launch/ununifi-test/firebase-hosting/config.js +++ b/projects/portal/editions/ununifi/launch/ununifi-test/firebase-hosting/config.js @@ -14,6 +14,9 @@ const domainCauchyED = 'd.ununifi-test-v1.cauchye.net'; const chainID = 'ununifi-test-v1'; const chainName = 'UnUniFi (test)'; +const yieldAggregatorContractAddress = + 'ununifi1v6qjx5smfdxnh5gr8vprswl60rstyprj3wh4gz5mg7gcl7mtl5xqd9l8a9'; + const bech32Prefix = { accAddr: 'ununifi', accPub: 'ununifipub', @@ -34,11 +37,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', - 'pricefeed', + 'nft', + 'wasm', + 'yieldaggregator', + // 'derivatives', + // 'pricefeed', + // 'nftbackedloan', + // 'nftfactory', + // 'ecosystemincentive', ]; const apps = [ @@ -124,44 +130,44 @@ const denomMetadata = [ symbol: 'DLP', }, { - description: 'ATOM from Osmosis', + description: 'IBC token from transfer/channel-996/uatom', denom_units: [ { - denom: 'ibc/ACBD2CEFAC2CC3ED6EEAF67BBDFDF168F1E4EDA159DFE1CA6B4A57A9CAF4DA11', + denom: 'uatom', exponent: 0, aliases: [], }, ], base: 'ibc/ACBD2CEFAC2CC3ED6EEAF67BBDFDF168F1E4EDA159DFE1CA6B4A57A9CAF4DA11', - name: 'ATOM from Osmosis', + name: 'transfer/channel-996/uatom', display: 'ATOM.osmosis', symbol: 'ATOM', }, { - description: 'OSMO from Osmosis (deprecated)', + description: 'IBC token from transfer/channel-996/uosmo (deprecated)', denom_units: [ { - denom: 'ibc/13B2C536BB057AC79D5616B8EA1B9540EC1F2170718CAFF6F0083C966FFFED0B', + denom: 'uosmo', exponent: 0, aliases: [], }, ], base: 'ibc/13B2C536BB057AC79D5616B8EA1B9540EC1F2170718CAFF6F0083C966FFFED0B', - name: 'OSMO (deprecated)', + name: 'IBC token from transfer/channel-996/uosmo (deprecated)', display: 'OSMO (deprecated)', symbol: 'OSMO', }, { - description: 'OSMO from Osmosis', + description: 'IBC token from transfer/channel-1493/uosmo', denom_units: [ { - denom: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', + denom: 'uosmo', exponent: 0, aliases: [], }, ], base: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', - name: 'OSMO', + name: 'transfer/channel-1493/uosmo IBC token', display: 'OSMO', symbol: 'OSMO', }, @@ -215,14 +221,15 @@ const strategiesInfo = [ ]; const certifiedVaults = ['6', '8', '9', '10', '11']; - const externalChains = [ { - id: 'cosmoshub', - chainId: 'cosmoshub-4', - chainName: 'Cosmos Hub', - rpc: 'https://rpc-cosmoshub.keplr.app', - rest: 'https://lcd-cosmoshub.keplr.app', + chainId: 'theta-testnet-001', + chainName: 'cosmoshub(test)', + display: 'Cosmoshub Theta Testnet', + disabled: true, + cosmos: true, + rpc: 'https://rpc.sentry-01.theta-testnet.polypore.xyz', + rest: 'https://rest.sentry-01.theta-testnet.polypore.xyz', bip44: { coinType: 118 }, bech32Config: { bech32PrefixAccAddr: 'cosmos', @@ -267,11 +274,15 @@ const externalChains = [ }, }, { - id: 'osmosis', - chainId: 'osmosis-1', - chainName: 'Osmosis', - rpc: 'https://rpc-osmosis.keplr.app', - rest: 'https://lcd-osmosis.keplr.app', + chainId: 'osmo-test-5', + chainName: 'osmosis(test)', + display: 'Osmosis testnet 5', + disabled: true, + cosmos: true, + rpc: 'https://rpc.osmotest5.osmosis.zone', + rest: 'https://lcd.osmotest5.osmosis.zone', + ibcSourcePort: 'transfer', + ibcSourceChannel: 'channel-1493', bip44: { coinType: 118 }, bech32Config: { bech32PrefixAccAddr: 'osmo', @@ -322,6 +333,78 @@ const externalChains = [ coinImageUrl: 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', }, + availableTokens: [ + { + symbol: 'OSMO', + denom: 'uosmo', + contractAddress: '', + decimal: 6, + }, + ], + }, + { + chainId: '5', + chainName: 'ethereum-2', + display: 'Ethereum Goerli Testnet', + disabled: true, + cosmos: false, + yieldAggregatorContractAddress: '0x75d8dCEa1Fa5E47526020eE8ADbfAbd583A9a134', + availableTokens: [ + { + symbol: 'aUSDC', + denom: 'uausdc', + contractAddress: '0x254d06f33bDc5b8ee05b2ea472107E300226659A', + decimal: 6, + }, + ], + }, + { + chainId: '80001', + chainName: 'Polygon', + display: 'Polygon Mumbai Testnet', + disabled: true, + cosmos: false, + yieldAggregatorContractAddress: '0xa5609cb1af27a7C29466A83FC46D84F32e197D4e', + availableTokens: [ + { + symbol: 'aUSDC', + denom: 'uausdc', + contractAddress: '0x2c852e740B62308c46DD29B982FBb650D063Bd07', + decimal: 6, + }, + ], + }, + { + chainId: '43113', + chainName: 'Avalanche', + display: 'Avalanche Fuji Testnet', + disabled: true, + cosmos: false, + yieldAggregatorContractAddress: '', + availableTokens: [ + { + symbol: 'aUSDC', + denom: 'uausdc', + contractAddress: '0x57F1c63497AEe0bE305B8852b354CEc793da43bB', + decimal: 6, + }, + ], + }, + { + chainId: '421613', + chainName: 'arbitrum', + display: 'Arbitrum Goerli Testnet', + disabled: true, + cosmos: false, + yieldAggregatorContractAddress: '', + availableTokens: [ + { + symbol: 'aUSDC', + denom: 'uausdc', + contractAddress: '0x254d06f33bDc5b8ee05b2ea472107E300226659A', + decimal: 6, + }, + ], }, ]; @@ -345,6 +428,7 @@ const configs = [ strategiesInfo, certifiedVaults, externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { @@ -379,6 +463,7 @@ const configs = [ strategiesInfo, certifiedVaults, externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { @@ -413,6 +498,7 @@ const configs = [ strategiesInfo, certifiedVaults, externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { @@ -447,6 +533,7 @@ const configs = [ strategiesInfo, certifiedVaults, externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { diff --git a/projects/portal/editions/ununifi/launch/ununifi/firebase-hosting/config.js b/projects/portal/editions/ununifi/launch/ununifi/firebase-hosting/config.js index 16a7c9a8a..ac9d97b4f 100644 --- a/projects/portal/editions/ununifi/launch/ununifi/firebase-hosting/config.js +++ b/projects/portal/editions/ununifi/launch/ununifi/firebase-hosting/config.js @@ -11,6 +11,8 @@ const domainCauchyED = 'ununifi.mainnet.lcd-02.kabab.io'; const chainID = 'ununifi-beta-v1'; const chainName = 'UnUniFi'; +const yieldAggregatorContractAddress = ''; + const bech32Prefix = { accAddr: 'ununifi', accPub: 'ununifipub', @@ -31,11 +33,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', - 'pricefeed', + 'nft', + 'wasm', + 'yieldaggregator', + // 'derivatives', + // 'pricefeed', + // 'nftbackedloan', + // 'nftfactory', + // 'ecosystemincentive', ]; const apps = [ @@ -266,6 +271,162 @@ const strategiesInfo = [ }, ]; +const externalChains = [ + { + chainId: 'cosmoshub-4', + chainName: 'cosmoshub', + display: 'Cosmos Hub', + disabled: true, + cosmos: true, + rpc: 'https://rpc-cosmoshub.keplr.app', + rest: 'https://lcd-cosmoshub.keplr.app', + bip44: { coinType: 118 }, + bech32Config: { + bech32PrefixAccAddr: 'cosmos', + bech32PrefixAccPub: 'cosmospub', + bech32PrefixConsAddr: 'cosmosvalcons', + bech32PrefixConsPub: 'cosmosvalconspub', + bech32PrefixValAddr: 'cosmosvaloper', + bech32PrefixValPub: 'cosmosvaloperpub', + }, + currencies: [ + { + coinDecimals: 6, + coinDenom: 'ATOM', + coinGeckoId: 'cosmos', + coinMinimalDenom: 'uatom', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', + }, + ], + feeCurrencies: [ + { + coinDecimals: 6, + coinDenom: 'ATOM', + coinGeckoId: 'cosmos', + coinMinimalDenom: 'uatom', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', + gasPriceStep: { + average: 0.025, + high: 0.03, + low: 0.01, + }, + }, + ], + stakeCurrency: { + coinDecimals: 6, + coinDenom: 'ATOM', + coinGeckoId: 'cosmos', + coinMinimalDenom: 'uatom', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', + }, + availableTokens: [ + { + symbol: 'ATOM', + denom: 'uatom', + contractAddress: '', + decimal: 6, + }, + ], + }, + { + chainId: 'osmosis-1', + chainName: 'osmosis', + display: 'Osmosis', + disabled: true, + cosmos: true, + rpc: 'https://rpc-osmosis.keplr.app', + rest: 'https://lcd-osmosis.keplr.app', + bip44: { coinType: 118 }, + bech32Config: { + bech32PrefixAccAddr: 'osmo', + bech32PrefixAccPub: 'osmopub', + bech32PrefixValAddr: 'osmovaloper', + bech32PrefixValPub: 'osmovaloperpub', + bech32PrefixConsAddr: 'osmovalcons', + bech32PrefixConsPub: 'osmovalconspub', + }, + currencies: [ + { + coinDenom: 'OSMO', + coinMinimalDenom: 'uosmo', + coinDecimals: 6, + coinGeckoId: 'osmosis', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', + }, + { + coinDenom: 'ION', + coinMinimalDenom: 'uion', + coinDecimals: 6, + coinGeckoId: 'ion', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uion.png', + }, + ], + feeCurrencies: [ + { + coinDenom: 'OSMO', + coinMinimalDenom: 'uosmo', + coinDecimals: 6, + coinGeckoId: 'osmosis', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', + gasPriceStep: { + low: 0.0025, + average: 0.025, + high: 0.04, + }, + }, + ], + stakeCurrency: { + coinDenom: 'OSMO', + coinMinimalDenom: 'uosmo', + coinDecimals: 6, + coinGeckoId: 'osmosis', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', + }, + availableTokens: [ + { + symbol: 'OSMO', + denom: 'uosmo', + contractAddress: '', + decimal: 6, + }, + ], + }, + { + chainId: '1', + chainName: 'Ethereum', + display: 'Ethereum', + disabled: true, + cosmos: false, + yieldAggregatorContractAddress: '', + availableTokens: [], + }, + { + chainId: '137', + chainName: 'Polygon', + display: 'Polygon', + disabled: true, + cosmos: false, + yieldAggregatorContractAddress: '', + availableTokens: [], + }, + { + chainId: '43114', + chainName: 'Avalanche', + display: 'Avalanche', + disabled: true, + cosmos: false, + yieldAggregatorContractAddress: '', + availableTokens: [], + }, +]; + const configs = [ // CauchyE A node without Monitor { @@ -285,6 +446,8 @@ const configs = [ denomMetadata, strategiesInfo, certifiedVaults, + externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { @@ -318,6 +481,8 @@ const configs = [ denomMetadata, strategiesInfo, certifiedVaults, + externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { @@ -351,6 +516,8 @@ const configs = [ denomMetadata, strategiesInfo, certifiedVaults, + externalChains, + yieldAggregatorContractAddress, extension: { faucet: [], // monitor: {}, @@ -376,6 +543,8 @@ const configs = [ denomMetadata, strategiesInfo, certifiedVaults, + externalChains, + yieldAggregatorContractAddress, extension: { faucet: [], // monitor: {}, diff --git a/projects/portal/src/app/app.module.ts b/projects/portal/src/app/app.module.ts index 59312da61..9a8c75df6 100644 --- a/projects/portal/src/app/app.module.ts +++ b/projects/portal/src/app/app.module.ts @@ -16,6 +16,7 @@ import { AppDepositFormDialogModule } from './pages/dialogs/vote/deposit-form-di import { AppVoteFormDialogModule } from './pages/dialogs/vote/vote-form-dialog/vote-form-dialog.module'; import { TxFeeConfirmDialogModule } from './views/cosmos/tx-fee-confirm-dialog/tx-fee-confirm-dialog.module'; import { InactiveValidatorModule } from './views/dialogs/delegate/invalid-validator-confirm-dialog/inactive-validator-confirm-dialog.module'; +import { ExternalTxConfirmDialogModule } from './views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.module'; import { TxConfirmDialogModule } from './views/dialogs/txs/tx-confirm/tx-confirm-dialog.module'; import { ConnectExternalWalletDialogModule } from './views/dialogs/wallets/connect-external-cosmos-dialog/connect-external-wallet-dialog.module'; import { ConnectWalletCompletedDialogModule } from './views/dialogs/wallets/connect-wallet-completed-dialog/connect-wallet-completed-dialog.module'; @@ -61,6 +62,7 @@ import { LoadingDialogModule } from 'projects/shared/src/lib/components/loading- TxFeeConfirmDialogModule, ConnectWalletCompletedDialogModule, ConnectWalletStartDialogModule, + ConnectExternalWalletDialogModule, UnunifiBackupMnemonicAndPrivateKeyWizardDialogModule, UnunifiBackupPrivateKeyWizardDialogModule, UnunifiCreateWalletFormDialogModule, @@ -71,6 +73,7 @@ import { LoadingDialogModule } from 'projects/shared/src/lib/components/loading- UnunifiKeyFormDialogModule, InactiveValidatorModule, TxConfirmDialogModule, + ExternalTxConfirmDialogModule, AppDelegateFormDialogModule, AppDelegateMenuDialogModule, AppRedelegateFormDialogModule, @@ -85,7 +88,6 @@ import { LoadingDialogModule } from 'projects/shared/src/lib/components/loading- AppWithdrawIncentiveAllRewardsFormDialogModule, AppNftsDialogModule, GraphQLModule, - ConnectExternalWalletDialogModule, ], providers: [], bootstrap: [AppComponent], diff --git a/projects/portal/src/app/models/config.service.ts b/projects/portal/src/app/models/config.service.ts index d77f8cf8e..a045c96a9 100644 --- a/projects/portal/src/app/models/config.service.ts +++ b/projects/portal/src/app/models/config.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@angular/core'; import cosmosclient from '@cosmos-client/core'; import { BehaviorSubject, Observable } from 'rxjs'; +import { first } from 'rxjs/operators'; export type Config = { id: string; @@ -23,8 +24,10 @@ export type Config = { apps: AppNavigation[]; denomMetadata: cosmosclient.proto.cosmos.bank.v1beta1.IMetadata[]; strategiesInfo: YieldInfo[]; + externalChains: ExternalChainInfo[]; + yieldAggregatorContractAddress?: string; + outpostDepositContractAddress?: string; certifiedVaults: string[]; - externalChains: ChainInfo[]; extension?: { faucet?: { hasFaucet: boolean; @@ -82,10 +85,12 @@ export type YieldInfo = { }; }; -export type ChainInfo = { - id: string; +export type ExternalChainInfo = { chainId: string; chainName: string; + display: string; + disabled: boolean; + cosmos: boolean; rpc: string; rest: string; bip44: { coinType: number }; @@ -120,6 +125,10 @@ export type ChainInfo = { average: number; high: number; }; + ibcSourcePort?: string; + ibcSourceChannel?: string; + yieldAggregatorContractAddress?: string; + availableTokens?: { symbol: string; denom: string; contractAddress: string; decimal: number }[]; features?: string[]; }; @@ -146,6 +155,10 @@ export class ConfigService { this.config$ = this.configSubject$.asObservable(); } + async getConfig(): Promise { + return this.config$.pipe(first()).toPromise(); + } + async setCurrentConfig(configID: string) { const selectedConfig = this.configs.find((config) => config.id == configID); this.configSubject$.next(selectedConfig); diff --git a/projects/portal/src/app/models/cosmos/bank.model.ts b/projects/portal/src/app/models/cosmos/bank.model.ts index b4d971f60..83d73eaf3 100644 --- a/projects/portal/src/app/models/cosmos/bank.model.ts +++ b/projects/portal/src/app/models/cosmos/bank.model.ts @@ -6,12 +6,13 @@ export type BankSendRequest = { export const denomExponentMap: { [denom: string]: number } = { uguu: 6, uatom: 6, + uosmo: 6, ubtc: 6, ueth: 6, uusd: 6, uusdc: 6, udlp: 6, - '': 0, + '': 6, }; const ibcPattern = /^ibc\//; diff --git a/projects/portal/src/app/models/cosmwasm/cosmwasm.application.service.ts b/projects/portal/src/app/models/cosmwasm/cosmwasm.application.service.ts new file mode 100644 index 000000000..915e49c38 --- /dev/null +++ b/projects/portal/src/app/models/cosmwasm/cosmwasm.application.service.ts @@ -0,0 +1,75 @@ +import { + TxConfirmDialogComponent, + TxConfirmDialogData, +} from '../../views/dialogs/txs/tx-confirm/tx-confirm-dialog.component'; +import { TxCommonApplicationService } from '../cosmos/tx-common.application.service'; +import { ExternalCosmosApplicationService } from '../external-cosmos/external-cosmos.application.service'; +import { CosmwasmService } from './cosmwasm.service'; +import { Dialog } from '@angular/cdk/dialog'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class CosmoWasmApplicationService { + constructor( + private readonly externalCosmosAppService: ExternalCosmosApplicationService, + private readonly txCommonApplication: TxCommonApplicationService, + private readonly cosmwasmService: CosmwasmService, + private readonly dialog: Dialog, + ) {} + + async executeContract( + sender: string, + contractAddress: string, + contractMsg: any, + amounts: { readableAmount: number; denom: string }[], + ) { + const prerequisiteData = await this.txCommonApplication.getPrerequisiteData(); + if (!prerequisiteData) { + return; + } + const { address, publicKey, account, currentCosmosWallet, minimumGasPrice } = prerequisiteData; + + const msg = this.cosmwasmService.buildMsgExecuteContract( + sender, + contractAddress, + contractMsg, + amounts, + ); + + const simulationResult = await this.txCommonApplication.simulate( + msg, + publicKey, + account, + minimumGasPrice, + ); + if (!simulationResult) { + return; + } + const { gas, fee } = simulationResult; + + if (!(await this.txCommonApplication.confirmFeeIfUnUniFiWallet(currentCosmosWallet, fee))) { + return; + } + + const txHash = await this.txCommonApplication.broadcast( + msg, + currentCosmosWallet, + publicKey, + account, + gas, + fee, + ); + if (!txHash) { + return; + } + + await this.dialog + .open(TxConfirmDialogComponent, { + data: { txHash: txHash, msg: 'Deposit to the vault was successful.' }, + }) + .closed.toPromise(); + location.reload(); + } +} diff --git a/projects/portal/src/app/models/cosmwasm/cosmwasm.service.ts b/projects/portal/src/app/models/cosmwasm/cosmwasm.service.ts new file mode 100644 index 000000000..b78646e4e --- /dev/null +++ b/projects/portal/src/app/models/cosmwasm/cosmwasm.service.ts @@ -0,0 +1,34 @@ +import { convertHexStringToUint8Array } from '../../utils/converter'; +import { BankService } from '../cosmos/bank.service'; +import { Injectable } from '@angular/core'; +import cosmwasmclient from '@cosmos-client/cosmwasm'; + +@Injectable({ + providedIn: 'root', +}) +export class CosmwasmService { + constructor(private readonly bankService: BankService) {} + + buildMsgExecuteContract( + sender: string, + contractAddress: string, + msg: any, + amounts: { denom: string; readableAmount: number }[], + ) { + const coins = amounts.map( + (amount) => + this.bankService.convertDenomReadableAmountMapToCoins({ + [amount.denom]: amount.readableAmount, + })[0], + ); + const msgString = JSON.stringify(msg); + const msgUint8Array = convertHexStringToUint8Array(msgString); + const ExecuteMsg = new cosmwasmclient.proto.cosmwasm.wasm.v1.MsgExecuteContract({ + sender, + contract: contractAddress, + msg: msgUint8Array, + funds: coins, + }); + return ExecuteMsg; + } +} diff --git a/projects/portal/src/app/models/ethers/ethers.model.ts b/projects/portal/src/app/models/ethers/ethers.model.ts new file mode 100644 index 000000000..cd44a5c5c --- /dev/null +++ b/projects/portal/src/app/models/ethers/ethers.model.ts @@ -0,0 +1,372 @@ +export const depositToVaultAbi = [ + { + inputs: [ + { + internalType: 'address', + name: 'gateway_', + type: 'address', + }, + { + internalType: 'address', + name: 'gasReceiver_', + type: 'address', + }, + { + internalType: 'string', + name: 'chainName_', + type: 'string', + }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'InvalidAddress', + type: 'error', + }, + { + inputs: [], + name: 'NotApprovedByGateway', + type: 'error', + }, + { + inputs: [], + name: 'chainName', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'string', + name: 'destinationChain', + type: 'string', + }, + { + internalType: 'string', + name: 'destinationAddress', + type: 'string', + }, + { + internalType: 'string', + name: 'depositor', + type: 'string', + }, + { + internalType: 'string', + name: 'vaultDenom', + type: 'string', + }, + { + internalType: 'string', + name: 'vaultId', + type: 'string', + }, + { + internalType: 'string', + name: 'symbol', + type: 'string', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'depositToVault', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'commandId', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'sourceChain', + type: 'string', + }, + { + internalType: 'string', + name: 'sourceAddress', + type: 'string', + }, + { + internalType: 'bytes', + name: 'payload', + type: 'bytes', + }, + ], + name: 'execute', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'commandId', + type: 'bytes32', + }, + { + internalType: 'string', + name: 'sourceChain', + type: 'string', + }, + { + internalType: 'string', + name: 'sourceAddress', + type: 'string', + }, + { + internalType: 'bytes', + name: 'payload', + type: 'bytes', + }, + { + internalType: 'string', + name: 'tokenSymbol', + type: 'string', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'executeWithToken', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'gasReciever', + outputs: [ + { + internalType: 'contract IAxelarGasService', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'gateway', + outputs: [ + { + internalType: 'contract IAxelarGateway', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, +]; + +export const IERC20Abi = [ + { + inputs: [], + name: 'InvalidAccount', + type: 'error', + }, + { + 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: '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', + }, +]; diff --git a/projects/portal/src/app/models/ethers/ethers.service.ts b/projects/portal/src/app/models/ethers/ethers.service.ts new file mode 100644 index 000000000..b5e3231c0 --- /dev/null +++ b/projects/portal/src/app/models/ethers/ethers.service.ts @@ -0,0 +1,153 @@ +import { MetaMaskService } from '../wallets/metamask/metamask.service'; +import { DepositToVaultFromEvmArg } from '../yield-aggregators/yield-aggregator.model'; +import { IERC20Abi, depositToVaultAbi } from './ethers.model'; +import { Injectable } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { AxelarQueryAPI, AxelarQueryAPIConfig, Environment } from '@axelar-network/axelarjs-sdk'; +// import { +// AxelarQueryAPI, +// AxelarQueryAPIFeeResponse, +// Environment, +// EvmChain, +// } from '@axelar-network/axelarjs-sdk'; +// import { TransferFeeResponse } from '@axelar-network/axelarjs-types/axelar/nexus/v1beta1/query'; +import { parseUnits } from '@ethersproject/units'; +import { ethers } from 'ethers'; +import { LoadingDialogService } from 'projects/shared/src/lib/components/loading-dialog'; + +@Injectable({ + providedIn: 'root', +}) +export class EthersService { + constructor( + readonly metaMaskService: MetaMaskService, + private readonly loadingDialog: LoadingDialogService, + private readonly snackBar: MatSnackBar, + ) {} + + async depositToVault( + chainName: string, + contractAddress: string, + tokenAddress: string, + arg: DepositToVaultFromEvmArg, + signerAddress?: string, + ): Promise { + console.log('depositToVault', arg); + + const { ethereum } = window; + if (!ethereum) { + alert('Please install MetaMask extension.'); + return; + } + const amount = arg.amount; + + const provider = new ethers.providers.Web3Provider(ethereum); + const signer = provider.getSigner(signerAddress); + const latestPrice = await provider.getGasPrice(); + console.log('gasPrice', latestPrice.toString()); + const gasPrice = latestPrice.mul(2); + + const deposit = new ethers.Contract(contractAddress, depositToVaultAbi, signer); + const usda = new ethers.Contract(tokenAddress, IERC20Abi, signer); + + try { + const gateway = await deposit.gateway(); + console.log('gateway is ' + gateway); + } catch (error) { + console.error(error); + this.snackBar.open( + `Contract connection failed on ${chainName}. Check the network of wallet app.`, + 'Close', + ); + return; + } + + const blockNum = await provider.getBlockNumber(); + const block = await provider.getBlock(blockNum); + const gasLimit = block.gasLimit; + console.log('gasLimit', gasLimit.toString()); + + // const queryConfig: AxelarQueryAPIConfig = { + // environment: Environment.TESTNET, + // }; + // const sdk = new AxelarQueryAPI(queryConfig); + // const gas = await sdk.estimateGasFee('ethereum-2', arg.destinationChain, arg.erc20, gasLimit); + // console.log(gas); + const approvalDialogRef = this.loadingDialog.open('Waiting for approval...'); + try { + const approveTx = await usda.approve(deposit.address, amount); + await approveTx.wait(); + } catch (error) { + console.error(error); + this.snackBar.open(`Contract connection failed: ${error}`, 'Close'); + return; + } finally { + approvalDialogRef.close(); + } + + const dialogRef = this.loadingDialog.open('Sending...'); + let tx; + try { + tx = await deposit.depositToVault( + arg.destinationChain, + arg.destinationAddress, + arg.depositor, + arg.vaultId, + arg.erc20, + amount, + { gasPrice: gasPrice, gasLimit: gasLimit }, + ); + tx.wait(); + } catch (error) { + console.error(error); + this.snackBar.open(`Contract connection failed: ${error}`, 'Close'); + return; + } finally { + dialogRef.close(); + return tx.hash; + } + } + + async send( + contractAddress: string, + contractAbi: any[], + distChain: string, + distAddress: string, + message: string, + signerAddress?: string, + ): Promise { + try { + const { ethereum } = window; + if (!ethereum) { + alert('Please install MetaMask extension.'); + return; + } + + const provider = new ethers.providers.Web3Provider(ethereum); + const signer = provider.getSigner(signerAddress); + const gasPrice = await provider.getGasPrice(); + console.log('gasPrice', gasPrice.toString()); + + const connectedContract = new ethers.Contract( + contractAddress, + contractAbi, // artifacts/contracts/xxx.sol/xxx.json + signer, + ); + + const blockNum = await provider.getBlockNumber(); + const block = await provider.getBlock(blockNum); + const gasLimit = block.gasLimit; + + let tx = await connectedContract.send(distChain, distAddress, message, { + gasPrice: gasPrice, + gasLimit: gasLimit, + }); + tx.wait(); + return tx.hash; + } catch (error) { + console.error(error); + this.snackBar.open(`Contract connection failed: ${error}`, 'Close'); + return; + } + } +} diff --git a/projects/portal/src/app/models/external-cosmos/external-cosmos-sdk.service.ts b/projects/portal/src/app/models/external-cosmos/external-cosmos-sdk.service.ts new file mode 100644 index 000000000..a40732b09 --- /dev/null +++ b/projects/portal/src/app/models/external-cosmos/external-cosmos-sdk.service.ts @@ -0,0 +1,42 @@ +import { ExternalChainInfo, ConfigService } from '../config.service'; +import { Injectable } from '@angular/core'; +import cosmosclient from '@cosmos-client/core'; +import { first, map } from 'rxjs/operators'; + +@Injectable({ + providedIn: 'root', +}) +export class ExternalCosmosSdkService { + constructor(private readonly configS: ConfigService) {} + + async sdk( + id: string, + ): Promise<{ rest: cosmosclient.CosmosSDK; websocket: cosmosclient.CosmosSDK }> { + const chain$ = this.configS.config$.pipe( + map((config) => config?.externalChains.find((chain) => chain.chainId === id)), + ); + const sdk$ = chain$.pipe( + map((chain) => { + if (!chain) { + throw new Error('chain not found'); + } + return { + rest: new cosmosclient.CosmosSDK(chain.rest, chain.chainId), + websocket: new cosmosclient.CosmosSDK(chain.rpc, chain.chainId), + }; + }), + ); + return sdk$.pipe(first()).toPromise(); + } + + setBech32PrefixToCosmosclient(chain: ExternalChainInfo) { + cosmosclient.config.setBech32Prefix({ + accAddr: chain.bech32Config.bech32PrefixAccAddr, + accPub: chain.bech32Config.bech32PrefixAccPub, + valAddr: chain.bech32Config.bech32PrefixValAddr, + valPub: chain.bech32Config.bech32PrefixValPub, + consAddr: chain.bech32Config.bech32PrefixConsAddr, + consPub: chain.bech32Config.bech32PrefixConsPub, + }); + } +} diff --git a/projects/portal/src/app/models/external-cosmos/external-cosmos-tx.service.ts b/projects/portal/src/app/models/external-cosmos/external-cosmos-tx.service.ts new file mode 100644 index 000000000..cfe59eee8 --- /dev/null +++ b/projects/portal/src/app/models/external-cosmos/external-cosmos-tx.service.ts @@ -0,0 +1,136 @@ +import { convertUnknownAccountToBaseAccount } from '../../utils/converter'; +import { KeplrService } from '../wallets/keplr/keplr.service'; +import { LeapService } from '../wallets/leap/leap.service'; +import { WalletType } from '../wallets/wallet.model'; +import { ExternalCosmosSdkService } from './external-cosmos-sdk.service'; +import { Injectable } from '@angular/core'; +import cosmosclient from '@cosmos-client/core'; +import { BroadcastTx200Response } from '@cosmos-client/core/esm/openapi'; +import Long from 'long'; + +@Injectable({ + providedIn: 'root', +}) +export class ExternalCosmosTxService { + constructor( + private readonly keplrService: KeplrService, + private readonly leapService: LeapService, + private readonly cosmwasmSdkService: ExternalCosmosSdkService, + ) {} + + async buildTxBuilder( + chainId: string, + messages: any[], + cosmosPublicKey: cosmosclient.PubKey, + baseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + gas?: cosmosclient.proto.cosmos.base.v1beta1.ICoin, + fee?: cosmosclient.proto.cosmos.base.v1beta1.ICoin, + ): Promise { + const sdk = await this.cosmwasmSdkService.sdk(chainId).then((sdk) => sdk.rest); + const packedAnyMessages: cosmosclient.proto.google.protobuf.IAny[] = messages.map((message) => + cosmosclient.codec.instanceToProtoAny(message), + ); + const txBody = new cosmosclient.proto.cosmos.tx.v1beta1.TxBody({ + messages: packedAnyMessages, + }); + + const authInfo = new cosmosclient.proto.cosmos.tx.v1beta1.AuthInfo({ + signer_infos: [ + { + public_key: cosmosclient.codec.instanceToProtoAny(cosmosPublicKey), + mode_info: { + single: { + mode: cosmosclient.proto.cosmos.tx.signing.v1beta1.SignMode.SIGN_MODE_DIRECT, + }, + }, + sequence: baseAccount.sequence, + }, + ], + fee: { + amount: fee?.amount && fee.amount !== '0' ? [fee] : [], + gas_limit: Long.fromString(gas?.amount ? gas.amount : '1000000'), + }, + }); + const txBuilder = new cosmosclient.TxBuilder(sdk, txBody, authInfo); + return txBuilder; + } + + async getBaseAccountFromAddress( + chainId: string, + address: string, + ): Promise { + const sdk = await this.cosmwasmSdkService.sdk(chainId).then((sdk) => sdk.rest); + const account = await cosmosclient.rest.auth + .account(sdk, address) + .then((res) => + cosmosclient.codec.protoJSONToInstance( + cosmosclient.codec.castProtoJSONOfProtoAny(res.data?.account), + ), + ) + .catch((_) => undefined); + const baseAccount = convertUnknownAccountToBaseAccount(account); + if (!baseAccount) { + throw Error('Unused Account or Unsupported Account Type!'); + } + return baseAccount; + } + + async signTx( + chainId: string, + txBuilder: cosmosclient.TxBuilder, + signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + walletType: WalletType, + ): Promise { + if (walletType === WalletType.keplr) { + return await this.signTxWithKeplr(chainId, txBuilder, signerBaseAccount); + } + if (walletType === WalletType.leap) { + return await this.signTxWithLeap(chainId, txBuilder, signerBaseAccount); + } + throw Error('Unsupported wallet type!'); + } + + async signTxWithKeplr( + chainId: string, + txBuilder: cosmosclient.TxBuilder, + signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + ): Promise { + const signedTxBuilder = await this.keplrService.signTxExternal( + chainId, + txBuilder, + signerBaseAccount, + ); + return signedTxBuilder; + } + + async signTxWithLeap( + chainId: string, + txBuilder: cosmosclient.TxBuilder, + signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + ): Promise { + const signedTxBuilder = await this.leapService.signTxExternal( + chainId, + txBuilder, + signerBaseAccount, + ); + return signedTxBuilder; + } + + async announceTx(id: string, txBuilder: cosmosclient.TxBuilder): Promise { + const sdk = await this.cosmwasmSdkService.sdk(id).then((sdk) => sdk.rest); + console.log(txBuilder); + + // broadcast tx + const result = await cosmosclient.rest.tx.broadcastTx(sdk, { + tx_bytes: txBuilder.txBytes(), + mode: cosmosclient.rest.tx.BroadcastTxMode.Sync, + }); + + // check broadcast tx error + if (result.data.tx_response?.code !== 0) { + throw Error(result.data.tx_response?.raw_log); + } + + return result.data; + } +} diff --git a/projects/portal/src/app/models/external-cosmos/external-cosmos.application.service.ts b/projects/portal/src/app/models/external-cosmos/external-cosmos.application.service.ts new file mode 100644 index 000000000..1c7e257a8 --- /dev/null +++ b/projects/portal/src/app/models/external-cosmos/external-cosmos.application.service.ts @@ -0,0 +1,85 @@ +import { createCosmosPublicKeyFromUint8Array } from '../../utils/key'; +import { KeyType } from '../keys/key.model'; +import { WalletType } from '../wallets/wallet.model'; +import { ExternalCosmosTxService } from './external-cosmos-tx.service'; +import { Injectable } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import cosmosclient from '@cosmos-client/core'; +import { BroadcastTx200Response } from '@cosmos-client/core/esm/openapi'; +import { LoadingDialogService } from 'projects/shared/src/lib/components/loading-dialog'; + +@Injectable({ + providedIn: 'root', +}) +export class ExternalCosmosApplicationService { + constructor( + private readonly externalCosmosTxService: ExternalCosmosTxService, + private readonly loadingDialog: LoadingDialogService, + private readonly snackBar: MatSnackBar, + ) {} + + async broadcast( + chainName: string, + address: string, + walletType: WalletType, + msg: any, + pubkey: Uint8Array, + ) { + const cosmosPublicKey = createCosmosPublicKeyFromUint8Array(KeyType.secp256k1, pubkey); + if (!cosmosPublicKey) { + console.error('Invalid Pubkey.'); + return; + } + const account = await this.externalCosmosTxService.getBaseAccountFromAddress( + chainName, + address, + ); + if (!account) { + this.snackBar.open(`Unsupported account type.`, 'Close'); + return null; + } + const dialogRef = this.loadingDialog.open('Sending'); + + let txResult: BroadcastTx200Response | undefined; + let txHash: string | undefined; + + try { + const txBuilder = await this.externalCosmosTxService.buildTxBuilder( + chainName, + [msg], // TODO + cosmosPublicKey, + account, + ); + + const signerBaseAccount = await this.externalCosmosTxService.getBaseAccountFromAddress( + chainName, + address, + ); + if (!signerBaseAccount) { + throw Error('Unsupported Account!'); + } + const signedTxBuilder = await this.externalCosmosTxService.signTx( + chainName, + txBuilder, + signerBaseAccount, + walletType, + ); + if (!signedTxBuilder) { + throw Error('Failed to sign!'); + } + + txResult = await this.externalCosmosTxService.announceTx(chainName, txBuilder); + txHash = txResult?.tx_response?.txhash; + if (txHash === undefined) { + throw Error(txResult?.tx_response?.raw_log); + } + return txHash; + } catch (error) { + console.error(error); + this.snackBar.open(`Tx broadcasting failed: ${(error as Error).toString()}`, 'Close'); + return null; + } finally { + dialogRef.close(); + } + } +} diff --git a/projects/portal/src/app/models/ibc/ibc.application.service.ts b/projects/portal/src/app/models/ibc/ibc.application.service.ts new file mode 100644 index 000000000..d39941a1f --- /dev/null +++ b/projects/portal/src/app/models/ibc/ibc.application.service.ts @@ -0,0 +1,85 @@ +import { + TxConfirmDialogComponent, + TxConfirmDialogData, +} from '../../views/dialogs/txs/tx-confirm/tx-confirm-dialog.component'; +import { TxCommonApplicationService } from '../cosmos/tx-common.application.service'; +import { ExternalCosmosApplicationService } from '../external-cosmos/external-cosmos.application.service'; +import { IbcService } from './ibc.service'; +import { Dialog } from '@angular/cdk/dialog'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class IbcApplicationService { + constructor( + private readonly externalCosmosAppService: ExternalCosmosApplicationService, + private readonly txCommonApplication: TxCommonApplicationService, + private readonly ibcService: IbcService, + private readonly dialog: Dialog, + ) {} + + async transfer( + sourcePort: string, + sourceChannel: string, + receiver: string, + memo: any, + timeoutTimestamp: number, + timeoutHeight?: { + revisionNumber: number; + revisionHeight: number; + }, + amount?: { denom: string; readableAmount: number }, + ) { + const prerequisiteData = await this.txCommonApplication.getPrerequisiteData(); + if (!prerequisiteData) { + return; + } + const { address, publicKey, account, currentCosmosWallet, minimumGasPrice } = prerequisiteData; + + const msg = this.ibcService.buildMsgTransfer( + sourcePort, + sourceChannel, + address, + receiver, + memo, + timeoutTimestamp, + timeoutHeight, + amount, + ); + + const simulationResult = await this.txCommonApplication.simulate( + msg, + publicKey, + account, + minimumGasPrice, + ); + if (!simulationResult) { + return; + } + const { gas, fee } = simulationResult; + + if (!(await this.txCommonApplication.confirmFeeIfUnUniFiWallet(currentCosmosWallet, fee))) { + return; + } + + const txHash = await this.txCommonApplication.broadcast( + msg, + currentCosmosWallet, + publicKey, + account, + gas, + fee, + ); + if (!txHash) { + return; + } + + await this.dialog + .open(TxConfirmDialogComponent, { + data: { txHash: txHash, msg: 'Deposit to the vault was successful.' }, + }) + .closed.toPromise(); + location.reload(); + } +} diff --git a/projects/portal/src/app/models/ibc/ibc.service.ts b/projects/portal/src/app/models/ibc/ibc.service.ts new file mode 100644 index 000000000..2c6b0e978 --- /dev/null +++ b/projects/portal/src/app/models/ibc/ibc.service.ts @@ -0,0 +1,49 @@ +import { BankService } from '../cosmos/bank.service'; +import { Injectable } from '@angular/core'; +import cosmosclient from '@cosmos-client/core'; +import ibcclient from '@cosmos-client/ibc'; +import Long from 'long'; + +@Injectable({ + providedIn: 'root', +}) +export class IbcService { + constructor(private readonly bankService: BankService) {} + + buildMsgTransfer( + sourcePort: string, + sourceChannel: string, + sender: string, + receiver: string, + memo: any, + timeoutTimestamp: number, + timeoutHeight?: { + revisionNumber: number; + revisionHeight: number; + }, + coin?: cosmosclient.proto.cosmos.base.v1beta1.ICoin, + ) { + let IHeightTimeout: ibcclient.ibcproto.ibc.core.client.v1.IHeight | undefined; + if (!timeoutHeight) { + IHeightTimeout = undefined; + } else { + IHeightTimeout = { + revision_number: Long.fromNumber(timeoutHeight.revisionNumber), + revision_height: Long.fromNumber(timeoutHeight.revisionHeight), + }; + } + + const memoString = JSON.stringify(memo); + const msg = new ibcclient.ibcproto.ibc.applications.transfer.v1.MsgTransfer({ + source_port: sourcePort, + source_channel: sourceChannel, + token: coin, + sender, + receiver, + timeout_height: IHeightTimeout, + timeout_timestamp: Long.fromNumber(timeoutTimestamp), + memo: memoString, + }); + return msg; + } +} diff --git a/projects/portal/src/app/models/wallets/keplr/keplr.infrastructure.service.ts b/projects/portal/src/app/models/wallets/keplr/keplr.infrastructure.service.ts index 56df34060..8d0fb993e 100644 --- a/projects/portal/src/app/models/wallets/keplr/keplr.infrastructure.service.ts +++ b/projects/portal/src/app/models/wallets/keplr/keplr.infrastructure.service.ts @@ -47,7 +47,7 @@ export class KeplrInfrastructureService implements IKeplrInfrastructureService { alert('There is no external chain data.'); return; } - const chainID = externalChains.find((chain) => chain.id === id)?.chainId; + const chainID = externalChains.find((chain) => chain.chainId === id)?.chainId; if (!chainID) { alert("this chain doesn't exist"); return; @@ -128,7 +128,7 @@ export class KeplrInfrastructureService implements IKeplrInfrastructureService { alert('There is no external chain data.'); return; } - const chainInfo = externalChains.find((chain) => chain.id === id); + const chainInfo = externalChains.find((chain) => chain.chainId === id); if (!chainInfo) { alert("this chain doesn't exist"); return; @@ -213,11 +213,41 @@ export class KeplrInfrastructureService implements IKeplrInfrastructureService { authInfoBytes: Uint8Array, accountNumber: Long, ): Promise { + const chainId = this.configService.configs[0].chainID; + return this.sign(chainId, signer, bodyBytes, authInfoBytes, accountNumber); + } + + private async signDirectExternal( + id: string, + signer: string, + bodyBytes: Uint8Array, + authInfoBytes: Uint8Array, + accountNumber: Long, + ): Promise { + const externalChains = this.configService.configs[0].externalChains; + if (!externalChains) { + alert('There is no external chain data.'); + return; + } + const chainId = externalChains.find((chain) => chain.chainId === id)?.chainId; + if (!chainId) { + alert("this chain doesn't exist"); + return; + } + return this.sign(chainId, signer, bodyBytes, authInfoBytes, accountNumber); + } + + async sign( + chainId: string, + signer: string, + bodyBytes: Uint8Array, + authInfoBytes: Uint8Array, + accountNumber: Long, + ) { if (!window.keplr) { alert('Please install Keplr extension'); return; } - const chainId = this.configService.configs[0].chainID; await window.keplr.enable(chainId); const directSignResponse = await window.keplr.signDirect(chainId, signer, { bodyBytes, @@ -270,4 +300,27 @@ export class KeplrInfrastructureService implements IKeplrInfrastructureService { return txBuilder; } + + async signTxExternal( + id: string, + txBuilder: cosmosclient.TxBuilder, + signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + ): Promise { + const signDoc = txBuilder.signDoc(signerBaseAccount.account_number); + const signKeplr = await this.signDirectExternal( + id, + signerBaseAccount.address, + signDoc.body_bytes, + signDoc.auth_info_bytes, + signDoc.account_number, + ); + if (!signKeplr) { + throw Error('Invalid signature!'); + } + txBuilder.txRaw.auth_info_bytes = signKeplr.authInfoBytes; + txBuilder.txRaw.body_bytes = signKeplr.bodyBytes; + txBuilder.addSignature(signKeplr.signature); + + return txBuilder; + } } diff --git a/projects/portal/src/app/models/wallets/keplr/keplr.service.ts b/projects/portal/src/app/models/wallets/keplr/keplr.service.ts index d99b262d9..463054205 100644 --- a/projects/portal/src/app/models/wallets/keplr/keplr.service.ts +++ b/projects/portal/src/app/models/wallets/keplr/keplr.service.ts @@ -11,6 +11,11 @@ export interface IKeplrInfrastructureService { txBuilder: cosmosclient.TxBuilder, signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, ) => Promise; + signTxExternal: ( + id: string, + txBuilder: cosmosclient.TxBuilder, + signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + ) => Promise; checkWallet: () => Promise; } @@ -39,6 +44,14 @@ export class KeplrService { return await this.iKeplrInfrastructureService.signTx(txBuilder, signerBaseAccount); } + async signTxExternal( + id: string, + txBuilder: cosmosclient.TxBuilder, + signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + ): Promise { + return await this.iKeplrInfrastructureService.signTxExternal(id, txBuilder, signerBaseAccount); + } + async checkWallet(): Promise { return await this.iKeplrInfrastructureService.checkWallet(); } diff --git a/projects/portal/src/app/models/wallets/leap/leap.infrastructure.service.ts b/projects/portal/src/app/models/wallets/leap/leap.infrastructure.service.ts index f4e79de7e..b1ec257ac 100644 --- a/projects/portal/src/app/models/wallets/leap/leap.infrastructure.service.ts +++ b/projects/portal/src/app/models/wallets/leap/leap.infrastructure.service.ts @@ -48,7 +48,7 @@ export class LeapInfrastructureService implements ILeapInfrastructureService { alert('There is no external chain data.'); return; } - const chainID = externalChains.find((chain) => chain.id === id)?.chainId; + const chainID = externalChains.find((chain) => chain.chainId === id)?.chainId; if (!chainID) { alert("this chain doesn't exist"); return; @@ -133,7 +133,7 @@ export class LeapInfrastructureService implements ILeapInfrastructureService { alert('There is no external chain data.'); return; } - const chainInfo = externalChains.find((chain) => chain.id === id); + const chainInfo = externalChains.find((chain) => chain.chainId === id); if (!chainInfo) { alert("this chain doesn't exist"); return; @@ -218,11 +218,41 @@ export class LeapInfrastructureService implements ILeapInfrastructureService { authInfoBytes: Uint8Array, accountNumber: Long, ): Promise { + const chainId = this.configService.configs[0].chainID; + return this.sign(chainId, signer, bodyBytes, authInfoBytes, accountNumber); + } + + private async signDirectExternal( + id: string, + signer: string, + bodyBytes: Uint8Array, + authInfoBytes: Uint8Array, + accountNumber: Long, + ): Promise { + const externalChains = this.configService.configs[0].externalChains; + if (!externalChains) { + alert('There is no external chain data.'); + return; + } + const chainId = externalChains.find((chain) => chain.chainId === id)?.chainId; + if (!chainId) { + alert("this chain doesn't exist"); + return; + } + return this.sign(chainId, signer, bodyBytes, authInfoBytes, accountNumber); + } + + async sign( + chainId: string, + signer: string, + bodyBytes: Uint8Array, + authInfoBytes: Uint8Array, + accountNumber: Long, + ) { if (!window.leap) { alert('Please install Leap extension'); return; } - const chainId = this.configService.configs[0].chainID; await window.leap.enable(chainId); const directSignResponse = await window.leap.signDirect(chainId, signer, { bodyBytes, @@ -275,4 +305,27 @@ export class LeapInfrastructureService implements ILeapInfrastructureService { return txBuilder; } + + async signTxExternal( + id: string, + txBuilder: cosmosclient.TxBuilder, + signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + ): Promise { + const signDoc = txBuilder.signDoc(signerBaseAccount.account_number); + const signLeap = await this.signDirectExternal( + id, + signerBaseAccount.address, + signDoc.body_bytes, + signDoc.auth_info_bytes, + signDoc.account_number, + ); + if (!signLeap) { + throw Error('Invalid signature!'); + } + txBuilder.txRaw.auth_info_bytes = signLeap.authInfoBytes; + txBuilder.txRaw.body_bytes = signLeap.bodyBytes; + txBuilder.addSignature(signLeap.signature); + + return txBuilder; + } } diff --git a/projects/portal/src/app/models/wallets/leap/leap.service.ts b/projects/portal/src/app/models/wallets/leap/leap.service.ts index 4a860cdad..0838731f6 100644 --- a/projects/portal/src/app/models/wallets/leap/leap.service.ts +++ b/projects/portal/src/app/models/wallets/leap/leap.service.ts @@ -11,6 +11,11 @@ export interface ILeapInfrastructureService { txBuilder: cosmosclient.TxBuilder, signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, ) => Promise; + signTxExternal: ( + id: string, + txBuilder: cosmosclient.TxBuilder, + signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + ) => Promise; checkWallet: () => Promise; } @@ -39,6 +44,14 @@ export class LeapService { return await this.iLeapInfrastructureService.signTx(txBuilder, signerBaseAccount); } + async signTxExternal( + id: string, + txBuilder: cosmosclient.TxBuilder, + signerBaseAccount: cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount, + ): Promise { + return await this.iLeapInfrastructureService.signTxExternal(id, txBuilder, signerBaseAccount); + } + async checkWallet(): Promise { return await this.iLeapInfrastructureService.checkWallet(); } diff --git a/projects/portal/src/app/models/wallets/wallet.application.service.ts b/projects/portal/src/app/models/wallets/wallet.application.service.ts index 29216d481..7445ea8f5 100644 --- a/projects/portal/src/app/models/wallets/wallet.application.service.ts +++ b/projects/portal/src/app/models/wallets/wallet.application.service.ts @@ -12,11 +12,11 @@ import { UnunifiSelectCreateImportDialogComponent, } from '../../views/dialogs/wallets/ununifi/ununifi-select-create-import-dialog/ununifi-select-create-import-dialog.component'; import { UnunifiSelectWalletDialogComponent } from '../../views/dialogs/wallets/ununifi/ununifi-select-wallet-dialog/ununifi-select-wallet-dialog.component'; -import { ExternalChain } from '../../views/yieldaggregator/vaults/vault/vault.component'; +import { ExternalChainInfo } from '../config.service'; import { KeplrService } from './keplr/keplr.service'; import { LeapService } from './leap/leap.service'; import { MetaMaskService } from './metamask/metamask.service'; -import { WalletType, StoredWallet } from './wallet.model'; +import { WalletType, StoredWallet, ExternalWallet } from './wallet.model'; import { WalletService } from './wallet.service'; import { Dialog } from '@angular/cdk/dialog'; import { Injectable } from '@angular/core'; @@ -187,21 +187,19 @@ export class WalletApplicationService { return true; } - async getExternalWallet(chain: ExternalChain): Promise { - if (chain.id == 'ununifi') { - return; - } + async getExternalWalletAddress(chain: ExternalChainInfo): Promise { const selectedWalletType = await this.openConnectExternalWalletDialog(chain); const connectedWallet = await (async () => { switch (selectedWalletType) { case WalletType.keplr: - const keplrKey = await this.connectExternalWallet(this.keplrService, chain.id); - return keplrKey?.bech32Address; + const keplrKey = await this.connectExternalWallet(this.keplrService, chain.chainId); + return { walletType: WalletType.keplr, address: keplrKey?.bech32Address, key: keplrKey }; case WalletType.leap: - const leapKey = await this.connectExternalWallet(this.leapService, chain.id); - return leapKey?.bech32Address; + const leapKey = await this.connectExternalWallet(this.leapService, chain.chainId); + return { walletType: WalletType.leap, address: leapKey?.bech32Address, key: leapKey }; case WalletType.metamask: - return await this.metaMaskService.getEthAddress(); + const address = await this.metaMaskService.getEthAddress(); + return { walletType: WalletType.metamask, address: address }; case WalletType.walletConnect: // return await this.connectExternalWallet(this.walletConnectService); this.snackBar.open('WalletConnect is not supported yet.', 'Close'); @@ -265,7 +263,7 @@ export class WalletApplicationService { return selectedWalletType; } - async openConnectExternalWalletDialog(chain: ExternalChain): Promise { + async openConnectExternalWalletDialog(chain: ExternalChainInfo): Promise { const selectedWalletType: WalletType | undefined = await this.dialog .open(ConnectExternalWalletDialogComponent, { data: chain }) .closed.toPromise(); diff --git a/projects/portal/src/app/models/wallets/wallet.model.ts b/projects/portal/src/app/models/wallets/wallet.model.ts index 07d0e8c0a..a52c4b106 100644 --- a/projects/portal/src/app/models/wallets/wallet.model.ts +++ b/projects/portal/src/app/models/wallets/wallet.model.ts @@ -2,7 +2,7 @@ import { KeyType } from '../keys/key.model'; import { Window as LeapWindow } from './leap/leap.model'; import cosmosclient from '@cosmos-client/core'; import { PubKey } from '@cosmos-client/core/esm/types'; -import { Window as KeplrWindow } from '@keplr-wallet/types'; +import { Window as KeplrWindow, Key } from '@keplr-wallet/types'; export enum WalletType { ununifi = 'UnUniFi', @@ -44,3 +44,5 @@ export type CosmosWallet = { public_key: PubKey; address: cosmosclient.AccAddress; }; + +export type ExternalWallet = { walletType: WalletType; address?: string; key?: Key | null }; diff --git a/projects/portal/src/app/models/yield-aggregators/YieldaggregatorAdapter.types.ts b/projects/portal/src/app/models/yield-aggregators/YieldaggregatorAdapter.types.ts index 1fab1ea0d..5df0c8e6f 100644 --- a/projects/portal/src/app/models/yield-aggregators/YieldaggregatorAdapter.types.ts +++ b/projects/portal/src/app/models/yield-aggregators/YieldaggregatorAdapter.types.ts @@ -1,8 +1,8 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. -* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, -* and run the @cosmwasm/ts-codegen generate command to regenerate this file. -*/ + * This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, + * and run the @cosmwasm/ts-codegen generate command to regenerate this file. + */ export interface InstantiateMsg { authority: string; @@ -10,11 +10,13 @@ export interface InstantiateMsg { [k: string]: string; }; } -export type ExecuteMsg = { - update_params: UpdateParamsMsg; -} | { - deposit_to_vault: DepositToVaultMsg; -}; +export type ExecuteMsg = + | { + update_params: UpdateParamsMsg; + } + | { + deposit_to_vault: DepositToVaultMsg; + }; export interface UpdateParamsMsg { authority?: string | null; denom_swap_contract_map?: { @@ -23,8 +25,7 @@ export interface UpdateParamsMsg { } export interface DepositToVaultMsg { depositor: string; - swap_output_denom?: string | null; - vault_id: number; + vault_id: string; } export type QueryMsg = { params: {}; @@ -35,4 +36,4 @@ export interface Params { symbol_swap_contract_map: { [k: string]: Addr; }; -} \ No newline at end of file +} diff --git a/projects/portal/src/app/models/yield-aggregators/yield-aggregator.application.service.ts b/projects/portal/src/app/models/yield-aggregators/yield-aggregator.application.service.ts index f7f3bc14d..b937c278f 100644 --- a/projects/portal/src/app/models/yield-aggregators/yield-aggregator.application.service.ts +++ b/projects/portal/src/app/models/yield-aggregators/yield-aggregator.application.service.ts @@ -1,15 +1,23 @@ +import { ExternalTxConfirmDialogComponent } from '../../views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component'; import { TxConfirmDialogComponent, TxConfirmDialogData, } from '../../views/dialogs/txs/tx-confirm/tx-confirm-dialog.component'; -import { BankQueryService } from '../cosmos/bank.query.service'; +import { Config, ConfigService } from '../config.service'; import { TxCommonApplicationService } from '../cosmos/tx-common.application.service'; +import { EthersService } from '../ethers/ethers.service'; +import { ExternalCosmosSdkService } from '../external-cosmos/external-cosmos-sdk.service'; +import { ExternalCosmosApplicationService } from '../external-cosmos/external-cosmos.application.service'; +import { IbcService } from '../ibc/ibc.service'; +import { WalletType } from '../wallets/wallet.model'; +import { DepositToVaultMsg } from './YieldaggregatorAdapter.types'; +import { DepositToVaultFromEvmArg } from './yield-aggregator.model'; import { YieldAggregatorService } from './yield-aggregator.service'; import { Dialog } from '@angular/cdk/dialog'; import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; import cosmosclient from '@cosmos-client/core'; -import { take } from 'rxjs/operators'; +import { first, map } from 'rxjs/operators'; @Injectable({ providedIn: 'root', @@ -17,25 +25,29 @@ import { take } from 'rxjs/operators'; export class YieldAggregatorApplicationService { constructor( private readonly router: Router, - private readonly bankQueryService: BankQueryService, private readonly yieldAggregatorService: YieldAggregatorService, private readonly txCommonApplication: TxCommonApplicationService, + private readonly externalCosmosSdkService: ExternalCosmosSdkService, + private readonly externalCosmosApp: ExternalCosmosApplicationService, + private readonly ibcService: IbcService, + private readonly ethersService: EthersService, + private readonly configS: ConfigService, private readonly dialog: Dialog, ) {} - async depositToVault(vaultId: string, symbol: string, amount: number) { + async getConfig(): Promise { + const config$ = this.configS.config$.pipe(map((config) => config)); + return config$.pipe(first()).toPromise(); + } + + async depositToVault(vaultId: string, denom: string, amount: number) { const prerequisiteData = await this.txCommonApplication.getPrerequisiteData(); if (!prerequisiteData) { return; } const { address, publicKey, account, currentCosmosWallet, minimumGasPrice } = prerequisiteData; - const msg = this.yieldAggregatorService.buildMsgDepositToVault( - address, - vaultId, - symbol, - amount, - ); + const msg = this.yieldAggregatorService.buildMsgDepositToVault(address, vaultId, denom, amount); const simulationResult = await this.txCommonApplication.simulate( msg, @@ -72,7 +84,151 @@ export class YieldAggregatorApplicationService { location.reload(); } - async withdrawFromVault(vaultId: string, symbol: string, amount: number) { + async depositToVaultFromCosmos( + vaultId: string, + externalChainId: string, + externalAddress: string, + externalDenom: string, + readableAmount: number, + walletType: WalletType, + pubKey: Uint8Array, + ) { + const prerequisiteData = await this.txCommonApplication.getPrerequisiteData(); + if (!prerequisiteData) { + return; + } + const { address } = prerequisiteData; + + const config = await this.getConfig(); + if (!config) { + alert('Invalid UnUniFi config'); + return; + } + const contract = config.yieldAggregatorContractAddress; + if (!contract) { + alert('No contract address for yield aggregator on ' + config.chainID); + return; + } + + const chain = config?.externalChains.find((chain) => chain.chainId === externalChainId); + if (!chain?.ibcSourcePort || !chain.ibcSourceChannel || !chain.availableTokens) { + alert('No chain info for ' + externalChainId); + return; + } + const token = chain.availableTokens.find((token) => token.denom === externalDenom); + if (!token) { + alert('Not certified for ' + externalDenom); + return; + } + + const now = new Date(); + const oneHourLater = new Date(now.getTime() + 60 * 60 * 1000); + const timestamp = oneHourLater.getTime() * Math.pow(10, 6); + const memo: { wasm: { contract: string; msg: { deposit_to_vault: DepositToVaultMsg } } } = { + wasm: { + contract: contract, + msg: { + deposit_to_vault: { + depositor: address, + vault_id: vaultId, + }, + }, + }, + }; + const msg = this.ibcService.buildMsgTransfer( + chain.ibcSourcePort, + chain.ibcSourceChannel, + externalAddress, + contract, + memo, + timestamp, + undefined, + { amount: (readableAmount * Math.pow(10, token.decimal)).toString(), denom: externalDenom }, + ); + console.log('MsgTransfer', msg); + + const txHash = await this.externalCosmosApp.broadcast( + externalChainId, + externalAddress, + walletType, + msg, + pubKey, + ); + if (!txHash) { + return; + } + + await this.dialog + .open(ExternalTxConfirmDialogComponent, { + data: { txHash: txHash, msg: 'Sent the Deposit to vault request to ' + externalChainId }, + }) + .closed.toPromise(); + location.reload(); + } + + async depositToVaultFromEvm( + vaultId: string, + externalChainName: string, + erc20Symbol: string, + readableAmount: number, + externalAddress?: string, + ) { + const prerequisiteData = await this.txCommonApplication.getPrerequisiteData(); + if (!prerequisiteData) { + return; + } + const { address } = prerequisiteData; + const config = await this.getConfig(); + if (!config) { + alert('Invalid UnUniFi config'); + return; + } + const contract = config.yieldAggregatorContractAddress; + if (!contract) { + alert('No contract address for yield aggregator on ' + config.chainID); + return; + } + + const chain = config?.externalChains.find((chain) => chain.chainName === externalChainName); + if (!chain?.yieldAggregatorContractAddress || !chain.availableTokens) { + alert('No chain info for ' + externalChainName); + return; + } + const erc20 = chain.availableTokens.find((token) => token.symbol === erc20Symbol); + if (!erc20) { + alert('Not certified for ' + erc20Symbol); + return; + } + const arg: DepositToVaultFromEvmArg = { + destinationChain: 'ununifi', + // destinationChain: 'neutron', + destinationAddress: contract, + depositor: address, + vaultId: vaultId, + erc20: erc20Symbol, + amount: readableAmount * Math.pow(10, erc20.decimal || 6), + }; + const txHash = await this.ethersService.depositToVault( + externalChainName, + chain.yieldAggregatorContractAddress, + erc20.contractAddress, + arg, + externalAddress, + ); + + if (!txHash) { + console.log("txHash doesn't exist"); + return; + } + await this.dialog + .open(ExternalTxConfirmDialogComponent, { + data: { txHash: txHash, msg: 'Sent the Deposit to vault request to ' + externalChainName }, + }) + .closed.toPromise(); + location.reload(); + } + + async withdrawFromVault(vaultId: string, denom: string, amount: number) { const prerequisiteData = await this.txCommonApplication.getPrerequisiteData(); if (!prerequisiteData) { return; @@ -82,7 +238,7 @@ export class YieldAggregatorApplicationService { const msg = this.yieldAggregatorService.buildMsgWithdrawFromVault( address, vaultId, - symbol, + denom, amount, ); diff --git a/projects/portal/src/app/models/yield-aggregators/yield-aggregator.model.ts b/projects/portal/src/app/models/yield-aggregators/yield-aggregator.model.ts index 7058d68d6..447cee882 100644 --- a/projects/portal/src/app/models/yield-aggregators/yield-aggregator.model.ts +++ b/projects/portal/src/app/models/yield-aggregators/yield-aggregator.model.ts @@ -1,9 +1,29 @@ +import { ExternalWallet } from '../wallets/wallet.model'; + export type DepositToVaultRequest = { vaultId: string; denom: string; readableAmount: number; }; +export type DepositToVaultFromCosmosRequest = { + vaultId: string; + externalChainId: string; + externalWallet: ExternalWallet; + externalDenom: string; + vaultDenom: string; + readableAmount: number; +}; + +export type DepositToVaultFromEvmRequest = { + vaultId: string; + externalChainName: string; + externalWallet: ExternalWallet; + erc20Symbol: string; + vaultDenom: string; + readableAmount: number; +}; + export type WithdrawFromVaultRequest = { vaultId: string; denom: string; @@ -39,3 +59,12 @@ export type OsmosisPools = { apr_superfluid: number; }[]; }[]; + +export type DepositToVaultFromEvmArg = { + destinationChain: string; + destinationAddress: string; + depositor: string; + vaultId: string; + erc20: string; + amount: number; +}; diff --git a/projects/portal/src/app/pages/yieldaggregator/vaults/vault/vault.component.html b/projects/portal/src/app/pages/yieldaggregator/vaults/vault/vault.component.html index c93dc5f7f..bc55eabd1 100644 --- a/projects/portal/src/app/pages/yieldaggregator/vaults/vault/vault.component.html +++ b/projects/portal/src/app/pages/yieldaggregator/vaults/vault/vault.component.html @@ -13,10 +13,13 @@ [vaultBalance]="vaultBalance$ | async" [usdDepositAmount]="usdDepositAmount$ | async" [vaultInfo]="vaultInfo$ | async" - [externalWalletAddress]="externalWalletAddress" + [externalChains]="externalChains$ | async" + [externalWallet]="externalWallet" (changeDeposit)="onChangeDeposit($event)" (changeWithdraw)="onChangeWithdraw($event)" (appDeposit)="onSubmitDeposit($event)" (appWithdraw)="onSubmitWithdraw($event)" (appClickChain)="onClickChain($event)" + (appDepositFromCosmos)="onSubmitDepositFromExternalCosmos($event)" + (appDepositFromEvm)="onSubmitDepositFromEvm($event)" > diff --git a/projects/portal/src/app/pages/yieldaggregator/vaults/vault/vault.component.ts b/projects/portal/src/app/pages/yieldaggregator/vaults/vault/vault.component.ts index 955ea085f..ae80785c0 100644 --- a/projects/portal/src/app/pages/yieldaggregator/vaults/vault/vault.component.ts +++ b/projects/portal/src/app/pages/yieldaggregator/vaults/vault/vault.component.ts @@ -5,20 +5,25 @@ import { BandProtocolService, TokenAmountUSD, } from 'projects/portal/src/app/models/band-protocols/band-protocol.service'; -import { ConfigService, YieldInfo } from 'projects/portal/src/app/models/config.service'; +import { + ConfigService, + ExternalChainInfo, + YieldInfo, +} from 'projects/portal/src/app/models/config.service'; import { getDenomExponent } from 'projects/portal/src/app/models/cosmos/bank.model'; import { BankQueryService } from 'projects/portal/src/app/models/cosmos/bank.query.service'; import { WalletApplicationService } from 'projects/portal/src/app/models/wallets/wallet.application.service'; -import { StoredWallet } from 'projects/portal/src/app/models/wallets/wallet.model'; +import { ExternalWallet, StoredWallet } from 'projects/portal/src/app/models/wallets/wallet.model'; import { WalletService } from 'projects/portal/src/app/models/wallets/wallet.service'; import { YieldAggregatorApplicationService } from 'projects/portal/src/app/models/yield-aggregators/yield-aggregator.application.service'; import { + DepositToVaultFromCosmosRequest, + DepositToVaultFromEvmRequest, DepositToVaultRequest, WithdrawFromVaultRequest, } from 'projects/portal/src/app/models/yield-aggregators/yield-aggregator.model'; import { YieldAggregatorQueryService } from 'projects/portal/src/app/models/yield-aggregators/yield-aggregator.query.service'; import { YieldAggregatorService } from 'projects/portal/src/app/models/yield-aggregators/yield-aggregator.service'; -import { ExternalChain } from 'projects/portal/src/app/views/yieldaggregator/vaults/vault/vault.component'; import { BehaviorSubject, combineLatest, from, Observable, of, timer } from 'rxjs'; import { filter, map, mergeMap } from 'rxjs/operators'; import { @@ -52,7 +57,8 @@ export class VaultComponent implements OnInit { vaultBalance$: Observable; usdDepositAmount$: Observable; vaultInfo$: Observable; - externalWalletAddress: string | undefined; + externalChains$: Observable; + externalWallet: ExternalWallet | undefined; constructor( private route: ActivatedRoute, @@ -185,6 +191,7 @@ export class VaultComponent implements OnInit { ); }), ); + this.externalChains$ = this.configService.config$.pipe(map((config) => config?.externalChains)); } ngOnInit(): void {} @@ -197,6 +204,28 @@ export class VaultComponent implements OnInit { this.iyaApp.depositToVault(data.vaultId, data.denom, data.readableAmount); } + onSubmitDepositFromExternalCosmos(data: DepositToVaultFromCosmosRequest) { + this.iyaApp.depositToVaultFromCosmos( + data.vaultId, + data.externalChainId, + data.externalWallet.address!, + data.externalDenom, + data.readableAmount, + data.externalWallet.walletType, + data.externalWallet.key?.pubKey!, + ); + } + + onSubmitDepositFromEvm(data: DepositToVaultFromEvmRequest) { + this.iyaApp.depositToVaultFromEvm( + data.vaultId, + data.externalChainName, + data.erc20Symbol, + data.readableAmount, + data.externalWallet.address, + ); + } + onChangeWithdraw(amount: number) { this.burnAmount$.next(amount); } @@ -205,7 +234,9 @@ export class VaultComponent implements OnInit { this.iyaApp.withdrawFromVault(data.vaultId, data.denom, data.readableAmount); } - async onClickChain(chain: ExternalChain) { - this.externalWalletAddress = await this.walletApp.getExternalWallet(chain); + async onClickChain(chain?: ExternalChainInfo) { + if (chain) { + this.externalWallet = await this.walletApp.getExternalWalletAddress(chain); + } } } diff --git a/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component.css b/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component.css new file mode 100644 index 000000000..3f1f30f1f --- /dev/null +++ b/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component.css @@ -0,0 +1,4 @@ +.card { + max-height: 70vh; + max-width: 90vw; +} diff --git a/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component.html b/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component.html new file mode 100644 index 000000000..9b0c7715f --- /dev/null +++ b/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component.html @@ -0,0 +1,34 @@ +
+
+ UnUniFi logo + + +

Transaction accepted!

+

{{ txData?.msg }}

+
+ +
+

Tx hash

+

{{ txData?.txHash }}

+
+ +
+ +
+
+
+ +
An error occurred in Tx broadcasting.
+
+ +
+
+
+
diff --git a/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component.ts b/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component.ts new file mode 100644 index 000000000..8c6e7eeb6 --- /dev/null +++ b/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.component.ts @@ -0,0 +1,41 @@ +import { TxConfirmDialogData } from '../tx-confirm/tx-confirm-dialog.component'; +import { Clipboard } from '@angular/cdk/clipboard'; +import { DialogRef, DIALOG_DATA } from '@angular/cdk/dialog'; +import { Component, Inject, OnInit } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; + +@Component({ + selector: 'view-external-tx-confirm-dialog', + templateUrl: './external-tx-confirm-dialog.component.html', + styleUrls: ['./external-tx-confirm-dialog.component.css'], +}) +export class ExternalTxConfirmDialogComponent implements OnInit { + txData?: TxConfirmDialogData; + constructor( + @Inject(DIALOG_DATA) + public readonly data: TxConfirmDialogData, + private readonly dialogRef: DialogRef, + private clipboard: Clipboard, + private readonly snackBar: MatSnackBar, + ) { + data.msg = + data.msg + ' \nPlease check the destination chain explorer for the transaction details.'; + this.txData = data; + } + + ngOnInit(): void {} + + onClickClose() { + this.dialogRef.close(); + } + + copyClipboard(value: string) { + if (value.length > 0) { + this.clipboard.copy(value); + this.snackBar.open('Copied to clipboard', undefined, { + duration: 3000, + }); + } + return false; + } +} diff --git a/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.module.ts b/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.module.ts new file mode 100644 index 000000000..6b520d9df --- /dev/null +++ b/projects/portal/src/app/views/dialogs/txs/external-tx-confirm/external-tx-confirm-dialog.module.ts @@ -0,0 +1,11 @@ +import { MaterialModule } from '../../../material.module'; +import { ExternalTxConfirmDialogComponent } from './external-tx-confirm-dialog.component'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +@NgModule({ + declarations: [ExternalTxConfirmDialogComponent], + imports: [CommonModule, MaterialModule], + exports: [ExternalTxConfirmDialogComponent], +}) +export class ExternalTxConfirmDialogModule {} diff --git a/projects/portal/src/app/views/dialogs/wallets/connect-external-cosmos-dialog/connect-external-wallet-dialog.component.ts b/projects/portal/src/app/views/dialogs/wallets/connect-external-cosmos-dialog/connect-external-wallet-dialog.component.ts index 6959fbcba..c1444c526 100644 --- a/projects/portal/src/app/views/dialogs/wallets/connect-external-cosmos-dialog/connect-external-wallet-dialog.component.ts +++ b/projects/portal/src/app/views/dialogs/wallets/connect-external-cosmos-dialog/connect-external-wallet-dialog.component.ts @@ -1,7 +1,7 @@ import { WalletType } from '../../../../models/wallets/wallet.model'; -import { ExternalChain } from '../../../yieldaggregator/vaults/vault/vault.component'; import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog'; import { Component, Inject, OnInit } from '@angular/core'; +import { ExternalChainInfo } from 'projects/portal/src/app/models/config.service'; @Component({ selector: 'view-connect-external-wallet-dialog', @@ -13,7 +13,7 @@ export class ConnectExternalWalletDialogComponent implements OnInit { constructor( @Inject(DIALOG_DATA) - public readonly data: ExternalChain, + public readonly data: ExternalChainInfo, public dialogRef: DialogRef, ) { if (data.cosmos) { diff --git a/projects/portal/src/app/views/yieldaggregator/vaults/vault/vault.component.html b/projects/portal/src/app/views/yieldaggregator/vaults/vault/vault.component.html index 483806fe0..156180054 100644 --- a/projects/portal/src/app/views/yieldaggregator/vaults/vault/vault.component.html +++ b/projects/portal/src/app/views/yieldaggregator/vaults/vault/vault.component.html @@ -259,7 +259,7 @@

What is the bonus APY?

@@ -267,12 +267,15 @@

What is the bonus APY?

Chain that you deposit from

- + + @@ -284,7 +287,7 @@

Chain that you deposit from

-
+
@@ -294,11 +297,11 @@

Chain that you deposit from

-
+
- + Available balance:
-
+
diff --git a/projects/portal/src/app/views/yieldaggregator/vaults/vault/vault.component.ts b/projects/portal/src/app/views/yieldaggregator/vaults/vault/vault.component.ts index bd8313861..4d5494330 100644 --- a/projects/portal/src/app/views/yieldaggregator/vaults/vault/vault.component.ts +++ b/projects/portal/src/app/views/yieldaggregator/vaults/vault/vault.component.ts @@ -1,8 +1,11 @@ import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core'; import cosmosclient from '@cosmos-client/core'; import { TokenAmountUSD } from 'projects/portal/src/app/models/band-protocols/band-protocol.service'; -import { YieldInfo } from 'projects/portal/src/app/models/config.service'; +import { ExternalChainInfo, YieldInfo } from 'projects/portal/src/app/models/config.service'; +import { ExternalWallet } from 'projects/portal/src/app/models/wallets/wallet.model'; import { + DepositToVaultFromCosmosRequest, + DepositToVaultFromEvmRequest, DepositToVaultRequest, WithdrawFromVaultRequest, } from 'projects/portal/src/app/models/yield-aggregators/yield-aggregator.model'; @@ -14,14 +17,6 @@ import { Vault200Response, } from 'ununifi-client/esm/openapi'; -export type ExternalChain = { - id: string; - display: string; - disabled: boolean; - external: boolean; - cosmos: boolean; -}; - @Component({ selector: 'view-vault', templateUrl: './vault.component.html', @@ -57,7 +52,9 @@ export class VaultComponent implements OnInit, OnChanges { @Input() vaultInfo?: YieldInfo | null; @Input() - externalWalletAddress?: string; + externalChains?: ExternalChainInfo[] | null; + @Input() + externalWallet?: ExternalWallet; @Output() changeDeposit: EventEmitter; @@ -68,18 +65,17 @@ export class VaultComponent implements OnInit, OnChanges { @Output() appWithdraw: EventEmitter; @Output() - appClickChain: EventEmitter; + appClickChain: EventEmitter; + @Output() + appDepositFromCosmos: EventEmitter; + @Output() + appDepositFromEvm: EventEmitter; mintAmount?: number; burnAmount?: number; tab: 'mint' | 'burn' = 'mint'; - selectedChain: ExternalChain = { - id: 'ununifi', - display: 'UnUniFi', - disabled: false, - external: false, - cosmos: true, - }; + selectedChain?: ExternalChainInfo | undefined; + selectedToken?: { symbol: string; denom: string; contractAddress: string; decimal: number }; withdrawOptions = [ { id: 'immediate', @@ -93,71 +89,6 @@ export class VaultComponent implements OnInit, OnChanges { }, ]; withdrawOption = this.withdrawOptions[0]; - chains: ExternalChain[] = [ - { - id: 'ununifi', - display: 'UnUniFi', - disabled: false, - external: false, - cosmos: true, - }, - { - id: 'ethereum', - display: 'Ethereum', - disabled: true, - external: true, - cosmos: false, - }, - { - id: 'avalanche', - display: 'Avalanche', - disabled: true, - external: true, - cosmos: false, - }, - { - id: 'polygon', - display: 'Polygon', - disabled: true, - external: true, - cosmos: false, - }, - { - id: 'arbitrum', - display: 'Arbitrum', - disabled: true, - external: true, - cosmos: false, - }, - { - id: 'cosmoshub', - display: 'Cosmos Hub', - disabled: true, - external: true, - cosmos: true, - }, - { - id: 'neutron', - display: 'Neutron', - disabled: true, - external: true, - cosmos: true, - }, - { - id: 'osmosis', - display: 'Osmosis', - disabled: true, - external: true, - cosmos: true, - }, - { - id: 'sei', - display: 'Sei', - disabled: true, - external: true, - cosmos: true, - }, - ]; constructor(private coinAmountPipe: CoinAmountPipe) { this.changeDeposit = new EventEmitter(); @@ -165,16 +96,18 @@ export class VaultComponent implements OnInit, OnChanges { this.changeWithdraw = new EventEmitter(); this.appWithdraw = new EventEmitter(); this.appClickChain = new EventEmitter(); - this.withdrawOption = this.withdrawOptions[0]; + this.appDepositFromCosmos = new EventEmitter(); + this.appDepositFromEvm = new EventEmitter(); } ngOnInit(): void {} ngOnChanges(): void {} - onClickChain(id: string) { - this.selectedChain = this.chains.find((chain) => chain.id === id)!; + onClickChain(chain?: ExternalChainInfo) { + this.selectedChain = chain; this.appClickChain.emit(this.selectedChain); + this.selectedToken = this.selectedChain?.availableTokens![0]; (global as any).chain_select_modal.close(); } @@ -184,13 +117,51 @@ export class VaultComponent implements OnInit, OnChanges { onSubmitDeposit() { if (!this.mintAmount) { + alert('Please enter the amount to deposit.'); return; } - this.appDeposit.emit({ - vaultId: this.vault?.vault?.id!, - readableAmount: this.mintAmount, - denom: this.vault?.vault?.denom!, - }); + if (!this.vault?.vault?.denom || !this.vault?.vault?.id) { + alert('Invalid vault info.'); + return; + } + if (!this.selectedToken?.denom) { + alert('Invalid token info.'); + return; + } + + if (!this.selectedChain) { + this.appDeposit.emit({ + vaultId: this.vault.vault.id, + readableAmount: this.mintAmount, + denom: this.vault.vault.denom, + }); + } else { + if (!this.externalWallet) { + alert('Please connect your wallet of External Chain.'); + return; + } + if (this.selectedChain.cosmos) { + console.log(this.externalWallet); + this.appDepositFromCosmos.emit({ + vaultId: this.vault.vault.id, + externalChainId: this.selectedChain.chainId, + externalWallet: this.externalWallet, + externalDenom: this.selectedToken.denom, + readableAmount: this.mintAmount, + vaultDenom: this.vault.vault.denom, + }); + } else { + this.appDepositFromEvm.emit({ + vaultId: this.vault.vault.id, + externalChainName: this.selectedChain.chainName, + externalWallet: this.externalWallet, + // todo: fix erc20Symbol + erc20Symbol: 'aUSDC', + readableAmount: this.mintAmount, + vaultDenom: this.vault.vault.denom, + }); + } + } } onWithdrawAmountChange() { @@ -199,6 +170,7 @@ export class VaultComponent implements OnInit, OnChanges { onSubmitWithdraw() { if (!this.burnAmount) { + alert('Please enter the amount to withdraw.'); return; } this.appWithdraw.emit({ diff --git a/projects/portal/src/assets/config.js b/projects/portal/src/assets/config.js index 526df9229..ea61c2ab6 100644 --- a/projects/portal/src/assets/config.js +++ b/projects/portal/src/assets/config.js @@ -14,6 +14,9 @@ const domainCauchyED = 'd.ununifi-test-v1.cauchye.net'; const chainID = 'ununifi-test-v1'; const chainName = 'UnUniFi (test)'; +const yieldAggregatorContractAddress = + 'ununifi1v6qjx5smfdxnh5gr8vprswl60rstyprj3wh4gz5mg7gcl7mtl5xqd9l8a9'; + const bech32Prefix = { accAddr: 'ununifi', accPub: 'ununifipub', @@ -34,11 +37,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', - 'pricefeed', + 'nft', + 'wasm', + 'yieldaggregator', + // 'derivatives', + // 'pricefeed', + // 'nftbackedloan', + // 'nftfactory', + // 'ecosystemincentive', ]; const apps = [ @@ -124,44 +130,44 @@ const denomMetadata = [ symbol: 'DLP', }, { - description: 'ATOM from Osmosis', + description: 'IBC token from transfer/channel-996/uatom', denom_units: [ { - denom: 'ibc/ACBD2CEFAC2CC3ED6EEAF67BBDFDF168F1E4EDA159DFE1CA6B4A57A9CAF4DA11', + denom: 'uatom', exponent: 0, aliases: [], }, ], base: 'ibc/ACBD2CEFAC2CC3ED6EEAF67BBDFDF168F1E4EDA159DFE1CA6B4A57A9CAF4DA11', - name: 'ATOM from Osmosis', + name: 'transfer/channel-996/uatom', display: 'ATOM.osmosis', symbol: 'ATOM', }, { - description: 'OSMO from Osmosis (deprecated)', + description: 'IBC token from transfer/channel-996/uosmo (deprecated)', denom_units: [ { - denom: 'ibc/13B2C536BB057AC79D5616B8EA1B9540EC1F2170718CAFF6F0083C966FFFED0B', + denom: 'uosmo', exponent: 0, aliases: [], }, ], base: 'ibc/13B2C536BB057AC79D5616B8EA1B9540EC1F2170718CAFF6F0083C966FFFED0B', - name: 'OSMO (deprecated)', + name: 'IBC token from transfer/channel-996/uosmo (deprecated)', display: 'OSMO (deprecated)', symbol: 'OSMO', }, { - description: 'OSMO from Osmosis', + description: 'IBC token from transfer/channel-1493/uosmo', denom_units: [ { - denom: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', + denom: 'uosmo', exponent: 0, aliases: [], }, ], base: 'ibc/646315E3B0461F5FA4C5C8968A88FC45D4D5D04A45B98F1B8294DD82F386DD85', - name: 'OSMO', + name: 'transfer/channel-1493/uosmo IBC token', display: 'OSMO', symbol: 'OSMO', }, @@ -218,11 +224,13 @@ const certifiedVaults = ['6', '8', '9', '10', '11']; const externalChains = [ { - id: 'cosmoshub', - chainId: 'cosmoshub-4', - chainName: 'Cosmos Hub', - rpc: 'https://rpc-cosmoshub.keplr.app', - rest: 'https://lcd-cosmoshub.keplr.app', + chainId: 'theta-testnet-001', + chainName: 'cosmoshub(test)', + display: 'Cosmoshub Theta Testnet', + disabled: true, + cosmos: true, + rpc: 'https://rpc.sentry-01.theta-testnet.polypore.xyz', + rest: 'https://rest.sentry-01.theta-testnet.polypore.xyz', bip44: { coinType: 118 }, bech32Config: { bech32PrefixAccAddr: 'cosmos', @@ -265,13 +273,25 @@ const externalChains = [ coinImageUrl: 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', }, + availableTokens: [ + { + symbol: 'ATOM', + denom: 'uatom', + contractAddress: '', + decimal: 6, + }, + ], }, { - id: 'osmosis', - chainId: 'osmosis-1', - chainName: 'Osmosis', - rpc: 'https://rpc-osmosis.keplr.app', - rest: 'https://lcd-osmosis.keplr.app', + chainId: 'osmo-test-5', + chainName: 'osmosis(test)', + display: 'Osmosis testnet 5', + disabled: false, + cosmos: true, + rpc: 'https://rpc.osmotest5.osmosis.zone', + rest: 'https://lcd.osmotest5.osmosis.zone', + ibcSourcePort: 'transfer', + ibcSourceChannel: 'channel-1493', bip44: { coinType: 118 }, bech32Config: { bech32PrefixAccAddr: 'osmo', @@ -322,6 +342,132 @@ const externalChains = [ coinImageUrl: 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', }, + availableTokens: [ + { + symbol: 'OSMO', + denom: 'uosmo', + contractAddress: '', + decimal: 6, + }, + ], + }, + { + chainId: '5', + chainName: 'ethereum-2', + display: 'Ethereum Goerli Testnet', + disabled: false, + cosmos: false, + yieldAggregatorContractAddress: '0x75d8dCEa1Fa5E47526020eE8ADbfAbd583A9a134', + availableTokens: [ + { + symbol: 'aUSDC', + denom: 'uausdc', + contractAddress: '0x254d06f33bDc5b8ee05b2ea472107E300226659A', + decimal: 6, + }, + { + symbol: 'wAXL', + denom: 'uaxl', + contractAddress: '0x23ee2343B892b1BB63503a4FAbc840E0e2C6810f', + decimal: 6, + }, + { + symbol: 'WETH', + denom: 'eth-wei', + contractAddress: '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6', + decimal: 6, + }, + ], + }, + { + chainId: '80001', + chainName: 'Polygon', + display: 'Polygon Mumbai Testnet', + disabled: false, + cosmos: false, + yieldAggregatorContractAddress: '0xa5609cb1af27a7C29466A83FC46D84F32e197D4e', + availableTokens: [ + { + symbol: 'aUSDC', + denom: 'uausdc', + contractAddress: '0x2c852e740B62308c46DD29B982FBb650D063Bd07', + decimal: 6, + }, + { + symbol: 'wAXL', + denom: 'uaxl', + contractAddress: '0x9c79782d2B13CAC0Fa2FB00D188104fe6f98E533', + decimal: 6, + }, + { + symbol: 'axlWETH', + denom: 'eth-wei', + contractAddress: '0x786D82A436EA836A8669919D605FfeaEFa51744e', + decimal: 6, + }, + { + symbol: 'WMATIC', + denom: 'wmatic-wei', + contractAddress: '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', + decimal: 6, + }, + ], + }, + { + chainId: '43113', + chainName: 'Avalanche', + display: 'Avalanche Fuji Testnet', + disabled: true, + cosmos: false, + yieldAggregatorContractAddress: '', + availableTokens: [ + { + symbol: 'aUSDC', + denom: 'uausdc', + contractAddress: '0x57F1c63497AEe0bE305B8852b354CEc793da43bB', + decimal: 6, + }, + { + symbol: 'wAXL', + denom: 'uaxl', + contractAddress: '0xa8B51e6517f9A6Ab7b247bF10b71b1A738eD8E50', + decimal: 6, + }, + { + symbol: 'axlWETH', + denom: 'eth-wei', + contractAddress: '0xe840BE8D9aB1ACD5AfC7168b05EC350B7FD18709', + decimal: 6, + }, + { + symbol: 'WAVAX', + denom: 'wavax-wei', + contractAddress: '0xd00ae08403B9bbb9124bB305C09058E32C39A48c', + decimal: 6, + }, + ], + }, + { + chainId: '421613', + chainName: 'arbitrum', + display: 'Arbitrum Goerli Testnet', + disabled: true, + cosmos: false, + yieldAggregatorContractAddress: '', + availableTokens: [ + { + symbol: 'aUSDC', + denom: 'uausdc', + contractAddress: '0x254d06f33bDc5b8ee05b2ea472107E300226659A', + decimal: 6, + }, + { + symbol: 'wAXL', + denom: 'uaxl', + contractAddress: '0x23ee2343B892b1BB63503a4FAbc840E0e2C6810f', + decimal: 6, + }, + ], }, ]; @@ -345,6 +491,7 @@ const configs = [ strategiesInfo, certifiedVaults, externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { @@ -379,6 +526,7 @@ const configs = [ strategiesInfo, certifiedVaults, externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { @@ -413,6 +561,7 @@ const configs = [ strategiesInfo, certifiedVaults, externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { @@ -447,6 +596,7 @@ const configs = [ strategiesInfo, certifiedVaults, externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { diff --git a/projects/portal/src/assets/config.tmp.js b/projects/portal/src/assets/config.tmp.js index c95ea8d97..ed200bd2e 100644 --- a/projects/portal/src/assets/config.tmp.js +++ b/projects/portal/src/assets/config.tmp.js @@ -7,12 +7,14 @@ const faucetUethPort = location.protocol === 'https:' ? 8007 : 8006; const faucetEuuPort = location.protocol === 'https:' ? 8009 : 8008; const developerPort = location.protocol === 'https:' ? 3040 : 3030; -// To Do write chain config const domainCauchyEA = 'ununifi-alpha-test.cauchye.net'; const chainID = 'ununifi-alpha-test'; const chainName = 'UnUniFi (alpha-test)'; +const yieldAggregatorContractAddress = + 'ununifi1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqhp8g9l'; + const bech32Prefix = { accAddr: 'ununifi', accPub: 'ununifipub', @@ -33,11 +35,14 @@ const messageModules = [ 'ibc', 'slashing', 'staking', - 'auction', - 'ununifidist', - 'cdp', - 'incentive', + 'nft', + 'wasm', + 'yieldaggregator', + 'derivatives', 'pricefeed', + 'nftbackedloan', + 'nftfactory', + 'ecosystemincentive', ]; const apps = [ @@ -175,6 +180,173 @@ const denomMetadata = [ display: 'DLP', symbol: 'DLP', }, + { + description: 'IBC token from transfer/channel-1786/uosmo', + denom_units: [ + { + denom: 'uosmo', + exponent: 0, + aliases: [], + }, + ], + base: 'ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518', + name: 'IBC token from transfer/channel-1786/uosmo', + display: 'OSMO.osmosis', + symbol: 'OSMO', + }, +]; + +const externalChains = [ + { + chainId: 'theta-testnet-001', + chainName: 'cosmoshub(test)', + display: 'Cosmoshub Theta Testnet', + disabled: true, + cosmos: true, + rpc: 'https://rpc.sentry-01.theta-testnet.polypore.xyz', + rest: 'https://rest.sentry-01.theta-testnet.polypore.xyz', + bip44: { coinType: 118 }, + bech32Config: { + bech32PrefixAccAddr: 'cosmos', + bech32PrefixAccPub: 'cosmospub', + bech32PrefixConsAddr: 'cosmosvalcons', + bech32PrefixConsPub: 'cosmosvalconspub', + bech32PrefixValAddr: 'cosmosvaloper', + bech32PrefixValPub: 'cosmosvaloperpub', + }, + currencies: [ + { + coinDecimals: 6, + coinDenom: 'ATOM', + coinGeckoId: 'cosmos', + coinMinimalDenom: 'uatom', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', + }, + ], + feeCurrencies: [ + { + coinDecimals: 6, + coinDenom: 'ATOM', + coinGeckoId: 'cosmos', + coinMinimalDenom: 'uatom', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', + gasPriceStep: { + average: 0.025, + high: 0.03, + low: 0.01, + }, + }, + ], + stakeCurrency: { + coinDecimals: 6, + coinDenom: 'ATOM', + coinGeckoId: 'cosmos', + coinMinimalDenom: 'uatom', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/cosmoshub/uatom.png', + }, + }, + { + chainId: 'osmo-test-5', + chainName: 'osmosis(test)', + display: 'Osmosis testnet 5', + disabled: false, + cosmos: true, + rpc: 'https://rpc.osmotest5.osmosis.zone', + rest: 'https://lcd.osmotest5.osmosis.zone', + ibcSourcePort: 'transfer', + ibcSourceChannel: 'channel-1858', + bip44: { coinType: 118 }, + bech32Config: { + bech32PrefixAccAddr: 'osmo', + bech32PrefixAccPub: 'osmopub', + bech32PrefixValAddr: 'osmovaloper', + bech32PrefixValPub: 'osmovaloperpub', + bech32PrefixConsAddr: 'osmovalcons', + bech32PrefixConsPub: 'osmovalconspub', + }, + currencies: [ + { + coinDenom: 'OSMO', + coinMinimalDenom: 'uosmo', + coinDecimals: 6, + coinGeckoId: 'osmosis', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', + }, + { + coinDenom: 'ION', + coinMinimalDenom: 'uion', + coinDecimals: 6, + coinGeckoId: 'ion', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uion.png', + }, + ], + feeCurrencies: [ + { + coinDenom: 'OSMO', + coinMinimalDenom: 'uosmo', + coinDecimals: 6, + coinGeckoId: 'osmosis', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', + gasPriceStep: { + low: 0.0025, + average: 0.025, + high: 0.04, + }, + }, + ], + stakeCurrency: { + coinDenom: 'OSMO', + coinMinimalDenom: 'uosmo', + coinDecimals: 6, + coinGeckoId: 'osmosis', + coinImageUrl: + 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/osmosis/uosmo.png', + }, + availableTokens: [ + { + symbol: 'OSMO', + denom: 'uosmo', + contractAddress: '', + decimal: 6, + }, + ], + }, + { + chainId: '5', + chainName: 'ethereum-2', + display: 'Ethereum Goerli Testnet', + disabled: false, + cosmos: false, + yieldAggregatorContractAddress: '0x75d8dCEa1Fa5E47526020eE8ADbfAbd583A9a134', + availableTokens: [ + { + symbol: 'aUSDC', + contractAddress: '0x254d06f33bDc5b8ee05b2ea472107E300226659A', + decimal: 6, + }, + ], + }, + { + chainId: '80001', + chainName: 'Polygon', + display: 'Polygon Mumbai Testnet', + disabled: false, + cosmos: false, + yieldAggregatorContractAddress: '0xa5609cb1af27a7C29466A83FC46D84F32e197D4e', + availableTokens: [ + { + symbol: 'aUSDC', + contractAddress: '0x2c852e740B62308c46DD29B982FBb650D063Bd07', + decimal: 6, + }, + ], + }, ]; const configs = [ @@ -194,6 +366,8 @@ const configs = [ ], apps, denomMetadata, + externalChains, + yieldAggregatorContractAddress, extension: { faucet: [ { diff --git a/tsconfig.json b/tsconfig.json index 14cdfb43c..48c26194b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,6 +27,7 @@ "module": "es2020", "lib": ["es2020", "dom", "esnext.asynciterable"], "allowSyntheticDefaultImports": true, + "skipLibCheck": true, "types": ["node", "jest"] }, "angularCompilerOptions": {