rebrand(lethean): update branding, ports, and config for Lethean blockchain
- Coin: Zano → Lethean, ticker: ZAN/ZANO → LTHN - Ports: 11211 → 36941 (mainnet RPC), 46941 (testnet RPC) - Wallet: 11212 → 36944/46944 - Address prefix: iTHN - URLs: zano.org → lethean.io - Explorer links: explorer.lthn.io Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5b5e5209ca
commit
b0106a4837
37 changed files with 194 additions and 223 deletions
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
"zano"
|
"lethean"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
24
Dockerfile
Normal file
24
Dockerfile
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Build-only: produces the Chrome extension bundle via webpack
|
||||||
|
# The local dep lethean_web3 (file:../zano_web3) must be pre-built
|
||||||
|
FROM node:22-alpine AS builder
|
||||||
|
|
||||||
|
WORKDIR /workspace
|
||||||
|
|
||||||
|
# Build the lethean_web3 dependency first
|
||||||
|
COPY zano_web3/package.json zano_web3/package-lock.json ./zano_web3/
|
||||||
|
RUN cd zano_web3 && npm ci
|
||||||
|
|
||||||
|
COPY zano_web3/ ./zano_web3/
|
||||||
|
RUN cd zano_web3 && npm run build
|
||||||
|
|
||||||
|
# Now build the extension
|
||||||
|
COPY zano-extension/package.json zano-extension/package-lock.json ./zano-extension/
|
||||||
|
RUN cd zano-extension && npm ci
|
||||||
|
|
||||||
|
COPY zano-extension/ ./zano-extension/
|
||||||
|
RUN cd zano-extension && npm run build
|
||||||
|
|
||||||
|
# Export stage: only the built extension artefact
|
||||||
|
FROM scratch AS export
|
||||||
|
|
||||||
|
COPY --from=builder /workspace/zano-extension/build /build
|
||||||
14
README.md
14
README.md
|
|
@ -1,25 +1,25 @@
|
||||||
# Zano Companion
|
# Lethean Companion
|
||||||
|
|
||||||
Zano Companion is a browser extension that enhances your experience with Zano-based dApps by providing seamless wallet integration, transaction signing, and more.
|
Lethean Companion is a browser extension that enhances your experience with Lethean-based dApps by providing seamless wallet integration, transaction signing, and more.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Connect your Zano wallet to web applications securely.
|
- Connect your Lethean wallet to web applications securely.
|
||||||
- Sign transactions and messages directly from the extension.
|
- Sign transactions and messages directly from the extension.
|
||||||
- Easily access your balance and transaction history.
|
- Easily access your balance and transaction history.
|
||||||
- Compatible with dApps in the Zano ecosystem.
|
- Compatible with dApps in the Lethean ecosystem.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Chrome Web Store
|
### Chrome Web Store
|
||||||
|
|
||||||
Install Zano Companion from the [Chrome Web Store](https://chromewebstore.google.com/detail/zano-companion/akcgnllhhhkcpmlenfpicmcpgfpindlb)
|
Install Lethean Companion from the Chrome Web Store.
|
||||||
|
|
||||||
### Manual Installation
|
### Manual Installation
|
||||||
|
|
||||||
If you prefer to install manually:
|
If you prefer to install manually:
|
||||||
|
|
||||||
- Download the latest release from [GitHub Releases](https://github.com/hyle-team/zano-extension/releases).
|
- Download the latest release from [GitHub Releases](https://github.com/lethean-io/lethean-extension/releases).
|
||||||
- Extract the archive.
|
- Extract the archive.
|
||||||
- Open Chrome and navigate to chrome://extensions/.
|
- Open Chrome and navigate to chrome://extensions/.
|
||||||
- Enable Developer mode (top-right corner).
|
- Enable Developer mode (top-right corner).
|
||||||
|
|
@ -27,7 +27,7 @@ If you prefer to install manually:
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Open the extension and connect your Zano wallet.
|
Open the extension and connect your Lethean wallet.
|
||||||
Approve connection requests from supported dApps.
|
Approve connection requests from supported dApps.
|
||||||
Sign transactions securely.
|
Sign transactions securely.
|
||||||
|
|
||||||
|
|
|
||||||
155
package-lock.json
generated
155
package-lock.json
generated
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"name": "zano-extension",
|
"name": "lethean-extension",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "zano-extension",
|
"name": "lethean-extension",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@testing-library/jest-dom": "^5.16.5",
|
"@testing-library/jest-dom": "^5.16.5",
|
||||||
|
|
@ -18,14 +18,14 @@
|
||||||
"decimal.js": "^10.4.3",
|
"decimal.js": "^10.4.3",
|
||||||
"dompurify": "^3.3.1",
|
"dompurify": "^3.3.1",
|
||||||
"json-bigint": "^1.0.0",
|
"json-bigint": "^1.0.0",
|
||||||
|
"lethean_web3": "file:../zano_web3",
|
||||||
"node-forge": "^1.3.2",
|
"node-forge": "^1.3.2",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-chrome-extension-router": "^1.4.0",
|
"react-chrome-extension-router": "^1.4.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-id-generator": "^3.0.2",
|
"react-id-generator": "^3.0.2",
|
||||||
"sha256": "^0.2.0",
|
"sha256": "^0.2.0",
|
||||||
"web-vitals": "^2.1.4",
|
"web-vitals": "^2.1.4"
|
||||||
"zano_web3": "^9.2.2"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.21.0",
|
"@babel/cli": "^7.21.0",
|
||||||
|
|
@ -66,6 +66,25 @@
|
||||||
"webpack-merge": "^5.8.0"
|
"webpack-merge": "^5.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"../zano_web3": {
|
||||||
|
"name": "lethean_web3",
|
||||||
|
"version": "9.2.2",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/big.js": "^6.2.2",
|
||||||
|
"@types/node": "^20.14.12",
|
||||||
|
"@types/node-forge": "^1.3.11",
|
||||||
|
"@types/react": "^18.3.3",
|
||||||
|
"@types/uuid": "^10.0.0",
|
||||||
|
"axios": "^1.7.2",
|
||||||
|
"big.js": "^6.2.1",
|
||||||
|
"decimal.js": "^10.4.3",
|
||||||
|
"node-forge": "^1.3.1",
|
||||||
|
"react": "^18.3.1",
|
||||||
|
"typescript": "^5.5.4",
|
||||||
|
"uuid": "^10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@adobe/css-tools": {
|
"node_modules/@adobe/css-tools": {
|
||||||
"version": "4.4.4",
|
"version": "4.4.4",
|
||||||
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz",
|
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz",
|
||||||
|
|
@ -4125,6 +4144,7 @@
|
||||||
"version": "6.2.2",
|
"version": "6.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.2.tgz",
|
||||||
"integrity": "sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==",
|
"integrity": "sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/body-parser": {
|
"node_modules/@types/body-parser": {
|
||||||
|
|
@ -4393,6 +4413,7 @@
|
||||||
"version": "1.3.11",
|
"version": "1.3.11",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
|
||||||
"integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
|
"integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
|
|
@ -4530,12 +4551,6 @@
|
||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/uuid": {
|
|
||||||
"version": "10.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
|
|
||||||
"integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/@types/ws": {
|
"node_modules/@types/ws": {
|
||||||
"version": "8.18.1",
|
"version": "8.18.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
|
||||||
|
|
@ -5499,7 +5514,8 @@
|
||||||
"node_modules/asynckit": {
|
"node_modules/asynckit": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/at-least-node": {
|
"node_modules/at-least-node": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
|
@ -5568,33 +5584,6 @@
|
||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/axios": {
|
|
||||||
"version": "1.13.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz",
|
|
||||||
"integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"follow-redirects": "^1.15.11",
|
|
||||||
"form-data": "^4.0.5",
|
|
||||||
"proxy-from-env": "^1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/axios/node_modules/form-data": {
|
|
||||||
"version": "4.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
|
|
||||||
"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"asynckit": "^0.4.0",
|
|
||||||
"combined-stream": "^1.0.8",
|
|
||||||
"es-set-tostringtag": "^2.1.0",
|
|
||||||
"hasown": "^2.0.2",
|
|
||||||
"mime-types": "^2.1.12"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/axobject-query": {
|
"node_modules/axobject-query": {
|
||||||
"version": "3.1.1",
|
"version": "3.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
|
||||||
|
|
@ -6315,6 +6304,7 @@
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
||||||
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"es-errors": "^1.3.0",
|
"es-errors": "^1.3.0",
|
||||||
|
|
@ -6812,6 +6802,7 @@
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"delayed-stream": "~1.0.0"
|
"delayed-stream": "~1.0.0"
|
||||||
},
|
},
|
||||||
|
|
@ -7902,6 +7893,7 @@
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||||
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.4.0"
|
"node": ">=0.4.0"
|
||||||
}
|
}
|
||||||
|
|
@ -8173,6 +8165,7 @@
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||||
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"call-bind-apply-helpers": "^1.0.1",
|
"call-bind-apply-helpers": "^1.0.1",
|
||||||
|
|
@ -8402,6 +8395,7 @@
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||||
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
|
|
@ -8411,6 +8405,7 @@
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
||||||
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
|
|
@ -8446,6 +8441,7 @@
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
||||||
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"es-errors": "^1.3.0"
|
"es-errors": "^1.3.0"
|
||||||
|
|
@ -8458,6 +8454,7 @@
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
|
||||||
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"es-errors": "^1.3.0",
|
"es-errors": "^1.3.0",
|
||||||
|
|
@ -9747,6 +9744,7 @@
|
||||||
"version": "1.15.11",
|
"version": "1.15.11",
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
|
||||||
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
|
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
|
||||||
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "individual",
|
"type": "individual",
|
||||||
|
|
@ -9975,6 +9973,7 @@
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||||
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
|
@ -10045,6 +10044,7 @@
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||||
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"call-bind-apply-helpers": "^1.0.2",
|
"call-bind-apply-helpers": "^1.0.2",
|
||||||
|
|
@ -10084,6 +10084,7 @@
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
||||||
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dunder-proto": "^1.0.1",
|
"dunder-proto": "^1.0.1",
|
||||||
|
|
@ -10250,6 +10251,7 @@
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||||
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
|
|
@ -10358,6 +10360,7 @@
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||||
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
|
|
@ -10370,6 +10373,7 @@
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
||||||
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"has-symbols": "^1.0.3"
|
"has-symbols": "^1.0.3"
|
||||||
|
|
@ -10385,6 +10389,7 @@
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||||
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"function-bind": "^1.1.2"
|
"function-bind": "^1.1.2"
|
||||||
|
|
@ -13780,6 +13785,10 @@
|
||||||
"shell-quote": "^1.7.3"
|
"shell-quote": "^1.7.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/lethean_web3": {
|
||||||
|
"resolved": "../zano_web3",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/leven": {
|
"node_modules/leven": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
|
||||||
|
|
@ -14324,6 +14333,7 @@
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||||
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
|
|
@ -14422,6 +14432,7 @@
|
||||||
"version": "1.52.0",
|
"version": "1.52.0",
|
||||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||||
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
|
|
@ -14430,6 +14441,7 @@
|
||||||
"version": "2.1.35",
|
"version": "2.1.35",
|
||||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mime-db": "1.52.0"
|
"mime-db": "1.52.0"
|
||||||
},
|
},
|
||||||
|
|
@ -16881,12 +16893,6 @@
|
||||||
"node": ">= 0.10"
|
"node": ">= 0.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/proxy-from-env": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/psl": {
|
"node_modules/psl": {
|
||||||
"version": "1.9.0",
|
"version": "1.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
|
||||||
|
|
@ -21039,67 +21045,6 @@
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"node_modules/zano_web3": {
|
|
||||||
"version": "9.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/zano_web3/-/zano_web3-9.2.2.tgz",
|
|
||||||
"integrity": "sha512-WDTgMEZ8p5fpR/TJjq/J7c8bfo7Gn5mD0pQHmvR8PCsVpwzdgHNa0PGvuzw9j1WjA6IiMnCk5MMhK6JPHfvHgA==",
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@types/big.js": "^6.2.2",
|
|
||||||
"@types/node": "^20.14.12",
|
|
||||||
"@types/node-forge": "^1.3.11",
|
|
||||||
"@types/react": "^18.3.3",
|
|
||||||
"@types/uuid": "^10.0.0",
|
|
||||||
"axios": "^1.7.2",
|
|
||||||
"big.js": "^6.2.1",
|
|
||||||
"decimal.js": "^10.4.3",
|
|
||||||
"node-forge": "^1.3.1",
|
|
||||||
"react": "^18.3.1",
|
|
||||||
"typescript": "^5.5.4",
|
|
||||||
"uuid": "^10.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/zano_web3/node_modules/@types/node": {
|
|
||||||
"version": "20.19.33",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz",
|
|
||||||
"integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"undici-types": "~6.21.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/zano_web3/node_modules/typescript": {
|
|
||||||
"version": "5.9.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
|
||||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"bin": {
|
|
||||||
"tsc": "bin/tsc",
|
|
||||||
"tsserver": "bin/tsserver"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14.17"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/zano_web3/node_modules/undici-types": {
|
|
||||||
"version": "6.21.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
|
|
||||||
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/zano_web3/node_modules/uuid": {
|
|
||||||
"version": "10.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
|
|
||||||
"integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
|
|
||||||
"funding": [
|
|
||||||
"https://github.com/sponsors/broofa",
|
|
||||||
"https://github.com/sponsors/ctavan"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"uuid": "dist/bin/uuid"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "zano-extension",
|
"name": "lethean-extension",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
"react-id-generator": "^3.0.2",
|
"react-id-generator": "^3.0.2",
|
||||||
"sha256": "^0.2.0",
|
"sha256": "^0.2.0",
|
||||||
"web-vitals": "^2.1.4",
|
"web-vitals": "^2.1.4",
|
||||||
"zano_web3": "^9.2.2"
|
"lethean_web3": "file:../zano_web3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
|
|
|
||||||
BIN
public/images/lethean_128px.png
Normal file
BIN
public/images/lethean_128px.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
BIN
public/images/lethean_16px.png
Normal file
BIN
public/images/lethean_16px.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 654 B |
BIN
public/images/lethean_48px.png
Normal file
BIN
public/images/lethean_48px.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.1 KiB |
|
|
@ -4,10 +4,10 @@
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="theme-color" content="#000000" />
|
<meta name="theme-color" content="#000000" />
|
||||||
<meta name="description" content="Zano browser walslet extension" />
|
<meta name="description" content="Lethean browser wallet extension" />
|
||||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||||
<title>Zano extension</title>
|
<title>Lethean extension</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "Zano Companion",
|
"name": "Lethean Companion",
|
||||||
"version": "1.1.10",
|
"version": "1.1.10",
|
||||||
"description": "A browser extension for Zano wallet app",
|
"description": "A browser extension for Lethean wallet app",
|
||||||
"permissions": ["storage", "network"],
|
"permissions": ["storage", "network"],
|
||||||
"content_security_policy": {
|
"content_security_policy": {
|
||||||
"extension_pages": "script-src 'self'; object-src 'self'; connect-src 'self' http://localhost:* https://api.coingecko.com https://api.zano.org https://explorer.zano.org;"
|
"extension_pages": "script-src 'self'; object-src 'self'; connect-src 'self' http://localhost:* https://api.coingecko.com https://explorer.lthn.io https://trade.lthn.io;"
|
||||||
},
|
},
|
||||||
"action": {
|
"action": {
|
||||||
"default_popup": "index.html",
|
"default_popup": "index.html",
|
||||||
"default_icon": {
|
"default_icon": {
|
||||||
"16": "images/zano_16px.png",
|
"16": "images/lethean_16px.png",
|
||||||
"48": "images/zano_48px.png",
|
"48": "images/lethean_48px.png",
|
||||||
"128": "images/zano_128px.png"
|
"128": "images/lethean_128px.png"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"background": {
|
"background": {
|
||||||
|
|
@ -20,19 +20,19 @@
|
||||||
},
|
},
|
||||||
"content_scripts": [
|
"content_scripts": [
|
||||||
{
|
{
|
||||||
"matches": ["<all_urls>"],
|
"matches": ["https://trade.lthn.io/*", "https://explorer.lthn.io/*", "https://*.lethean.io/*", "http://localhost:*/*"],
|
||||||
"js": ["static/js/content.bundle.js"]
|
"js": ["static/js/content.bundle.js"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"world": "MAIN",
|
"world": "MAIN",
|
||||||
"js": ["static/js/inject.bundle.js"],
|
"js": ["static/js/inject.bundle.js"],
|
||||||
"matches": ["<all_urls>"],
|
"matches": ["https://trade.lthn.io/*", "https://explorer.lthn.io/*", "https://*.lethean.io/*", "http://localhost:*/*"],
|
||||||
"run_at": "document_start"
|
"run_at": "document_start"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"icons": {
|
"icons": {
|
||||||
"16": "images/zano_16px.png",
|
"16": "images/lethean_16px.png",
|
||||||
"48": "images/zano_48px.png",
|
"48": "images/lethean_48px.png",
|
||||||
"128": "images/zano_128px.png"
|
"128": "images/lethean_128px.png"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ import {
|
||||||
setWhiteList,
|
setWhiteList,
|
||||||
} from './store/actions';
|
} from './store/actions';
|
||||||
import { Store } from './store/store-reducer';
|
import { Store } from './store/store-reducer';
|
||||||
import { getZanoPrice } from './api/coingecko';
|
import { getLetheanPrice } from './api/coingecko';
|
||||||
import './styles/App.scss';
|
import './styles/App.scss';
|
||||||
import PasswordPage from './components/PasswordPage/PasswordPage';
|
import PasswordPage from './components/PasswordPage/PasswordPage';
|
||||||
import MessageSignPage from './components/MessageSignPage/MessageSignPage';
|
import MessageSignPage from './components/MessageSignPage/MessageSignPage';
|
||||||
|
|
@ -188,7 +188,7 @@ function App() {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getZanoPrice().then((priceData) => {
|
getLetheanPrice().then((priceData) => {
|
||||||
console.log('price data', priceData);
|
console.log('price data', priceData);
|
||||||
updatePriceData(dispatch as dispatchType, priceData);
|
updatePriceData(dispatch as dispatchType, priceData);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
export const getZanoPrice = async () => {
|
export const getLetheanPrice = async () => {
|
||||||
const coinId = 'zano';
|
const coinId = 'lethean';
|
||||||
const vsCurrency = 'usd';
|
const vsCurrency = 'usd';
|
||||||
|
|
||||||
// Fetch current price
|
// Fetch current price
|
||||||
|
|
@ -16,7 +16,7 @@ export const getZanoPrice = async () => {
|
||||||
const coinData = await coinResponse.json();
|
const coinData = await coinResponse.json();
|
||||||
const priceChange24h = coinData.market_data.price_change_percentage_24h;
|
const priceChange24h = coinData.market_data.price_change_percentage_24h;
|
||||||
|
|
||||||
console.log(`Current price of Zano: $${currentPrice}`);
|
console.log(`Current price of Lethean: $${currentPrice}`);
|
||||||
console.log(`24-hour price change: ${priceChange24h.toFixed(2)}%`);
|
console.log(`24-hour price change: ${priceChange24h.toFixed(2)}%`);
|
||||||
|
|
||||||
return { price: currentPrice, change: priceChange24h.toFixed(2) };
|
return { price: currentPrice, change: priceChange24h.toFixed(2) };
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
|
@ -71,7 +71,7 @@ export default function AliasCreatePage() {
|
||||||
</h5>
|
</h5>
|
||||||
|
|
||||||
<p className={`${styles.fee__value} ${notEnoughFee ? styles.error : ''}`}>
|
<p className={`${styles.fee__value} ${notEnoughFee ? styles.error : ''}`}>
|
||||||
{fee} ZANO
|
{fee} LTHN
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ const AliasManagePage = ({ mode = 'create' }) => {
|
||||||
</h5>
|
</h5>
|
||||||
|
|
||||||
<p className={`${styles.fee__value} ${notEnoughFee ? styles.error : ''}`}>
|
<p className={`${styles.fee__value} ${notEnoughFee ? styles.error : ''}`}>
|
||||||
{fee} ZANO
|
{fee} LTHN
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ const AliasTransfer = () => {
|
||||||
</h5>
|
</h5>
|
||||||
|
|
||||||
<p className={`${styles.fee__value} ${notEnoughFee ? styles.error : ''}`}>
|
<p className={`${styles.fee__value} ${notEnoughFee ? styles.error : ''}`}>
|
||||||
{fee} ZANO
|
{fee} LTHN
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ const AppPlug: React.FC<AppPlugProps> = (props) => {
|
||||||
const btnClasses = state.isLoading ? [s.plugButton, s.hidden].join(' ') : s.plugButton;
|
const btnClasses = state.isLoading ? [s.plugButton, s.hidden].join(' ') : s.plugButton;
|
||||||
|
|
||||||
const openDocs = () => {
|
const openDocs = () => {
|
||||||
window.open('https://docs.zano.org/docs/use/companion', '_blank');
|
window.open('https://docs.lethean.io/docs/use/companion', '_blank');
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
@ -28,7 +28,7 @@ const AppPlug: React.FC<AppPlugProps> = (props) => {
|
||||||
<div className={s.plug}>
|
<div className={s.plug}>
|
||||||
<div className={`${s.plugBody} container`}>
|
<div className={`${s.plugBody} container`}>
|
||||||
<div className={s.plugLogo}>
|
<div className={s.plugLogo}>
|
||||||
<img src={logo} alt="zano logo" />
|
<img src={logo} alt="lethean logo" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={s.plugContent}>
|
<div className={s.plugContent}>
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ export default function ConnectPage({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={s.connect}>
|
<div className={s.connect}>
|
||||||
<img className={s.logoImage} src={logo} alt="Zano" />
|
<img className={s.logoImage} src={logo} alt="Lethean" />
|
||||||
<div className={s.connectCodeContent}>
|
<div className={s.connectCodeContent}>
|
||||||
<div className={s.input}>
|
<div className={s.input}>
|
||||||
<MyInput
|
<MyInput
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ const Header = () => {
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className={s.dropdownBalance}>
|
<div className={s.dropdownBalance}>
|
||||||
{censorValue(Number(wallet.balance).toFixed(2))} ZANO
|
{censorValue(Number(wallet.balance).toFixed(2))} LTHN
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
))}
|
))}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { fetchBackground, shortenAddress } from '../../utils/utils';
|
||||||
import arrowIcon from '../../assets/svg/arrow-blue.svg';
|
import arrowIcon from '../../assets/svg/arrow-blue.svg';
|
||||||
import InfoTooltip from '../UI/InfoTooltip';
|
import InfoTooltip from '../UI/InfoTooltip';
|
||||||
import { BurnAssetDataType } from '../../../types';
|
import { BurnAssetDataType } from '../../../types';
|
||||||
import { ZANO_ASSET_ID } from '../../../constants';
|
import { LTHN_ASSET_ID } from '../../../constants';
|
||||||
import { Store } from '../../store/store-reducer';
|
import { Store } from '../../store/store-reducer';
|
||||||
import WhitelistIconImage from '../UI/WhitelistIconImage';
|
import WhitelistIconImage from '../UI/WhitelistIconImage';
|
||||||
|
|
||||||
|
|
@ -93,7 +93,7 @@ const OuterConfirmation = () => {
|
||||||
const fee = 0.01;
|
const fee = 0.01;
|
||||||
const balance = new Decimal(state.wallet?.balance || 0);
|
const balance = new Decimal(state.wallet?.balance || 0);
|
||||||
const locked = new Decimal(state.wallet?.lockedBalance || 0);
|
const locked = new Decimal(state.wallet?.lockedBalance || 0);
|
||||||
const zanoBalance = balance.minus(locked);
|
const letheanBalance = balance.minus(locked);
|
||||||
const rawTotalAmount = isMultipleDestinations
|
const rawTotalAmount = isMultipleDestinations
|
||||||
? destinations.reduce(
|
? destinations.reduce(
|
||||||
(sum: Decimal, dest: { amount: string }) => sum.plus(new Decimal(dest.amount || 0)),
|
(sum: Decimal, dest: { amount: string }) => sum.plus(new Decimal(dest.amount || 0)),
|
||||||
|
|
@ -102,35 +102,35 @@ const OuterConfirmation = () => {
|
||||||
: new Decimal(transactionParams.Amount || 0);
|
: new Decimal(transactionParams.Amount || 0);
|
||||||
|
|
||||||
const assetBalance =
|
const assetBalance =
|
||||||
assetId === ZANO_ASSET_ID
|
assetId === LTHN_ASSET_ID
|
||||||
? zanoBalance
|
? letheanBalance
|
||||||
: new Decimal(state.wallet?.assets?.find((a) => a.assetId === assetId)?.balance || 0);
|
: new Decimal(state.wallet?.assets?.find((a) => a.assetId === assetId)?.balance || 0);
|
||||||
const feeBig = new Decimal(fee);
|
const feeBig = new Decimal(fee);
|
||||||
const swapAmount = new Decimal(sendingAmount || 0);
|
const swapAmount = new Decimal(sendingAmount || 0);
|
||||||
|
|
||||||
const notEnoughFee = useMemo(() => {
|
const notEnoughFee = useMemo(() => {
|
||||||
return zanoBalance.lessThan(feeBig);
|
return letheanBalance.lessThan(feeBig);
|
||||||
}, [zanoBalance, feeBig]);
|
}, [letheanBalance, feeBig]);
|
||||||
|
|
||||||
const notEnoughAmount = useMemo(() => {
|
const notEnoughAmount = useMemo(() => {
|
||||||
if (!isTransferMethod) return false;
|
if (!isTransferMethod) return false;
|
||||||
|
|
||||||
if (assetId === ZANO_ASSET_ID) {
|
if (assetId === LTHN_ASSET_ID) {
|
||||||
return zanoBalance.lessThan(rawTotalAmount.plus(feeBig));
|
return letheanBalance.lessThan(rawTotalAmount.plus(feeBig));
|
||||||
}
|
}
|
||||||
|
|
||||||
return assetBalance.lessThan(rawTotalAmount);
|
return assetBalance.lessThan(rawTotalAmount);
|
||||||
}, [isTransferMethod, assetId, zanoBalance, assetBalance, rawTotalAmount, feeBig]);
|
}, [isTransferMethod, assetId, letheanBalance, assetBalance, rawTotalAmount, feeBig]);
|
||||||
|
|
||||||
const notEnoughSwapAmount = useMemo(() => {
|
const notEnoughSwapAmount = useMemo(() => {
|
||||||
if (!isIonicSwapMethod) return false;
|
if (!isIonicSwapMethod) return false;
|
||||||
|
|
||||||
if (assetId === ZANO_ASSET_ID) {
|
if (assetId === LTHN_ASSET_ID) {
|
||||||
return zanoBalance.lessThan(swapAmount.plus(feeBig));
|
return letheanBalance.lessThan(swapAmount.plus(feeBig));
|
||||||
}
|
}
|
||||||
|
|
||||||
return assetBalance.lessThan(swapAmount);
|
return assetBalance.lessThan(swapAmount);
|
||||||
}, [isIonicSwapMethod, assetId, assetBalance, swapAmount, zanoBalance, feeBig]);
|
}, [isIonicSwapMethod, assetId, assetBalance, swapAmount, letheanBalance, feeBig]);
|
||||||
|
|
||||||
const disabled = accepting || denying;
|
const disabled = accepting || denying;
|
||||||
const insufficientBalance =
|
const insufficientBalance =
|
||||||
|
|
@ -379,7 +379,7 @@ const OuterConfirmation = () => {
|
||||||
Transaction fee <InfoTooltip title="Total network fee" />
|
Transaction fee <InfoTooltip title="Total network fee" />
|
||||||
</h5>
|
</h5>
|
||||||
<p className={`${styles.value} ${notEnoughFee ? styles.error : ''}`}>
|
<p className={`${styles.value} ${notEnoughFee ? styles.error : ''}`}>
|
||||||
{fee} ZANO
|
{fee} LTHN
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ function PasswordPage(props: PasswordPageProps) {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={s.passwordPage}>
|
<div className={s.passwordPage}>
|
||||||
<img className={s.logoImage} src={logo} alt="Zano" />
|
<img className={s.logoImage} src={logo} alt="Lethean" />
|
||||||
<p>Enter your password</p>
|
<p>Enter your password</p>
|
||||||
<div className={s.inputPanel}>
|
<div className={s.inputPanel}>
|
||||||
<MyInput
|
<MyInput
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import WhitelistIconImage from '../../UI/WhitelistIconImage';
|
||||||
import { useCensorDigits } from '../../../hooks/useCensorDigits';
|
import { useCensorDigits } from '../../../hooks/useCensorDigits';
|
||||||
import { Store } from '../../../store/store-reducer';
|
import { Store } from '../../../store/store-reducer';
|
||||||
import s from './Assets.module.scss';
|
import s from './Assets.module.scss';
|
||||||
import { ZANO_ASSET_ID } from '../../../../constants';
|
import { LTHN_ASSET_ID } from '../../../../constants';
|
||||||
|
|
||||||
function AssetPrice({ assetId, balance }: { assetId: string; balance: number }) {
|
function AssetPrice({ assetId, balance }: { assetId: string; balance: number }) {
|
||||||
const { state } = useContext(Store);
|
const { state } = useContext(Store);
|
||||||
|
|
@ -13,12 +13,12 @@ function AssetPrice({ assetId, balance }: { assetId: string; balance: number })
|
||||||
const [assetPrice, setAssetPrice] = React.useState<number | null>(null);
|
const [assetPrice, setAssetPrice] = React.useState<number | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (assetId === ZANO_ASSET_ID) {
|
if (assetId === LTHN_ASSET_ID) {
|
||||||
setAssetPrice(state.priceData.price);
|
setAssetPrice(state.priceData.price);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch(`https://explorer.zano.org/api/price?asset_id=${assetId}`)
|
fetch(`https://explorer.lethean.io/api/price?asset_id=${assetId}`)
|
||||||
.then((response) => response.json())
|
.then((response) => response.json())
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
if (response.data && response.data.usd) {
|
if (response.data && response.data.usd) {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import TransactionDetails from '../../TransactionDetails/TransactionDetails';
|
||||||
import s from './History.module.scss';
|
import s from './History.module.scss';
|
||||||
import NavLink from '../../UI/NavLink/NavLink';
|
import NavLink from '../../UI/NavLink/NavLink';
|
||||||
import useGetAsset from '../../../hooks/useGetAsset';
|
import useGetAsset from '../../../hooks/useGetAsset';
|
||||||
import { ZANO_ASSET_ID } from '../../../../constants';
|
import { LTHN_ASSET_ID } from '../../../../constants';
|
||||||
|
|
||||||
interface HistoryItemProps {
|
interface HistoryItemProps {
|
||||||
transfer: {
|
transfer: {
|
||||||
|
|
@ -37,7 +37,7 @@ const HistoryItem = ({ transfer, fee, isInitiator }: HistoryItemProps) => {
|
||||||
|
|
||||||
if (amount === undefined) {
|
if (amount === undefined) {
|
||||||
displayAmount = 'N/A';
|
displayAmount = 'N/A';
|
||||||
} else if (transfer.assetId === ZANO_ASSET_ID) {
|
} else if (transfer.assetId === LTHN_ASSET_ID) {
|
||||||
if (!isInitiator || transfer.incoming) {
|
if (!isInitiator || transfer.incoming) {
|
||||||
displayAmount = amount.toFixed();
|
displayAmount = amount.toFixed();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { useCopy } from '../../hooks/useCopy';
|
||||||
import RoutersNav from '../UI/RoutersNav/RoutersNav';
|
import RoutersNav from '../UI/RoutersNav/RoutersNav';
|
||||||
import { Store } from '../../store/store-reducer';
|
import { Store } from '../../store/store-reducer';
|
||||||
import styles from './TransactionDetails.module.scss';
|
import styles from './TransactionDetails.module.scss';
|
||||||
import { ZANO_ASSET_ID } from '../../../constants';
|
import { LTHN_ASSET_ID } from '../../../constants';
|
||||||
|
|
||||||
type Transfer = {
|
type Transfer = {
|
||||||
amount: string;
|
amount: string;
|
||||||
|
|
@ -84,11 +84,11 @@ const TransactionDetails: React.FC<TransactionDetailsProps> = (props) => {
|
||||||
<div key={index} className={styles.transaction__transfer}>
|
<div key={index} className={styles.transaction__transfer}>
|
||||||
<p className="table__value">
|
<p className="table__value">
|
||||||
{(() => {
|
{(() => {
|
||||||
const isZano = transfer.assetId === ZANO_ASSET_ID;
|
const isLethean = transfer.assetId === LTHN_ASSET_ID;
|
||||||
|
|
||||||
let amountText: string;
|
let amountText: string;
|
||||||
|
|
||||||
if (isZano) {
|
if (isLethean) {
|
||||||
if (!props.isInitiator) {
|
if (!props.isInitiator) {
|
||||||
amountText = amount.toFixed();
|
amountText = amount.toFixed();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -124,7 +124,7 @@ const TransactionDetails: React.FC<TransactionDetailsProps> = (props) => {
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
<TableRow label="Fee" value={`${props.fee} ZANO`} />
|
<TableRow label="Fee" value={`${props.fee} LTHN`} />
|
||||||
{props.addresses && (
|
{props.addresses && (
|
||||||
<TableRow label="Remote address" value={props.addresses[0]} copyButton />
|
<TableRow label="Remote address" value={props.addresses[0]} copyButton />
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import DOMPurify from 'dompurify';
|
import DOMPurify from 'dompurify';
|
||||||
import React, { useEffect, useMemo, useState } from 'react';
|
import React, { useEffect, useMemo, useState } from 'react';
|
||||||
import { BANDIT_ASSET_ID, ZANO_ASSET_ID } from '../../../../constants';
|
import { BANDIT_ASSET_ID, LTHN_ASSET_ID } from '../../../../constants';
|
||||||
import customTokenIcon from '../../../assets/tokens-svg/custom-token.svg';
|
import customTokenIcon from '../../../assets/tokens-svg/custom-token.svg';
|
||||||
import zanoIcon from '../../../assets/tokens-svg/zano.svg';
|
import letheanIcon from '../../../assets/tokens-svg/lethean.svg';
|
||||||
import banditIcon from '../../../assets/tokens-svg/bandit-icon.svg';
|
import banditIcon from '../../../assets/tokens-svg/bandit-icon.svg';
|
||||||
import { WhitelistIconImageProps } from './types';
|
import { WhitelistIconImageProps } from './types';
|
||||||
|
|
||||||
|
|
@ -12,7 +12,7 @@ function WhitelistIconImage({ asset, width, height, className }: WhitelistIconIm
|
||||||
} | null>(null);
|
} | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetch('https://api.zano.org/assets_whitelist.json')
|
fetch('https://api.lethean.io/assets_whitelist.json')
|
||||||
.then((response) => response.json())
|
.then((response) => response.json())
|
||||||
.then(setWhitelistData)
|
.then(setWhitelistData)
|
||||||
.catch((error) => console.error('Error fetching asset whitelist:', error));
|
.catch((error) => console.error('Error fetching asset whitelist:', error));
|
||||||
|
|
@ -45,8 +45,8 @@ function WhitelistIconImage({ asset, width, height, className }: WhitelistIconIm
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ZANO_ASSET_ID === asset.assetId) {
|
if (LTHN_ASSET_ID === asset.assetId) {
|
||||||
return <img src={zanoIcon} alt="ZanoIcon" className={className} style={style} />;
|
return <img src={letheanIcon} alt="LetheanIcon" className={className} style={style} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BANDIT_ASSET_ID === asset.assetId) {
|
if (BANDIT_ASSET_ID === asset.assetId) {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import WalletSend from '../WalletSend/WalletSend';
|
||||||
import s from './Wallet.module.scss';
|
import s from './Wallet.module.scss';
|
||||||
import NavLink from '../UI/NavLink/NavLink';
|
import NavLink from '../UI/NavLink/NavLink';
|
||||||
import { classNames } from '../../utils/classNames';
|
import { classNames } from '../../utils/classNames';
|
||||||
import { ZANO_ASSET_ID } from '../../../constants';
|
import { LTHN_ASSET_ID } from '../../../constants';
|
||||||
import AliasManagePage from '../AliasManagePage';
|
import AliasManagePage from '../AliasManagePage';
|
||||||
import AliasTransfer from '../AliasTransfer';
|
import AliasTransfer from '../AliasTransfer';
|
||||||
|
|
||||||
|
|
@ -56,13 +56,13 @@ const Wallet = ({ setConnectOpened }: { setConnectOpened: Dispatch<SetStateActio
|
||||||
.toDecimalPlaces(6, Decimal.ROUND_DOWN)
|
.toDecimalPlaces(6, Decimal.ROUND_DOWN)
|
||||||
.toFixed(),
|
.toFixed(),
|
||||||
)}{' '}
|
)}{' '}
|
||||||
ZANO
|
LTHN
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const getUnlockedBalance = () =>
|
const getUnlockedBalance = () =>
|
||||||
state.wallet.assets.find((asset) => asset.assetId === ZANO_ASSET_ID)?.unlockedBalance;
|
state.wallet.assets.find((asset) => asset.assetId === LTHN_ASSET_ID)?.unlockedBalance;
|
||||||
|
|
||||||
const flipDisplay = () => {
|
const flipDisplay = () => {
|
||||||
updateDisplay(dispatch as DispatchFunction, !state.displayUsd as never);
|
updateDisplay(dispatch as DispatchFunction, !state.displayUsd as never);
|
||||||
|
|
@ -145,7 +145,7 @@ const Wallet = ({ setConnectOpened }: { setConnectOpened: Dispatch<SetStateActio
|
||||||
{lockedBalanceDisplay !== undefined && (
|
{lockedBalanceDisplay !== undefined && (
|
||||||
<div className={s.lockedBalanceWrapper}>
|
<div className={s.lockedBalanceWrapper}>
|
||||||
<img src={lockedIcon} alt="locked icon" />
|
<img src={lockedIcon} alt="locked icon" />
|
||||||
<span className={s.lockedBalanceText}>{lockedBalanceDisplay} ZANO</span>
|
<span className={s.lockedBalanceText}>{lockedBalanceDisplay} LTHN</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import {
|
||||||
validateTokensInput,
|
validateTokensInput,
|
||||||
// @ts-expect-error - Disabling TS error while importing /shared submodule
|
// @ts-expect-error - Disabling TS error while importing /shared submodule
|
||||||
// due to global tsconfig "moduleResolution" prop is set to "node"
|
// due to global tsconfig "moduleResolution" prop is set to "node"
|
||||||
} from 'zano_web3/shared';
|
} from 'lethean_web3/shared';
|
||||||
|
|
||||||
import failedImage from '../../assets/images/failed-round.png';
|
import failedImage from '../../assets/images/failed-round.png';
|
||||||
import successImage from '../../assets/images/success-round.png';
|
import successImage from '../../assets/images/success-round.png';
|
||||||
|
|
@ -114,7 +114,7 @@ const WalletSend = () => {
|
||||||
const openExplorer = (txId: string) => {
|
const openExplorer = (txId: string) => {
|
||||||
// eslint-disable-next-line no-undef
|
// eslint-disable-next-line no-undef
|
||||||
chrome.tabs.create({
|
chrome.tabs.create({
|
||||||
url: `https://testnet-explorer.zano.org/block/${txId}`,
|
url: `https://testnet-explorer.lethean.io/block/${txId}`,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -157,12 +157,12 @@ const WalletSend = () => {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const isValidZanoAssetAmount = validateTokensInput(
|
const isValidLetheanAssetAmount = validateTokensInput(
|
||||||
amount.value,
|
amount.value,
|
||||||
Number(asset.decimalPoint),
|
Number(asset.decimalPoint),
|
||||||
).valid;
|
).valid;
|
||||||
|
|
||||||
isValid = isValidZanoAssetAmount && isAmountAvailable;
|
isValid = isValidLetheanAssetAmount && isAmountAvailable;
|
||||||
} catch {
|
} catch {
|
||||||
isValid = false;
|
isValid = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import React, { Dispatch, SetStateAction, useContext, useEffect, useRef, useStat
|
||||||
import bitcoinIcon from '../../../../assets/tokens-svg/bitcoin.svg';
|
import bitcoinIcon from '../../../../assets/tokens-svg/bitcoin.svg';
|
||||||
import customTokenIcon from '../../../../assets/tokens-svg/custom-token.svg';
|
import customTokenIcon from '../../../../assets/tokens-svg/custom-token.svg';
|
||||||
import ethIcon from '../../../../assets/tokens-svg/eth.svg';
|
import ethIcon from '../../../../assets/tokens-svg/eth.svg';
|
||||||
import zanoIcon from '../../../../assets/tokens-svg/zano.svg';
|
import letheanIcon from '../../../../assets/tokens-svg/lethean.svg';
|
||||||
import arrowIcon from '../../../../assets/svg/arrow-select.svg';
|
import arrowIcon from '../../../../assets/svg/arrow-select.svg';
|
||||||
import { Store } from '../../../../store/store-reducer';
|
import { Store } from '../../../../store/store-reducer';
|
||||||
import mainStyles from '../../WalletSend.module.scss';
|
import mainStyles from '../../WalletSend.module.scss';
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import { ZANO_ASSET_ID } from '../../constants';
|
import { LTHN_ASSET_ID } from '../../constants';
|
||||||
|
|
||||||
export const whitelistedAssets = [
|
export const whitelistedAssets = [
|
||||||
{
|
{
|
||||||
asset_id: ZANO_ASSET_ID,
|
asset_id: LTHN_ASSET_ID,
|
||||||
ticker: 'ZANO',
|
ticker: 'LTHN',
|
||||||
full_name: 'Zano',
|
full_name: 'Lethean',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
asset_id: 'e03a140b8447d2895290022b25c06bdabea514e2475ae56ce5bcbc554ab9865c',
|
asset_id: 'e03a140b8447d2895290022b25c06bdabea514e2475ae56ce5bcbc554ab9865c',
|
||||||
|
|
@ -13,4 +13,4 @@ export const whitelistedAssets = [
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export const defaultPort = 11211;
|
export const defaultPort = 46941;
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ const initialState: State = {
|
||||||
isConfirmed: true,
|
isConfirmed: true,
|
||||||
incoming: true,
|
incoming: true,
|
||||||
amount: 100,
|
amount: 100,
|
||||||
ticker: 'ZANO',
|
ticker: 'LTHN',
|
||||||
address:
|
address:
|
||||||
'ZxDTZ8LJ88ZK6Ja1P9iqDNgCiBM6FhiBKdDoTAoEp9nY9q8d846iePAGYGjNvrU9uFHDXD3by5CooSBrsXBDfE9M11WBwAxQ9',
|
'ZxDTZ8LJ88ZK6Ja1P9iqDNgCiBM6FhiBKdDoTAoEp9nY9q8d846iePAGYGjNvrU9uFHDXD3by5CooSBrsXBDfE9M11WBwAxQ9',
|
||||||
},
|
},
|
||||||
|
|
@ -111,7 +111,7 @@ const initialState: State = {
|
||||||
isConfirmed: false,
|
isConfirmed: false,
|
||||||
incoming: false,
|
incoming: false,
|
||||||
value: 17,
|
value: 17,
|
||||||
ticker: 'ZANO',
|
ticker: 'LTHN',
|
||||||
address:
|
address:
|
||||||
'ZxDTZ8LJ88ZK6Ja1P9iqDNgCiBM6FhiBKdDoTAoEp9nY9q8d846iePAGYGjNvrU9uFHDXD3by5CooSBrsXBDfE9M11WBwAxQ9',
|
'ZxDTZ8LJ88ZK6Ja1P9iqDNgCiBM6FhiBKdDoTAoEp9nY9q8d846iePAGYGjNvrU9uFHDXD3by5CooSBrsXBDfE9M11WBwAxQ9',
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import JSONbig from 'json-bigint';
|
import JSONbig from 'json-bigint';
|
||||||
import { ZANO_ASSET_ID } from '../constants';
|
import { LTHN_ASSET_ID } from '../constants';
|
||||||
import { BurnAssetDataType, ionicSwapType, RequestType, TransferDataType } from '../types/index';
|
import { BurnAssetDataType, ionicSwapType, RequestType, TransferDataType } from '../types/index';
|
||||||
import {
|
import {
|
||||||
fetchData,
|
fetchData,
|
||||||
|
|
@ -26,7 +26,7 @@ import { truncateToDecimals } from '../app/utils/utils';
|
||||||
const POPUP_HEIGHT = 630;
|
const POPUP_HEIGHT = 630;
|
||||||
const POPUP_WIDTH = 370;
|
const POPUP_WIDTH = 370;
|
||||||
|
|
||||||
const ZANO_ID = ZANO_ASSET_ID;
|
const LTHN_ID = LTHN_ASSET_ID;
|
||||||
|
|
||||||
interface PopupRequest {
|
interface PopupRequest {
|
||||||
windowId?: number;
|
windowId?: number;
|
||||||
|
|
@ -176,7 +176,7 @@ interface Credentials {
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultCredentials: Credentials = {
|
const defaultCredentials: Credentials = {
|
||||||
port: 11211,
|
port: 46941,
|
||||||
};
|
};
|
||||||
|
|
||||||
export let apiCredentials: Credentials = { ...defaultCredentials };
|
export let apiCredentials: Credentials = { ...defaultCredentials };
|
||||||
|
|
@ -465,7 +465,7 @@ async function processRequest(request: RequestType, sender: Sender, sendResponse
|
||||||
const { address } = walletData;
|
const { address } = walletData;
|
||||||
console.log('asset to transfer:', asset);
|
console.log('asset to transfer:', asset);
|
||||||
|
|
||||||
request.asset = asset || (await getAsset(ZANO_ID));
|
request.asset = asset || (await getAsset(LTHN_ID));
|
||||||
request.sender = address || '';
|
request.sender = address || '';
|
||||||
|
|
||||||
const decimal_point = request.asset?.decimal_point ?? 12;
|
const decimal_point = request.asset?.decimal_point ?? 12;
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { Buffer } from 'buffer';
|
||||||
import JSONbig from 'json-bigint';
|
import JSONbig from 'json-bigint';
|
||||||
import { apiCredentials } from './background';
|
import { apiCredentials } from './background';
|
||||||
import { addZeros, removeZeros } from '../app/utils/utils';
|
import { addZeros, removeZeros } from '../app/utils/utils';
|
||||||
import { ZANO_ASSET_ID } from '../constants';
|
import { LTHN_ASSET_ID } from '../constants';
|
||||||
import {
|
import {
|
||||||
BurnAssetDataType,
|
BurnAssetDataType,
|
||||||
ionicSwapType,
|
ionicSwapType,
|
||||||
|
|
@ -58,7 +58,7 @@ function generateAccessToken(httpBody: string) {
|
||||||
// Example payload
|
// Example payload
|
||||||
const payload = {
|
const payload = {
|
||||||
body_hash: bodyHash,
|
body_hash: bodyHash,
|
||||||
user: 'zano_extension',
|
user: 'lethean_extension',
|
||||||
salt: generateRandomString(64),
|
salt: generateRandomString(64),
|
||||||
exp: Math.floor(Date.now() / 1000) + 60, // Expires in 1 minute
|
exp: Math.floor(Date.now() / 1000) + 60, // Expires in 1 minute
|
||||||
};
|
};
|
||||||
|
|
@ -90,7 +90,7 @@ export const fetchData = async (
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Zano-Access-Token': generateAccessToken(httpBody),
|
'Lethean-Access-Token': generateAccessToken(httpBody),
|
||||||
},
|
},
|
||||||
body: httpBody,
|
body: httpBody,
|
||||||
});
|
});
|
||||||
|
|
@ -145,7 +145,7 @@ export const getWallets = async () => {
|
||||||
data.result.wallets.map(async (wallet: WalletRaw) => {
|
data.result.wallets.map(async (wallet: WalletRaw) => {
|
||||||
const alias = await getAlias(wallet.wi.address);
|
const alias = await getAlias(wallet.wi.address);
|
||||||
const balanceRaw =
|
const balanceRaw =
|
||||||
wallet?.wi?.balances?.find((asset) => asset.asset_info.asset_id === ZANO_ASSET_ID)
|
wallet?.wi?.balances?.find((asset) => asset.asset_info.asset_id === LTHN_ASSET_ID)
|
||||||
?.total || '0';
|
?.total || '0';
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
@ -184,8 +184,8 @@ export const getWalletData = async () => {
|
||||||
unlockedBalance: removeZeros(asset.unlocked, asset.asset_info.decimal_point),
|
unlockedBalance: removeZeros(asset.unlocked, asset.asset_info.decimal_point),
|
||||||
}))
|
}))
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
if (a.assetId === ZANO_ASSET_ID) return -1;
|
if (a.assetId === LTHN_ASSET_ID) return -1;
|
||||||
if (b.assetId === ZANO_ASSET_ID) return 1;
|
if (b.assetId === LTHN_ASSET_ID) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -194,7 +194,7 @@ export const getWalletData = async () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const balance = removeZeros(
|
const balance = removeZeros(
|
||||||
balanceParsed.result.balances.find((asset) => asset.asset_info.asset_id === ZANO_ASSET_ID)
|
balanceParsed.result.balances.find((asset) => asset.asset_info.asset_id === LTHN_ASSET_ID)
|
||||||
?.total || '0',
|
?.total || '0',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -340,7 +340,7 @@ export const getAliasByAddress = async (address: string) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const transfer = async (
|
export const transfer = async (
|
||||||
assetId = ZANO_ASSET_ID,
|
assetId = LTHN_ASSET_ID,
|
||||||
destination: string | undefined,
|
destination: string | undefined,
|
||||||
amount: string | undefined,
|
amount: string | undefined,
|
||||||
decimalPoint: number,
|
decimalPoint: number,
|
||||||
|
|
@ -395,7 +395,7 @@ export const burnBridge = async (
|
||||||
amount: string,
|
amount: string,
|
||||||
destinationAddress: string,
|
destinationAddress: string,
|
||||||
destinationChainId: string,
|
destinationChainId: string,
|
||||||
assetId = ZANO_ASSET_ID,
|
assetId = LTHN_ASSET_ID,
|
||||||
) => {
|
) => {
|
||||||
const bodyData = {
|
const bodyData = {
|
||||||
service_id: 'B',
|
service_id: 'B',
|
||||||
|
|
@ -487,15 +487,15 @@ export const getSwapProposalInfo = async (hex: string | undefined) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function getWhiteList() {
|
export async function getWhiteList() {
|
||||||
const fetchedWhiteList = await fetch('https://api.zano.org/assets_whitelist.json')
|
const fetchedWhiteList = await fetch('https://api.lethean.io/assets_whitelist.json')
|
||||||
.then((response) => response.json())
|
.then((response) => response.json())
|
||||||
.then((data) => data.assets);
|
.then((data) => data.assets);
|
||||||
|
|
||||||
if (fetchedWhiteList.every((e: { asset_id: string }) => e.asset_id !== ZANO_ASSET_ID)) {
|
if (fetchedWhiteList.every((e: { asset_id: string }) => e.asset_id !== LTHN_ASSET_ID)) {
|
||||||
fetchedWhiteList.push({
|
fetchedWhiteList.push({
|
||||||
asset_id: ZANO_ASSET_ID,
|
asset_id: LTHN_ASSET_ID,
|
||||||
ticker: 'ZANO',
|
ticker: 'LTHN',
|
||||||
full_name: 'Zano',
|
full_name: 'Lethean',
|
||||||
decimal_point: 12,
|
decimal_point: 12,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -516,11 +516,11 @@ export async function getAssetInfo(assetId: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getAsset(assetId: string): Promise<IAsset | undefined> {
|
export async function getAsset(assetId: string): Promise<IAsset | undefined> {
|
||||||
if (assetId === ZANO_ASSET_ID) {
|
if (assetId === LTHN_ASSET_ID) {
|
||||||
return {
|
return {
|
||||||
asset_id: ZANO_ASSET_ID,
|
asset_id: LTHN_ASSET_ID,
|
||||||
ticker: 'ZANO',
|
ticker: 'LTHN',
|
||||||
full_name: 'Zano',
|
full_name: 'Lethean',
|
||||||
decimal_point: 12,
|
decimal_point: 12,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
export const ZANO_ASSET_ID = 'd6329b5b1f7c0805b5c345f4957554002a2f557845f64d7645dae0e051a6498a';
|
export const LTHN_ASSET_ID = 'd6329b5b1f7c0805b5c345f4957554002a2f557845f64d7645dae0e051a6498a';
|
||||||
|
/** @deprecated Use LTHN_ASSET_ID */
|
||||||
|
export const LETHEAN_ASSET_ID = LTHN_ASSET_ID;
|
||||||
export const BANDIT_ASSET_ID = '55a8e0a730b133fb83915ba0e4335a680ae9d07a99642b17774460560f3b003d';
|
export const BANDIT_ASSET_ID = '55a8e0a730b133fb83915ba0e4335a680ae9d07a99642b17774460560f3b003d';
|
||||||
export const WETH_ASSET_ID = '93da681503353509367e241cda3234299dedbbad9ec851de31e900490807bf0c';
|
export const WETH_ASSET_ID = '93da681503353509367e241cda3234299dedbbad9ec851de31e900490807bf0c';
|
||||||
export const WBTC_ASSET_ID = '040a180aca4194a158c17945dd115db42086f6f074c1f77838621a4927fffa91';
|
export const WBTC_ASSET_ID = '040a180aca4194a158c17945dd115db42086f6f074c1f77838621a4927fffa91';
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,22 @@
|
||||||
interface ZanoRequestData {
|
interface LetheanRequestData {
|
||||||
method: string;
|
method: string;
|
||||||
listenerID: string;
|
listenerID: string;
|
||||||
timeout?: number | null;
|
timeout?: number | null;
|
||||||
[key: string]: string | number | boolean | null | undefined;
|
[key: string]: string | number | boolean | null | undefined;
|
||||||
}
|
}
|
||||||
interface DocumentEventMap {
|
interface DocumentEventMap {
|
||||||
zano_request: CustomEvent<ZanoRequestData>;
|
lethean_request: CustomEvent<LetheanRequestData>;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ZanoResponse {
|
interface LetheanResponse {
|
||||||
error?: string;
|
error?: string;
|
||||||
[key: string]: string | number | boolean | null | undefined;
|
[key: string]: string | number | boolean | null | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchData(data: ZanoRequestData): Promise<ZanoResponse> {
|
async function fetchData(data: LetheanRequestData): Promise<LetheanResponse> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
chrome.runtime.sendMessage(data, (response: ZanoResponse) => {
|
chrome.runtime.sendMessage(data, (response: LetheanResponse) => {
|
||||||
if (chrome.runtime.lastError) {
|
if (chrome.runtime.lastError) {
|
||||||
reject(chrome.runtime.lastError);
|
reject(chrome.runtime.lastError);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -29,20 +29,20 @@ async function fetchData(data: ZanoRequestData): Promise<ZanoResponse> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener('zano_request', async (e: CustomEvent<ZanoRequestData>) => {
|
document.addEventListener('lethean_request', async (e: CustomEvent<LetheanRequestData>) => {
|
||||||
const data = e.detail;
|
const data = e.detail;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetchData(data);
|
const response = await fetchData(data);
|
||||||
|
|
||||||
document.dispatchEvent(
|
document.dispatchEvent(
|
||||||
new CustomEvent(`zano_response_${data.listenerID}`, {
|
new CustomEvent(`lethean_response_${data.listenerID}`, {
|
||||||
detail: response,
|
detail: response,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
document.dispatchEvent(
|
document.dispatchEvent(
|
||||||
new CustomEvent(`zano_response_${data.listenerID}`, {
|
new CustomEvent(`lethean_response_${data.listenerID}`, {
|
||||||
detail: { error: error instanceof Error ? error.message : String(error) },
|
detail: { error: error instanceof Error ? error.message : String(error) },
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
class Zano {
|
class Lethean {
|
||||||
async request(
|
async request(
|
||||||
method: string,
|
method: string,
|
||||||
params: Record<string, unknown>,
|
params: Record<string, unknown>,
|
||||||
|
|
@ -25,20 +25,20 @@ class Zano {
|
||||||
? setTimeout(() => {
|
? setTimeout(() => {
|
||||||
reject(new Error('Request timeout exceeded'));
|
reject(new Error('Request timeout exceeded'));
|
||||||
document.removeEventListener(
|
document.removeEventListener(
|
||||||
`zano_response_${listenerID}`,
|
`lethean_response_${listenerID}`,
|
||||||
handleResponse as EventListener,
|
handleResponse as EventListener,
|
||||||
);
|
);
|
||||||
}, timeoutMs)
|
}, timeoutMs)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
document.addEventListener(
|
document.addEventListener(
|
||||||
`zano_response_${listenerID}`,
|
`lethean_response_${listenerID}`,
|
||||||
handleResponse as EventListener,
|
handleResponse as EventListener,
|
||||||
);
|
);
|
||||||
|
|
||||||
function handleResponse(e: CustomEvent) {
|
function handleResponse(e: CustomEvent) {
|
||||||
document.removeEventListener(
|
document.removeEventListener(
|
||||||
`zano_response_${listenerID}`,
|
`lethean_response_${listenerID}`,
|
||||||
handleResponse as EventListener,
|
handleResponse as EventListener,
|
||||||
);
|
);
|
||||||
if (timeout) {
|
if (timeout) {
|
||||||
|
|
@ -48,7 +48,7 @@ class Zano {
|
||||||
}
|
}
|
||||||
|
|
||||||
document.dispatchEvent(
|
document.dispatchEvent(
|
||||||
new CustomEvent('zano_request', {
|
new CustomEvent('lethean_request', {
|
||||||
detail: {
|
detail: {
|
||||||
method,
|
method,
|
||||||
listenerID,
|
listenerID,
|
||||||
|
|
@ -61,4 +61,4 @@ class Zano {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
window.zano = new Zano();
|
window.lethean = new Lethean();
|
||||||
|
|
|
||||||
2
src/global.d.ts
vendored
2
src/global.d.ts
vendored
|
|
@ -1,5 +1,5 @@
|
||||||
interface Window {
|
interface Window {
|
||||||
zano: Zano;
|
lethean: Lethean;
|
||||||
}
|
}
|
||||||
declare module '*.scss' {
|
declare module '*.scss' {
|
||||||
const content: { [className: string]: string };
|
const content: { [className: string]: string };
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ module.exports = {
|
||||||
module: {
|
module: {
|
||||||
rules: [
|
rules: [
|
||||||
{
|
{
|
||||||
include: /node_modules[\\/]zano_web3[\\/]/,
|
include: /node_modules[\\/]lethean_web3[\\/]/,
|
||||||
resolve: {
|
resolve: {
|
||||||
fullySpecified: false,
|
fullySpecified: false,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue