├── .gitignore ├── README.md ├── babel.config.js ├── jsconfig.json ├── package.json ├── public ├── favicon.ico ├── favicon.png ├── index.html ├── privacy-en │ ├── index.html │ └── style.css ├── privacy-zh │ ├── index.html │ └── style.css ├── terms-en │ ├── index.html │ └── style.css └── terms-zh │ ├── index.html │ └── style.css ├── src ├── App.vue ├── assets │ ├── arrow.png │ ├── close-modal.png │ ├── close.png │ ├── copy.png │ ├── earth-mini.png │ ├── footer │ │ ├── 1-on.png │ │ ├── 1.png │ │ ├── 2-on.png │ │ ├── 2.png │ │ ├── 3-on.png │ │ ├── 3.png │ │ ├── 4-on.png │ │ ├── 4.png │ │ ├── 5-on.png │ │ ├── 5.png │ │ ├── 6-on.png │ │ ├── 6.png │ │ ├── 7-on.png │ │ ├── 7.png │ │ ├── 8-on.png │ │ ├── 8.png │ │ └── mobile │ │ │ ├── mobile-1.png │ │ │ ├── mobile-2.png │ │ │ ├── mobile-3.png │ │ │ ├── mobile-4.png │ │ │ ├── mobile-5.png │ │ │ ├── mobile-6.png │ │ │ ├── mobile-7.png │ │ │ └── mobile-8.png │ ├── github.png │ ├── header │ │ └── language.png │ ├── language.png │ ├── left-img.png │ ├── logo-dark.png │ ├── logo-w.png │ ├── logo.png │ ├── main │ │ ├── Polkadot.png │ │ ├── aptos.png │ │ ├── bch.png │ │ ├── binance.png │ │ ├── bsc.png │ │ ├── btc.png │ │ ├── conflux.png │ │ ├── cosmos.png │ │ ├── dogecoin.png │ │ ├── eos.png │ │ ├── eth.png │ │ ├── github.png │ │ ├── iost.png │ │ ├── jingtum.png │ │ ├── ltc.png │ │ ├── nervos.png │ │ ├── nostr.jpg │ │ ├── solana.png │ │ ├── sui.png │ │ └── tron.png │ ├── menu.png │ ├── modal-img.png │ ├── nav-icon │ │ ├── 1-on.png │ │ ├── 1.png │ │ ├── 10-on.png │ │ ├── 10.png │ │ ├── 11-on.png │ │ ├── 11.png │ │ ├── 12-on.png │ │ ├── 12.png │ │ ├── 13-on.png │ │ ├── 13.png │ │ ├── 14-on.png │ │ ├── 14.png │ │ ├── 15-on.png │ │ ├── 15.png │ │ ├── 16-on.png │ │ ├── 16.png │ │ ├── 17-on.png │ │ ├── 17.png │ │ ├── 18-on.png │ │ ├── 18.png │ │ ├── 19-on.png │ │ ├── 19.png │ │ ├── 2-on.png │ │ ├── 2.png │ │ ├── 20-on.png │ │ ├── 20.png │ │ ├── 21-on.png │ │ ├── 21.png │ │ ├── 22-on.png │ │ ├── 22.png │ │ ├── 23-on.png │ │ ├── 23.png │ │ ├── 24-on.png │ │ ├── 24.png │ │ ├── 25-on.png │ │ ├── 25.png │ │ ├── 3-on.png │ │ ├── 3.png │ │ ├── 4-on.png │ │ ├── 4.png │ │ ├── 5-on.png │ │ ├── 5.png │ │ ├── 6-on.png │ │ ├── 6.png │ │ ├── 7-on.png │ │ ├── 7.png │ │ ├── 8-on.png │ │ ├── 8.png │ │ ├── 9-on.png │ │ ├── 9.png │ │ ├── build.png │ │ ├── products.png │ │ ├── support.png │ │ ├── tools.png │ │ └── trade.png │ ├── nervos-icon.png │ ├── share-close.png │ └── sui.png ├── components │ └── common │ │ ├── Footer.vue │ │ ├── Header.vue │ │ ├── KeyItem.vue │ │ ├── MiniHeader.vue │ │ ├── Modal.vue │ │ ├── NavIndex.js │ │ └── NormalHeader.vue ├── i18n │ ├── index.js │ └── lang │ │ ├── en.js │ │ ├── ja.js │ │ ├── ko.js │ │ └── zh.js ├── main.js ├── mixins │ ├── LinkMethods.js │ ├── Mobile.js │ └── NavUrl.js ├── router │ └── index.js ├── store │ └── index.js ├── style │ ├── home.scss │ └── index.scss ├── utils │ └── ecc.js └── views │ └── HomeView.vue └── vue.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # key-generator 2 | 3 | ## Project setup 4 | Requirements: Node v16 5 | ``` 6 | npm install 7 | ``` 8 | 9 | ### Compiles and hot-reloads for development 10 | ``` 11 | npm run serve 12 | ``` 13 | 14 | ### Compiles and minifies for production 15 | ``` 16 | npm run build 17 | ``` 18 | 19 | ### Lints and fixes files 20 | ``` 21 | npm run lint 22 | ``` 23 | 24 | ### Customize configuration 25 | See [Configuration Reference](https://cli.vuejs.org/config/). 26 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"], 3 | }; 4 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "esnext", 5 | "baseUrl": "./", 6 | "moduleResolution": "node", 7 | "paths": { 8 | "@/*": [ 9 | "src/*" 10 | ] 11 | }, 12 | "lib": [ 13 | "esnext", 14 | "dom", 15 | "dom.iterable", 16 | "scripthost" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "key-generator", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "@binance-chain/javascript-sdk": "^2.15.0", 12 | "@mysten/sui.js": "^0.33.0", 13 | "@nervosnetwork/ckb-sdk-address": "^0.18.0", 14 | "@noble/secp256k1": "^1.7.1", 15 | "@polkadot/extension-dapp": "^0.30.1", 16 | "@polkadot/keyring": "^12.1.2", 17 | "@polkadot/util": "^12.1.2", 18 | "@polkadot/util-crypto": "^12.1.2", 19 | "@scure/base": "^1.1.1", 20 | "@solana/web3.js": "^1.50.1", 21 | "aptos": "^1.8.5", 22 | "bip32": "^4.0.0", 23 | "bip39": "^3.1.0", 24 | "bitcoinjs-lib": "^6.1.0", 25 | "bitcore-lib-cash": "^8.25.36", 26 | "bs58": "^5.0.0", 27 | "core-js": "^3.8.3", 28 | "elliptic": "^6.5.0", 29 | "eosjs-ecc": "^4.0.4", 30 | "ethereumjs-util": "^6.1.0", 31 | "iost": "^0.1.19", 32 | "irisnet-crypto": "^1.3.4", 33 | "jingtum-base-lib": "^1.2.2", 34 | "js-conflux-sdk": "^2.1.6", 35 | "lodash": "^4.17.15", 36 | "nostr-tools": "^0.24.1", 37 | "tronweb": "^2.7.1", 38 | "vue": "^3.2.13", 39 | "vue-clipboard2": "^0.3.3", 40 | "vue-i18n": "^9.3.0-beta.17", 41 | "vue-router": "^4.0.3", 42 | "vuex": "^4.0.0", 43 | "web3": "^1.2.1", 44 | "web3-eth": "^1.2.1" 45 | }, 46 | "devDependencies": { 47 | "@babel/core": "^7.12.16", 48 | "@babel/eslint-parser": "^7.12.16", 49 | "@vue/cli-plugin-babel": "~5.0.0", 50 | "@vue/cli-plugin-eslint": "~5.0.0", 51 | "@vue/cli-plugin-router": "~5.0.0", 52 | "@vue/cli-plugin-vuex": "~5.0.0", 53 | "@vue/cli-service": "~5.0.0", 54 | "eslint": "^7.32.0", 55 | "eslint-config-prettier": "^8.3.0", 56 | "eslint-plugin-prettier": "^4.0.0", 57 | "eslint-plugin-vue": "^8.0.3", 58 | "node-polyfill-webpack-plugin": "^2.0.1", 59 | "node-sass": "^6.0.1", 60 | "prettier": "^2.4.1", 61 | "sass-loader": "^10.4.1" 62 | }, 63 | "eslintConfig": { 64 | "root": true, 65 | "env": { 66 | "node": true 67 | }, 68 | "extends": [ 69 | "plugin:vue/vue3-essential", 70 | "eslint:recommended", 71 | "plugin:prettier/recommended" 72 | ], 73 | "parserOptions": { 74 | "parser": "@babel/eslint-parser" 75 | }, 76 | "rules": {} 77 | }, 78 | "browserslist": [ 79 | "> 1%", 80 | "last 2 versions", 81 | "not dead", 82 | "not ie 11" 83 | ] 84 | } 85 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/public/favicon.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 17 | 18 | Key Generator | TokenPocket 19 | 20 | 21 | 24 |
25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /public/privacy-en/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | TokenPocket Privacy Policy | TokenPocket - 你的通用数字钱包 | EOS钱包 - 以太坊钱包 - 墨客钱包 - ENU钱包 - 井通钱包 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 22 | 23 | 24 | 25 | 26 | 28 | 29 | 30 | 31 | 32 | 34 | 35 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 70 | 71 | 72 | 73 | 74 | 75 | 76 |
77 |
78 |
79 |
80 |
81 | 82 |

《TokenPocket Privacy Policy》

83 |

Last Updated: May 29, 2021.

84 | 85 |

86 | Dear Users,
87 | TokenPocket Foundation Ltd. (“TPF” or “we”) respects and protects the privacy of Users (“you” or “Users”). 88 | TPF will collect and use your Personal Information, generated from your use of TokenPocket in accordance 89 | with this Privacy Policy (“Policy”).
90 | TPF recommends that you shall carefully read and understand the whole contents of this Policy before your 91 | use of the product (“TokenPocket”). Additionally, significant information including the Disclaimer is in 92 | bold form in this Policy. Definitions of key words in this Policy are consistent with those in the 93 | TokenPocket Terms of Service of TPF.
94 |
95 | TPF reserves the right to update this Policy online from time to time, and the new policy will immediately 96 | replace the older one once posted. In particular, if you do not accept the revised policies, please 97 | immediately stop your use of TokenPocket. Your continuous use of TokenPocket will be regarded as your 98 | acceptance of the revised policy. Furthermore, the revised policies will take into effect immediately upon 99 | being posted on TokenPocket.
100 | You acknowledge and accept that this Policy and other relevant rules apply to TokenPocket and the DApps 101 | owned by TPF on TokenPocket.

102 | 103 |

104 |

Information We Collect

105 |

106 | We collect your information in order to provide the services you requested on TokenPocket, and we highly 107 | value the protection for your privacy. We strictly abide by the principle of “lawful, justifiable and 108 | necessary” during our collection of your information. You acknowledge that, if you do not provide us with 109 | necessary information, your user experiences on TokenPocket may be influenced.
110 | We may collect your Personal Information, including but not limited to your mobile device information, 111 | operation records, transaction records and wallet addresses.
112 |    1.1 In order to satisfy your needs for specific services, we may collect your name, bank card 113 | number, 114 | telephone number (Mobile phone number registration method), email address (Email registration method), 115 | etc.
116 |    1.2 You confirm that your Wallet Password, Private Key, Mnemonic Words, Keystore on 117 | TokenPocket (the 118 | decentralized solution) are not stored or synchronized on TPF’ servers. TPF does not offer the service to 119 | restore your Wallet Password, Private Key, Mnemonic Words or Keystore.
120 |    1.3 Apart from the foregoing provisions, when you are using specific function of TokenPocket, 121 | we may give 122 | you special notification to ask for more Personal Information.
123 |    1.4 After you link to the third-party-developed DApps from TokenPocket, your Personal 124 | Information will be 125 | collected and held by the third-party-developed DApps instead of being collected or held by TokenPocket. 126 | When you fill in your Personal Information on a third-party-developed DApp, you should pay attention to 127 | the Terms of Use and Privacy Policy of the third-party-developed DApp. We are not accountable for any 128 | losses caused by your operation on the third-party-developed DApp.
129 |    1.5 To the extent permitted by laws and regulations, TPF may collect and use following 130 | Personal 131 | Information without your prior consent or authorization:
132 |       a. information related to national security and national defense;
133 |       b. information related to public security, public health, significant public 134 | interests;
135 |       c. information related to criminal investigation, prosecution, trial and 136 | enforcement;
137 |       d. the Personal Information collected is publicized by yourself;
138 |       e. the Personal Information is collected from legally publicly disclosed 139 | information, such as legal news 140 | reports, government information disclosure and other channels;
141 |       f. the Personal Information is necessary to maintain the security and 142 | compliance 143 | of services, such as to 144 | detect or to solve the malfunction of products and services;
145 |       g. other circumstances prescribed by laws and regulations. We collect 146 | information in the following 147 | ways:
148 |          1). Information you give us. For example, you fill in your name, 149 | telephone number, or bank card number in 150 | “My Account” column or you provide your email address when submitting feedbacks, or you give extra 151 | information to us when you use our specific services.
152 |          2). we collect information during your use of TokenPocket, 153 | including your mobile devices information and 154 | your operation records on TokenPocket, etc.

155 | 156 |

157 |

How We Use Your Information

158 |

159 |    2.1 We may associate you with your wallet by the unique serial number of your mobile 160 | device.
161 |    2.2 We may promptly push important notifications to you, such as software update, update of 162 | Terms of 163 | Service and this Policy.
164 |    2.3 We offer you the “Touch ID” option in the “Settings” column of TokenPocket to provide you 165 | with a 166 | convenient and safe way to manage your digital Tokens.
167 |    2.4 We deal with your feedbacks by using the Wallet Address and the mobile device information 168 | provided by 169 | you.
170 |    2.5 We may collect your Personal Information to conduct our internal audit, data analysis and 171 | research 172 | etc. to enhance our services.
173 |    2.6 According to TokenPocket Terms of Service and other rules of TPF, TPF will manage and 174 | handle the use 175 | behaviors of Users through Users’ information.
176 |    2.7 We may use your information in accordance with laws, regulations and to cooperate with 177 | regulatory 178 | authorities.

179 | 180 |

181 |

How You Control Your Own Information

182 |

183 | You are entitled to control your Personal Information provided to TokenPocket:
184 |    3.1 You may import your other wallets into TokenPocket through synchronization of wallets and 185 | you may 186 | export your wallets from TokenPocket to other Tokens management wallets.
187 |    3.2 TokenPocket will display the information of imported wallets to you. You may add or 188 | delete Tokens, 189 | transfer and collect Tokens using the “Assets” column.
190 |    3.3 You understand that you may handle the following operations in the “Me” column on 191 | TokenPocket:
192 |       a. in the “Address Book” column, you may view and edit your “Contacts”;
193 |       b. in the “Settings” column, you may choose not to open “Unlock Setting”, which 194 | means you may refuse to 195 | use the verification service to enter TokenPocket;
196 |       c. in the “Profile” column, you do not have to provide your name, telephone 197 | number, bank card number 198 | information. But if you wish to use specific services, you may need to provide the foregoing 199 | information;
200 |       d. in the “Help” column, you may submit any questions or suggestions for 201 | TokenPocket at any time. We are 202 | glad to communicate with you to improve our services.
203 |    3.4 When we collect information from you for a specific purpose, we will ask for your consent 204 | in advance 205 | to which you are entitled to refuse. However, you understand that when you refuse to give such consent, 206 | you also give up the choice to use specific services provided by TokenPocket.
207 |    3.5 You acknowledge that since blockchain is an open source system, your transaction records 208 | are 209 | automatically public and transparent in the whole blockchain.
210 |    3.6 You understand that after you link to the third-party-developed DApps from 211 | TokenPocket, 212 | the 213 | TokenPocket Terms of Service and TokenPocket Privacy Policy will no longer apply. You are encouraged to 214 | carefully review its privacy policies and related terms of service before you start to use the 215 | third-party-developed DApps.
216 |    3.7 You are entitled to ask us to update, revise, and delete your relevant information.
217 |    3.8 We reserve the right to collect your information without your prior authorization or 218 | consent according 219 | to the Article 7 of Section 1 of this Policy.

220 | 221 |

222 |

Information We may Share or Transfer

223 |

224 |    4.1 The Personal Information collected by TPF for business and legal purposes
225 |    4.2 The Personal Information will not be sold, traded or transferred to the third parties 226 | without your 227 | consent.
228 |    4.3 The Personal Information may be disclosed to these entities if you agree to our 229 | disclosure of the 230 | personal information to strategic partners or related parties. These entities will only use your personal 231 | information for the purposes you have agreed to.
232 |    4.4 You agree that we may disclose or share your personal information to the following third 233 | parties: 234 |       a. service providers and data processors who represent us and provide services 235 | to us, such as KYC 236 | inspections, accounting, data processing or management services, website hosting, maintenance and 237 | operation services, mail information services, analysis services, and payment transaction processing, 238 | marketing, etc.; 239 |       b. TPF consultants and professional consultants (such as accountants, lawyers, 240 | auditors).
241 |    4.5 The Personal Information may be transferred to any other country for the above-mentioned 242 | purposes. TPF 243 | will obtain your consent and ensure that the recipient of personal information has the same level of 244 | personal information protection measures as TPF. If there is no personal information protection law 245 | applicable to the relationship between TPF and you in these countries or regions, we will sign a legally 246 | enforceable agreement with the receivers of personal information.
247 |    4.6 TPF will not share with or transfer your Personal Information to any third party 248 | without 249 | your prior 250 | consent, except for the following circumstances:
251 |       a. the collected Personal Information is publicized by yourself;
252 |       b. the Personal Information is collected from public information which was 253 | legally disclosed, such as news 254 | (lawfully reported), government information disclosure and other channels;
255 |       c. we may share your Personal Information with our affiliates only when 256 | necessary and to the extent 257 | permitted by this Policy;
258 |       d. in order to abide by applicable laws, regulations, legal procedures, and 259 | administrative or judiciary 260 | authorities, TPF will provide or implement this Policy to protect our or other parties' rights, assets 261 | or 262 | security;
263 |       e. in the case of mergers and acquisitions, if transfer of Personal 264 | Information 265 | is involved, TPF may 266 | require the receivers of Personal Information to be continuously bound by this Policy.

267 | 268 |

269 |

How We Collect Data Automatically

270 |

271 |    5.1 We use automatic data collection technology in the application. E.g:
272 |       a. cookies (or browser cookies). Cookies are small text files set by the 273 | operator 274 | of a website or 275 | application to identify your browser or device. We may use cookies on our apps to store and track 276 | information, such as the number and frequency of use of users, user distribution, and users' online 277 | preferences. Cookies do not capture information that can identify you, but the information they collect 278 | can help us analyze the usage of the application to improve your experience. You can turn off cookies in 279 | your browser settings. However, this may affect the functionality of the application.
280 |       b. network analysis. Web analytics is a method of collecting and evaluating 281 | the 282 | operation of visitors to 283 | web pages and mobile applications. This includes analyzing traffic patterns, such as determining the 284 | frequency of visits to certain functions of a website or mobile application, or to understand the 285 | information or services that visitors are most interested in. We use network analysis services provided 286 | by 287 | third-party tools.

288 | 5.2 We use third-party SDK in the application. E.g:
289 | SDK name: Umeng SDK
290 | Service type: analysis
291 | Collected data type: Device information (it may involve Android ID/OpenUDID information, etc., we will 292 | ask for your authorization before collecting this information)
293 | Privacy Policy Link: https://www.umeng.com/page/ policy

294 | 295 |

296 |

How We Protect Your Information

297 |

298 |    6.1 If TPF terminates operation, TPF will stop the collection of your Personal Information in 299 | time, post 300 | the announcement on TokenPocket and delete or anonymize your Personal Information held by us within a 301 | reasonable period.
302 |    6.2 To protect your Personal Information, TPF may adopt data security techniques, improve 303 | internal 304 | compliance levels, provide security training for our staff, and set security authority for access to 305 | relevant data to protect your Personal Information.
306 |    6.3 We will send you messages about information security in the “Wallet Guide” column and 307 | update articles 308 | concerning the use of wallets and information protection in the “Wallet Guide” column on TokenPocket for 309 | your reference.

310 | 311 |

312 |

Protection for the Minors

313 |

314 | The following special provisions apply to minors who are under the age of 18 years old:
315 |    7.1 The minors shall not use TokenPocket without the guidance from their parents or 316 | guardians.
317 |    7.2 The parents and guardians of the minors shall provide guidance to the minors on using 318 | TokenPocket 319 | after they read this Policy, TokenPocket Terms of Service and other relevant rules.
320 |    7.3 TokenPocket will ensure the confidentiality and security of the minors’ Personal 321 | Information in 322 | accordance with national laws and regulations.

323 | 324 |

325 |

Disclaimer

326 |

327 |    8.1 After you link to the third-party-developed DApps from TokenPocket, the privacy 328 | policies 329 | of 330 | the 331 | third-party-developed DApps will apply. The collection and use of your Personal Information by the 332 | third-party-developed DApps will be controlled neither by TPF, nor by this Policy. 333 |    8.2 You shall carefully select and use the third-party-developed DApps and protect your 334 | Personal 335 | Information. TPF shall not be held liable for the privacy protection obligation of any 336 | third-party-developed DApps.
337 |    8.3 You acknowledge and accept that, to the maximum extent permitted by applicable law, TPF 338 | will adopt 339 | measures as reasonable as possible to protect your Personal Information under current techniques on an 340 | “as 341 | is”, “as available” and “with all faults” basis, to avoid the disclosure, tampering or damage of 342 | information. since TPF transfers data wirelessly, TPF makes no guarantee on the privacy and security of 343 | wireless internet data transferring.

344 | 345 |

346 |

Miscellaneous

347 |

348 |    9.1 As a company that provides services to you, we will not actively provide your Personal 349 | Information to 350 | third parties other than the agreement, unless we obtain your consent and inform the other party's 351 | identity, contact information, processing purpose, processing method, etc. If there is service demand of 352 | processing your personal sensitive information in the future, we will ask your opinions once again, and 353 | use it after obtaining your consent.
354 |    9.2 If you are a user outside of Singapore, you shall fully understand and conform to the 355 | laws, 356 | regulations and rules in your jurisdictions which are relevant to use of TPF. 357 |    9.3 During your use of TPF services, if you come across any problems related to your Personal 358 | Information 359 | use, you may contact us through the submission of your feedbacks on TokenPocket.
360 |    9.4 You may access this Policy and other service rules of TPF on TokenPocket. We encourage 361 | you to check 362 | the Terms of Service and Privacy Policy of TPF each time you log into TokenPocket.
363 |    9.5 This English version and other translated versions of this Policy are provided for the 364 | convenience of 365 | Users, and are not intended to revise the original Chinese version of this Policy. If there is any 366 | discrepancy between the Chinese version and non-Chinese version of this Policy, the Chinese version shall 367 | prevail.

368 | 369 | This Policy shall become effective on January 10, 2018.

370 | 371 | As for any issues not covered in this Policy, you shall comply with the announcements and relevant 372 | rules 373 | as updated by TPF from time to time.

374 | 375 | TokenPocket Foundation Ltd. 376 |

377 | 378 | 379 |
380 |
381 |
382 |

383 |
384 |
385 | 386 | 387 | -------------------------------------------------------------------------------- /public/privacy-zh/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | TokenPocket隐私政策 | TokenPocket - 你的通用数字钱包 | TP钱包-ETH钱包-BTC钱包-BSC钱包-HECO钱包-OKExChain钱包-Polkadot钱包-Kusama 9 | 钱包-DeFi钱包-Layer 2钱包-EOS钱包-TRX钱包-EOS钱包-以太坊钱包-墨客钱包-ENU钱包-井通钱包 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 23 | 24 | 25 | 26 | 27 | 29 | 30 | 31 | 32 | 33 | 35 | 36 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
78 |
79 |
80 |
81 |
82 |

《TokenPocket隐私政策》

84 |

85 | 最近更新于:2021年5月29日 86 |

87 |

88 | 89 | 尊敬的用户:
90 | TokenPocket Foudation 91 | Ltd.(以下简称“我们”)尊重并保护用户(以下简称“您”或“用户”)的隐私,您使用TokenPocket时,我们将按照本隐私政策(以下简称“本政策”)收集、使用您的个人信息并严格对于您所提供的个人信息予以保密。
92 | 我们建议您在使用本产品之前仔细阅读并理解本政策全部内容, 针对免责声明等条款在内的重要信息将以加粗的形式体现。本政策有关关键词定义与我们的《TokenPocket服务协议》保持一致。
93 | 本政策可由我们在线随时更新,更新后的政策一旦公布即代替原来的政策,如果您不接受修改后的条款,请立即停止使用TokenPocket,您继续使用TokenPocket将被视为接受修改后的政策。经修改的政策一经在TokenPocket上公布,立即自动生效。 94 | 您知悉本政策及其他有关规定适用于TokenPocket及TokenPocket上我们所自主拥有的DApp。
95 | 96 |

97 |

一、 我们收集您的哪些信息

98 |

99 | 请您知悉,我们收集您的以下信息是出于满足您在TokenPocket服务需要的目的,且我们十分重视对您隐私的保护。在我们收集您的信息时,将严格遵守“合法、正当、必要”的原则。且您知悉,若您不提供我们服务所需的相关信息,您在TokenPocket的服务体验可能因此而受到影响。 100 | 我们将收集您的移动设备信息、账户信息(包括账户内所可能涉及的账户操作记录、交易记录、钱包地址)等个人信息。 为满足您的特定服务需求,我们将收集您的姓名、银行卡号、手机号码等信息。
101 | 您知悉:您在TokenPocket 上的钱包密码、私钥、助记词、Keystore并不存储或同步至我们的服务器。我们不提供找回您的钱包密码、私钥、助记词、Keystore的服务。
102 | 除上述内容之外,您知悉在您使用TokenPocket特定功能时,我们将在收集您的个人信息前向您作出特别提示,要求向您收集更多的个人信息。
103 | 当您跳转到第三方DApp后,第三方DApp会向您收集个人信息。TokenPocket不持有第三方DApp向您收集的个人信息,您在第三方DApp上进行个人信息填写时应注意查阅第三方DApp相关的用户协议和隐私说明,因您在第三方DApp上的操作行为导致的损失,我们不为此承担任何责任。
104 | 105 | 在法律法规允许的范围内,我们可能会在以下情形中收集并使用您的个人信息无需征得您的授权同意:
106 | (1) 与国家安全、国防安全有关的;
107 | (2) 与公共安全、公共卫生、重大公共利益有关的;
108 | (3) 与犯罪侦查、起诉、审判和判决执行等有关的;
109 | (4) 所收集的个人信息是您自行向社会公众公开的;
110 | (5) 从合法公开披露的信息中收集您的个人信息,如合法的新闻报道,政府信息公开等渠道;
111 | (6) 用于维护服务的安全和合规所必需的,例如发现、处理产品和服务的故障;
112 | (7) 法律法规规定的其他情形。 我们收集信息的方式如下:
113 |      a. 您向我们提供信息。例如,您在“个人中心”页面中填写姓名、手机号码或银行卡号,或在反馈问题时提供邮件地址,或在使用我们的特定服务时,您额外向我们提供。
114 |      b. 我们在您使用TokenPocket的过程中经得您同意获取信息,包括您移动设备信息以及您对TokenPocket的操作记录等信息;
115 | 116 |

117 |

二、 我们如何使用您的信息

118 |

119 | 我们通过您移动设备的唯一序列号,确认您与您的钱包的对应关系。 我们将向您及时发送重要通知,如软件更新、服务协议及本政策条款的变更。 120 | 我们在TokenPocket的“系统设置”中为您提供“指纹登录”选项,让您方便且更安全地管理您的数字代币。
121 | 我们通过收集您公开的钱包地址和提供的移动设备信息来处理您向我们提交的反馈。 我们收集您的个人信息进行我们内部审计、数据分析和研究等,以期不断提升我们的服务水平。 122 | 依照《TokenPocket服务协议》及我们其他有关规定,我们将利用用户信息对用户的使用行为进行管理及处理。 法律法规规定及与监管机构配合的要求。
123 | 124 |

125 |

三、 您如何控制自己的信息

126 |

127 | 您在TokenPocket中拥有以下对您个人信息自主控制权:
128 | (1) 您可以通过同步钱包的方式,将您的其他钱包导入TokenPocket中,或者将您在TokenPocket的钱包导入到其他数字代币管理钱包中。
129 | (2) TokenPocket将向您显示导入钱包的信息。 您知悉您可以通过“资产”版块内容修改您的数字代币种类、进行转账及收款等活动。
130 | 您知悉在TokenPocket“我”的版块您可以自由选择进行如下操作:
131 | (1) 在“地址簿”中,您可以随时查看并修改您的“联系人”;
132 | (2) 在“系统设置”中,您可以选择不开启“应用锁”选项,即您可以选择不使用验证服务进入TokenPocket;
133 | (3) 在“个人中心”中,您并不需要提供自己的姓名、手机号码、银行卡等信息,但当您使用特定服务时,您需要提供以上信息;
134 | (4) 在“提交反馈”中,您可以随时向我们提出您对TokenPocket问题及改进建议,我们将非常乐意与您沟通并积极改进我们的服务。
135 | 您知悉当我们出于特定目的向您收集信息时,我们会提前给予您通知,您有权选择拒绝。但同时您知悉,当您选择拒绝提供有关信息时,即表示您放弃使用TokenPocket的有关服务。
136 | 您知悉,您及我们对于您交易记录是否公开并没有控制权,因为基于区块链交易系统的开源属性,您的交易记录在整个区块链系统中公开透明。
137 | 您知悉当您使用TokenPocket的功能跳转至第三方DApp之后,我们的《TokenPocket服务协议》、《TokenPocket隐私政策》将不再适用,针对您在第三方DApp上对您个人信息的控制权问题,我们建议您在使用第三方DApp之前详细阅读并了解其隐私规则和有关用户服务协议等内容。
138 | 您有权要求我们更新、更改、删除您的有关信息。 您知悉我们可以根据本政策第一条第6款的要求收集您的信息而无需获得您的授权同意。
139 | 140 |

141 |

四、我们可能分享或传输您的信息

142 |

143 | 1.我们将为业务和法律的目的存储您的个人信息。
144 | 2.未经过您的同意,我们不会向第三方出售、交易或转让您的个人信息。
145 | 3.如果您同意我们向战略合作方或关联方披露您的个人信息,我们可能将您的个人信息披露给该等实体。该等实体将仅为您已同意的目的使用您的个人信息。
146 | 4.您同意,我们可能向以下第三方披露或共享您的个人信息:
147 | (1)代表我们并向我们提供服务的服务提供商和数据处理方,例如为我们进行KYC检查、会计、数据处理或管理服务、网站托管、维护及运营服务、邮件信息服务、分析服务、支付交易处理、市场营销等;和
148 | (2)我们的咨询师和专业顾问(例如会计师、律师、审计师)。
149 | 5.如果为了上述的目的,我们需要将您的个人信息传输至任何其他国家,我们将获得您的同意,并且确保个人信息的接收方具备和我们同等级的个人信息保护措施。如果该等国家或地区尚无可适用于我们与您之间关系的个人信息保护法律,我们将与个人信息接收方签订可合法执行的协议。
150 | 6.未经您事先同意,本公司不会将您的个人信息向任何第三方共享或转让,但以下情况除外:
151 | (1)所收集的个人信息是您自行向社会公众公开的;
152 | (2)所收集的个人信息系从合法公开披露的信息中收集,如合法的新闻报道,政府信息公开等渠道;
153 | (3)根据适用的法律法规、法律程序的要求、行政机关或司法机关的要求进行提供或执行本政策以保护我们或其他方的权利、财产或安全;
154 | (4)在涉及合并、收购时,如涉及到个人信息转让,本公司将要求个人信息接收方继续接受本政策的约束。
155 |

156 |

五、自动数据收集技术

157 |

158 | 1.我们在应用中使用自动数据收集技术。例如:
159 | (1)Cookies(或浏览器cookies)。Cookies是网站或应用运营方设置的小型文本文件,以识别您的浏览器或设备。我们可能在我们的应用上使用cookies技术存储并跟踪信息,例如用户数量及使用频率、用户分布以及用户的线上偏好。cookies不抓取能够识别您身份的信息,但其收集的信息可协助我们对应用的使用情况进行分析,以提高您的使用体验。您可以在浏览器设置中关闭cookies。但是,这可能影响应用的功能。
160 | (2)网络分析。网络分析是收集、评估网页和移动应用访问者行为的一种方法。这包括对流量模式进行分析,例如确定网站或移动应用某部分功能的访问频率,或用以了解访问者最感兴趣的信息或服务。我们的应用使用的是第三方工具提供的网络分析服务。
161 | 2.我们在应用中使用第三方数据支持SDK。例如:
162 | 使用SDK名称:友盟SDK
163 | 服务类型:统计分析
164 | 收集个人信息类型:设备信息(可能会涉及Android ID/OpenUDID 165 | 信息等,在收集该信息前我们会请求您的授权)
隐私权政策链接:https://www.umeng.com/page/policy
166 |

167 |

六、 我们如何保护您的信息

168 |

169 | (1)如我们停止运营,我们将及时停止继续收集您个人信息的活动,将停止运营的通知公告在TokenPocket上,并对所持有的您的个人信息在合理期限内进行删除或匿名化处理。
170 | (2)为了保护您的个人信息,我们将采取数据安全技术措施,提升内部合规水平,增加内部员工信息安全培训,并对相关数据设置安全访问权限等方式安全保护您的隐私信息。
171 | (3)我们将在TokenPocket“钱包指引”中向您推送有关信息安全的消息,并不时在TokenPocket“钱包指引”版块更新钱包使用及信息保护的资料,供您参考。
172 | 173 |

174 |

七、 对未成年人的保护

175 |

176 | 我们对保护未满18周岁的未成年人做出如下特别约定:
177 | (1)未成年人应当在父母或监护人指导下使用我们的相关服务。
178 | (2)我们建议未成年人的父母和监护人应当在阅读本政策、《TokenPocket服务协议》及我们的其他有关规则的前提下,指导未成年人使用TokenPocket。
179 | (3)TokenPocket将根据国家相关法律法规的规定保护未成年人的个人信息的保密性及安全性。
180 | 181 |

182 |

八、 免责声明

183 |

184 | (1)请您注意,您通过TokenPocket接入第三方DApp后,将适用该第三方DApp发布的隐私政策。该第三方DApp对您个人信息的收集和使用不为我们所控制,也不受本政策的约束。
185 | (2)我们无法保证第三方DApp一定会按照我们的要求采取个人信息保护措施。 您应审慎选择和使用第三方DApp,并妥善保护好您的个人信息,我们对其他第三方DApp的隐私保护不负任何责任。
186 | (3)我们将在现有技术水平条件下尽可能采取合理的安全措施来保护您的个人信息,以避免信息的泄露、篡改或者毁损。我们系利用无线方式传输数据,因此,我们无法确保通过无线网络传输数据的隐私性和安全性。
187 | 188 |

189 |

九、 其他

190 |

191 | (1)我们作为为您提供服务的公司,将不会主动向除协议约定之外的第三方提供您的个人信息,除非征得您的同意并告知对方身份、联系方式、处理目的、处理方式等内容。若后期因服务需要,我们将处理关于您的个人敏感信息的,我们将再次单独征求您的意见,并在取得您同意后进行使用。
192 | (2)如您是新加坡以外的用户,您需全面了解并遵守您所在司法辖区与使用我们服务所有相关法律、法规及规则。 193 | 我们将设立专门的个人信息保护部门,您在使用我们的服务过程中,如遇到任何有关个人信息使用的问题,您可以通过在TokenPocket提交反馈等方式联系我们。
194 | (3)您可以在TokenPocket中查看本政策及我们其他服务规则。我们鼓励您在每次访问TokenPocket时都查阅我们的服务协议及隐私政策。本政策的任何译文版本仅为方便用户而提供,无意对本政策的条款进行修改。如果本政策的中文版本与非中文版本之间存在冲突,应以中文版本为准。

195 | 196 | 本政策自2018年1月10日起适用。
197 | 198 |

本政策未尽事宜,您需遵守我们不时更新的公告及相关规则。

199 | 200 |

TokenPocket Foundation Ltd.

201 |

202 |
203 |
204 | 205 |
206 |

207 |
208 |
209 | 210 | 211 | -------------------------------------------------------------------------------- /public/terms-zh/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | TokenPocket服务协议 | TokenPocket - 你的通用数字钱包 | TP钱包-ETH钱包-BTC钱包-BSC钱包-HECO钱包-OKExChain钱包-Polkadot钱包-Kusama 9 | 钱包-DeFi钱包-Layer 2钱包-EOS钱包-TRX钱包-EOS钱包-以太坊钱包-墨客钱包-ENU钱包-井通钱包 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 23 | 24 | 25 | 26 | 27 | 29 | 30 | 31 | 32 | 33 | 35 | 36 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
78 |
79 |
80 |
81 |
82 |
83 |

《TokenPocket服务协议》

85 |

最近更新于:2021年5月29日

87 |
88 |

89 | 尊敬的用户:
90 | 感谢您选择TokenPocket服务。《TokenPocket服务协议》(以下简称“本协议”)由TokenPocket Foundation 91 | Ltd(以下简称“本公司”或“我们”)和用户(以下简称“您”或“用户”)签订,本协议在您与本公司之间具有合同上的法律效力。 92 |

93 | 本公司在此特别提醒您在使用TokenPocket(以下简称“TokenPocket”或本软件,TokenPocket可在各移动应用平台上下载,包括但不仅限于Google Play和App 94 | Store)之前,请认真阅读《TokenPocket服务协议》及后文提到的相关协议,尤其是本协议规定的“免责及责任限制”等条款将以加粗的形式体现,确保您充分理解本协议中各条款,并自主考虑风险。 95 |
96 |

97 |

一、 关于本协议的确认与接纳

98 |

99 | 1) 您理解本协议及有关协议适用于TokenPocket及TokenPocket上本公司所自主开发和拥有的去中心化应用(简称“DApp”)(排除第三方开发的DApp)。
100 | 2) 101 | 您下载TokenPocket软件并创建或导入钱包,即视为您已经充分阅读并接受本协议全部条款,本协议立即生效,对双方具有约束力。
102 | 3) 103 | 本协议可由本公司随时更新,经修改的协议一经在TokenPocket上公布,立即自动生效,恕不再另行通知。在本公司公布修改协议条款后,如果您不接受修改后的条款,请立即停止使用TokenPocket,您继续使用TokenPocket将被视为接受修改后的协议。
104 | 4) 105 | 如果您未满18周岁,或者是无民事行为能力人或限制民事行为能力人,请在父母或监护人指导下使用TokenPocket。 106 |

107 |

108 |

二、 定义

109 |

110 | 1)TokenPocket:指由本公司基于比特币、以太坊、BSC、HECO、TRON、Polkadot、Kusama、EOS、COSMOS、墨客、井通、BOS、IOST区块链系统(及将来陆续支持的其他区块链系统)开发的区块链钱包,包括其他为方便用户使用区块链系统而开发的辅助工具。
111 | 2)用户
112 | 113 |      A. 用户必须是具备完全民事行为能力的自然人;
114 |      B. 115 | 若您为18周岁以下的未成年人使用TokenPocket服务,需要在您父母或监护人的指导下使用TokenPocket。无民事行为能力人使用TokenPocket或限制民事行为能力人超过其民事权利或行为能力范围从事交易的,造成的一切后果,TokenPocket有权要求您及您的父母或监护人负责。
116 | 3)被排出人士
117 |      A.除了自然人以外的、具备订立本协议的法律和意识能力的人士;或
118 |      119 | B.因本协议、法律、监管要求或适用于该用户的司法管辖区的规定而被以任何形式或方式(全部或部分)禁止、限制、无授权或无资格使用服务(如本协议所定义)的用户。为免疑义,中国用户亦涵盖在“被排除人士”的定义内。
120 | 4)使用相关
121 |      A. 创建或导入钱包:指您使用TokenPocket,确认履行本协议并创建或导入钱包的过程。
122 |      B. 123 | 钱包密码:指您在创建TokenPocket钱包过程中,软件操作界面提示您填写的密码,该密码用于加密保护私钥。作为去中心化的应用,钱包密码不存储在您的这台移动设备或本公司的服务器,一旦丢失你需要借助明文私钥或助记词重置新密码。
124 | 信息提示:TokenPocket软件操作界面涉及的信息提示内容,建议用户按照相关步骤进行操作。
125 | 126 |      C. 特定用户:指按照新加坡法律法规及政策规定必须要配合本公司履行个人信息披露义务的用户。
127 |      D. 私钥:由256位随机字符构成,是用户拥有并使用数字代币的核心。
128 |      E. 129 | 公钥:由私钥借助密码学原理单向推导生成,并用以生成区块链数字钱包地址,数字钱包地址即为公开收款地址。
130 |      F. 助记词:符合区块链BIP39 131 | 行业标准,由随机算法生成的12(或15/18/21/24)个有序单词组成。是私钥的易记录表现形式,方便用户备份保管。
132 |      G. Keystore: 133 | 是私钥或助记词经过用户设置的钱包密码加密保存的文件形式,它只存储在您的这台移动设备中,不会同步至本公司服务器。
134 |      H. 数字代币:指TokenPocket目前支持的数字代币种类,包括但不限于ETH、EOS等。
135 | 136 |      I. 资料:指TokenPocket上“快讯”等内容资料,这些资料均为本公司所有,未经授权不得转载。
137 |      J. 138 | 个人信息:指以电子或者其他方式记录的能够单独或者与其他信息结合识别用户个人身份的各种信息,包括但不限于自然人的姓名、出生日期、身份证件号码、个人生物识别信息、住址、电话号码、银行卡号、邮件地址、钱包地址、移动设备信息、操作记录、交易记录等,但不包括用户的钱包密码、私钥、助记词、Keystore,对于国家法律规定的非我公司必要收集信息的,我公司将在征得个人同意后方进行收集,并保证严格对于收集到的个人信息予以严格保密,未经个人本人同意,不得向其他第三方泄露。
139 | 140 |      K. 中国:指中华人民共和国,包括香港特别行政区、澳门特别行政区、台湾地区。
141 |      L. 142 | 第三方服务:指第三方DApp、第三方DeFi、第三方智能合约、第三方开源协议、第三方网页、第三方硬件钱包、第三方在线网页钱包、第三方交易所等第三方提供的产品和服务。 143 |

144 |

145 |

三、 服务内容

146 |

1) 创建或导入钱包。对TokenPocket支持的数字代币,您可以使用TokenPocket生成新钱包或导入相关区块链系统的其它钱包工具生成的兼容钱包。
147 | 2) 148 | 转账、收款。您可以使用TokenPocket的转账、收款功能进行数字代币的管理,即运用私钥进行电子签名,对相关区块链的账本进行修改。转账是指付款方利用收款方的区块链地址进行转账操作,实际的转账、收款行为均在相关区块链系统(而非TokenPocket)发生。
149 | 3) 150 | 行情查看。您可以使用TokenPocket查看所提供的数字代币汇率价格。TokenPocket通过抓取相应的数字代币汇率信息并展示在TokenPocket中的“市场”版块。
151 | 4) 152 | 管理数字资产。您可以使用TokenPocket添加、保管并移除TokenPocket所支持的数字代币。
153 | 5) 154 | 浏览DApp。用户通过在TokenPocket上的链接,可以跳转至DApp并使用该DApp(包括本公司自己的DApp和第三方DApp)提供的服务。
155 | 6) 156 | 交易记录。我们将通过区块链系统拷贝您全部或部分的交易记录。但交易记录以区块链系统的记载为准。
157 | 7) 158 | 暂停服务。您知悉基于区块链系统交易“不可撤销”的属性,我们不能为您暂停或撤销转账交易等操作,但在一定情况下,我们可以暂停或者限制某位用户对TokenPocket软件的操作。
159 | 8) 160 | EOS手机、邮箱账号。在TokenPocket 161 | 上(EOS体系有效去中心解决方案)钱包注册所需的手机号码、邮箱,增加的Owner权限归属于本公司,我们将在注册开始向您做出特别提示,如果选择使用该功能,则视为您同意并认可所有条款。
162 |      A. 163 | 使用TokenPocket手机号码、邮箱注册功能( EOS体系有效去中心解决方案)过程中会收集您的手机号码或邮箱地址作为一个凭证,并默认增加多签的Owner权限,以便于私钥找回。
164 |      B. 165 | 我们在手机号码、邮箱注册方式中(EOS体系有效去中心解决方案)会把本公司的Owner权限进行多签设置,最大程度的保证用户的权限安全。且区块信息可查,最大程度公开透明化,账号的每一次操作均可查询对应的发起者。
166 | 9) 币币兑换。用户可以与使用第三方智能合约或第三方DEX进行数字代币兑换,由TokenPocket作为界面工具帮助用户和第三方交互并显示该数字代币兑换的相应结果。
167 | 10) 其他本公司认为有必要提供的服务。 168 |

169 |

170 |

四、 用户接受本公司提供的上述服务时应了解以下常见问题

171 |

172 | 1) 173 | 秉承着区块链的去中心化特点,并为了保护用户的数字代币安全,本公司提供的是去中心化服务,大大区别于银行业金融机构。用户了解本公司(去中心化方案)不提供以下服务:
174 |      A. 175 | 存储用户的钱包密码(即用户创建/导入钱包时设置的密码)、私钥、助记词、Keystore;
176 |      B. 找回用户的钱包密码、私钥、助记词、Keystore;
177 |      C. 冻结钱包;
178 |      D. 挂失钱包;
179 |      E. 恢复钱包;
180 | 181 |      F. 交易回滚。
182 | 2) 183 | 由于本公司不提供上述服务,因此用户应当自行保管含有TokenPocket的移动设备、备份TokenPocket、备份钱包密码、助记词、私钥及Keystore。如用户遗失移动设备、删除且未备份TokenPocket、删除且未备份钱包、钱包被盗或遗忘钱包密码、私钥、助记词、Keystore,本公司均无法还原钱包或找回钱包密码、私钥、助记词、Keystore;如用户进行交易时误操作(例如输错转账地址),本公司亦无法取消交易。
184 | 3) 185 | 本公司和TokenPocket所能够提供的数字代币管理服务并未包括所有已存在的数字代币,请勿通过TokenPocket操作任何TokenPocket不支持的数字代币。
186 | 4) 187 | TokenPocket仅是用户的数字代币管理工具,并非交易所或交易平台。虽然本协议将多次提及“交易”,其行为泛指用户使用。TokenPocket进行的转账和收款操作,这与交易所或交易平台上进行的“交易”有本质区别。
188 | 5) 189 | TokenPocket上集成的DApp包括本公司自主拥有的DApp和第三方平台提供的DApp。对于第三方平台提供的DApp,TokenPocket仅为用户进入DApp提供区块链浏览器。用户在第三方DApp上接受服务或进行交易前应自行判断和评估该第三方DApp提供的服务或交易是否存在风险。
190 |
191 |

192 |

五、 您的权利义务

193 |

194 | 1) 创建或导入钱包
195 |      A. 196 | 创建或导入钱包:您有权在您的移动设备上通过TokenPocket创建和/或导入钱包,有权设定钱包的钱包密码等信息,并有权通过TokenPocket应用程序,使用自己的钱包在区块链上进行转账和收款等交易。
197 |      B. 198 | 身份验证:按照有关法律法规和政策要求,特定用户在使用TokenPocket提供的有关服务时,应当按照TokenPocket的提示及时完成相关身份验证,要求您提交包括但不限于您的姓名、身份证号码、手机号码、银行卡号信息等个人信息。否则该特定用户将无法使用有关服务,因特定用户拖延造成的损失由您自行承担。
199 | 200 |      C. 201 | 本公司可能为不同的终端设备开发不同的软件版本,您应当根据实际需要选择下载合适的版本进行安装。如果您从未经合法授权的第三方获取本软件或与本软件名称相同的安装程序,本公司将无法保证该软件能否正常使用,也无法保证其安全性,因此造成的损失由您自行承担。
202 | 203 |      D. 本软件新版本发布后,旧版软件可能无法使用。本公司不保证旧版软件的安全性、继续可用性及提供相应的客户服务。请您随时核对并下载最新版本。
204 | 2) 使用:
205 |      A. 206 | 用户应自行妥善保管移动设备、钱包密码、私钥、助记词、Keystore等信息。本公司不负责为用户保管以上信息。因您遗失移动设备、主动或被动泄露、遗忘钱包密码、私钥、助记词、Keystore或遭受他人攻击、诈骗等所引起的一切风险、责任、损失、费用应由您自行承担。
207 | 208 |      B. 209 | 遵循信息提示。您了解并同意遵循TokenPocket对您做出的信息提示,按照信息提示的内容进行操作,否则,由此引起的一切风险、责任、损失、费用等应由您自行承担。
210 |      C. 211 | 您知悉并理解TokenPocket没有义务对链接的第三方DApp服务或交易履行尽职调查义务,您应当理性做出投资决策并自主承担相应的投资风险。
212 |      D. 213 | 积极完成身份验证。当TokenPocket合理认为您的交易行为或交易情况出现异常的,或认为您的身份信息存在疑点的,或TokenPocket认为应核对您身份证件或其他必要文件的情形时,请您积极配合TokenPocket核对您的有效身份证件或其他必要文件,及时完成相关的身份验证。
214 | 215 |      E. 216 | 使用TokenPocket手机号码、邮箱注册方式(EOS体系有效去中心解决方案),您可以选择导出私钥功能来获得私钥以更好的管理您的账户,您也知悉您可以将默认添加的多签owner权限进行删除,并且了解并明白删除默认添加的多签owner权限,本公司将无法帮助您进行私钥恢复。
217 | 3) 218 | 转账:
219 |      A. 220 | 您知悉对于TokenPocket服务中您可使用的日计转账限额和笔数,可能因为您使用该转账服务时所处的国家/地区、监管要求、转账目的、TokenPocket风险控制、身份验证等事由而不同。
221 |      B. 222 | 您理解基于区块链操作的“不可撤销”属性,当您使用TokenPocket转账功能时,您应当自行承担因您操作失误而导致的后果(包括但不限于因您输错转账地址、您自身选择转账节点服务器的问题)。
223 |      C. 224 | 您知悉在使用TokenPocket服务时,以下情况的出现可能导致转账“交易失败”或“打包超时”:
225 | 226 |           a) 钱包余额不足;
227 |           b) 交易矿工费不足;
228 |           c) 区块链执行合约代码失败;
229 |           d) 超出监管部门、TokenPocket或法律法规规定的付款额度;
230 |           e) 网络、设备等技术故障;
231 |           f) 232 | 区块链网络拥堵、故障等原因引起交易被抛弃;
233 |           g) 您的地址或交易对方地址被识别为特殊地址, 如高风险地址、交易所地址、ICO 234 | 地址、Token地址等。
235 |      D. 236 | 您知悉TokenPocket仅向您提供转账工具,在您使用TokenPocket完成转账后,本公司即完成了当次服务的所有义务,本公司对其他纠纷争议,不负担任何义务。
237 |      E. 238 | 合法合规。您知悉在TokenPocket进行操作时或利用TokenPocket上的DApp进行交易时,您应当遵循有关法律法规、国家政策的要求。
239 |      F. 240 | 公告通知。TokenPocket会以网站公告、电子邮件、发送短信、电话、消息中心信息、弹窗提示或客户端通知等方式向您发送通知,例如通知您交易进展情况,或者提示您进行相关操作,请您及时予以关注。
241 | 4) 242 | 服务费用与纳税义务:
243 |      A. TokenPocket暂时不向您收取任何形式的服务费或手续费,将来需对某些服务进行收费时将另行约定或公布规则;
244 |      B. 245 | 您使用TokenPocket进行转账时应支付矿工费,金额由您自行决定。矿工费由相关区块链系统收取;
246 |      C. 247 | 您知悉在特定情况下,因为您所处的环境及网络状态不稳定,导致您的转账操作未完成时,亦会被相关区块链系统收取矿工费;
248 |      D. 您因在TokenPocket进行交易而发生的所有应纳税负及其它方面的费用均由您负责支付。
249 |
250 |

251 |

六、 风险提示

252 |

253 | 1) 254 | 您了解并知悉,由于数字代币领域的法律法规政策尚未健全,该领域的数字代币可能会产生无法兑现、技术不稳定等重大风险。且数字代币的价格波动幅度远高于其他金融资产。我们谨慎提醒您应当根据自身财务状况和风险偏好,理性选择持有或处置任何一种数字代币。TokenPocket提供的行情查看功能仅系抓取部分交易所的数字代币汇率信息的搜索结果,并不表示为最新行情或最佳报价。
255 | 2) 256 | 在使用TokenPocket服务时,若您或您的相对方未遵从本协议或相关网站说明、交易、支付页面中之操作提示、规则,TokenPocket并不保证交易会顺利完成,且TokenPocket不承担损害赔偿责任。若发生前述情形,而款项已先行入账您的或您的交易方账号中。
257 | 3) 258 | TokenPocket钱包或第三方钱包,您理解区块链操作具有的“不可逆”属性,以及相关交易具有“不可撤销”的特征,由您及您的相对方自行承担相应的风险后果。
259 | 4) 260 | 在您使用TokenPocket集成的第三方DApp服务或进行交易时,为了您的利益,本公司建议您仔细阅读本协议及TokenPocket提示,了解交易对象及产品信息,谨慎评估风险后再采取行动。所有您在第三方DApp进行的交易行为系您的个人行为,有约束力的合同关系在您和您的相对方之间建立,与TokenPocket无关。TokenPocket对因您的交易行为所引起的一切风险、责任、损失、费用不承担任何责任。
261 | 5) 262 | 您在交易过程中应当自行判断对方是否为完全民事行为能力人并自行决定是否与对方进行交易或转账给对方等,且您自行承担与此相关的所有风险。
263 | 6) 264 | 在转账过程中,如果出现“交易失败”、“打包超时”等类似的异常信息提示时,您应通过相关区块链系统的官方途径或其他的区块链查询工具进行再次确认,以避免重复转账;否则,由此所引起的一切损失和费用应由您自行承担。
265 | 7) 266 | 您理解当您在TokenPocket上创建或导入钱包之后,您的Keystore、私钥、助记词等信息仅存储在当前的这台移动设备中,不存储在TokenPocket或本公司的服务器上。您可以按照TokenPocket提供的操作指南采取同步钱包等方式更换移动设备。但若您未保存或备份钱包密码、私钥、助记词、Keystore等信息且在您移动设备丢失的情况下,您的数字代币将因此丢失,本公司无法为您找回,您需自行承担相应损失。若您在导出、保存或备份钱包密码、私钥、助记词、Keystore等信息的时候泄密,或保存或备份上述信息的设备或服务器被黑客攻击或控制等情况下,您的数字代币将因此丢失,本公司无法为您找回,您需自行承担相应损失。
267 | 8) 268 | 我们建议您在创建或导入钱包时对您钱包的钱包密码、私钥、助记词及Keystore等信息做好安全备份。我们提请您注意,请不要采用以下备份方式:截图、邮件、记事本、短信、微信、QQ等电子备份方式。我们建议您在纸质记事本上抄写助记词和Keystore等信息,同时您亦可将电子数据保管至密码管理器。
269 | 9) 270 | 我们建议您在安全的网络环境中使用TokenPocket,确保您的移动设备没有越狱或Root, 以避免可能存在的安全隐患。
271 | 10) 272 | 您在使用我们的服务过程中,警惕非TokenPocket官方的诈骗行为。一旦发现此类行为,我们鼓励您第一时间告知我们。 273 |

274 |
275 |

276 |

七、 服务的变更、中断、终止

277 |

278 | 1) 279 | 您同意本公司为保证自主业务经营权可以暂时提供部分服务功能,或于将来暂停部分服务功能或开通新的服务功能。当任何功能减少或者增加或者变化时,只要您仍然使用本公司提供的服务,表示您仍然同意本协议或者本协议修正后的条款。
280 | 2) 281 | 您理解存在如下情形时,本公司将暂停提供服务:
282 |      A. 因设备、区块链系统维修、升级、故障和通信中断等技术原因而中断业务;
283 |      B. 284 | 因台风、地震、海啸、洪水、停电、战争或恐怖袭击等不可抗力因素,病毒、木马、黑客攻击、系统不稳定或政府行为等原因,造成本公司系统不能提供服务或本公司合理认为继续提供服务会有较大风险的;
285 |      C. 286 | 发生本公司无法控制或合理预见的其他情形。
287 |      D. 当您出现如下情况时,本公司可单方面中止或终止您使用TokenPocket的部分或全部功能:
288 |           1.用户死亡;
289 |           2.盗用他人的钱包信息或移动设备;
290 | 291 |           3.填写个人信息时提供虚假信息;
292 |           4.拒绝本公司为提升TokenPocket功能而发起的强制更新操作;
293 |           5.将TokenPocket用于违法或犯罪活动;
294 |           6.妨碍其他用户正常使用;
295 | 296 |           7.伪称本公司的工作人员或管理人员;
297 |           8.攻击、侵入、更改或以任何其他方式威胁本公司计算机系统的正常运作;
298 |           9.利用TokenPocket宣传垃圾广告;
299 | 300 |           10.散布谣言,损害本公司和TokenPocket商誉;
301 |           11.违法行为,其他违反本协议的行为,及本公司合理认为应当暂停功能的情形。
302 | 3) 303 | 当您与本公司之间的服务关系变更、中断、终止时,您仍有权在合理时间内导出您钱包等信息。
304 |
305 |

306 |

八、 您合法使用本公司服务的承诺

307 |

308 | 1) 您应遵守您所居住的国家或地区的法律法规,不得将TokenPocket用于任何非法目的,也不得以任何非法方式使用本公司服务。
309 | 2) 310 | 您不得利用TokenPocket从事违法或犯罪的行为,包括但不限于:
311 |      A. 反对宪法所确定的基本原则,危害国家安全、泄漏国家秘密、颠覆国家政权、破坏国家统一的;
312 |      B. 313 | 从事任何违法犯罪行为,包括但不限于洗钱、非法集资等;
314 |      C. 315 | 通过使用任何自动化程序、软件、引擎、网络爬虫、网页分析工具、数据挖掘工具或类似工具,接入本公司服务、收集或处理本公司所提供的内容,干预或试图干预任何用户或任何其他方式接入本公司服务的行为;
316 |      D. 317 | 提供赌博资讯或以任何方式引诱他人参与赌博;
318 |      E. 侵入他人TokenPocket钱包盗取数字代币;
319 |      F. 进行与交易对方宣称的交易内容不符的交易,或不真实的交易;
320 |      G. 321 | 从事任何侵害或可能侵害TokenPocket服务系统、数据之行为;
322 |      H. 其他违法以及本公司有正当理由认为不适当的行为。
323 | 3) 324 | 您理解并同意,如因您违反有关法律(包括但不限于海关及税务方面的监管规定)或者本协议之规定,使本公司遭受任何损失、受到任何第三方的索赔或任何行政管理部门的处罚,您应对本公司进行赔偿,包括合理的律师费用。 325 | 4) 您不属于资格使用TokenPocket服务的被排除人士。
326 | 5) 您承诺按时缴纳本公司的服务费用(如有),否则本公司有权暂停或中止对您提供的服务。 327 |

328 |

329 |

九、 隐私条款

330 |

331 | 本公司十分重视对用户隐私的保护,相关隐私保护政策请参考本公司公布并不时更新的《TokenPocket隐私政策》。 332 |

333 |

334 |

十、 免责及责任限制

335 |

336 | 1) 本公司仅对本协议中所列明的义务承担责任。
337 | 2) 338 | 您理解和同意,在法律所允许的范围内,本公司只能按照现有的技术水平和条件提供TokenPocket服务。因下列原因导致TokenPocket无法正常提供服务,本公司不承担责任:
339 |      A. 340 | TokenPocket系统停机维护或升级;
341 |      B. 因台风、地震、洪水、雷电或恐怖袭击等不可抗力原因;
342 |      C. 您的移动设备软硬件和通信线路、供电线路出现故障的;
343 |      D. 344 | 您操作不当或未通过本公司授权或认可的方式使用本公司服务的;
345 |      E. 因病毒、木马、恶意程序攻击、网络拥堵、系统不稳定、系统或设备故障、通讯故障、电力故障、银行等原因或政府行为等原因;
346 |      F. 347 | 非因本公司的原因而引起的任何其它原因。
348 | 3) 本公司对以下情形不承担责任:
349 |      A. 350 | 因用户遗失移动设备、删除且未备份TokenPocket、删除且未备份钱包、钱包被盗或遗忘钱包密码、私钥、助记词、Keystore而导致的数字代币丢失。
351 |      B. 352 | 因用户自行泄露钱包密码、私钥、助记词、Keystore,或借用、转让或授权他人使用自己的移动设备或TokenPocket钱包,或未通过本公司官方渠道下载TokenPocket应用程序或其他不安全的方式使用TokenPocket应用程序导致的数字代币丢失;
353 | 354 |      C. 因用户误操作(包括但不限于您输错转账地址、您自身选择转账节点服务器的问题)导致的数字代币丢失;
355 |      D. 因用户不理解区块链技术的性质而进行误操作导致的数字代币丢失;
356 |      E. 357 | 因时间滞后、区块链系统不稳定等原因导致本公司拷贝用户在区块链上的交易记录发生偏差;
358 | 4) 359 | TokenPocket手机号码、邮箱注册方式(EOS体系有效去中心解决方案)下,用户是可选导出私钥的,因为用户更改Owner和Active权限后导致的私钥丢失或被盗造成的财产损失均与本公司无关。
360 | 5) 361 | TokenPocket手机号码、邮箱注册方式(EOS体系有效去中心解决方案)默认情况下,由于用户的原因导致无法通过手机号码找回的(无法补办手机卡等情况),不能提供私钥找回服务。
362 | 6) 363 | 由于用户个人原因(包括但不限于手机号码、邮箱丢失,验证码泄露,个人公开私钥,用户个人信息被黑客入侵)及不可抗拒因素导致的资产丢失,均与本公司无关。
364 | 7) 365 | 用户在第三方DApp上操作产生的风险和后果。您理解TokenPocket仅作为您数字代币管理的工具。本公司不能控制第三方DApp提供的产品及服务的质量、安全或合法性,信息的真实性或准确性,以及相对方履行其在与您签订的协议项下的各项义务的能力。所有您在第三方DApp进行的交易行为系您的个人行为,有约束力的合同关系在您和您的相对方之间建立,与TokenPocket无关。本公司提醒您应该通过自己的谨慎判断确定登录DApp及相关信息的真实性、合法性和有效性。您与任何第三方交易所产生的风险亦应由您自行承担。 366 |
367 | 本公司可能同时为您及您的交易对手方提供服务,您同意对本公司可能存在的该等行为予以明确豁免任何实际或潜在的利益冲突,并不得以此来主张本公司在提供服务时存在法律上的瑕疵,也不因此而加重本公司的责任或注意义务。 368 |

369 |

370 |

十一、 本公司不提供以下形式的保证:

371 |

372 | 1) 本公司服务将符合您的全部需求;
373 | 2) 您经由本公司服务取得的任何技术、产品、服务、资讯将符合您的期望;
374 | 3) 375 | 本公司从第三方交易所抓取的数字代币市场交易行情等信息的及时性、准确性、完整性、可靠性做出保证;
376 | 4) 您在TokenPocket上的交易各方会及时履行其在与您达成的交易协议中各项义务。
377 | 5) 378 | 在任何情况下,本公司对本协议所承担的违约赔偿责任总额不超过 379 | A. 0.1个以太币;或 380 | B. 新加坡元100元,以较高的为准。
381 | 6) 382 | 您理解TokenPocket仅作为用户管理数字代币、显示交易信息的工具,本公司不提供法律、税务或投资建议等服务。您应当自行向法律、税务、投资方面的专业人士寻求建议,且您在使用我们服务过程中所遭受的投资损失、数据损失等,本公司概不负责。
383 | 7) 384 | 您理解根据有关政策法规的要求,我们可能不时更改我们的用户准入标准,限定向某一特定群体提供服务的范围和方式等。 385 |


386 |

387 |

十二、 完整协议

388 |

389 | 1) 本协议由《TokenPocket服务协议》、《TokenPocket隐私政策》及本公司不时公布的各项规则组成。
390 | 2) 391 | 本协议部分内容被有管辖权的法院认定为违反或无效的,不因此影响其他内容的效力。
392 | 3) 393 | 本协议的任何译文版本仅为方便用户而提供,无意对本协议的条款进行修改。如果本协议的中文版本与非中文版本之间存在冲突,应以中文版本为准。 394 |

395 |

396 |

十三、 知识产权保护

397 |

398 | TokenPocket系本公司开发并拥有知识产权的应用程序。 399 | TokenPocket中显示的任何内容(包括本协议、公告、文章、视频、音频、图片、档案、资讯、资料、商标或标识)的知识产权归本公司或第三方权利人所有。用户仅可为持有和管理数字代币之目的使用TokenPocket应用程序及其中的内容。未经本公司或第三方权利人的事先书面同意,任何人不得擅自使用、修改、反向编译、复制、公开传播、改变、散布、发行或公开发表上述应用程序及内容。 400 |

401 |

402 |

十四、 法律适用与争议解决

403 |

404 | 1) 本协议及其修订版之效力、解释、变更、执行与争议解决均适用本公司共和国法律,如无相关法律规定,则应当适用国际商业惯例和(或)行业惯例。
405 | 2) 406 | 若您和本公司之间发生任何纠纷或争议,首先应友好协商解决,协商不成的,任何一方可提交本公司所在地有管辖权的人民法院管辖。 407 |

408 |

409 |

十五、 其他

410 |

411 | 1) 如您是新加坡以外用户,您需全面了解并遵守您所在司法辖区与使用本公司服务所有相关法律、法规及规则。
412 | 2) 413 | 您在使用本公司服务过程中,如遇到任何问题,您可以通过在TokenPocket提交反馈等方式联系我们。
414 | 3) 您可以在TokenPocket中查看本协议。 415 | 本公司鼓励您在每次访问TokenPocket时都查阅本公司的服务协议。
416 | 本协议自2018年1月10日起适用。 417 |

418 |

419 |

本协议未尽事宜,您需遵守本公司不时更新的公告及相关规则。

420 | 421 | 422 |

TokenPocket Foundation LTD. 423 |

424 |
425 |
426 |
427 | 428 |
429 |

430 |
431 |
432 | 433 | 434 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 29 | -------------------------------------------------------------------------------- /src/assets/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/arrow.png -------------------------------------------------------------------------------- /src/assets/close-modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/close-modal.png -------------------------------------------------------------------------------- /src/assets/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/close.png -------------------------------------------------------------------------------- /src/assets/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/copy.png -------------------------------------------------------------------------------- /src/assets/earth-mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/earth-mini.png -------------------------------------------------------------------------------- /src/assets/footer/1-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/1-on.png -------------------------------------------------------------------------------- /src/assets/footer/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/1.png -------------------------------------------------------------------------------- /src/assets/footer/2-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/2-on.png -------------------------------------------------------------------------------- /src/assets/footer/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/2.png -------------------------------------------------------------------------------- /src/assets/footer/3-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/3-on.png -------------------------------------------------------------------------------- /src/assets/footer/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/3.png -------------------------------------------------------------------------------- /src/assets/footer/4-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/4-on.png -------------------------------------------------------------------------------- /src/assets/footer/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/4.png -------------------------------------------------------------------------------- /src/assets/footer/5-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/5-on.png -------------------------------------------------------------------------------- /src/assets/footer/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/5.png -------------------------------------------------------------------------------- /src/assets/footer/6-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/6-on.png -------------------------------------------------------------------------------- /src/assets/footer/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/6.png -------------------------------------------------------------------------------- /src/assets/footer/7-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/7-on.png -------------------------------------------------------------------------------- /src/assets/footer/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/7.png -------------------------------------------------------------------------------- /src/assets/footer/8-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/8-on.png -------------------------------------------------------------------------------- /src/assets/footer/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/8.png -------------------------------------------------------------------------------- /src/assets/footer/mobile/mobile-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/mobile/mobile-1.png -------------------------------------------------------------------------------- /src/assets/footer/mobile/mobile-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/mobile/mobile-2.png -------------------------------------------------------------------------------- /src/assets/footer/mobile/mobile-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/mobile/mobile-3.png -------------------------------------------------------------------------------- /src/assets/footer/mobile/mobile-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/mobile/mobile-4.png -------------------------------------------------------------------------------- /src/assets/footer/mobile/mobile-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/mobile/mobile-5.png -------------------------------------------------------------------------------- /src/assets/footer/mobile/mobile-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/mobile/mobile-6.png -------------------------------------------------------------------------------- /src/assets/footer/mobile/mobile-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/mobile/mobile-7.png -------------------------------------------------------------------------------- /src/assets/footer/mobile/mobile-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/footer/mobile/mobile-8.png -------------------------------------------------------------------------------- /src/assets/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/github.png -------------------------------------------------------------------------------- /src/assets/header/language.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/header/language.png -------------------------------------------------------------------------------- /src/assets/language.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/language.png -------------------------------------------------------------------------------- /src/assets/left-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/left-img.png -------------------------------------------------------------------------------- /src/assets/logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/logo-dark.png -------------------------------------------------------------------------------- /src/assets/logo-w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/logo-w.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/main/Polkadot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/Polkadot.png -------------------------------------------------------------------------------- /src/assets/main/aptos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/aptos.png -------------------------------------------------------------------------------- /src/assets/main/bch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/bch.png -------------------------------------------------------------------------------- /src/assets/main/binance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/binance.png -------------------------------------------------------------------------------- /src/assets/main/bsc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/bsc.png -------------------------------------------------------------------------------- /src/assets/main/btc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/btc.png -------------------------------------------------------------------------------- /src/assets/main/conflux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/conflux.png -------------------------------------------------------------------------------- /src/assets/main/cosmos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/cosmos.png -------------------------------------------------------------------------------- /src/assets/main/dogecoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/dogecoin.png -------------------------------------------------------------------------------- /src/assets/main/eos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/eos.png -------------------------------------------------------------------------------- /src/assets/main/eth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/eth.png -------------------------------------------------------------------------------- /src/assets/main/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/github.png -------------------------------------------------------------------------------- /src/assets/main/iost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/iost.png -------------------------------------------------------------------------------- /src/assets/main/jingtum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/jingtum.png -------------------------------------------------------------------------------- /src/assets/main/ltc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/ltc.png -------------------------------------------------------------------------------- /src/assets/main/nervos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/nervos.png -------------------------------------------------------------------------------- /src/assets/main/nostr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/nostr.jpg -------------------------------------------------------------------------------- /src/assets/main/solana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/solana.png -------------------------------------------------------------------------------- /src/assets/main/sui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/sui.png -------------------------------------------------------------------------------- /src/assets/main/tron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/main/tron.png -------------------------------------------------------------------------------- /src/assets/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/menu.png -------------------------------------------------------------------------------- /src/assets/modal-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/modal-img.png -------------------------------------------------------------------------------- /src/assets/nav-icon/1-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/1-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/1.png -------------------------------------------------------------------------------- /src/assets/nav-icon/10-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/10-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/10.png -------------------------------------------------------------------------------- /src/assets/nav-icon/11-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/11-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/11.png -------------------------------------------------------------------------------- /src/assets/nav-icon/12-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/12-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/12.png -------------------------------------------------------------------------------- /src/assets/nav-icon/13-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/13-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/13.png -------------------------------------------------------------------------------- /src/assets/nav-icon/14-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/14-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/14.png -------------------------------------------------------------------------------- /src/assets/nav-icon/15-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/15-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/15.png -------------------------------------------------------------------------------- /src/assets/nav-icon/16-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/16-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/16.png -------------------------------------------------------------------------------- /src/assets/nav-icon/17-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/17-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/17.png -------------------------------------------------------------------------------- /src/assets/nav-icon/18-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/18-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/18.png -------------------------------------------------------------------------------- /src/assets/nav-icon/19-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/19-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/19.png -------------------------------------------------------------------------------- /src/assets/nav-icon/2-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/2-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/2.png -------------------------------------------------------------------------------- /src/assets/nav-icon/20-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/20-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/20.png -------------------------------------------------------------------------------- /src/assets/nav-icon/21-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/21-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/21.png -------------------------------------------------------------------------------- /src/assets/nav-icon/22-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/22-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/22.png -------------------------------------------------------------------------------- /src/assets/nav-icon/23-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/23-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/23.png -------------------------------------------------------------------------------- /src/assets/nav-icon/24-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/24-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/24.png -------------------------------------------------------------------------------- /src/assets/nav-icon/25-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/25-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/25.png -------------------------------------------------------------------------------- /src/assets/nav-icon/3-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/3-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/3.png -------------------------------------------------------------------------------- /src/assets/nav-icon/4-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/4-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/4.png -------------------------------------------------------------------------------- /src/assets/nav-icon/5-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/5-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/5.png -------------------------------------------------------------------------------- /src/assets/nav-icon/6-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/6-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/6.png -------------------------------------------------------------------------------- /src/assets/nav-icon/7-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/7-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/7.png -------------------------------------------------------------------------------- /src/assets/nav-icon/8-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/8-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/8.png -------------------------------------------------------------------------------- /src/assets/nav-icon/9-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/9-on.png -------------------------------------------------------------------------------- /src/assets/nav-icon/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/9.png -------------------------------------------------------------------------------- /src/assets/nav-icon/build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/build.png -------------------------------------------------------------------------------- /src/assets/nav-icon/products.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/products.png -------------------------------------------------------------------------------- /src/assets/nav-icon/support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/support.png -------------------------------------------------------------------------------- /src/assets/nav-icon/tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/tools.png -------------------------------------------------------------------------------- /src/assets/nav-icon/trade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nav-icon/trade.png -------------------------------------------------------------------------------- /src/assets/nervos-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/nervos-icon.png -------------------------------------------------------------------------------- /src/assets/share-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/share-close.png -------------------------------------------------------------------------------- /src/assets/sui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TP-Lab/key-generator/HEAD/src/assets/sui.png -------------------------------------------------------------------------------- /src/components/common/Footer.vue: -------------------------------------------------------------------------------- 1 | 63 | 64 | 430 | 431 | 739 | -------------------------------------------------------------------------------- /src/components/common/Header.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 65 | 66 | 107 | -------------------------------------------------------------------------------- /src/components/common/KeyItem.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 30 | 31 | 96 | -------------------------------------------------------------------------------- /src/components/common/MiniHeader.vue: -------------------------------------------------------------------------------- 1 | 80 | 81 | 89 | 90 | 229 | -------------------------------------------------------------------------------- /src/components/common/Modal.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 30 | 31 | -------------------------------------------------------------------------------- /src/components/common/NavIndex.js: -------------------------------------------------------------------------------- 1 | import LinkMethods from '../../mixins/LinkMethods' 2 | import NavUrl from '../../mixins/NavUrl' 3 | import Mobile from '../../mixins/Mobile' 4 | 5 | export default { 6 | name: 'HeaderLayout', 7 | mixins: [LinkMethods, NavUrl, Mobile], 8 | props: { 9 | navLogo: { 10 | type: String, 11 | default: require('../../assets/logo.png') 12 | }, 13 | navTitleColor: { 14 | type: String, 15 | default: '#fff' 16 | }, 17 | navIconColor: { 18 | type: String, 19 | default: '#fff' 20 | }, 21 | arrowClass: { 22 | type: String, 23 | default: 'icon-down-fff' 24 | }, 25 | langClass: { 26 | type: String, 27 | default: 'icon-earth' 28 | } 29 | }, 30 | data() { 31 | return { 32 | black: '#000', 33 | navIndex: '', 34 | menuState: false, 35 | clientWidth: 0, 36 | canRun: true, 37 | eventListen: null, 38 | isOpen: 'false' 39 | } 40 | }, 41 | computed: { 42 | language() { 43 | return this.$i18n.locale 44 | }, 45 | titleLang() { 46 | switch (this.language) { 47 | case 'zh': 48 | return '中文简体' 49 | case 'zh-tw': 50 | return '中文繁体' 51 | case 'en': 52 | return 'English' 53 | case 'ko': 54 | return '한국어' 55 | case 'ru': 56 | return 'Русский' 57 | case 'es': 58 | return 'Español' 59 | case 'hi': 60 | return 'हिन्दी' 61 | case 'fil': 62 | return 'Filipino' 63 | case 'pt': 64 | return 'Português' 65 | case 'ja': 66 | return '日本語' 67 | case 'vi': 68 | return 'Tiếng Việt' 69 | case 'th': 70 | return 'ภาษาไทย' 71 | default: 72 | return '中文' 73 | } 74 | }, 75 | navList() { 76 | return [ 77 | // products 78 | { 79 | local: true, 80 | title: this.$t('COMMON.LAYOUT.products'), 81 | img: require('../../assets/nav-icon/products.png'), 82 | children: [ 83 | { 84 | class: 'nav-icon-1', 85 | desc: this.$t('COMMON.LAYOUT.mobileWalletDesc'), 86 | title: this.$t('COMMON.LAYOUT.mobileWallet'), 87 | url: this.homeUrl 88 | }, 89 | { 90 | class: 'nav-icon-2', 91 | desc: this.$t('COMMON.LAYOUT.hardwareWalletDesc'), 92 | title: this.$t('COMMON.LAYOUT.hardwareWallet'), 93 | url: this.keypalUrl 94 | }, 95 | { 96 | class: 'nav-icon-3', 97 | desc: this.$t('COMMON.LAYOUT.extensionWalletDesc'), 98 | title: this.$t('COMMON.LAYOUT.extensionWallet'), 99 | url: this.extensionUrl 100 | } 101 | ] 102 | }, 103 | // Tools 104 | { 105 | title: this.$t('COMMON.LAYOUT.tools'), 106 | img: require('../../assets/nav-icon/tools.png'), 107 | column: 3, 108 | children: [ 109 | { 110 | class: 'nav-icon-4', 111 | desc: this.$t('COMMON.LAYOUT.versionVerificationDesc'), 112 | title: this.$t('COMMON.LAYOUT.versionVerification'), 113 | url: this.verifyVersionUrl 114 | }, 115 | { 116 | class: 'nav-icon-5', 117 | desc: this.$t('COMMON.LAYOUT.easyInscriptionDesc'), 118 | title: this.$t('COMMON.LAYOUT.easyInscription'), 119 | url: this.inscriptionUrl 120 | }, 121 | { 122 | class: 'nav-icon-6', 123 | desc: this.$t('COMMON.LAYOUT.BATCH_SENDER_DESC'), 124 | title: this.$t('COMMON.LAYOUT.BATCH_SENDER'), 125 | url: this.batchSenderUrl 126 | }, 127 | { 128 | class: 'nav-icon-7', 129 | desc: this.$t('COMMON.LAYOUT.tokenSecurityDesc'), 130 | title: this.$t('COMMON.LAYOUT.tokenSecurity'), 131 | url: this.tokenSecurityUrl 132 | }, 133 | // { 134 | // class: 'nav-icon-8', 135 | // desc: this.$t('COMMON.LAYOUT.keyGeneratorDesc'), 136 | // title: this.$t('COMMON.LAYOUT.keyGenerator'), 137 | // url: this.keyUrl 138 | // }, 139 | { 140 | class: 'nav-icon-9', 141 | desc: this.$t('COMMON.LAYOUT.tokenClaimDesc'), 142 | title: this.$t('COMMON.LAYOUT.tokenClaim'), 143 | url: this.tokenClaimUrl 144 | }, 145 | { 146 | class: 'nav-icon-10', 147 | desc: this.$t('COMMON.LAYOUT.tokenProfileDesc'), 148 | title: this.$t('COMMON.LAYOUT.tokenProfile'), 149 | url: this.tokenProfileUrl 150 | }, 151 | { 152 | class: 'nav-icon-11', 153 | desc: this.$t('COMMON.LAYOUT.approvalDetectorDesc'), 154 | title: this.$t('COMMON.LAYOUT.approvalDetector'), 155 | url: this.approvalUrl 156 | }, 157 | { 158 | class: 'nav-icon-12', 159 | desc: this.$t('COMMON.LAYOUT.nostrAssetsBatchSenderDesc'), 160 | title: this.$t('COMMON.LAYOUT.nostrAssetsBatchSender'), 161 | url: this.nostrUrl 162 | } 163 | ] 164 | }, 165 | // Trade 166 | { 167 | title: this.$t('COMMON.LAYOUT.trade'), 168 | img: require('../../assets/nav-icon/trade.png'), 169 | children: [ 170 | { 171 | class: 'nav-icon-13', 172 | desc: this.$t('COMMON.LAYOUT.swapDesc'), 173 | title: this.$t('COMMON.LAYOUT.swap'), 174 | url: `https://swap.transit.finance/?from=tp&locale=${this.$i18n.locale}&mode=false#/` 175 | }, 176 | { 177 | class: 'nav-icon-14', 178 | desc: this.$t('COMMON.LAYOUT.bridgeDesc'), 179 | title: this.$t('COMMON.LAYOUT.bridge'), 180 | url: `https://swap.transit.finance/?from=tp&locale=${this.$i18n.locale}&ode=false#/` 181 | }, 182 | { 183 | class: 'nav-icon-15', 184 | desc: this.$t('COMMON.LAYOUT.buyCryptoDesc'), 185 | title: this.$t('COMMON.LAYOUT.buyCrypto'), 186 | url: this.transitBuyUrl 187 | }, 188 | { 189 | class: 'nav-icon-16', 190 | desc: this.$t('COMMON.LAYOUT.marketDesc'), 191 | title: this.$t('COMMON.LAYOUT.market'), 192 | url: `https://swap.transit.finance/?from=tp&locale=${this.$i18n.locale}#/market` 193 | } 194 | ] 195 | }, 196 | // dappstore 197 | { 198 | title: this.$t('COMMON.LAYOUT.dappStore'), 199 | url: this.dappStoreUrl 200 | }, 201 | // 项目提交 202 | { 203 | title: this.$t('COMMON.LAYOUT.build'), 204 | img: require('../../assets/nav-icon/build.png'), 205 | leftDis: true, 206 | children: [ 207 | { 208 | class: 'nav-icon-19', 209 | desc: this.$t('COMMON.LAYOUT.subDAppDesc'), 210 | title: this.$t('COMMON.LAYOUT.subDApp'), 211 | url: this.dappUrl 212 | }, 213 | { 214 | class: 'nav-icon-18', 215 | desc: this.$t('COMMON.LAYOUT.subNFTDesc'), 216 | title: this.$t('COMMON.LAYOUT.subNFT'), 217 | url: this.nftUrl 218 | }, 219 | { 220 | class: 'nav-icon-21', 221 | desc: this.$t('COMMON.LAYOUT.subTokenDesc'), 222 | title: this.$t('COMMON.LAYOUT.subToken'), 223 | url: this.tokenUrl 224 | }, 225 | { 226 | class: 'nav-icon-20', 227 | desc: this.$t('COMMON.LAYOUT.subChainDesc'), 228 | title: this.$t('COMMON.LAYOUT.subChain'), 229 | url: 'https://github.com/TP-Lab/networklist-org' 230 | }, 231 | { 232 | class: 'nav-icon-17', 233 | desc: this.$t('COMMON.LAYOUT.developersDesc'), 234 | title: this.$t('COMMON.LAYOUT.developers'), 235 | url: this.developerUrl 236 | } 237 | ] 238 | }, 239 | { 240 | title: this.$t('COMMON.LAYOUT.support'), 241 | img: require('../../assets/nav-icon/support.png'), 242 | children: [ 243 | { 244 | class: 'nav-icon-22', 245 | desc: this.$t('COMMON.LAYOUT.helpCenterDesc'), 246 | title: this.$t('COMMON.LAYOUT.helpCenter'), 247 | url: this.helpUrl 248 | }, 249 | { 250 | class: 'nav-icon-23', 251 | desc: this.$t('COMMON.LAYOUT.contactUsDesc'), 252 | title: this.$t('COMMON.LAYOUT.contactUs'), 253 | url: this.contactUsUrl 254 | }, 255 | { 256 | class: 'nav-icon-24', 257 | desc: this.$t('COMMON.LAYOUT.forumDesc'), 258 | title: this.$t('COMMON.LAYOUT.forum'), 259 | url: `https://fans.tokenpocket.pro/` 260 | } 261 | ] 262 | }, 263 | // 空数据 264 | { 265 | title: '' 266 | }, 267 | // 语言 268 | { 269 | title: this.titleLang, 270 | lang: true, 271 | class: 'language-changes', 272 | children: [ 273 | { title: '简体中文', lang: 'zh', link: '/zh', class: 'locale-zh' }, 274 | // { title: '繁体中文', lang: 'zh-tw', link: '/zh-tw', class: 'locale-zh-tw' }, 275 | { title: 'English', lang: 'en', link: '/en', class: 'locale-en' }, 276 | { title: '한국어', lang: 'ko', link: '/ko', class: 'locale-ko' }, 277 | // { title: 'Русский', lang: 'ru', link: '/ru', class: 'locale-ru' }, 278 | // { title: 'Español', lang: 'es', link: '/es', class: 'locale-es' }, 279 | // { title: 'हिन्दी', lang: 'hi', link: '/hi', class: 'locale-hi' }, 280 | // { title: 'Filipino', lang: 'fil', link: '/fil', class: 'locale-fil' }, 281 | // { title: 'Português', lang: 'pt', link: '/pt', class: 'locale-pt' }, 282 | { title: '日本語', lang: 'ja', link: '/ja', class: 'locale-ja' }, 283 | // { title: 'Tiếng Việt', lang: 'vi', link: '/vi', class: 'locale-vi' }, 284 | // { title: 'ภาษาไทย', lang: 'th', link: '/th', class: 'locale-th' } 285 | ] 286 | } 287 | ] 288 | }, 289 | currentNav() { 290 | // return this.navList[0] 291 | if ( 292 | this.navIndex !== '' && 293 | this.navList[this.navIndex].children && 294 | !this.navList[this.navIndex].lang 295 | ) { 296 | return this.navList[this.navIndex] 297 | } else { 298 | return null 299 | } 300 | }, 301 | isShow() { 302 | return this.isOpen === 'true' && this.currentNav && this.currentNav.title && !this.currentNav.lang 303 | } 304 | }, 305 | watch: { 306 | clientWidth() { 307 | this.navIndex = '' 308 | } 309 | }, 310 | mounted() { 311 | this.clientWidth = document.body.clientWidth 312 | this.navState() 313 | this.windowChange() 314 | }, 315 | beforeDestroy() { 316 | document.removeEventListener('click', this.eventListen) 317 | }, 318 | methods: { 319 | // changeLanguage() { 320 | // // this.language === 'zh' ? this.navChildrenGo({ lang: 'en' }) : this.navChildrenGo({ lang: 'zh' }) 321 | // }, 322 | 323 | changeMenuState() { 324 | this.menuState = !this.menuState 325 | this.navIndex = '' 326 | }, 327 | 328 | navClass(item, index) { 329 | let whiteList = ['/', '/en', '/zh', '/ko', '/zh-tw'] 330 | let isWhite = whiteList.indexOf(this.$route.fullPath) !== -1 331 | 332 | if (isWhite && !item.lang) return 'icon-down-fff' 333 | if (!isWhite && !item.lang) return 'icon-down-' 334 | if (isWhite && item.lang) return 'icon-earth' 335 | if (!isWhite && item.lang) return 'icon-earth-mini' 336 | }, 337 | 338 | navState(el) { 339 | document.addEventListener( 340 | 'click', 341 | (e) => { 342 | if (this.clientWidth > 768) { 343 | // 点击除弹出层外的空白区域 344 | if ( 345 | this.$refs.navMain && 346 | !this.$refs.navMain.contains(e.target) 347 | ) { 348 | this.navIndex = '' 349 | } 350 | } 351 | }, 352 | false 353 | ) 354 | }, 355 | 356 | navGo(item, index, el) { 357 | el.preventDefault() 358 | if (item.children) { 359 | index === this.navIndex ? (this.navIndex = '') : (this.navIndex = index) 360 | } 361 | if (item.url && !item.local) { 362 | return window.open(item.url) 363 | } 364 | if (item.url && item.local) { 365 | this.$router.push(item.url) 366 | } 367 | // return false 368 | }, 369 | onMouseenter() { 370 | // console.log('onMouseenter') 371 | this.isOpen = 'true' 372 | }, 373 | onMouseleave() { 374 | // console.log('onMouseleave') 375 | this.navIndex = '' 376 | this.isOpen = 'false' 377 | }, 378 | // 鼠标进入 379 | navEnter(item, index, el) { 380 | el.preventDefault() 381 | this.isOpen = 'true' 382 | this.navIndex = index 383 | if (item.url && !item.local && item.children) { 384 | return window.open(item.url) 385 | } 386 | if (item.url && item.local && item.children) { 387 | this.$router.push(item.url) 388 | } 389 | }, 390 | // 鼠标离开 391 | navLeave(item, index, el) { 392 | el.preventDefault() 393 | this.isOpen = 'false' 394 | if (item.lang) { 395 | this.navIndex = '' 396 | } 397 | }, 398 | 399 | navChildrenGo(item, el) { 400 | // console.log(item) 401 | if (el) el.preventDefault() 402 | if (item.url && !item.local) { 403 | return window.open(item.url) 404 | } 405 | 406 | if (item.url && item.local && !item.lang) { 407 | if (item.url === '/dappstore' && this.$route.path === '/dappstore') { 408 | window.location.reload() 409 | } else { 410 | if (item.url === '/dappstore') { 411 | return this.$router.push({ path: item.url, query: { category_id: 99998, category: this.$t('DAPPSTORE.hot') } }) 412 | } else { 413 | return this.$router.push(item.url) 414 | } 415 | } 416 | } 417 | 418 | if (item.lang) { 419 | if (item.lang === this.langChange) return false 420 | this.$route.fullPath.replace(`${this.language}`, item.lang) 421 | // eslint-disable-next-line no-unused-expressions 422 | this.$route.fullPath.replace(`${this.language}`, item.lang) === '/' 423 | ? '' 424 | : this.$router.replace(this.$route.fullPath.replace(`${this.language}`, item.lang)) 425 | // this.$router.replace(this.$route.fullPath.replace(`${this.language}`, item.lang)) 426 | this.langChange(item.lang) 427 | } 428 | this.navIndex = '' 429 | }, 430 | 431 | langChange(lang) { 432 | this.$i18n.locale = lang 433 | this.navIndex = '' 434 | this.menuState = false 435 | }, 436 | 437 | windowChange() { 438 | window.addEventListener('resize', (e) => { 439 | this.clientWidth = e.target.screen.width 440 | }) 441 | } 442 | } 443 | } 444 | -------------------------------------------------------------------------------- /src/components/common/NormalHeader.vue: -------------------------------------------------------------------------------- 1 | 138 | 139 | 147 | 148 | 458 | -------------------------------------------------------------------------------- /src/i18n/index.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from '../App.vue' 3 | import { createI18n } from 'vue-i18n' 4 | import en from './lang/en' 5 | import zh from './lang/zh' 6 | import ko from './lang/ko' 7 | import ja from './lang/ja' 8 | 9 | const app = createApp(App) 10 | 11 | const availableLocale = ['zh', 'en', 'ko', 'ja']; 12 | 13 | let defaultLangStr = navigator.language; 14 | let defaultLang = 'zh'; 15 | 16 | if (defaultLangStr.indexOf('en') >= 0) { 17 | defaultLang = 'en'; 18 | } 19 | 20 | const query = location.search.substr(1); 21 | let queryObj = {}; 22 | 23 | if (query) { 24 | _.forEach(query.split('&'), item => { 25 | const tempArr = item.split('='); 26 | queryObj[tempArr[0]] = tempArr[1]; 27 | }); 28 | } 29 | 30 | let locale = _.includes(availableLocale, queryObj['locale']) ? queryObj['locale'] : defaultLang; 31 | 32 | locale = localStorage.getItem('locale') || locale; 33 | 34 | switch (locale) { 35 | case 'en': 36 | document.title = 'Key Generator | TokenPocket' 37 | break; 38 | case 'zh': 39 | document.title = '公私钥生成器 | TokenPocket' 40 | break; 41 | case 'ko': 42 | document.title = '키 생성기 | TokenPocket' 43 | break; 44 | case 'ja': 45 | document.title = 'キージェネレーター | TokenPocket' 46 | break; 47 | default: 48 | break; 49 | } 50 | 51 | const i18n = createI18n({ 52 | legacy: false, 53 | locale: locale, 54 | messages: {en, zh, ko, ja} 55 | }) 56 | 57 | export default function (app) { 58 | app.use(i18n) 59 | } 60 | -------------------------------------------------------------------------------- /src/i18n/lang/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | chain: { 3 | btc: 'BTC', 4 | ethereum: 'ETH / EVMs', 5 | dogecoin: 'Dogecoin', 6 | eos: 'EOS', 7 | iost: 'IOST', 8 | tron: 'TRON', 9 | cosmos: 'COSMOS', 10 | binance: 'Binance', 11 | nervos: 'Nervos', 12 | jingtum: 'Jingtum', 13 | solana: 'Solana', 14 | aptos: 'Aptos', 15 | polkadot: 'Polkadot', 16 | bch: 'BCH', 17 | ltc: 'LTC', 18 | conflux: 'Conflux', 19 | nostr: 'Nostr', 20 | sui: 'SUI', 21 | }, 22 | main: { 23 | title: 'Key Generator', 24 | language: 'English', 25 | intro: 26 | 'This tool is used to randomly generate public and private keys for various networks. The generation process can be done offline without an internet connection. The generator code has been open-sourced, and you can go and check it out and verify it.', 27 | tips: 28 | 'We recommend that you generate your public and private keys offline. After generating the keys, please be sure to record and store your private key safely. Do not disclose private key information to anyone!', 29 | githubUrl: 'Open Source', 30 | publicKey: 'Address', 31 | privateKey: 'Private Key', 32 | gen: 'Generate', 33 | copy: 'Copy', 34 | copied: 'Copied!', 35 | failed: 'Copy Failed!', 36 | normalAddr: 'Normal Address', 37 | segwitAddr: 'SegWit Address', 38 | address: 'Address', 39 | changeChain: 'Choose Network', 40 | }, 41 | follow: { 42 | title: 'Follow Us', 43 | desc1: "TokenPocket Staffs won't send you private messages!", 44 | desc2: 45 | "Caution! You're entering TokenPocket community, there might be someone impersonating us to send you private messages! Please be aware that, anyone who sends private messages might be a scammer! We will never contact you first!", 46 | desc3: 'Understood, enter', 47 | }, 48 | COMMON: { 49 | LAYOUT: { 50 | features: 'Features', 51 | products: 'Products', 52 | buyCryptoFooter: 'Buy Crypto', 53 | mobileWallet: 'Mobile Wallet', 54 | mobileWalletDesc: 'Crypto & DeFi mobile wallet on blockchain.', 55 | hardwareWallet: 'Hardware Wallet', 56 | hardwareWalletDesc: 'Get your KeyPal, to guard your assets.', 57 | extensionWallet: 'Extension Wallet', 58 | extensionWalletDesc: 'A better wallet on your computer.', 59 | desktop: 'Desktop Wallet', 60 | fiveDegrees: '5Degrees', 61 | versionVerification: 'Version Verification', 62 | versionVerificationDesc: 'Verify your wallet.', 63 | approvalDetector: 'Approval Detector', 64 | approvalDetectorDesc: 'View and unapprove your approved tokens.', 65 | tokenSecurity: 'Token Security', 66 | tokenSecurityDesc: 'Verify if the token is secure by its contract address.', 67 | keyGenerator: 'Key Generator', 68 | keyGeneratorDesc: 69 | 'Randomly generate public and private keys for various networks.', 70 | tokenProfile: 'Token Profile', 71 | tokenProfileDesc: 'Learn all information about the token.', 72 | tokenClaim: 'Token Claim', 73 | tokenClaimDesc: 'Claim your airdrop.', 74 | easyInscription: 'Easy Inscription', 75 | easyInscriptionDesc: 'A secure inscription tool.', 76 | nostrAssetsBatchSender: 'NostrAssets BatchSender', 77 | nostrAssetsBatchSenderDesc: 'A batch sending tool for NostrAssets.', 78 | BATCH_SENDER: 'BatchSender', 79 | BATCH_SENDER_DESC: 'Send tokens to multiple recipients at once.', 80 | 81 | trade: 'Trade', 82 | swap: 'Transit Swap', 83 | swapDesc: 'Trade with the best prices.', 84 | bridge: 'Bridge', 85 | bridgeDesc: 'Seamlessly cross assets from one chain to another.', 86 | buyCrypto: 'Buy', 87 | buyCryptoDesc: 'Buy cryptocurrency with your credit cards.', 88 | market: 'Market', 89 | marketDesc: 'Real-time insights to discover hot tokens.', 90 | 91 | information: 'Information', 92 | blockchainGuide: 'Blockchain Guide', 93 | tronWallet: 'TRON Guide', 94 | iostWallet: 'IOST Guide', 95 | tpMan: 'TP Man', 96 | 97 | developers: 'Developers', 98 | github: 'Github (TP-Lab)', 99 | devCenter: 'Dev Center', 100 | developersDesc: 'TokenPocket developer documentation.', 101 | subToken: 'Submit Token', 102 | subTokenDesc: 'Submit your token.', 103 | subDApp: 'Submit DApp', 104 | subDAppDesc: 'Submit your DApp, and show it after audit.', 105 | subNFT: 'Submit NFT', 106 | subNFTDesc: 'Submit your NFT & arts.', 107 | subChain: 'Submit Chain', 108 | subChainDesc: 'Submit your blockchain.', 109 | bugBounty: 'Bug Bounty', 110 | 111 | tools: 'Tools', 112 | 113 | build: 'Build', 114 | 115 | learn: 'Learn', 116 | 117 | explorer: 'Explorer', 118 | 119 | company: 'Company', 120 | about: 'About', 121 | careers: 'Careers', 122 | pressKit: 'Brand Kit', 123 | swagShop: 'Swag Shop', 124 | 125 | support: 'Support', 126 | helpCenter: 'Help Center', 127 | helpCenterDesc: 'Your go-to resources for answers and assistance.', 128 | contactUs: 'Contact Us', 129 | contactUsDesc: 'Share your suggestions and ask any questions.', 130 | forum: 'Forum', 131 | forumDesc: 'Enjoy your talks with the community members.', 132 | 133 | legal: 'Legal', 134 | privacyPolicy: 'Privacy Policy', 135 | terms: 'Terms of Use', 136 | 137 | toHome: 'Home', 138 | defiWallet: 'DeFi Wallet', 139 | ETHWallet: 'Ethereum Wallet', 140 | ethWallet: 'ETH Wallet', 141 | 142 | dappStore: 'DApp Store' 143 | } 144 | } 145 | }; 146 | -------------------------------------------------------------------------------- /src/i18n/lang/ja.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | chain: { 4 | btc: 'BTC', 5 | ethereum: 'ETH / EVMs', 6 | dogecoin: 'Dogecoin', 7 | eos: 'EOS', 8 | iost: 'IOST', 9 | tron: 'TRON', 10 | cosmos: 'COSMOS', 11 | binance: 'Binance', 12 | nervos: 'Nervos', 13 | jingtum: 'Jingtum', 14 | solana: 'Solana', 15 | aptos: 'Aptos', 16 | polkadot: 'Polkadot', 17 | bch: 'BCH', 18 | ltc: 'LTC', 19 | conflux: 'Conflux', 20 | nostr: 'Nostr', 21 | sui: 'SUI', 22 | }, 23 | main: { 24 | title: 'キーージェネレーター', 25 | language: '日本語', 26 | intro: 27 | 'このツールは、各ネットワークの公開鍵と秘密鍵をランダムに生成するために使用されます. 生成プロセスはネットワークから切断してオフラインにすることができます. ジェネレーターのコードはオープンソース化されています. 確認して検証することができます.', 28 | tips: 29 | '公開鍵と秘密鍵を生成するには、ネットワークから切断することをお勧めします。生成後は、必ず秘密鍵情報を記録して保管してください。秘密鍵情報は、誰にも開示したり開示したりしないでください。!', 30 | githubUrl: 'オープンソースアドレス', 31 | publicKey: 'アドレス', 32 | privateKey: '秘密鍵(プライベートキー)', 33 | gen: '生成する', 34 | copy: 'コピー', 35 | copied: 'コピーされました!', 36 | failed: 'コピーに失敗しました!', 37 | normalAddr: 'ノーマルアドレス', 38 | segwitAddr: 'セグウィットアドレス', 39 | address: 'アドレス', 40 | changeChain: '最下層を切り替える', 41 | }, 42 | follow: { 43 | title: 'フォローする', 44 | desc1: 'TokenPocket スタッフからプライベート メッセージは送信されません!', 45 | desc2: 46 | '注意! TokenPocket コミュニティに参加しようとしています。誰かが私たちになりすましてプライベート メッセージを送信している可能性があります。 プライベート メッセージを送信する人は詐欺師である可能性があることに注意してください。 最初に連絡することはありません!', 47 | desc3: '了解、入力' 48 | }, 49 | COMMON: { 50 | LAYOUT: { 51 | features: 'プロダクト', 52 | products: 'プロダクト', 53 | buyCryptoFooter: '暗号通貨を購入する', 54 | mobileWallet: 'モバイルウォレット', 55 | mobileWalletDesc: 'ブロックチェーンのモバイルウォレット。', 56 | hardwareWallet: 'ハードウェアウォレット', 57 | hardwareWalletDesc: '資産を守るためにKeyPalを手に入れよう!', 58 | extensionWallet: 'ブラウザ拡張ウォレット', 59 | extensionWalletDesc: 'コンピューター上でのより良いウォレット', 60 | desktop: 'デスクトップウォレット', 61 | fiveDegrees: '5Degrees', 62 | versionVerification: 'バージョン検証', 63 | versionVerificationDesc: 'ウォレットの検証', 64 | approvalDetector: 'アプルーバルディテクター', 65 | approvalDetectorDesc: 'アプルーブの表示とリボーク', 66 | tokenSecurity: 'トークンセキュリティ', 67 | tokenSecurityDesc: 'トークンのコントラクトアドレスを監査', 68 | keyGenerator: 'キージェネレーター', 69 | keyGeneratorDesc: 'さまざまなネットワークの公開鍵と秘密鍵をランダムに生成', 70 | tokenProfile: 'トークンプロファイル', 71 | tokenProfileDesc: 'トークンに関する全ての情報を確認', 72 | tokenClaim: 'トークンクレーム', 73 | tokenClaimDesc: 'エアドロップを受け取る', 74 | easyInscription: 'イージーインスクリプション', 75 | easyInscriptionDesc: '安全かつ簡単なインスクリプションのためのツール', 76 | nostrAssetsBatchSender: 'NostrAssetsバッチトランスファー', 77 | nostrAssetsBatchSenderDesc: 'NostrAssetsのためのバッチトランスファーツール', 78 | BATCH_SENDER: 'バッチトランスファー', 79 | BATCH_SENDER_DESC: '複数のアドレスに一度にトークンを転送', 80 | 81 | trade: '取引', 82 | swap: 'TransitSwap', 83 | swapDesc: 'ベストレートで取引。', 84 | bridge: 'Bridge', 85 | bridgeDesc: 'Ensuring seamless asset liquidity.', 86 | buyCrypto: '購入', 87 | buyCryptoDesc: 'クレジットカードで暗号資産を購入', 88 | market: '市場', 89 | marketDesc: 'リアルタイムインサイトでトレンドのトークンを見つける', 90 | 91 | information: '詳細', 92 | blockchainGuide: 'ブロックチェーンガイド', 93 | tronWallet: 'TRON Guide', 94 | iostWallet: 'IOST Guide', 95 | tpMan: 'TPマン', 96 | 97 | developers: '開発者', 98 | github: 'Github (TP-Lab)', 99 | devCenter: '開発者センター', 100 | developersDesc: 'TokenPocket開発者向けドキュメント', 101 | subToken: 'トークンを投稿', 102 | subTokenDesc: 'トークンを投稿', 103 | subDApp: 'DAppの投稿', 104 | subDAppDesc: 'DAppを投稿し、監査後に表示', 105 | subNFT: 'NFTの投稿', 106 | subNFTDesc: 'NFTとアート作品の投稿', 107 | subChain: 'チェーンを投稿', 108 | subChainDesc: 'ブロックチェーンをを投稿', 109 | bugBounty: 'バグバウンティ', 110 | 111 | tools: 'ツール', 112 | 113 | build: 'ビルド', 114 | 115 | learn: '学ぶ', 116 | 117 | explorer: 'エクスプローラー', 118 | 119 | company: '会社', 120 | about: 'TokenPocketについて', 121 | careers: 'キャリア', 122 | pressKit: 'ブランドキット', 123 | swagShop: 'スワッグショップ', 124 | 125 | support: 'サポート', 126 | helpCenter: 'ヘルプセンター', 127 | helpCenterDesc: '問題解決のためのアシスタント', 128 | contactUs: 'お問い合わせ', 129 | contactUsDesc: '提案を共有と質問', 130 | forum: 'フォーラム', 131 | forumDesc: 'コミュニティメンバーとの会話を楽しむ', 132 | 133 | legal: '法的情報', 134 | privacyPolicy: 'プライバシーポリシー', 135 | terms: '利用規約', 136 | 137 | toHome: 'ホーム', 138 | defiWallet: 'DeFiウォレット', 139 | ETHWallet: 'イーサリアムウォレット', 140 | ethWallet: 'ETHウォレット', 141 | 142 | dappStore: 'DAppストア' 143 | } 144 | } 145 | }; 146 | -------------------------------------------------------------------------------- /src/i18n/lang/ko.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | chain: { 4 | btc: 'BTC', 5 | ethereum: 'ETH / EVMs', 6 | dogecoin: 'Dogecoin', 7 | eos: 'EOS', 8 | iost: 'IOST', 9 | tron: 'TRON', 10 | cosmos: 'COSMOS', 11 | binance: 'Binance', 12 | nervos: 'Nervos', 13 | jingtum: 'Jingtum', 14 | solana: 'Solana', 15 | aptos: 'Aptos', 16 | polkadot: 'Polkadot', 17 | bch: 'BCH', 18 | ltc: 'LTC', 19 | conflux: 'Conflux', 20 | nostr: 'Nostr', 21 | sui: 'SUI', 22 | }, 23 | main: { 24 | title: '키 생성기', 25 | language: '한국인', 26 | intro: 27 | '이 도구는 각 네트워크의 공개키와 개인키를 무작위로 생성하는데 사용되며, 생성 과정은 네트워크와 오프라인에서 분리할 수 있으며, 생성기의 코드는 오픈소스로 공개되어 있어 확인 및 검증이 가능합니다.', 28 | tips: 29 | '공개키와 개인키를 생성하기 위해서는 네트워크 연결을 끊는 것이 좋습니다.생성 후에는 반드시 개인키 정보를 기록하여 보관하시기 바랍니다.개인키 정보를 누구에게도 공개하거나 공개하지 마십시오!', 30 | githubUrl: '오픈 소스 주소', 31 | publicKey: '주소', 32 | privateKey: '프라이빗 키', 33 | gen: '생성', 34 | copy: '복사', 35 | copied: '복사 완료!', 36 | failed: '복사 실패!', 37 | normalAddr: '일반 주소', 38 | segwitAddr: '세그윗 주소', 39 | address: '주소', 40 | changeChain: '하단 레이어 전환', 41 | }, 42 | follow: { 43 | title: '우리를 따라오세요', 44 | desc1: 'TokenPocket 직원은 개인 메시지를 보내지 않습니다!', 45 | desc2: 46 | '주의! TokenPocket 커뮤니티에 참여 중입니다. 누군가 우리를 사칭하여 개인 메시지를 보낼 수 있습니다! 개인 메시지를 보내는 사람은 모두 사기꾼일 수 있다는 점에 유의하세요! 우리는 당신에게 먼저 연락하지 않을 것입니다!', 47 | desc3: '이해, 입력' 48 | }, 49 | COMMON: { 50 | LAYOUT: { 51 | features: '기능', 52 | products: '제품', 53 | buyCryptoFooter: '암호화폐 구매', 54 | mobileWallet: '모바일 지갑', 55 | mobileWalletDesc: '블록체인 기반 암호화폐 & DeFi 모바일 지갑.', 56 | hardwareWallet: '하드웨어 지갑', 57 | hardwareWalletDesc: 'KeyPal로 자산을 보호하세요.', 58 | extensionWallet: '익스텐션 지갑', 59 | extensionWalletDesc: '컴퓨터에서 더 나은 지갑 사용.', 60 | desktop: '데스크탑 지갑', 61 | fiveDegrees: '5Degrees', 62 | versionVerification: '버전 검증', 63 | versionVerificationDesc: '지갑을 검증하세요.', 64 | approvalDetector: '승인 탐지기', 65 | approvalDetectorDesc: '승인된 토큰 보기 및 승인 해제.', 66 | tokenSecurity: '토큰 보안', 67 | tokenSecurityDesc: '토큰의 계약 주소를 통해 보안을 확인하세요.', 68 | keyGenerator: '키 생성기', 69 | keyGeneratorDesc: '여러 네트워크를 위한 퍼블릭 및 프라이빗 키 무작위 생성.', 70 | tokenProfile: '토큰 프로필', 71 | tokenProfileDesc: '토큰에 대한 모든 정보 알아보기.', 72 | tokenClaim: '토큰 청구', 73 | tokenClaimDesc: '에어드랍 청구.', 74 | easyInscription: '간편한 인스크립션', 75 | easyInscriptionDesc: '안전한 인스크립션 도구.', 76 | nostrAssetsBatchSender: 'NostrAssets 일괄 전송', 77 | nostrAssetsBatchSenderDesc: 'NostrAssets용 일괄 전송 도구.', 78 | BATCH_SENDER: '일괄 전송', 79 | BATCH_SENDER_DESC: '한 번에 여러 수신자에게 토큰 전송.', 80 | 81 | trade: '거래', 82 | swap: '트랜짓 스왑', 83 | swapDesc: '최상의 가격으로 스왑', 84 | bridge: 'Bridge', 85 | bridgeDesc: 'Ensuring seamless asset liquidity.', 86 | buyCrypto: '구매', 87 | buyCryptoDesc: '신용카드로 암호화폐 구매.', 88 | market: '마켓', 89 | marketDesc: '실시간 인사이트 인기 토큰 확인.', 90 | 91 | information: '정보', 92 | blockchainGuide: 'Blockchain 지갑 가이드라인', 93 | tronWallet: 'TRON 지갑 가이드라인', 94 | iostWallet: 'IOST 지갑 가이드라인', 95 | tpMan: 'TP 맨', 96 | 97 | developers: '개발자', 98 | github: 'Github (TP-Lab)', 99 | devCenter: '개발자 센터', 100 | developersDesc: '토큰포켓 개발자 문서.', 101 | subToken: '토큰 제출', 102 | subTokenDesc: '토큰 제출.', 103 | subDApp: 'DApp 제출', 104 | subDAppDesc: 'DApp 제출 검토 후 표시.', 105 | subNFT: 'NFT 제출', 106 | subNFTDesc: 'NFT 및 예술 작품 제출.', 107 | subChain: '체인 제출', 108 | subChainDesc: '블록체인 제출.', 109 | bugBounty: '버그 바운티', 110 | 111 | tools: '도구', 112 | 113 | build: '빌드', 114 | 115 | learn: 'Learn', 116 | 117 | explorer: 'Explorer', 118 | 119 | company: '회사', 120 | about: '에 대한', 121 | careers: '직업', 122 | pressKit: '브랜드 키트', 123 | swagShop: '스웨그 샵', 124 | 125 | support: '서포트', 126 | helpCenter: '도움 센터', 127 | helpCenterDesc: '답변과 지원을 위한 리소스.', 128 | contactUs: '문의하기', 129 | contactUsDesc: '제안 공유 및 질문.', 130 | forum: '포럼', 131 | forumDesc: '커뮤니티 회원들과의 대화.', 132 | 133 | legal: '법률', 134 | privacyPolicy: '개인 정보 보호 정책', 135 | terms: '이용 약관', 136 | 137 | toHome: '홈', 138 | defiWallet: 'DeFi 지갑', 139 | ETHWallet: '이더리움 지갑', 140 | ethWallet: 'eth 지갑', 141 | 142 | dappStore: 'DApp 스토어' 143 | } 144 | } 145 | }; 146 | -------------------------------------------------------------------------------- /src/i18n/lang/zh.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | chain: { 4 | btc: '比特币', 5 | ethereum: '以太坊 / EVMs', 6 | dogecoin: 'Dogecoin', 7 | eos: 'EOS', 8 | iost: 'IOST', 9 | tron: '波场', 10 | cosmos: 'COSMOS', 11 | binance: 'Binance', 12 | nervos: 'Nervos', 13 | jingtum: '井通', 14 | solana: 'Solana', 15 | aptos: 'Aptos', 16 | polkadot: '波卡', 17 | bch: 'BCH', 18 | ltc: 'LTC', 19 | conflux: 'Conflux', 20 | nostr: 'Nostr', 21 | sui: 'SUI', 22 | }, 23 | main: { 24 | title: '公私钥生成器', 25 | language: '中文', 26 | intro: '本工具用来随机生成各网络的公钥私钥,生成过程可断网离线操作,生成器代码已开源,您可前往查看并验证', 27 | tips: '我们建议您进行断网生成公钥私钥,生成后请一定要记录并保管好您的私钥信息,切勿向任何人透露、公开您的私钥信息!', 28 | githubUrl: '开源地址', 29 | publicKey: '地址', 30 | privateKey: '私钥', 31 | gen: '随机生成', 32 | copy: '复制', 33 | copied: '已复制', 34 | failed: '复制失败', 35 | normalAddr: '普通地址', 36 | segwitAddr: '隔离见证地址', 37 | address: '地址', 38 | changeChain: '切换底层', 39 | }, 40 | follow: { 41 | title: '关注我们', 42 | desc1: 'TokenPocket 客服不会私聊您!', 43 | desc2: 44 | '请注意,您即将进入TokenPocket社区,您进入社区可能会有人假冒TokenPocket的工作人员私聊您,请您务必警惕,所有私聊您的都可能是骗子!TokenPocket工作人员不会主动跟您私信!', 45 | desc3: '知道了,继续前往' 46 | }, 47 | COMMON: { 48 | LAYOUT: { 49 | features: '功能', 50 | products: '产品', 51 | buyCryptoFooter: '购买数字资产', 52 | mobileWallet: '手机钱包', 53 | mobileWalletDesc: '您的移动端数字资产钱包,支持iOS和Android', 54 | hardwareWallet: '硬件钱包', 55 | hardwareWalletDesc: '拥有KeyPal,让您的资产更安全', 56 | extensionWallet: '插件钱包', 57 | extensionWalletDesc: '您电脑上更好用的钱包', 58 | desktop: '桌面端钱包', 59 | fiveDegrees: '5Degrees', 60 | versionVerification: '版本校验', 61 | versionVerificationDesc: '验证你的钱包是否为正版', 62 | approvalDetector: '授权检测', 63 | approvalDetectorDesc: '查看和取消授权您已经授权的代币', 64 | tokenSecurity: '代币安全检测', 65 | tokenSecurityDesc: '通过合约地址检查代币是否安全', 66 | keyGenerator: '私钥生成器', 67 | keyGeneratorDesc: '在多个网络上生成公钥和私钥', 68 | tokenProfile: '代币信息', 69 | tokenProfileDesc: '了解代币的全方位信息', 70 | tokenClaim: '领取空投', 71 | tokenClaimDesc: '获取您的空投', 72 | easyInscription: '铭文助手', 73 | easyInscriptionDesc: '安全的铭文铸造工具', 74 | nostrAssetsBatchSender: 'Nostr批量转账', 75 | nostrAssetsBatchSenderDesc: 'Nostr资产的批量发送工具', 76 | BATCH_SENDER: '批量转账', 77 | BATCH_SENDER_DESC: '一次性向多个接收者批量发送代币', 78 | 79 | trade: '交易', 80 | swap: '闪兑', 81 | swapDesc: '用最优价格交易', 82 | bridge: '跨链桥', 83 | bridgeDesc: '在不同公链之间无缝衔接资产', 84 | buyCrypto: '购买代币', 85 | buyCryptoDesc: '用信用卡购买数字资产', 86 | market: '市场', 87 | marketDesc: '实时洞察,发现热门代币', 88 | 89 | information: '信息', 90 | blockchainGuide: '区块链小白书', 91 | tronWallet: '波场小白书', 92 | iostWallet: 'IOST小白书', 93 | tpMan: 'TP侠', 94 | 95 | developers: '开发者资源', 96 | github: 'Github (TP-Lab)', 97 | devCenter: '开发者中心', 98 | developersDesc: 'TokenPocket的开发者文档', 99 | subToken: '提交代币', 100 | subTokenDesc: '提交您的数字资产', 101 | subDApp: '提交DApp', 102 | subDAppDesc: '提交您的DApp,我们将在审核后展示它', 103 | subNFT: '提交NFT', 104 | subNFTDesc: '提交您的NFT和艺术品', 105 | subChain: '提交公链', 106 | subChainDesc: '提交您的区块链', 107 | bugBounty: '漏洞赏金', 108 | 109 | tools: '工具', 110 | 111 | build: '开发者中心', 112 | 113 | learn: '学习', 114 | 115 | explorer: '探索', 116 | 117 | company: '公司', 118 | about: '关于', 119 | careers: '招聘', 120 | pressKit: '品牌素材', 121 | swagShop: '周边商店', 122 | 123 | support: '支持', 124 | helpCenter: '帮助中心', 125 | helpCenterDesc: '答疑解惑与获取资源的首选', 126 | contactUs: '联系我们', 127 | contactUsDesc: '分享您对TokenPocket的任何建议,提出您的任何疑问', 128 | forum: '社区论坛', 129 | forumDesc: '祝您与社区成员会谈愉快', 130 | 131 | legal: '法律', 132 | privacyPolicy: '隐私策略', 133 | terms: '服务协议', 134 | 135 | toHome: '返回首页', 136 | defiWallet: 'DeFi钱包', 137 | ETHWallet: '以太坊錢包', 138 | ethWallet: 'ETH钱包', 139 | 140 | dappStore: 'DApp 商店' 141 | } 142 | } 143 | }; 144 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | import router from "./router"; 4 | import store from "./store"; 5 | import i18n from "./i18n"; 6 | import "./style/index.scss"; 7 | 8 | import VueClipBoard from "vue-clipboard2"; 9 | 10 | createApp(App).use(store).use(router).use(i18n).use(VueClipBoard).mount("#app"); 11 | -------------------------------------------------------------------------------- /src/mixins/LinkMethods.js: -------------------------------------------------------------------------------- 1 | const LinkMethods = { 2 | date () { 3 | return { 4 | 5 | } 6 | }, 7 | 8 | methods: { 9 | indexGo (url) { 10 | this.$router.replace('/') 11 | }, 12 | 13 | linkGo (url) { 14 | // this.$router.push(this.$i18n.path(url)) 15 | } 16 | } 17 | } 18 | 19 | export default LinkMethods 20 | -------------------------------------------------------------------------------- /src/mixins/Mobile.js: -------------------------------------------------------------------------------- 1 | export default { 2 | data() { 3 | return { 4 | isMobile: false 5 | } 6 | }, 7 | mounted() { 8 | if ( 9 | navigator.userAgent.match( 10 | /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|TokenPocket|WebOS|Symbian|Windows Phone)/i 11 | ) 12 | ) { 13 | this.isMobile = true 14 | } else { 15 | this.isMobile = false 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/mixins/NavUrl.js: -------------------------------------------------------------------------------- 1 | 2 | const domain = `tp.xyz` 3 | 4 | export default { 5 | computed: { 6 | isTokenPocketPro() { 7 | if (window.location.hostname === 'key.tokenpocket.pro') { 8 | return true; 9 | } else { 10 | return false; 11 | } 12 | }, 13 | isZH() { 14 | if (this.$i18n.locale === 'zh') { 15 | return true 16 | } else { 17 | return false 18 | } 19 | }, 20 | homeUrl() { 21 | if (this.isTokenPocketPro) { 22 | return 'https://tokenpocket.pro/' 23 | } else { 24 | return `https://${domain}/` 25 | } 26 | }, 27 | extensionUrl() { 28 | if (this.isTokenPocketPro) { 29 | if (this.isZH) { 30 | return 'https://extension.tokenpocket.pro/?locale=zh' 31 | } else { 32 | return 'https://extension.tokenpocket.pro/?locale=en' 33 | } 34 | } else { 35 | if (this.isZH) { 36 | return `https://extension.${domain}/?locale=zh` 37 | } else { 38 | return `https://extension.${domain}/?locale=en` 39 | } 40 | } 41 | }, 42 | dappUrl() { 43 | if (this.isTokenPocketPro) { 44 | return `https://tokenpocket.pro/${this.$i18n.locale}/submit/dapp` 45 | } else { 46 | return `https://${domain}/${this.$i18n.locale}/submit/dapp` 47 | } 48 | }, 49 | tokenUrl() { 50 | if (this.isTokenPocketPro) { 51 | return `https://tokenpocket.pro/${this.$i18n.locale}/submit/token` 52 | } else { 53 | return `https://${domain}/${this.$i18n.locale}/submit/token` 54 | } 55 | }, 56 | nftUrl() { 57 | if (this.isTokenPocketPro) { 58 | return `https://tokenpocket.pro/${this.$i18n.locale}/submit/nft` 59 | } else { 60 | return `https://${domain}/${this.$i18n.locale}/submit/nft` 61 | } 62 | }, 63 | recruitingUrl() { 64 | if (this.isTokenPocketPro) { 65 | return `https://tokenpocket.pro/${this.$i18n.locale}/recruiting` 66 | } else { 67 | return `https://${domain}/${this.$i18n.locale}/recruiting` 68 | } 69 | }, 70 | aboutUrl() { 71 | if (this.isTokenPocketPro) { 72 | return `https://tokenpocket.pro/${this.$i18n.locale}/about` 73 | } else { 74 | return `https://${domain}/${this.$i18n.locale}/about` 75 | } 76 | }, 77 | developerUrl() { 78 | if (this.isZH) { 79 | return 'https://help.tokenpocket.pro/developer-cn/' 80 | } else { 81 | return 'https://help.tokenpocket.pro/developer-en/' 82 | } 83 | }, 84 | helpUrl() { 85 | if (this.isZH) { 86 | return 'https://help.tokenpocket.pro/cn/' 87 | } else { 88 | return 'https://help.tokenpocket.pro/en/' 89 | } 90 | // if (this.isTokenPocketPro) { 91 | // if (this.isZH) { 92 | // return 'https://help.tokenpocket.pro/cn/' 93 | // } else { 94 | // return 'https://help.tokenpocket.pro/en/' 95 | // } 96 | // } else { 97 | // if (this.isZH) { 98 | // return `https://help.${domain}/cn/` 99 | // } else { 100 | // return `https://help.${domain}/en/` 101 | // } 102 | // } 103 | }, 104 | desktopUrl() { 105 | if (this.isTokenPocketPro) { 106 | return `https://tokenpocket.pro/${this.$i18n.locale}/download/pc` 107 | } else { 108 | return `https://${domain}/${this.$i18n.locale}/download/pc` 109 | } 110 | }, 111 | approvalUrl() { 112 | if (this.isTokenPocketPro) { 113 | if (this.isZH) { 114 | return 'https://approval.tokenpocket.pro/?locale=zh' 115 | } else { 116 | return 'https://approval.tokenpocket.pro/?locale=en' 117 | } 118 | } else { 119 | if (this.isZH) { 120 | return 'https://approval.tptool.pro/?locale=zh' 121 | } else { 122 | return 'https://approval.tptool.pro/?locale=en' 123 | } 124 | } 125 | }, 126 | batchSenderUrl() { 127 | if (this.isTokenPocketPro) { 128 | if (this.isZH) { 129 | return 'https://batchsender.tokenpocket.pro/?locale=zh' 130 | } else { 131 | return 'https://batchsender.tokenpocket.pro/?locale=en' 132 | } 133 | } else { 134 | if (this.isZH) { 135 | return 'https://batchsender.tptool.pro/?locale=zh' 136 | } else { 137 | return 'https://batchsender.tptool.pro/?locale=en' 138 | } 139 | } 140 | }, 141 | tokenSecurityUrl() { 142 | if (this.isTokenPocketPro) { 143 | if (this.isZH) { 144 | return 'https://tokensecurity.tokenpocket.pro/?locale=zh' 145 | } else { 146 | return 'https://tokensecurity.tokenpocket.pro/?locale=en' 147 | } 148 | } else { 149 | if (this.isZH) { 150 | return 'https://tokensecurity.tptool.pro/?locale=zh' 151 | } else { 152 | return 'https://tokensecurity.tptool.pro/?locale=en' 153 | } 154 | } 155 | }, 156 | contactUsUrl() { 157 | if (this.isZH) { 158 | return 'https://help.tokenpocket.pro/cn/contact-us/contact-methods' 159 | } else { 160 | return 'https://help.tokenpocket.pro/en/contact-us/contact-methods' 161 | } 162 | // if (this.isTokenPocketPro) { 163 | // if (this.isZH) { 164 | // return 'https://help.tokenpocket.pro/cn/contact-us/contact-methods' 165 | // } else { 166 | // return 'https://help.tokenpocket.pro/en/contact-us/contact-methods' 167 | // } 168 | // } else { 169 | // if (this.isZH) { 170 | // return `https://help.${domain}/cn/contact-us/contact-methods` 171 | // } else { 172 | // return `https://help.${domain}/en/contact-us/contact-methods` 173 | // } 174 | // } 175 | }, 176 | rexUrl() { 177 | if (this.isTokenPocketPro) { 178 | if (this.isZH) { 179 | return 'https://rex.tokenpocket.pro/?locale=zh' 180 | } else { 181 | return 'https://rex.tokenpocket.pro/?locale=en' 182 | } 183 | } else { 184 | if (this.isZH) { 185 | return 'https://rex.tptool.pro/?locale=zh' 186 | } else { 187 | return 'https://rex.tptool.pro/?locale=en' 188 | } 189 | } 190 | }, 191 | joinUsUrl() { 192 | if (this.isZH) { 193 | return 'https://help.tokenpocket.pro/cn/contact-us/joinus' 194 | } else { 195 | return 'https://help.tokenpocket.pro/en/contact-us/Joinus' 196 | } 197 | // if (!this.isTokenPocketPro) { 198 | // if (this.isZH) { 199 | // return 'https://help.tokenpocket.pro/cn/contact-us/joinus' 200 | // } else { 201 | // return 'https://help.tokenpocket.pro/en/contact-us/Joinus' 202 | // } 203 | // } else { 204 | // if (this.isZH) { 205 | // return `https://help.${domain}/cn/contact-us/joinus` 206 | // } else { 207 | // return `https://help.${domain}/en/contact-us/Joinus` 208 | // } 209 | // } 210 | }, 211 | stakeVaultUrl() { 212 | if (this.isTokenPocketPro) { 213 | if (this.isZH) { 214 | return 'https://dapp.tokenpocket.pro/StakeVault/index.html?locale=zh#/' 215 | } else { 216 | return 'https://dapp.tokenpocket.pro/StakeVault/index.html?locale=en#/' 217 | } 218 | } else { 219 | if (this.isZH) { 220 | return 'https://dapp.tptool.pro/StakeVault/index.html?locale=zh#/' 221 | } else { 222 | return 'https://dapp.tptool.pro/StakeVault/index.html?locale=en#/' 223 | } 224 | } 225 | }, 226 | verifyVersionUrl() { 227 | if (this.isTokenPocketPro) { 228 | return `https://verify.tokenpocket.pro/?locale=${this.$i18n.locale}#/` 229 | } else { 230 | return `https://verify.${domain}/?locale=${this.$i18n.locale}#/` 231 | } 232 | }, 233 | fiveDegreesUrl() { 234 | if (this.isZH) { 235 | return 'https://www.5degrees.io/?locale=zh#/' 236 | } else { 237 | return 'https://www.5degrees.io/?locale=en#/' 238 | } 239 | }, 240 | keypalUrl() { 241 | if (this.isZH) { 242 | return 'https://www.keypal.pro/?locale=zh#/' 243 | } else { 244 | return 'https://www.keypal.pro/?locale=en#/' 245 | } 246 | }, 247 | transitFinanceUrl() { 248 | if (this.isZH) { 249 | return 'https://transit.finance/' 250 | } else { 251 | return 'https://transit.finance/' 252 | } 253 | }, 254 | keyUrl() { 255 | if (this.isTokenPocketPro) { 256 | return `https://key.tokenpocket.pro/?locale=${this.$i18n.locale}#/` 257 | } else { 258 | return `https://key.tptool.pro/?locale=${this.$i18n.locale}#/` 259 | } 260 | }, 261 | tokenProfileUrl() { 262 | if (this.isTokenPocketPro) { 263 | return `https://profile.tokenpocket.pro/?locale=${this.$i18n.locale}#/` 264 | } else { 265 | return `https://profile.tptool.pro/?locale=${this.$i18n.locale}#/` 266 | } 267 | }, 268 | inscriptionUrl() { 269 | if (this.isTokenPocketPro) { 270 | return `https://tp-lab.tokenpocket.pro/insc/?locale=${this.$i18n.locale}#/` 271 | } else { 272 | return `https://tp-lab.tptool.pro/insc/?locale=${this.$i18n.locale}#/` 273 | } 274 | }, 275 | nostrUrl() { 276 | if (this.isTokenPocketPro) { 277 | return `https://tp-lab.tokenpocket.pro/nostr/?locale=${this.$i18n.locale}#/` 278 | } else { 279 | return `https://tp-lab.tptool.pro/nostr/?locale=${this.$i18n.locale}#/` 280 | } 281 | }, 282 | transitBuyUrl() { 283 | return `https://buy.transit.finance/?locale=${this.$i18n.locale}` 284 | // if (this.isTokenPocketPro) { 285 | // } else { 286 | // return `https://tp-lab.tptool.pro/nostr/?locale=${this.$i18n.locale}#/` 287 | // } 288 | }, 289 | tokenClaimUrl() { 290 | if (this.isTokenPocketPro) { 291 | return `https://claim.tokenpocket.pro/?locale=${this.$i18n.locale}#/` 292 | } else { 293 | return `https://claim.${domain}/?locale=${this.$i18n.locale}#/` 294 | } 295 | }, 296 | dappStoreUrl() { 297 | if (this.isTokenPocketPro) { 298 | return `https://tokenpocket.pro/${this.$i18n.locale}/dappstore`; 299 | } else { 300 | return `https://${domain}/${this.$i18n.locale}/dappstore`; 301 | } 302 | }, 303 | privacyUrl() { 304 | if (this.isTokenPocketPro) { 305 | if (this.isZH) { 306 | return `https://tokenpocket.pro/privacy-zh/index.html`; 307 | } else { 308 | return `https://tokenpocket.pro/privacy-en/index.html`; 309 | } 310 | } else { 311 | if (this.isZH) { 312 | return `https://${domain}/privacy-zh/index.html`; 313 | } else { 314 | return `https://${domain}/privacy-en/index.html`; 315 | } 316 | } 317 | }, 318 | termsUrl() { 319 | if (this.isTokenPocketPro) { 320 | if (this.isZH) { 321 | return `https://tokenpocket.pro/terms-zh/index.html`; 322 | } else { 323 | return `https://tokenpocket.pro/terms-en/index.html`; 324 | } 325 | } else { 326 | if (this.isZH) { 327 | return `https://${domain}/terms-zh/index.html`; 328 | } else { 329 | return `https://${domain}/terms-en/index.html`; 330 | } 331 | } 332 | }, 333 | brandKitUrl() { 334 | if (this.isTokenPocketPro) { 335 | return `https://tokenpocket.pro/${this.$i18n.locale}/brandkit`; 336 | } else { 337 | return `https://${domain}/${this.$i18n.locale}/brandkit`; 338 | } 339 | }, 340 | } 341 | } 342 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHashHistory } from "vue-router"; 2 | import HomeView from "../views/HomeView.vue"; 3 | 4 | const routes = [ 5 | { 6 | path: "/", 7 | name: "home", 8 | component: HomeView, 9 | }, 10 | // { 11 | // path: "/about", 12 | // name: "about", 13 | // // route level code-splitting 14 | // // this generates a separate chunk (about.[hash].js) for this route 15 | // // which is lazy-loaded when the route is visited. 16 | // component: () => 17 | // import(/* webpackChunkName: "about" */ "../views/AboutView.vue"), 18 | // }, 19 | ]; 20 | 21 | const router = createRouter({ 22 | history: createWebHashHistory(), 23 | routes, 24 | }); 25 | 26 | export default router; 27 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import { createStore } from "vuex"; 2 | 3 | export default createStore({ 4 | state: {}, 5 | getters: {}, 6 | mutations: {}, 7 | actions: {}, 8 | modules: {}, 9 | }); 10 | -------------------------------------------------------------------------------- /src/style/home.scss: -------------------------------------------------------------------------------- 1 | .home { 2 | @mixin box-btn { 3 | margin-top: 16px; 4 | width: fit-content; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | padding: 20px 24px; 9 | background: #ffffff; 10 | border-radius: 16px; 11 | cursor: pointer; 12 | 13 | .left { 14 | display: flex; 15 | align-items: center; 16 | justify-content: center; 17 | 18 | img { 19 | width: 32px; 20 | } 21 | 22 | span { 23 | margin-left: 15px; 24 | font-size: 16px; 25 | font-weight: 500; 26 | color: #000000; 27 | } 28 | } 29 | 30 | .arrow { 31 | margin-left: 185px; 32 | width: 14px; 33 | } 34 | } 35 | 36 | main { 37 | background: #f2f2f2; 38 | padding: 135px 0 100px; 39 | 40 | .container { 41 | max-width: 1200px; 42 | margin: 0 auto; 43 | display: flex; 44 | align-items: center; 45 | justify-content: space-between; 46 | 47 | .main-left { 48 | width: 350px; 49 | 50 | .left-img { 51 | width: 188px; 52 | } 53 | 54 | .title { 55 | margin-top: 25px; 56 | font-size: 44px; 57 | font-weight: 600; 58 | color: #3a3b3d; 59 | } 60 | 61 | .desc { 62 | margin-top: 16px; 63 | font-size: 16px; 64 | color: #828282; 65 | } 66 | 67 | .address { 68 | margin-top: 48px; 69 | font-size: 16px; 70 | font-weight: 600; 71 | color: #3a3b3d; 72 | } 73 | 74 | .github { 75 | @include box-btn(); 76 | } 77 | } 78 | 79 | .main-right { 80 | display: flex; 81 | align-items: center; 82 | padding: 16px 48px 16px 16px; 83 | flex: 1; 84 | margin-left: 140px; 85 | height: 664px; 86 | background: #ffffff; 87 | border-radius: 24px; 88 | 89 | .chain-list { 90 | background: #292929; 91 | border-radius: 16px; 92 | height: inherit; 93 | overflow-y: auto; 94 | padding: 16px 16px; 95 | box-sizing: border-box; 96 | scrollbar-width: none; 97 | -ms-overflow-style: none; 98 | 99 | &::-webkit-scrollbar { 100 | display: none; 101 | } 102 | 103 | .chain-item { 104 | display: flex; 105 | align-items: center; 106 | border-radius: 12px; 107 | padding: 16px; 108 | cursor: pointer; 109 | 110 | &.active { 111 | background: #fff; 112 | 113 | span { 114 | color: #292929; 115 | } 116 | } 117 | 118 | img { 119 | width: 24px; 120 | border-radius: 50%; 121 | } 122 | 123 | span { 124 | margin-left: 10px; 125 | font-size: 14px; 126 | font-weight: 500; 127 | color: #ffffff; 128 | } 129 | } 130 | } 131 | 132 | .key-content { 133 | display: flex; 134 | flex-direction: column; 135 | justify-content: space-between; 136 | height: inherit; 137 | flex: 1; 138 | margin-left: 50px; 139 | 140 | .mobile-chain { 141 | @include box-btn(); 142 | display: none; 143 | } 144 | 145 | .title { 146 | margin-top: 20px; 147 | font-size: 32px; 148 | font-weight: 600; 149 | color: #3a3b3d; 150 | } 151 | 152 | .warn { 153 | margin-top: 24px; 154 | background: #ffecec; 155 | border-radius: 8px; 156 | padding: 10px 16px; 157 | color: #F56459; 158 | font-size: 14px; 159 | } 160 | 161 | .key-list { 162 | margin-top: 24px; 163 | .key-box { 164 | height: 350px; 165 | overflow: auto; 166 | scrollbar-width: none; 167 | -ms-overflow-style: none; 168 | 169 | &::-webkit-scrollbar { 170 | display: none; 171 | } 172 | .key-item:nth-child(n+2) { 173 | margin-top: 24px; 174 | } 175 | } 176 | } 177 | 178 | .generate-btn { 179 | margin-bottom: 15px; 180 | background: #2980fe; 181 | border-radius: 12px; 182 | padding: 17px 0; 183 | text-align: center; 184 | font-size: 16px; 185 | color: #fff; 186 | cursor: pointer; 187 | } 188 | } 189 | } 190 | } 191 | } 192 | 193 | .change-chain { 194 | display: none; 195 | } 196 | } 197 | 198 | @media screen and (max-width: 1300px) { 199 | .home { 200 | main { 201 | .container { 202 | margin: 0 20px; 203 | } 204 | } 205 | } 206 | } 207 | 208 | @media screen and (max-width: 1200px) { 209 | .home { 210 | main { 211 | .container { 212 | flex-direction: column; 213 | margin: 0 28px; 214 | 215 | .main-left { 216 | width: 100%; 217 | .github { 218 | .arrow { 219 | margin-left: 260px; 220 | } 221 | } 222 | } 223 | 224 | .main-right { 225 | margin: 50px 0 0 0; 226 | } 227 | } 228 | } 229 | } 230 | } 231 | 232 | @media screen and (max-width: 767px) { 233 | .home { 234 | @mixin box-btn { 235 | margin-top: 12px; 236 | width: auto; 237 | border-radius: 14px; 238 | padding: 16px 20px; 239 | justify-content: space-between; 240 | cursor: none; 241 | 242 | .left { 243 | img { 244 | width: 28px; 245 | } 246 | 247 | span { 248 | font-size: 15px; 249 | } 250 | } 251 | 252 | .arrow { 253 | margin-left: 0; 254 | width: 12px; 255 | } 256 | } 257 | 258 | main { 259 | padding: 136px 0 62px; 260 | 261 | .container { 262 | flex-direction: column; 263 | margin: 0 28px; 264 | 265 | .main-left { 266 | width: 100%; 267 | margin: 0; 268 | 269 | .left-img { 270 | width: 146px; 271 | } 272 | 273 | .title { 274 | font-size: 36px; 275 | } 276 | 277 | .desc { 278 | margin-top: 14px; 279 | font-size: 14px; 280 | } 281 | 282 | .address { 283 | margin-top: 26px; 284 | font-size: 15px; 285 | } 286 | 287 | .github { 288 | @include box-btn(); 289 | } 290 | } 291 | 292 | .main-right { 293 | margin: 0; 294 | padding: 20px; 295 | margin-top: 20px; 296 | border-radius: 12px; 297 | height: auto; 298 | 299 | .chain-list { 300 | display: none; 301 | } 302 | 303 | .key-content { 304 | margin-left: 0; 305 | padding: 0; 306 | height: auto; 307 | 308 | .mobile-chain { 309 | @include box-btn(); 310 | display: flex; 311 | border: 1px solid #E6E8EA; 312 | margin-bottom: 16px; 313 | margin-top: 0; 314 | } 315 | 316 | .title { 317 | font-size: 20px; 318 | } 319 | 320 | .warn { 321 | border-radius: 6px; 322 | font-size: 12px; 323 | padding: 12px; 324 | } 325 | 326 | .key-list { 327 | margin-top: 16px; 328 | } 329 | 330 | .generate-btn { 331 | margin-top: 32px; 332 | padding: 12px 0; 333 | font-size: 14px; 334 | } 335 | } 336 | } 337 | } 338 | } 339 | 340 | .change-chain { 341 | display: block; 342 | position: fixed; 343 | z-index: 9999; 344 | left: 50%; 345 | top: 50%; 346 | transform: translate(-50%, -50%); 347 | width: 100vw; 348 | height: 100vh; 349 | background: rgba(0, 0, 0, 0.5); 350 | display: flex; 351 | align-items: center; 352 | justify-content: center; 353 | 354 | .container { 355 | width: 80%; 356 | background: #fcfcfd; 357 | border-radius: 19px; 358 | box-shadow: 0px 122.03px 122.03px -91.52px rgba(31, 47, 70, 0.12); 359 | padding: 16px 24px; 360 | 361 | .title-header { 362 | display: flex; 363 | align-items: center; 364 | justify-content: space-between; 365 | 366 | span { 367 | font-size: 17px; 368 | font-weight: 600; 369 | color: #3a3b3d; 370 | } 371 | 372 | img { 373 | width: 28px; 374 | } 375 | } 376 | 377 | .line { 378 | margin: 12px 0 15px; 379 | height: 1px; 380 | background: #e6e8ec; 381 | } 382 | 383 | .mobile-chain-list { 384 | height: 60vh; 385 | overflow-y: auto; 386 | scrollbar-width: none; 387 | -ms-overflow-style: none; 388 | 389 | &::-webkit-scrollbar { 390 | display: none; 391 | } 392 | 393 | .mobile-chain-item { 394 | display: flex; 395 | align-items: center; 396 | 397 | &:nth-child(n+2) { 398 | margin-top: 23px; 399 | } 400 | 401 | img { 402 | width: 24px; 403 | border-radius: 50%; 404 | } 405 | 406 | span { 407 | margin-left: 5px; 408 | font-size: 15px; 409 | font-weight: 500; 410 | color: #3a3b3d; 411 | } 412 | } 413 | } 414 | } 415 | } 416 | } 417 | } -------------------------------------------------------------------------------- /src/style/index.scss: -------------------------------------------------------------------------------- 1 | .icon-down-333 { 2 | display: inline-block; 3 | position: relative; 4 | width: 14px; 5 | height: 12px; 6 | transform: scale(0.8); 7 | 8 | &:after { 9 | content: ''; 10 | position: absolute; 11 | top: 5%; 12 | left: 2px; 13 | width: 8px; 14 | height: 8px; 15 | border-top: 2px solid #333; 16 | border-right: 2px solid #333; 17 | transform: rotate(135deg); 18 | } 19 | } -------------------------------------------------------------------------------- /src/utils/ecc.js: -------------------------------------------------------------------------------- 1 | import { hmac } from '@noble/hashes/hmac'; 2 | import { sha256 } from '@noble/hashes/sha256'; 3 | import * as necc from '@noble/secp256k1'; 4 | import { crypto as bcrypto } from 'bitcoinjs-lib'; 5 | 6 | necc.utils.sha256Sync = (...messages) => { 7 | const bufs = messages.map((m) => (Buffer.isBuffer(m) ? m : Buffer.from(m))); 8 | return bcrypto.sha256(Buffer.concat(bufs)); 9 | }; 10 | necc.utils.hmacSha256Sync = (key, ...messages) => { 11 | const hash = hmac.create(sha256, Buffer.from(key)); 12 | messages.forEach((m) => hash.update(m)); 13 | return Uint8Array.from(hash.digest()); 14 | }; 15 | 16 | const normalizePrivateKey = necc.utils._normalizePrivateKey; 17 | function hexToNumber(hex) { 18 | if (typeof hex !== 'string') { 19 | throw new TypeError(`hexToNumber: expected string, got ${typeof hex}`); 20 | } 21 | return BigInt(`0x${hex}`); 22 | } 23 | function bytesToNumber(bytes) { 24 | return hexToNumber(necc.utils.bytesToHex(bytes)); 25 | } 26 | function normalizeScalar(scalar) { 27 | let num; 28 | if (typeof scalar === 'bigint') { 29 | num = scalar; 30 | } else if ( 31 | typeof scalar === 'number' && 32 | Number.isSafeInteger(scalar) && 33 | scalar >= 0 34 | ) { 35 | num = BigInt(scalar); 36 | } else if (typeof scalar === 'string') { 37 | if (scalar.length !== 64) 38 | throw new Error('Expected 32 bytes of private scalar'); 39 | num = hexToNumber(scalar); 40 | } else if (scalar instanceof Uint8Array) { 41 | if (scalar.length !== 32) 42 | throw new Error('Expected 32 bytes of private scalar'); 43 | num = bytesToNumber(scalar); 44 | } else { 45 | throw new TypeError('Expected valid private scalar'); 46 | } 47 | if (num < 0) throw new Error('Expected private scalar >= 0'); 48 | return num; 49 | } 50 | const privateAdd = (privateKey, tweak) => { 51 | const p = normalizePrivateKey(privateKey); 52 | const t = normalizeScalar(tweak); 53 | const add = necc.utils._bigintTo32Bytes(necc.utils.mod(p + t, necc.CURVE.n)); 54 | if (necc.utils.isValidPrivateKey(add)) return add; 55 | return null; 56 | }; 57 | const privateNegate = (privateKey) => { 58 | const p = normalizePrivateKey(privateKey); 59 | const not = necc.utils._bigintTo32Bytes(necc.CURVE.n - p); 60 | if (necc.utils.isValidPrivateKey(not)) return not; 61 | return null; 62 | }; 63 | const pointAddScalar = ( 64 | p, 65 | tweak, 66 | isCompressed, 67 | ) => { 68 | const P = necc.Point.fromHex(p); 69 | const t = normalizeScalar(tweak); 70 | const Q = necc.Point.BASE.multiplyAndAddUnsafe(P, t, 1n); 71 | if (!Q) throw new Error('Tweaked point at infinity'); 72 | return Q.toRawBytes(isCompressed); 73 | }; 74 | const pointMultiply = ( 75 | p, 76 | tweak, 77 | isCompressed, 78 | ) => { 79 | const P = necc.Point.fromHex(p); 80 | const h = typeof tweak === 'string' ? tweak : necc.utils.bytesToHex(tweak); 81 | const t = BigInt(`0x${h}`); 82 | return P.multiply(t).toRawBytes(isCompressed); 83 | }; 84 | 85 | const defaultTrue = (param) => param !== false; 86 | function throwToNull(fn) { 87 | try { 88 | return fn(); 89 | } catch (e) { 90 | return null; 91 | } 92 | } 93 | function innerIsPoint(p, xOnly) { 94 | if ((p.length === 32) !== xOnly) return false; 95 | try { 96 | return !!necc.Point.fromHex(p); 97 | } catch (e) { 98 | return false; 99 | } 100 | } 101 | const ecc = { 102 | isPoint: (p) => innerIsPoint(p, false), 103 | isPrivate: (d) => necc.utils.isValidPrivateKey(d), 104 | isXOnlyPoint: (p) => innerIsPoint(p, true), 105 | xOnlyPointAddTweak: (p, tweak) => 106 | throwToNull(() => { 107 | const P = pointAddScalar(p, tweak, true); 108 | const parity = P[0] % 2 === 1 ? 1 : 0; 109 | return { parity, xOnlyPubkey: P.slice(1) }; 110 | }), 111 | pointFromScalar: (sk, compressed) => 112 | throwToNull(() => necc.getPublicKey(sk, defaultTrue(compressed))), 113 | pointCompress: (p, compressed) => 114 | necc.Point.fromHex(p).toRawBytes(defaultTrue(compressed)), 115 | pointMultiply: (a, tweak, compressed) => 116 | throwToNull(() => pointMultiply(a, tweak, defaultTrue(compressed))), 117 | pointAdd: (a, b, compressed) => 118 | throwToNull(() => { 119 | const A = necc.Point.fromHex(a); 120 | const B = necc.Point.fromHex(b); 121 | return A.add(B).toRawBytes(defaultTrue(compressed)); 122 | }), 123 | pointAddScalar: (p, tweak, compressed) => 124 | throwToNull(() => pointAddScalar(p, tweak, defaultTrue(compressed))), 125 | privateAdd: (d, tweak) => 126 | throwToNull(() => privateAdd(d, tweak)), 127 | privateNegate: (d) => privateNegate(d), 128 | sign: (h, d, e) => 129 | necc.signSync(h, d, { der: false, extraEntropy: e }), 130 | signSchnorr: (h, d, e = Buffer.alloc(32, 0x00)) => 131 | necc.schnorr.signSync(h, d, e), 132 | verify: ( 133 | h, 134 | Q, 135 | signature, 136 | strict, 137 | ) => necc.verify(signature, h, Q, { strict }), 138 | verifySchnorr: (h, Q, signature) => 139 | necc.schnorr.verifySync(signature, h, Q), 140 | }; 141 | 142 | export default ecc; -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require("@vue/cli-service"); 2 | const NodePolyfillPlugin = require('node-polyfill-webpack-plugin') 3 | module.exports = defineConfig({ 4 | publicPath: '/', 5 | // publicPath: '/key-generator', 6 | devServer: { 7 | open: true, 8 | port: 12306, 9 | }, 10 | transpileDependencies: true, 11 | lintOnSave: false, 12 | configureWebpack: { 13 | plugins: [new NodePolyfillPlugin()] 14 | } 15 | }); 16 | --------------------------------------------------------------------------------