diff options
author | Hsuan Lee <boczeratul@gmail.com> | 2018-10-13 13:27:14 +0800 |
---|---|---|
committer | Hsuan Lee <hsuan@cobinhood.com> | 2018-12-10 18:16:38 +0800 |
commit | 764cd4533c55620e35a2ff57ef447f7b9955620b (patch) | |
tree | 62deb7a73afb46b62fecdce7c17ab7c949a71d9f | |
parent | 7896e5f5c25add295ce4d9f7d97adc3ee69df48c (diff) | |
download | dexon-wallet-764cd4533c55620e35a2ff57ef447f7b9955620b.tar.gz dexon-wallet-764cd4533c55620e35a2ff57ef447f7b9955620b.tar.zst dexon-wallet-764cd4533c55620e35a2ff57ef447f7b9955620b.zip |
Complete onboarding flow
216 files changed, 2542 insertions, 1710 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 69dffc7b..c7034464 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -1,6 +1,6 @@ --- name: Bug Report -about: Using MetaMask, but it's not working as you expect? +about: Using DekuSan, but it's not working as you expect? --- @@ -29,7 +29,12 @@ If applicable, add screenshots to help explain your problem. **Browser details (please complete the following information):** - OS: [e.g. OS X, Windows] - Browser [e.g. chrome, safari] +<<<<<<< HEAD - MetaMask Version [e.g. 5.0.2] +======= + - DekuSan Version [e.g. 4.9.0] + - Old UI or New / Beta UI? +>>>>>>> Complete onboarding flow **Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/support-request-or-question.md b/.github/ISSUE_TEMPLATE/support-request-or-question.md index aeb31af2..7b20a3a0 100644 --- a/.github/ISSUE_TEMPLATE/support-request-or-question.md +++ b/.github/ISSUE_TEMPLATE/support-request-or-question.md @@ -1,6 +1,6 @@ --- name: Support Request or Question -about: Have a question about how to use MetaMask? +about: Have a question about how to use DekuSan? --- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 63d19c63..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,51 +0,0 @@ -# Welcome to MetaMask! - -If you're submitting code to MetaMask, there are some simple things we'd appreciate you doing to help us stay organized! - -### Finding the right project - -Before taking the time to code and implement something, feel free to open an issue and discuss it! There may even be an issue already open, and together we may come up with a specific strategy before you take your precious time to write code. - -There are also plenty of open issues we'd love help with. Search the [`good first issue`](https://github.com/MetaMask/metamask-extension/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) label, or head to Gitcoin and earn ETH for completing projects we've posted bounties on. - -If you're picking up a bounty or an existing issue, feel free to ask clarifying questions on the issue as you go about your work. - -### Submitting a pull request -When you're done with your project / bugfix / feature and ready to submit a PR, there are a couple guidelines we ask you to follow: - -- [ ] **Test it**: For any new programmatic functionality, we like unit tests when possible, so if you can keep your code cleanly isolated, please do add a test file to the `tests` folder. -- [ ] **Add to the CHANGELOG**: Help us keep track of all the moving pieces by adding an entry to the [`CHANGELOG.md`](https://github.com/MetaMask/metamask-extension/blob/develop/CHANGELOG.md) with a link to your PR. -- [ ] **Meet the spec**: Make sure the PR adds functionality that matches the issue you're closing. This is especially important for bounties: sometimes design or implementation details are included in the conversation, so read carefully! -- [ ] **Close the issue**: If this PR closes an open issue, add the line `Fixes #$ISSUE_NUMBER`. Ex. For closing issue 418, include the line `Fixes #418`. If it doesn't close the issue but addresses it partially, just include a reference to the issue number, like `#418`. -- [ ] **Keep it simple**: Try not to include multiple features in a single PR, and don't make extraneous changes outside the scope of your contribution. All those touched files make things harder to review ;) -- [ ] **PR against `develop`**: Submit your PR against the `develop` branch. This is where we merge new features so they get some time to receive extra testing before being pushed to `master` for production. If your PR is a hot-fix that needs to be published urgently, you may submit a PR against the `master` branch, but this PR will receive tighter scrutiny before merging. -- [ ] **Get reviewed by a core contributor**: Make sure you get a `:thumbsup`, `:+1`, or `LGTM` from a user with a `Member` badge before merging. - -And that's it! Thanks for helping out. - -### Developing inside a node_modules folder - -First make sure you are comfortable with [how require works](https://github.com/maxogden/art-of-node#how-require-works) in node. - -We recommend creating a folder somewhere manually called `node_modules`. For example in `~/code/node_modules`. Clone all of your git copies of modules that you want to work on into here, so for example: - -- `~/code/node_modules/dat` -- `~/code/node_modules/hyperdrive` - -When you run `npm install` inside of `~/code/node_modules/dat`, dat will get its own copy of `hyperdrive` (one if its dependencies) inside `~/code/node_modules/dat/node_modules`. However, if you encounter a bug in hyperdrive that you need to fix, but you want to test your fix in dat, you want dat to use your git copy of hyperdrive at `~/code/node_modules/hyperdrive` and not the npm copy of hyperdrive at `~/code/node_modules/dat/node_modules/hyperdrive`. - -How do you get dat to use the git copy of hyperdrive? Just delete the npm copy! - -``` -rm -rf ~/code/node_modules/dat/node_modules/hyperdrive -``` - -Now when you run dat, and it tries to `require('hyperdrive')` it first looks in its own `node_modules` folder at `~/code/node_modules/dat/node_modules` but doesnt find hyperdrive. So it goes up to `~/code/node_modules` and finds `hyperdrive` there and uses that one, your git copy. - -If you want to switch back to an npm copy, just run `npm install` inside `~/code/node_modules/dat/` and npm will download any missing modules into `~/code/node_modules/dat/node_modules` but wont touch anything in `~/code/node_modules`. - -This might seem a bit complicated at first, but is simple once you get the hang of it. Here are some rules to help you get started: - -- Never make any meaningful edits to code inside an "npm-managed" node_modules folder (such as `~/code/node_modules/dat/node_modules`), because when you run `npm install` inside those folders it could inadvertently delete all of your edits when installing an updated copy of a module. This has happened to me many times, so I just always use my git copy and delete the npm copy (as described above) to make edits to a module. -- You should never need to run any npm commands in terminal when at your "manually managed"" node_modules folder at `~/code/node_modules`. Never running npm commands at that folder also prevents npm from accidentally erasing your git copies of modules -- The location of your "manually managed" node_modules folder should be somewhere isolated from your normal require path. E.g. if you put it at `~/node_modules`, then when you run `npm install dat` at `~/Desktop` npm might decide to erase your git copy of dat at `~/node_modules/dat` and replace it with a copy from npm, which could make you lose work. Putting your manually managed `node_modules` folder in a sub-folder like `~/code` gets it "out of the way" and prevents accidents like that from happening. @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018 MetaMask +Copyright (c) 2018 DEXON Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/MISSION.md b/MISSION.md deleted file mode 100644 index 9045828b..00000000 --- a/MISSION.md +++ /dev/null @@ -1,14 +0,0 @@ -# MetaMask Philosophy - -## Mission - -Making it safe and easy for the most people to use the decentralized web to the greatest degree that is empowering to them. - -## Vision - -To realize the highest goals achievable for the human race with the twin powers of peer to peer networks and cryptography. To empower users to hold and use their own keys on these new networks as securely and intelligibly as possible, enabling a new world of peer to peer agreements and economies, in hopes that we may collectively overcome the many great problems that we face together, through the power of strong cooperation. - -## Strategy - -We provide software for users to manage accounts, for sites to easily propose actions to users, and for users to coherently review actions before approving them. We build on this rapidly evolving set of protocols with the goal of empowering the most people to the greatest degree, and aspire to continuously evolve our offering to pursue that goal. - @@ -20,11 +20,11 @@ If you're a web dapp developer, we've got two types of guides for you: ### New Dapp Developers - We recommend this [Learning Solidity](https://karl.tech/learning-solidity-part-1-deploy-a-contract/) tutorial series by Karl Floersch. -- We wrote a (slightly outdated now) gentle introduction on [Developing Dapps with Truffle and MetaMask](https://medium.com/metamask/developing-ethereum-dapps-with-truffle-and-metamask-aa8ad7e363ba). +- We wrote a (slightly outdated now) gentle introduction on [Developing Dapps with Truffle and DekuSan](https://medium.com/metamask/developing-ethereum-dapps-with-truffle-and-metamask-aa8ad7e363ba). ### Current Dapp Developers -- If you have a Dapp, and you want to ensure compatibility, [here is our guide on building MetaMask-compatible Dapps](https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md) +- If you have a Dapp, and you want to ensure compatibility, [here is our guide on building DekuSan-compatible Dapps](https://github.com/DekuSan/faq/blob/master/DEVELOPERS.md) ## Building locally @@ -82,14 +82,14 @@ To write tests that will be run in the browser using QUnit, add your test files - [How to add custom build to Chrome](./docs/add-to-chrome.md) - [How to add custom build to Firefox](./docs/add-to-firefox.md) - [How to develop a live-reloading UI](./docs/ui-dev-mode.md) -- [How to add a new translation to MetaMask](./docs/translating-guide.md) +- [How to add a new translation to DekuSan](./docs/translating-guide.md) - [Publishing Guide](./docs/publishing.md) -- [The MetaMask Team](./docs/team.md) +- [The DekuSan Team](./docs/team.md) - [How to develop an in-browser mocked UI](./docs/ui-mock-mode.md) - [How to live reload on local dependency changes](./docs/developing-on-deps.md) - [How to add new networks to the Provider Menu](./docs/adding-new-networks.md) - [How to manage notices that appear when the app starts up](./docs/notices.md) -- [How to port MetaMask to a new platform](./docs/porting_to_new_environment.md) +- [How to port DekuSan to a new platform](./docs/porting_to_new_environment.md) - [How to use the TREZOR emulator](./docs/trezor-emulator.md) - [How to generate a visualization of this repository's development](./docs/development-visualization.md) diff --git a/USER_AGREEMENT.md b/USER_AGREEMENT.md deleted file mode 100644 index c485edd1..00000000 --- a/USER_AGREEMENT.md +++ /dev/null @@ -1,179 +0,0 @@ -# Terms of Use # - -**THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION AND A WAIVER OF CLASS ACTION RIGHTS AS DETAILED IN SECTION 13. PLEASE READ THE AGREEMENT CAREFULLY.** - -_Our Terms of Use have been updated as of September 5, 2016_ - -## 1. Acceptance of Terms ## - -MetaMask provides a platform for managing Ethereum (or "ETH") accounts, and allowing ordinary websites to interact with the Ethereum blockchain, while keeping the user in control over what transactions they approve, through our website located at[ ](http://metamask.io)[https://metamask.io/](https://metamask.io/) and browser plugin (the "Site") — which includes text, images, audio, code and other materials (collectively, the “Content”) and all of the features, and services provided. The Site, and any other features, tools, materials, or other services offered from time to time by MetaMask are referred to here as the “Service.” Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully before using the Service. By using or otherwise accessing the Services, or clicking to accept or agree to these Terms where that option is made available, you (1) accept and agree to these Terms (2) consent to the collection, use, disclosure and other handling of information as described in our Privacy Policy and (3) any additional terms, rules and conditions of participation issued by MetaMask from time to time. If you do not agree to the Terms, then you may not access or use the Content or Services. - -## 2. Modification of Terms of Use ## - -Except for Section 13, providing for binding arbitration and waiver of class action rights, MetaMask reserves the right, at its sole discretion, to modify or replace the Terms of Use at any time. The most current version of these Terms will be posted on our Site. You shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by you after any modification to the Terms constitutes your acceptance of the Terms of Use as modified. - - - -## 3. Eligibility ## - -You hereby represent and warrant that you are fully able and competent to enter into the terms, conditions, obligations, affirmations, representations and warranties set forth in these Terms and to abide by and comply with these Terms. - -MetaMask is a global platform and by accessing the Content or Services, you are representing and warranting that, you are of the legal age of majority in your jurisdiction as is required to access such Services and Content and enter into arrangements as provided by the Service. You further represent that you are otherwise legally permitted to use the service in your jurisdiction including owning cryptographic tokens of value, and interacting with the Services or Content in any way. You further represent you are responsible for ensuring compliance with the laws of your jurisdiction and acknowledge that MetaMask is not liable for your compliance with such laws. - -## 4 Account Password and Security ## - -When setting up an account within MetaMask, you will be responsible for keeping your own account secrets, which may be a twelve-word seed phrase, an account file, or other locally stored secret information. MetaMask encrypts this information locally with a password you provide, that we never send to our servers. You agree to (a) never use the same password for MetaMask that you have ever used outside of this service; (b) keep your secret information and password confidential and do not share them with anyone else; (c) immediately notify MetaMask of any unauthorized use of your account or breach of security. MetaMask cannot and will not be liable for any loss or damage arising from your failure to comply with this section. - -## 5. Representations, Warranties, and Risks ## - -### 5.1. Warranty Disclaimer ### - -You expressly understand and agree that your use of the Service is at your sole risk. The Service (including the Service and the Content) are provided on an "AS IS" and "as available" basis, without warranties of any kind, either express or implied, including, without limitation, implied warranties of merchantability, fitness for a particular purpose or non-infringement. You acknowledge that MetaMask has no control over, and no duty to take any action regarding: which users gain access to or use the Service; what effects the Content may have on you; how you may interpret or use the Content; or what actions you may take as a result of having been exposed to the Content. You release MetaMask from all liability for you having acquired or not acquired Content through the Service. MetaMask makes no representations concerning any Content contained in or accessed through the Service, and MetaMask will not be responsible or liable for the accuracy, copyright compliance, legality or decency of material contained in or accessed through the Service. - -### 5.2 Sophistication and Risk of Cryptographic Systems ### - -By utilizing the Service or interacting with the Content or platform in any way, you represent that you understand the inherent risks associated with cryptographic systems; and warrant that you have an understanding of the usage and intricacies of native cryptographic tokens, like Ether (ETH) and Bitcoin (BTC), smart contract based tokens such as those that follow the Ethereum Token Standard (https://github.com/ethereum/EIPs/issues/20), and blockchain-based software systems. - -### 5.3 Risk of Regulatory Actions in One or More Jurisdictions ### - -MetaMask and ETH could be impacted by one or more regulatory inquiries or regulatory action, which could impede or limit the ability of MetaMask to continue to develop, or which could impede or limit your ability to access or use the Service or Ethereum blockchain. - -### 5.4 Risk of Weaknesses or Exploits in the Field of Cryptography ### - -You acknowledge and understand that Cryptography is a progressing field. Advances in code cracking or technical advances such as the development of quantum computers may present risks to cryptocurrencies and Services of Content, which could result in the theft or loss of your cryptographic tokens or property. To the extent possible, MetaMask intends to update the protocol underlying Services to account for any advances in cryptography and to incorporate additional security measures, but does not guarantee or otherwise represent full security of the system. By using the Service or accessing Content, you acknowledge these inherent risks. - -### 5.5 Volatility of Crypto Currencies ### - -You understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum blockchain. You acknowledge these risks and represent that MetaMask cannot be held liable for such fluctuations or increased costs. - -### 5.6 Application Security ### - -You acknowledge that Ethereum applications are code subject to flaws and acknowledge that you are solely responsible for evaluating any code provided by the Services or Content and the trustworthiness of any third-party websites, products, smart-contracts, or Content you access or use through the Service. You further expressly acknowledge and represent that Ethereum applications can be written maliciously or negligently, that MetaMask cannot be held liable for your interaction with such applications and that such applications may cause the loss of property or even identity. This warning and others later provided by MetaMask in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Service or Content. - -## 6. Indemnity ## - -You agree to release and to indemnify, defend and hold harmless MetaMask and its parents, subsidiaries, affiliates and agencies, as well as the officers, directors, employees, shareholders and representatives of any of the foregoing entities, from and against any and all losses, liabilities, expenses, damages, costs (including attorneys’ fees and court costs) claims or actions of any kind whatsoever arising or resulting from your use of the Service, your violation of these Terms of Use, and any of your acts or omissions that implicate publicity rights, defamation or invasion of privacy. MetaMask reserves the right, at its own expense, to assume exclusive defense and control of any matter otherwise subject to indemnification by you and, in such case, you agree to cooperate with MetaMask in the defense of such matter. - -## 7. Limitation on liability ## - -YOU ACKNOWLEDGE AND AGREE THAT YOU ASSUME FULL RESPONSIBILITY FOR YOUR USE OF THE SITE AND SERVICE. YOU ACKNOWLEDGE AND AGREE THAT ANY INFORMATION YOU SEND OR RECEIVE DURING YOUR USE OF THE SITE AND SERVICE MAY NOT BE SECURE AND MAY BE INTERCEPTED OR LATER ACQUIRED BY UNAUTHORIZED PARTIES. YOU ACKNOWLEDGE AND AGREE THAT YOUR USE OF THE SITE AND SERVICE IS AT YOUR OWN RISK. RECOGNIZING SUCH, YOU UNDERSTAND AND AGREE THAT, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER METAMASK NOR ITS SUPPLIERS OR LICENSORS WILL BE LIABLE TO YOU FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR OTHER DAMAGES OF ANY KIND, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER TANGIBLE OR INTANGIBLE LOSSES OR ANY OTHER DAMAGES BASED ON CONTRACT, TORT, STRICT LIABILITY OR ANY OTHER THEORY (EVEN IF METAMASK HAD BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), RESULTING FROM THE SITE OR SERVICE; THE USE OR THE INABILITY TO USE THE SITE OR SERVICE; UNAUTHORIZED ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; STATEMENTS OR CONDUCT OF ANY THIRD PARTY ON THE SITE OR SERVICE; ANY ACTIONS WE TAKE OR FAIL TO TAKE AS A RESULT OF COMMUNICATIONS YOU SEND TO US; HUMAN ERRORS; TECHNICAL MALFUNCTIONS; FAILURES, INCLUDING PUBLIC UTILITY OR TELEPHONE OUTAGES; OMISSIONS, INTERRUPTIONS, LATENCY, DELETIONS OR DEFECTS OF ANY DEVICE OR NETWORK, PROVIDERS, OR SOFTWARE (INCLUDING, BUT NOT LIMITED TO, THOSE THAT DO NOT PERMIT PARTICIPATION IN THE SERVICE); ANY INJURY OR DAMAGE TO COMPUTER EQUIPMENT; INABILITY TO FULLY ACCESS THE SITE OR SERVICE OR ANY OTHER WEBSITE; THEFT, TAMPERING, DESTRUCTION, OR UNAUTHORIZED ACCESS TO, IMAGES OR OTHER CONTENT OF ANY KIND; DATA THAT IS PROCESSED LATE OR INCORRECTLY OR IS INCOMPLETE OR LOST; TYPOGRAPHICAL, PRINTING OR OTHER ERRORS, OR ANY COMBINATION THEREOF; OR ANY OTHER MATTER RELATING TO THE SITE OR SERVICE. - -SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. ACCORDINGLY, SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU. - -## 8. Our Proprietary Rights ## - -All title, ownership and intellectual property rights in and to the Service are owned by MetaMask or its licensors. You acknowledge and agree that the Service contains proprietary and confidential information that is protected by applicable intellectual property and other laws. Except as expressly authorized by MetaMask, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, display or create derivative works based on the Service, in whole or in part. MetaMask issues a license for MetaMask, found [here](https://github.com/MetaMask/metamask-plugin/blob/master/LICENSE). For information on other licenses utilized in the development of MetaMask, please see our attribution page at: [https://metamask.io/attributions.html](https://metamask.io/attributions.html) - -## 9. Links ## - -The Service provides, or third parties may provide, links to other World Wide Web or accessible sites, applications or resources. Because MetaMask has no control over such sites, applications and resources, you acknowledge and agree that MetaMask is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products or other materials on or available from such sites or resources. You further acknowledge and agree that MetaMask shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource. - -## 10. Termination and Suspension ## - -MetaMask may terminate or suspend all or part of the Service and your MetaMask access immediately, without prior notice or liability, if you breach any of the terms or conditions of the Terms. Upon termination of your access, your right to use the Service will immediately cease. - -The following provisions of the Terms survive any termination of these Terms: INDEMNITY; WARRANTY DISCLAIMERS; LIMITATION ON LIABILITY; OUR PROPRIETARY RIGHTS; LINKS; TERMINATION; NO THIRD PARTY BENEFICIARIES; BINDING ARBITRATION AND CLASS ACTION WAIVER; GENERAL INFORMATION. - -## 11. No Third Party Beneficiaries ## - -You agree that, except as otherwise expressly provided in these Terms, there shall be no third party beneficiaries to the Terms. - -## 12. Notice and Procedure For Making Claims of Copyright Infringement ## - -If you believe that your copyright or the copyright of a person on whose behalf you are authorized to act has been infringed, please provide MetaMask’s Copyright Agent a written Notice containing the following information: - -· an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright or other intellectual property interest; - -· a description of the copyrighted work or other intellectual property that you claim has been infringed; - -· a description of where the material that you claim is infringing is located on the Service; - -· your address, telephone number, and email address; - -· a statement by you that you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law; - -· a statement by you, made under penalty of perjury, that the above information in your Notice is accurate and that you are the copyright or intellectual property owner or authorized to act on the copyright or intellectual property owner's behalf. - -MetaMask’s Copyright Agent can be reached at: - -Email: copyright [at] metamask [dot] io - -Mail: - -Attention: - -MetaMask Copyright ℅ ConsenSys - -49 Bogart Street - -Brooklyn, NY 11206 - -## 13. Binding Arbitration and Class Action Waiver ## - -PLEASE READ THIS SECTION CAREFULLY – IT MAY SIGNIFICANTLY AFFECT YOUR LEGAL RIGHTS, INCLUDING YOUR RIGHT TO FILE A LAWSUIT IN COURT - -### 13.1 Initial Dispute Resolution ### - -The parties shall use their best efforts to engage directly to settle any dispute, claim, question, or disagreement and engage in good faith negotiations which shall be a condition to either party initiating a lawsuit or arbitration. - -### 13.2 Binding Arbitration ### - -If the parties do not reach an agreed upon solution within a period of 30 days from the time informal dispute resolution under the Initial Dispute Resolution provision begins, then either party may initiate binding arbitration as the sole means to resolve claims, subject to the terms set forth below. Specifically, all claims arising out of or relating to these Terms (including their formation, performance and breach), the parties’ relationship with each other and/or your use of the Service shall be finally settled by binding arbitration administered by the American Arbitration Association in accordance with the provisions of its Commercial Arbitration Rules and the supplementary procedures for consumer related disputes of the American Arbitration Association (the "AAA"), excluding any rules or procedures governing or permitting class actions. - -The arbitrator, and not any federal, state or local court or agency, shall have exclusive authority to resolve all disputes arising out of or relating to the interpretation, applicability, enforceability or formation of these Terms, including, but not limited to any claim that all or any part of these Terms are void or voidable, or whether a claim is subject to arbitration. The arbitrator shall be empowered to grant whatever relief would be available in a court under law or in equity. The arbitrator’s award shall be written, and binding on the parties and may be entered as a judgment in any court of competent jurisdiction. - -The parties understand that, absent this mandatory provision, they would have the right to sue in court and have a jury trial. They further understand that, in some instances, the costs of arbitration could exceed the costs of litigation and the right to discovery may be more limited in arbitration than in court. - -### 13.3 Location ### - -Binding arbitration shall take place in New York. You agree to submit to the personal jurisdiction of any federal or state court in New York County, New York, in order to compel arbitration, to stay proceedings pending arbitration, or to confirm, modify, vacate or enter judgment on the award entered by the arbitrator. - -### 13.4 Class Action Waiver ### - -The parties further agree that any arbitration shall be conducted in their individual capacities only and not as a class action or other representative action, and the parties expressly waive their right to file a class action or seek relief on a class basis. YOU AND METAMASK AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY, AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING. If any court or arbitrator determines that the class action waiver set forth in this paragraph is void or unenforceable for any reason or that an arbitration can proceed on a class basis, then the arbitration provision set forth above shall be deemed null and void in its entirety and the parties shall be deemed to have not agreed to arbitrate disputes. - -### 13.5 Exception - Litigation of Intellectual Property and Small Claims Court Claims ### - -Notwithstanding the parties' decision to resolve all disputes through arbitration, either party may bring an action in state or federal court to protect its intellectual property rights ("intellectual property rights" means patents, copyrights, moral rights, trademarks, and trade secrets, but not privacy or publicity rights). Either party may also seek relief in a small claims court for disputes or claims within the scope of that court’s jurisdiction. - -### 13.6 30-Day Right to Opt Out ### - -You have the right to opt-out and not be bound by the arbitration and class action waiver provisions set forth above by sending written notice of your decision to opt-out to the following address: MetaMask ℅ ConsenSys, 49 Bogart Street, Brooklyn NY 11206 and via email at support@metamask.io. The notice must be sent within 30 days of September 6, 2016 or your first use of the Service, whichever is later, otherwise you shall be bound to arbitrate disputes in accordance with the terms of those paragraphs. If you opt-out of these arbitration provisions, MetaMask also will not be bound by them. - -### 13.7 Changes to This Section ### - -MetaMask will provide 60-days’ notice of any changes to this section. Changes will become effective on the 60th day, and will apply prospectively only to any claims arising after the 60th day. - -For any dispute not subject to arbitration you and MetaMask agree to submit to the personal and exclusive jurisdiction of and venue in the federal and state courts located in New York, New York. You further agree to accept service of process by mail, and hereby waive any and all jurisdictional and venue defenses otherwise available. - -The Terms and the relationship between you and MetaMask shall be governed by the laws of the State of New York without regard to conflict of law provisions. - -## 14. General Information ## - -### 14.1 Entire Agreement ### - -These Terms (and any additional terms, rules and conditions of participation that MetaMask may post on the Service) constitute the entire agreement between you and MetaMask with respect to the Service and supersedes any prior agreements, oral or written, between you and MetaMask. In the event of a conflict between these Terms and the additional terms, rules and conditions of participation, the latter will prevail over the Terms to the extent of the conflict. - -### 14.2 Waiver and Severability of Terms ### - -The failure of MetaMask to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by an arbitrator or court of competent jurisdiction to be invalid, the parties nevertheless agree that the arbitrator or court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect. - -### 14.3 Statute of Limitations ### - -You agree that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to the use of the Service or the Terms must be filed within one (1) year after such claim or cause of action arose or be forever barred. - -### 14.4 Section Titles ### - -The section titles in the Terms are for convenience only and have no legal or contractual effect. - -### 14.5 Communications ### - -Users with questions, complaints or claims with respect to the Service may contact us using the relevant contact information set forth above and at communications@metamask.io. - -## 15 Related Links ## - -**[Terms of Use](https://metamask.io/terms.html)** - -**[Privacy](https://metamask.io/privacy.html)** - -**[Attributions](https://metamask.io/attributions.html)** diff --git a/app/404.html b/app/404.html index 8a6df9d7..672b99ef 100644 --- a/app/404.html +++ b/app/404.html @@ -1,6 +1,6 @@ <html> <head> - <title>MetaMask</title> + <title>DekuSan</title> <style> *{ padding: 0; diff --git a/app/_locales/cs/messages.json b/app/_locales/cs/messages.json index 8eaa5a4a..df3fddbd 100644 --- a/app/_locales/cs/messages.json +++ b/app/_locales/cs/messages.json @@ -75,11 +75,11 @@ "message": "Částka + palivo" }, "appDescription": { - "message": "Dexon rozšíření prohlížeče", + "message": "DEXON rozšíření prohlížeče", "description": "The description of the application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "The name of the application" }, "approved": { @@ -120,7 +120,7 @@ "message": "Pújčit si přes Dharma (Beta)" }, "builtInCalifornia": { - "message": "Dex San je navržen a vytvořen v Kalifornii." + "message": "DekuSan je navržen a vytvořen v Kalifornii." }, "buy": { "message": "Koupit" @@ -235,7 +235,7 @@ "message": "Výchozí síť pro DEXové transakce je Main Net." }, "denExplainer": { - "message": "Váš DEN je heslem šifrované uložiště v Dex Sanu." + "message": "Váš DEN je heslem šifrované uložiště v DekuSanu." }, "deposit": { "message": "Vklad" @@ -263,7 +263,7 @@ "message": "Vklad přes ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Pokud vlastníte jiné kryptoměny, můžete je směnit DEX a vložit ho přímo do peněženky Dex San. Bez založení účtu." + "message": "Pokud vlastníte jiné kryptoměny, můžete je směnit DEX a vložit ho přímo do peněženky DekuSan. Bez založení účtu." }, "details": { "message": "Podrobnosti" @@ -417,7 +417,7 @@ "message": "Import účtu" }, "importAccountMsg": { - "message":"Importované účty nebudou spojeny s vaší původní Dex Sanovou klíčovou frází. Zjistěte více o importovaných účtech " + "message":"Importované účty nebudou spojeny s vaší původní DekuSanovou klíčovou frází. Zjistěte více o importovaných účtech " }, "importAnAccount": { "message": "Import účtu" @@ -464,7 +464,7 @@ "description": "format for importing an account" }, "keepTrackTokens": { - "message": "Udržujte si záznamy o tokenech, které jste koupili s účtem v Dex Sanu." + "message": "Udržujte si záznamy o tokenech, které jste koupili s účtem v DekuSanu." }, "kovan": { "message": "Kovan Test Network" @@ -513,13 +513,13 @@ "message": "slova klíčové fráze mají pouze malá písmena" }, "mainnet": { - "message": "Main Dexon Network" + "message": "Main DEXON Network" }, "message": { "message": "Zpráva" }, "metamaskDescription": { - "message": "Dex San je bezpečný osobní trezor pro Dexon." + "message": "DekuSan je bezpečný osobní trezor pro Dexon." }, "min": { "message": "Minimum" @@ -531,7 +531,7 @@ "message": "Musíte zvolit aspoň 1 token." }, "needEtherInWallet": { - "message": "Potřebujete DEX v peněžence, abyste mohli pomocí Dex Sanu interagovat s decentralizovanými aplikacemi." + "message": "Potřebujete DEX v peněžence, abyste mohli pomocí DekuSanu interagovat s decentralizovanými aplikacemi." }, "needImportFile": { "message": "Musíte zvolit soubor k importu.", @@ -686,7 +686,7 @@ "message": "Zvrátit" }, "rinkeby": { - "message": "Rinkeby Test Network" + "message": "DEXON Test Network" }, "ropsten": { "message": "Ropsten Test Network" @@ -695,7 +695,7 @@ "message": "Současné RPC" }, "connectingToMainnet": { - "message": "Připojuji se k Main Dexon Network" + "message": "Připojuji se k Main DEXON Network" }, "connectingToRopsten": { "message": "Připojuji se k Ropsten Test Network" @@ -704,7 +704,7 @@ "message": "Připojuji se k Kovan Test Network" }, "connectingToTestnet": { - "message": "Připojuji se k Rinkeby Test Network" + "message": "Připojuji se k DEXON Test Network" }, "connectingToUnknown": { "message": "Připojuji se k neznámé síti" @@ -763,13 +763,13 @@ "message": "Odeslat tokeny" }, "onlySendToEtherAddress": { - "message": "Posílejte jen ETH na Dexon adresu." + "message": "Posílejte jen ETH na DEXON adresu." }, "searchTokens": { "message": "Hledat tokeny" }, "sendTokensAnywhere": { - "message": "Posílejte tokeny komukoli s Dexon účtem" + "message": "Posílejte tokeny komukoli s DEXON účtem" }, "settings": { "message": "Nastavení" @@ -841,7 +841,7 @@ "message": "Testovací faucet" }, "testnet": { - "message": "DEXON Testnet" + "message": "DEXON Test Network" }, "to": { "message": "Komu" @@ -866,7 +866,7 @@ "message": "Symbol tokenu" }, "tokenWarning1": { - "message": "Mějte přehled o tokenech, které jste koupili s účtem Dex Sanu. Pokud jste koupili tokeny s jiným účtem, tyto tokeny se zde nezobrazí." + "message": "Mějte přehled o tokenech, které jste koupili s účtem DekuSanu. Pokud jste koupili tokeny s jiným účtem, tyto tokeny se zde nezobrazí." }, "total": { "message": "Celkem" @@ -891,7 +891,7 @@ "description": "Followed by a link (here) to view token balances" }, "twelveWords": { - "message": "Těchto 12 slov je jedinou možností, jak obnovit Dex San účet. \nUložte je na bezpečné a neveřejné místo." + "message": "Těchto 12 slov je jedinou možností, jak obnovit DekuSan účet. \nUložte je na bezpečné a neveřejné místo." }, "typePassword": { "message": "Zadejte své heslo" @@ -900,7 +900,7 @@ "message": "Vítejte v novém rozhraní (Beta)" }, "uiWelcomeMessage": { - "message": "Používáte nyní nové rozhraní Dex Sanu. Rozhlédněte se kolem, vyzkoušejte nové funkce, jako jsou zasílání tokenů, a dejte nám vědět, pokud narazíte na problém." + "message": "Používáte nyní nové rozhraní DekuSanu. Rozhlédněte se kolem, vyzkoušejte nové funkce, jako jsou zasílání tokenů, a dejte nám vědět, pokud narazíte na problém." }, "unapproved": { "message": "Neschváleno" @@ -946,7 +946,7 @@ "message": "Varování" }, "welcomeBeta": { - "message": "Vítejte v Dex San Beta" + "message": "Vítejte v DekuSan Beta" }, "whatsThis": { "message": "Co to je?" diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json index 516bd066..b08ba103 100644 --- a/app/_locales/de/messages.json +++ b/app/_locales/de/messages.json @@ -75,11 +75,11 @@ "message": "Betrag + Gas" }, "appDescription": { - "message": "Dexon Browsererweiterung", + "message": "DEXON Browsererweiterung", "description": "Die Beschreibung der Erweiterung" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "Der Name der Erweiterung" }, "approved": { @@ -120,7 +120,7 @@ "message": "Mit Dharma ausleihen (Beta)" }, "builtInCalifornia": { - "message": "Dex San wurde in Kalifornien entwickelt und gebaut." + "message": "DekuSan wurde in Kalifornien entwickelt und gebaut." }, "buy": { "message": "Kaufen" @@ -129,7 +129,7 @@ "message": "Auf Coinbase kaufen" }, "buyCoinbaseExplainer": { - "message": "Coinbase ist die weltweit bekannteste Art und Weise um Bitcoin, Dexon und Litecoin zu kaufen und verkaufen." + "message": "Coinbase ist die weltweit bekannteste Art und Weise um Bitcoin, DEXON und Litecoin zu kaufen und verkaufen." }, "ok": { "message": "Ok" @@ -232,7 +232,7 @@ "message": "Das Standardnetzwerk für DEX Transaktionen ist das Main Net." }, "denExplainer": { - "message": "Dein DEN ist dein passwortverschlüsselter Speicher innerhalb von Dex San." + "message": "Dein DEN ist dein passwortverschlüsselter Speicher innerhalb von DekuSan." }, "deposit": { "message": "Einzahlen" @@ -260,7 +260,7 @@ "message": "Mit ShapeShift einzahlen" }, "depositShapeShiftExplainer": { - "message": "Wenn du andere Kryptowährungen besitzt, kannst du diese direkt mit Hilfe deiner Dex San Wallet handeln und einzahlen. Du benötigst keinen Account." + "message": "Wenn du andere Kryptowährungen besitzt, kannst du diese direkt mit Hilfe deiner DekuSan Wallet handeln und einzahlen. Du benötigst keinen Account." }, "details": { "message": "Details" @@ -414,7 +414,7 @@ "message": "Account importieren" }, "importAccountMsg": { - "message":" Importierte Accounts werden nicht mit der Seed-Wörterfolge deines ursprünglichen Dex San Accounts verknüpft. Erfahre mehr über importierte Accounts." + "message":" Importierte Accounts werden nicht mit der Seed-Wörterfolge deines ursprünglichen DekuSan Accounts verknüpft. Erfahre mehr über importierte Accounts." }, "importAnAccount": { "message": "Einen Account importieren" @@ -504,13 +504,13 @@ "message": "Die Wörter der Seed-Wörterfolgen sind alle kleingeschrieben" }, "mainnet": { - "message": "Dexon Main Net" + "message": "DEXON Main Net" }, "message": { "message": "Nachricht" }, "metamaskDescription": { - "message": "Dex San ist ein sicherer Identitätssafe für Dexon." + "message": "DekuSan ist ein sicherer Identitätssafe für Dexon." }, "min": { "message": "Minimum" @@ -522,7 +522,7 @@ "message": "Du musst mindestens 1 Token auswählen." }, "needEtherInWallet": { - "message": "Um dezentralisierte Applikationen mit Dex San verwenden zu können, benötigst du DEX in deiner Wallet." + "message": "Um dezentralisierte Applikationen mit DekuSan verwenden zu können, benötigst du DEX in deiner Wallet." }, "needImportFile": { "message": "Für den Import musst du eine Datei auswählen.", @@ -674,7 +674,7 @@ "message": "Rückgängig machen" }, "rinkeby": { - "message": "Rinkeby Testnetzwerk" + "message": "DEXON Testnetzwerk" }, "ropsten": { "message": "Ropsten Testnetzwerk" @@ -683,7 +683,7 @@ "message": "Aktueller RPC" }, "connectingToMainnet": { - "message": "Verbinde zum Dexon Main Net" + "message": "Verbinde zum DEXON Main Net" }, "connectingToRopsten": { "message": " Verbinde zum Ropsten Testnetzwerk" @@ -692,7 +692,7 @@ "message": " Verbinde zum Kovan Testnetzwerk" }, "connectingToTestnet": { - "message": " Verbinde zum Rinkeby Testnetzwerk" + "message": " Verbinde zum DEXON Testnetzwerk" }, "connectingToUnknown": { "message": "Verbinde zu einem unbekanntem Netzwerk" @@ -745,7 +745,7 @@ "message": "Token senden" }, "onlySendToEtherAddress": { - "message": "ETH unbedingt nur zu einer Dexon Adresse senden." + "message": "ETH unbedingt nur zu einer DEXON Adresse senden." }, "sendTokensAnywhere": { "message": "Token zu einer beliebigen Person mit einem Dexonaccount senden" @@ -820,7 +820,7 @@ "message": "Testfaucet" }, "testnet": { - "message": "DEXON Testnet" + "message": "DEXON Test Network" }, "to": { "message": "An" @@ -845,7 +845,7 @@ "message": "Tokensymbol" }, "tokenWarning1": { - "message": "Behalte die Token die du mit deinem Dex San Account gekauft hast im Blick. Wenn du Token mit einem anderen Account gekauft hast, werden diese hier nicht angezeigt." + "message": "Behalte die Token die du mit deinem DekuSan Account gekauft hast im Blick. Wenn du Token mit einem anderen Account gekauft hast, werden diese hier nicht angezeigt." }, "total": { "message": "Gesamt" @@ -867,7 +867,7 @@ "description": "Gefolgt von einem Link (hier) um die Tokenguthaben anzuzeigen" }, "twelveWords": { - "message": "Diese 12 Wörter stellen die einzige Möglichkeit dar deinen Dex San Account wiederherzustellen. Speichere sie daher an einem sicheren und geheimen Ort." + "message": "Diese 12 Wörter stellen die einzige Möglichkeit dar deinen DekuSan Account wiederherzustellen. Speichere sie daher an einem sicheren und geheimen Ort." }, "typePassword": { "message": "Passwort eingeben" @@ -876,7 +876,7 @@ "message": "Willkommen zur neuen Oberfläche (Beta)" }, "uiWelcomeMessage": { - "message": "Du verwendest nun die neue Dex San Oberfläche. Schau dich um, teste die neuen Features wie z.B. das Senden von Token und lass es uns wissen falls du irgendwelche Probleme hast." + "message": "Du verwendest nun die neue DekuSan Oberfläche. Schau dich um, teste die neuen Features wie z.B. das Senden von Token und lass es uns wissen falls du irgendwelche Probleme hast." }, "unapproved": { "message": "Nicht genehmigt" @@ -922,7 +922,7 @@ "message": "Warnung" }, "welcomeBeta": { - "message": "Willkommen zu Dex San Beta" + "message": "Willkommen zu DekuSan Beta" }, "whatsThis": { "message": "Was ist das?" diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 1375b6a6..8e5d9e6b 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -1,4 +1,5 @@ { +<<<<<<< HEAD "privacyMode": { "message": "Privacy Mode" }, @@ -40,6 +41,10 @@ }, "providerRequestInfo": { "message": "This site is requesting access to view your current account address. Always make sure you trust the sites you interact with." +======= + "aboutDekuSan": { + "message": "DekuSan is the official DEXON browser extension, forked from MetaMask, by DEXON Foundation." +>>>>>>> Complete onboarding flow }, "accept": { "message": "Accept" @@ -84,7 +89,7 @@ "message": "Add Suggested Tokens" }, "addAcquiredTokens": { - "message": "Add the tokens you've acquired using Dex San" + "message": "Add the tokens you've acquired using DekuSan" }, "advanced": { "message": "Advanced" @@ -99,11 +104,11 @@ "message": "Amount + TX Fee" }, "appDescription": { - "message": "Dexon Browser Extension", + "message": "DEXON Browser Extension", "description": "The description of the application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "The name of the application" }, "approve": { @@ -162,7 +167,7 @@ "message": "Your Browser is not supported..." }, "builtInCalifornia": { - "message": "Dex San is designed and built in California." + "message": "DekuSan is designed and built in California." }, "buy": { "message": "Buy" @@ -207,7 +212,7 @@ "message": "Close" }, "chromeRequiredForHardwareWallets":{ - "message": "You need to use Dex San on Google Chrome in order to connect to your Hardware Wallet." + "message": "You need to use DekuSan on Google Chrome in order to connect to your Hardware Wallet." }, "confirm": { "message": "Confirm" @@ -346,7 +351,7 @@ "message": "The default network for DEX transactions is Main Net." }, "denExplainer": { - "message": "Your DEN is your password-encrypted storage within Dex San." + "message": "Your DEN is your password-encrypted storage within DekuSan." }, "deposit": { "message": "Deposit" @@ -374,7 +379,7 @@ "message": "Deposit with ShapeShift" }, "depositShapeShiftExplainer": { - "message": "If you own other cryptocurrencies, you can trade and deposit DEX directly into your Dex San wallet. No Account Needed." + "message": "If you own other cryptocurrencies, you can trade and deposit DEX directly into your DekuSan wallet. No Account Needed." }, "details": { "message": "Details" @@ -550,7 +555,7 @@ "message": "Connect a hardware wallet" }, "hardwareWalletsMsg": { - "message": "Select a hardware wallet you'd like to use with Dex San" + "message": "Select a hardware wallet you'd like to use with DekuSan" }, "havingTroubleConnecting": { "message": "Having trouble connecting?" @@ -591,7 +596,7 @@ "message": "Import Account" }, "importAccountMsg": { - "message":" Imported accounts will not be associated with your originally created Dex San account seedphrase. Learn more about imported accounts " + "message":" Imported accounts will not be associated with your originally created DekuSan account seedphrase. Learn more about imported accounts " }, "importAnAccount": { "message": "Import an account" @@ -650,7 +655,7 @@ "description": "format for importing an account" }, "keepTrackTokens": { - "message": "Keep track of the tokens you’ve bought with your Dex San account." + "message": "Keep track of the tokens you’ve bought with your DekuSan account." }, "kovan": { "message": "Kovan Test Network" @@ -711,13 +716,13 @@ "message": "Message" }, "metamaskDescription": { - "message": "Dex San is a secure identity vault for Dexon." + "message": "DekuSan is a secure identity vault for Dexon." }, "metamaskSeedWords": { - "message": "Dex San Seed Words" + "message": "DekuSan Seed Words" }, "metamaskVersion": { - "message": "MetaMask Version" + "message": "DekuSan Version" }, "min": { "message": "Minimum" @@ -735,7 +740,7 @@ "message": "Must select at least 1 token." }, "needEtherInWallet": { - "message": "To interact with decentralized applications using Dex San, you’ll need DEX in your wallet." + "message": "To interact with decentralized applications using DekuSan, you’ll need DEX in your wallet." }, "needImportFile": { "message": "You must select a file to import.", @@ -1026,7 +1031,7 @@ "message": "Ready to Connect?" }, "rinkeby": { - "message": "Rinkeby Test Network" + "message": "DEXON Test Network" }, "ropsten": { "message": "Ropsten Test Network" @@ -1111,6 +1116,22 @@ "separateEachWord": { "message": "Separate each word with a single space" }, +<<<<<<< HEAD +======= + "onlySendToEtherAddress": { + "message": "Only send ETH to an DEXON address." + }, + "onlySendTokensToAccountAddress": { + "message": "Only send $1 to an DEXON account address.", + "description": "displays token symbol" + }, + "orderOneHere": { + "message": "Order a Trezor or Ledger and keep your funds in cold storage" + }, + "outgoing": { + "message": "Outgoing" + }, +>>>>>>> Complete onboarding flow "searchTokens": { "message": "Search Tokens" }, @@ -1121,7 +1142,7 @@ "message": "Select an Account" }, "selectAnAccountHelp": { - "message": "Select the account to view in Dex San" + "message": "Select the account to view in DekuSan" }, "selectHdPath": { "message": "Select HD Path" @@ -1130,11 +1151,41 @@ "message": "If you don't see your existing Ledger accounts below, try switching paths to \"Legacy (MEW / MyCrypto)\"" }, "sendTokensAnywhere": { - "message": "Send Tokens to anyone with an Dexon account" + "message": "Send Tokens to anyone with an DEXON account" }, "settings": { "message": "Settings" }, +<<<<<<< HEAD +======= + "step1HardwareWallet": { + "message": "1. Connect Hardware Wallet" + }, + "step1HardwareWalletMsg": { + "message": "Connect your hardware wallet directly to your computer." + }, + "step2HardwareWallet": { + "message": "2. Select an Account" + }, + "step2HardwareWalletMsg": { + "message": "Select the account you want to view. You can only choose one at a time." + }, + "step3HardwareWallet": { + "message": "3. Start using dApps and more!" + }, + "step3HardwareWalletMsg": { + "message": "Use your hardware account like you would with any DEXON account. Log in to dApps, send Eth, buy and store ERC20 tokens and Non-Fungible tokens like CryptoKitties." + }, + "info": { + "message": "Info" + }, + "scanInstructions": { + "message": "Place the QR code in front of your camera" + }, + "scanQrCode": { + "message": "Scan QR Code" + }, +>>>>>>> Complete onboarding flow "shapeshiftBuy": { "message": "Buy with Shapeshift" }, @@ -1241,7 +1292,7 @@ "message": "Test Faucet" }, "testnet": { - "message": "DEXON Testnet" + "message": "DEXON Test Network" }, "to": { "message": "To" @@ -1269,7 +1320,7 @@ "message": "Token Symbol" }, "tokenWarning1": { - "message": "Keep track of the tokens you’ve bought with your Dex San account. If you bought tokens using a different account, those tokens will not appear here." + "message": "Keep track of the tokens you’ve bought with your DekuSan account. If you bought tokens using a different account, those tokens will not appear here." }, "total": { "message": "Total" @@ -1351,7 +1402,7 @@ "message": "Try again" }, "twelveWords": { - "message": "These 12 words are the only way to restore your Dex San accounts.\nSave them somewhere safe and secret." + "message": "These 12 words are the only way to restore your DekuSan accounts.\nSave them somewhere safe and secret." }, "typePassword": { "message": "Type your MetaMask password" @@ -1360,7 +1411,7 @@ "message": "Welcome to the New UI (Beta)" }, "uiWelcomeMessage": { - "message": "You are now using the new Dex San UI." + "message": "You are now using the new DekuSan UI." }, "unapproved": { "message": "Unapproved" @@ -1436,7 +1487,7 @@ "message": "Welcome Back!" }, "welcomeBeta": { - "message": "Welcome to Dex San Beta" + "message": "Welcome to DekuSan Beta" }, "whatsThis": { "message": "What's this?" diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index 753a7090..f62bc17a 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -79,7 +79,7 @@ "description": "La descripción de la aplicación" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "El nombre de la aplicación" }, "approved": { @@ -120,7 +120,7 @@ "message": "Pedir prestado con Dharma (Beta)" }, "builtInCalifornia": { - "message": "Dex San fue diseñado y construido en California" + "message": "DekuSan fue diseñado y construido en California" }, "buy": { "message": "Comprar" @@ -129,7 +129,7 @@ "message": "Comprar en Coinbase" }, "buyCoinbaseExplainer": { - "message": "Coinbase es la plataforma global más popular para comprar y vender Bitcoin, Dexon y Litecoin" + "message": "Coinbase es la plataforma global más popular para comprar y vender Bitcoin, DEXON y Litecoin" }, "cancel": { "message": "Cancelar" @@ -156,7 +156,7 @@ "message": "Confirmar transacción" }, "connectingToMainnet": { - "message": "Conectando a la red principal de Dexon (Main Net)" + "message": "Conectando a la red principal de DEXON (Main Net)" }, "connectingToRopsten": { "message": "Conectando a la red de test Ropsten" @@ -165,7 +165,7 @@ "message": "Conectando a la red de test Kovan" }, "connectingToTestnet": { - "message": "Conectando a la red de test Rinkeby" + "message": "Conectando a la red de test DEXON" }, "connectingToUnknown": { "message": "Conectando a una red desconocida" @@ -247,7 +247,7 @@ "message": "La red por defecto para las transacciones de DEX es MainNet (red principal)" }, "denExplainer": { - "message": "El DEN es tu contraseña encriptada almacenada dentro de Dex San" + "message": "El DEN es tu contraseña encriptada almacenada dentro de DekuSan" }, "deposit": { "message": "Depositar" @@ -275,7 +275,7 @@ "message": "Depositar con ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Si posees otras criptomonedas, puedes intercambiar y depositar DEX directamente en tu billetera de Dex San. No necesitas tener una cuenta." + "message": "Si posees otras criptomonedas, puedes intercambiar y depositar DEX directamente en tu billetera de DekuSan. No necesitas tener una cuenta." }, "details": { "message": "Detalles" @@ -433,7 +433,7 @@ "description": "Estado que muestra que una cuenta ha sido completamente cargada en el llavero" }, "importAccountMsg": { - "message": "Las cuentas importadas no serán asociadas con tu cuenta original creada con tu Dex San. Aprende más acerca de importar cuentas." + "message": "Las cuentas importadas no serán asociadas con tu cuenta original creada con tu DekuSan. Aprende más acerca de importar cuentas." }, "info": { "message": "Información" @@ -513,7 +513,7 @@ "message": "las frases semilla sólo pueden tener minúsculas" }, "mainnet": { - "message": "Red principal de Dexon (Main Net)" + "message": "Red principal de DEXON (Main Net)" }, "max": { "message": "Max" @@ -522,7 +522,7 @@ "message": "Mensaje" }, "metamaskDescription": { - "message": "Dex San es una identidad segura en Dexon" + "message": "DekuSan es una identidad segura en Dexon" }, "min": { "message": "Mínimo" @@ -534,7 +534,7 @@ "message": "Mis cuentas" }, "needEtherInWallet": { - "message": "Para interactuar con una aplicación descentralizada usando Dex San, necesitas tener DEX en tu billetera" + "message": "Para interactuar con una aplicación descentralizada usando DekuSan, necesitas tener DEX en tu billetera" }, "needImportFile": { "message": "Debes seleccionar un archivo para importar", @@ -698,7 +698,7 @@ "message": "Revertir" }, "rinkeby": { - "message": "Red privada Rinkeby" + "message": "Red privada DEXON" }, "ropsten": { "message": "Red privada Ropsten" @@ -817,7 +817,7 @@ "message": "Probar Faucet" }, "testnet": { - "message": "DEXON Testnet" + "message": "DEXON Test Network" }, "to": { "message": "Para" @@ -842,7 +842,7 @@ "message": "Símbolo del token" }, "tokenWarning1": { - "message": "Mantén un registro de los tokens que has comprado con tu cuenta de Dex San. Si compraste tokens usando una cuenta diferente, esos tokens no aparecerán aquí." + "message": "Mantén un registro de los tokens que has comprado con tu cuenta de DekuSan. Si compraste tokens usando una cuenta diferente, esos tokens no aparecerán aquí." }, "total": { "message": "Total" @@ -864,7 +864,7 @@ "description": "Seguidos por un enlace (aquí) para ver los saldos de token" }, "twelveWords": { - "message": "Estas 12 palabras son la única forma de restablecer tus cuentas de Dex San. \nGuárdalas en un lugar seguro y secreto." + "message": "Estas 12 palabras son la única forma de restablecer tus cuentas de DekuSan. \nGuárdalas en un lugar seguro y secreto." }, "typePassword": { "message": "Escribe tu contraseña" @@ -873,7 +873,7 @@ "message": "Bienvenido a la nueva UI (Beta)" }, "uiWelcomeMessage": { - "message": "Estás usando la nueva UI de Dex San. Echa un vistazo alrededor, prueba las nuevas características, tales como mandar tokens, y háznos saber si tienes algún problema" + "message": "Estás usando la nueva UI de DekuSan. Echa un vistazo alrededor, prueba las nuevas características, tales como mandar tokens, y háznos saber si tienes algún problema" }, "unavailable": { "message": "No disponible" @@ -925,7 +925,7 @@ "message": "Bienvenido a MetaMask" }, "welcomeBeta": { - "message": "Bienvenido a Dex San Beta" + "message": "Bienvenido a DekuSan Beta" }, "whatsThis": { "message": "¿Qué es esto?" diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json index 32332a89..8ef4953a 100644 --- a/app/_locales/fr/messages.json +++ b/app/_locales/fr/messages.json @@ -84,11 +84,11 @@ "message": "Montant + Gaz" }, "appDescription": { - "message": "Extension Dexon pour navigateur", + "message": "Extension DEXON pour navigateur", "description": "La description de l'application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "Le nom de l'application" }, "approve": { @@ -150,7 +150,7 @@ "message": "Acheter sur Coinbase" }, "buyCoinbaseExplainer": { - "message": "Coinbase est le moyen le plus populaire au monde d'acheter et de vendre du Bitcoin, de l'Dexon et du Litecoin." + "message": "Coinbase est le moyen le plus populaire au monde d'acheter et de vendre du Bitcoin, de l'DEXON et du Litecoin." }, "cancel": { "message": "Annuler" @@ -307,7 +307,7 @@ "message": "Le réseau par défaut pour les transactions DEX est Main Net." }, "denExplainer": { - "message": "Votre DEN est votre stockage crypté par mot de passe dans Dex San." + "message": "Votre DEN est votre stockage crypté par mot de passe dans DekuSan." }, "deposit": { "message": "Déposer" @@ -335,7 +335,7 @@ "message": "Déposer avec ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Si vous possédez d'autres crypto-monnaies, vous pouvez échanger et déposer de l'Ether directement dans votre portefeuille Dex San. Aucun compte n'est requis." + "message": "Si vous possédez d'autres crypto-monnaies, vous pouvez échanger et déposer de l'Ether directement dans votre portefeuille DekuSan. Aucun compte n'est requis." }, "details": { "message": "Détails" @@ -669,7 +669,7 @@ "message": "Vous devez selectionner au moins 1 jeton." }, "needEtherInWallet": { - "message": "Pour interagir avec des applications décentralisées à l'aide de Dex San, vous aurez besoin d'Ether dans votre portefeuille." + "message": "Pour interagir avec des applications décentralisées à l'aide de DekuSan, vous aurez besoin d'Ether dans votre portefeuille." }, "needImportFile": { "message": "Vous devez sélectionner un fichier à importer.", @@ -927,7 +927,7 @@ "message": "Prêt à se connecter ?" }, "rinkeby": { - "message": "Réseau de test Rinkeby" + "message": "Réseau de test DEXON" }, "ropsten": { "message": "Réseau de test Ropsten" @@ -1127,7 +1127,7 @@ "message": "Faucet Testnet" }, "testnet": { - "message": "DEXON Testnet" + "message": "DEXON Test Network" }, "to": { "message": "Destinataire" @@ -1225,7 +1225,7 @@ "message": "Bienvenue dans la nouvelle interface utilisateur (Beta)" }, "uiWelcomeMessage": { - "message": "Vous utilisez maintenant la nouvelle interface utilisateur Dex San. Jetez un coup d'oeil, essayez de nouvelles fonctionnalités comme l'envoi de jetons, et faites-nous savoir si vous avez des problèmes." + "message": "Vous utilisez maintenant la nouvelle interface utilisateur DekuSan. Jetez un coup d'oeil, essayez de nouvelles fonctionnalités comme l'envoi de jetons, et faites-nous savoir si vous avez des problèmes." }, "unapproved": { "message": "Non autorisé" diff --git a/app/_locales/hn/messages.json b/app/_locales/hn/messages.json index 0900f11f..b0bdd0d3 100644 --- a/app/_locales/hn/messages.json +++ b/app/_locales/hn/messages.json @@ -79,7 +79,7 @@ "description": "आवेदन का विवरण" }, "appName": { - "message": "मेटामास्क/Dex San", + "message": "मेटामास्क/DekuSan", "description": "एप्लिकेशन का नाम" }, "attemptingConnect": { diff --git a/app/_locales/ht/messages.json b/app/_locales/ht/messages.json index 4576472e..9252b718 100644 --- a/app/_locales/ht/messages.json +++ b/app/_locales/ht/messages.json @@ -39,1238 +39,1238 @@ "message": "Domèn ki nan lis anba a ap mande pou jwenn aksè a blòkchou Ethereum ak pou wè kont ou ye kounye a. Toujou double tcheke ke ou sou sit ki kòrèk la anvan apwouve aksè." }, "accept": { - "message": "Aksepte" + "message": "Aksepte" }, "accessingYourCamera": { - "message": "Aksè a Kamera" + "message": "Aksè a Kamera" }, "account": { - "message": "Kont" + "message": "Kont" }, "accountDetails": { - "message": "Detay Kont" + "message": "Detay Kont" }, "accountName": { - "message": "Non Kont" + "message": "Non Kont" }, "accountSelectionRequired": { - "message": "Ou bezwen chwazi yon kont!" + "message": "Ou bezwen chwazi yon kont!" }, "activityLog": { - "message": "aktivite ki fèt" + "message": "aktivite ki fèt" }, "address": { - "message": "Adrès" + "message": "Adrès" }, "addCustomToken": { - "message": "Ajoute token" + "message": "Ajoute token" }, "addToken": { - "message": "Ajoute Token" + "message": "Ajoute Token" }, "addTokens": { - "message": "Ajoute Token" + "message": "Ajoute Token" }, "addSuggestedTokens": { - "message": "Ajoute Token Yo Sikjere W" + "message": "Ajoute Token Yo Sikjere W" }, "addAcquiredTokens": { - "message": "Ajoute tokens yo ou te achte lè l sèvi avèk MetaMask" + "message": "Ajoute tokens yo ou te achte lè l sèvi avèk DekuSan" }, "amount": { - "message": "Kantite lajan" + "message": "Kantite lajan" }, "amountPlusGas": { - "message": "Kantite lajan + Gaz" + "message": "Kantite lajan + Gaz" }, "appDescription": { - "message": "Ethereum Ekstansyon Navigatè", - "description": "The description of the application" + "message": "Ethereum Ekstansyon Navigatè", + "description": "The description of the application" }, "appName": { - "message": "MetaMask", - "description": "The name of the application" + "message": "DekuSan", + "description": "The name of the application" }, "approve": { - "message": "Apwouve" + "message": "Apwouve" }, "approved": { - "message": "Apwouve" + "message": "Apwouve" }, "attemptingConnect": { - "message": "Eseye konekte nan blockchain." + "message": "Eseye konekte nan blockchain." }, "attributions": { - "message": "Atribisyon" + "message": "Atribisyon" }, "available": { - "message": "Disponib" + "message": "Disponib" }, "back": { - "message": "Retounen" + "message": "Retounen" }, "balance": { - "message": "Balans" + "message": "Balans" }, "balances": { - "message": "Balans Token" + "message": "Balans Token" }, "balanceIsInsufficientGas": { - "message": "Ensifizan balans pou total gaz aktyèl la" + "message": "Ensifizan balans pou total gaz aktyèl la" }, "beta": { - "message": "BETA" + "message": "BETA" }, "betweenMinAndMax": { - "message": "dwe plis pase oswa egal a $ 1 mwens ke oswa egal a $ 2.", - "description": "helper for inputting hex as decimal input" + "message": "dwe plis pase oswa egal a $ 1 mwens ke oswa egal a $ 2.", + "description": "helper for inputting hex as decimal input" }, "blockiesIdenticon": { - "message": "Itilize Blockies Identicon" + "message": "Itilize Blockies Identicon" }, "borrowDharma": { - "message": "Prete Avèk Dharma (Beta)" + "message": "Prete Avèk Dharma (Beta)" }, "browserNotSupported": { - "message": "Navigatè ou a pa sipòte..." + "message": "Navigatè ou a pa sipòte..." }, "builtInCalifornia": { - "message": "MetaMask fèt e bati nan California." + "message": "DekuSan fèt e bati nan California." }, "buy": { - "message": "Achte" + "message": "Achte" }, "buyCoinbase": { - "message": "Achte sou Coinbase" + "message": "Achte sou Coinbase" }, "buyCoinbaseExplainer": { - "message": "Coinbase se fason ki pi popilè nan mond lan yo achte ak vann Bitcoin, DEXeum, ak Litecoin." + "message": "Coinbase se fason ki pi popilè nan mond lan yo achte ak vann Bitcoin, DEXeum, ak Litecoin." }, "bytes": { - "message": "Bytes" + "message": "Bytes" }, "ok": { - "message": "Oke" + "message": "Oke" }, "cancel": { - "message": "Anile" + "message": "Anile" }, "classicInterface": { - "message": "Sèvi ak fas klasik la" + "message": "Sèvi ak fas klasik la" }, "clickCopy": { - "message": "Klike sou kopi" + "message": "Klike sou kopi" }, "close": { - "message": "Fèmen" + "message": "Fèmen" }, "chromeRequiredForHardwareWallets": { - "message": "Ou bezwen sèvi ak MetaMask sou Google Chrome yo nan lòd yo konekte sou Hardware Wallet." + "message": "Ou bezwen sèvi ak DekuSan sou Google Chrome yo nan lòd yo konekte sou Hardware Wallet." }, "confirm": { - "message": "Konfime" + "message": "Konfime" }, "confirmed": { - "message": "Konfime" + "message": "Konfime" }, "confirmContract": { - "message": "Konfime Kontra" + "message": "Konfime Kontra" }, "confirmPassword": { - "message": "Konfime Modpas" + "message": "Konfime Modpas" }, "confirmTransaction": { - "message": "Konfime Tranzaksyon" + "message": "Konfime Tranzaksyon" }, "connectHardwareWallet": { - "message": "Konekte Hardware Wallet" + "message": "Konekte Hardware Wallet" }, "connect": { - "message": "Konekte" + "message": "Konekte" }, "connecting": { - "message": "Koneksyon..." + "message": "Koneksyon..." }, "connectToLedger": { - "message": "Konekte ak Ledger" + "message": "Konekte ak Ledger" }, "connectToTrezor": { - "message": "Konekte ak Trezor" + "message": "Konekte ak Trezor" }, "continue": { - "message": "Kontinye" + "message": "Kontinye" }, "continueToCoinbase": { - "message": "Kontinye Coinbase" + "message": "Kontinye Coinbase" }, "contractDeployment": { - "message": "Kontra Deplwaman" + "message": "Kontra Deplwaman" }, "conversionProgress": { - "message": "Konvèsyon nan Pwogrè" + "message": "Konvèsyon nan Pwogrè" }, "copiedButton": { - "message": "Kopye" + "message": "Kopye" }, "copiedClipboard": { - "message": "Kopi nan Clipboard" + "message": "Kopi nan Clipboard" }, "copiedExclamation": { - "message": "Kopye!" + "message": "Kopye!" }, "copiedSafe": { - "message": "Mwen te kopye li yon kote ki san danje" + "message": "Mwen te kopye li yon kote ki san danje" }, "copy": { - "message": "Kopye" + "message": "Kopye" }, "copyAddress": { - "message": "Kopi adrès clipboard" + "message": "Kopi adrès clipboard" }, "copyToClipboard": { - "message": "Kopi clipboard" + "message": "Kopi clipboard" }, "copyButton": { - "message": " Kopi " + "message": " Kopi " }, "copyPrivateKey": { - "message": "Sa a se kle prive ou (klike pou ou kopye)" + "message": "Sa a se kle prive ou (klike pou ou kopye)" }, "create": { - "message": "Kreye" + "message": "Kreye" }, "createAccount": { - "message": "Kreye Kont" + "message": "Kreye Kont" }, "createDen": { - "message": "Kreye" + "message": "Kreye" }, "crypto": { - "message": "Crypto", - "description": "Change tip (cryptocurrencies)" + "message": "Crypto", + "description": "Change tip (cryptocurrencies)" }, "currentConversion": { - "message": "Konvèsyon aktyèl" + "message": "Konvèsyon aktyèl" }, "currentNetwork": { - "message": "Rezo aktyèl" + "message": "Rezo aktyèl" }, "customGas": { - "message": "Koutim Gaz" + "message": "Koutim Gaz" }, "customToken": { - "message": "Koutim Token" + "message": "Koutim Token" }, "customize": { - "message": "Koutim" + "message": "Koutim" }, "customRPC": { - "message": "Koutim RPC" + "message": "Koutim RPC" }, "decimalsMustZerotoTen": { - "message": "Desimal yo dwe omwen 0, epi pa dwe plis pase 36." + "message": "Desimal yo dwe omwen 0, epi pa dwe plis pase 36." }, "decimal": { - "message": "Presizyon desimal la" + "message": "Presizyon desimal la" }, "defaultNetwork": { - "message": "Dfo rezo a pou tranzaksyon DEX se Mainnet." + "message": "Dfo rezo a pou tranzaksyon DEX se Mainnet." }, "denExplainer": { - "message": "DEN ou se depo modpas avèk chif ou nan MetaMask." + "message": "DEN ou se depo modpas avèk chif ou nan DekuSan." }, "deposit": { - "message": "Depo" + "message": "Depo" }, "depositBTC": { - "message": "Depoze BTC ou nan adrès ki anba a:" + "message": "Depoze BTC ou nan adrès ki anba a:" }, "depositCoin": { - "message": "Depoze $1 ou nan adrès ki anba a", - "description": "Tells the user what coin they have selected to deposit with shapeshift" + "message": "Depoze $1 ou nan adrès ki anba a", + "description": "Tells the user what coin they have selected to deposit with shapeshift" }, "depositEth": { - "message": "Depo Eth" + "message": "Depo Eth" }, "depositDex": { - "message": "Depo DEX" + "message": "Depo DEX" }, "depositFiat": { - "message": "Depo ak Fiat" + "message": "Depo ak Fiat" }, "depositFromAccount": { - "message": "Depo nan yon lòt kont" + "message": "Depo nan yon lòt kont" }, "depositShapeShift": { - "message": "Depo avèk ShapeShift" + "message": "Depo avèk ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Si ou posede lòt cryptocurrencies, ou ka chanje ak depo DEX dirèkteman nan Wallet MetaMask ou. Pa gen kont ki nesesè." + "message": "Si ou posede lòt cryptocurrencies, ou ka chanje ak depo DEX dirèkteman nan Wallet DekuSan ou. Pa gen kont ki nesesè." }, "details": { - "message": "Detay yo" + "message": "Detay yo" }, "directDeposit": { - "message": "Depo Dirèk" + "message": "Depo Dirèk" }, "directDepositEther": { - "message": "Dirèkteman Depo DEX" + "message": "Dirèkteman Depo DEX" }, "directDepositEtherExplainer": { - "message": "Si ou deja gen kèk DEX, fason ki pi rapid yo ka resevwa DEX nan nouvo Wallet ou pa depo dirèk." + "message": "Si ou deja gen kèk DEX, fason ki pi rapid yo ka resevwa DEX nan nouvo Wallet ou pa depo dirèk." }, "done": { - "message": "Fini" + "message": "Fini" }, "downloadGoogleChrome": { - "message": "Telechaje Google Chrome" + "message": "Telechaje Google Chrome" }, "downloadStateLogs": { - "message": "Telechaje State Logs" + "message": "Telechaje State Logs" }, "dontHaveAHardwareWallet": { - "message": "Pa gen yon materyèl bous?" + "message": "Pa gen yon materyèl bous?" }, "dropped": { - "message": "Tonbe" + "message": "Tonbe" }, "edit": { - "message": "Korije" + "message": "Korije" }, "editAccountName": { - "message": "Korije Non Kont" + "message": "Korije Non Kont" }, "editingTransaction": { - "message": "Fè chanjman nan tranzaksyon ou" + "message": "Fè chanjman nan tranzaksyon ou" }, "emailUs": { - "message": "Imèl nou!" + "message": "Imèl nou!" }, "encryptNewDen": { - "message": "Ankripte nouvo DEN ou" + "message": "Ankripte nouvo DEN ou" }, "ensNameNotFound": { - "message": "Nou pa jwenn non ENS ou a" + "message": "Nou pa jwenn non ENS ou a" }, "enterPassword": { - "message": "Mete modpas" + "message": "Mete modpas" }, "enterPasswordConfirm": { - "message": "Antre nan modpas ou a konfime" + "message": "Antre nan modpas ou a konfime" }, "enterPasswordContinue": { - "message": "Mete modpas pou kontinye" + "message": "Mete modpas pou kontinye" }, "parameters": { - "message": "Paramèt" + "message": "Paramèt" }, "passwordNotLongEnough": { - "message": "Modpas la pa ase" + "message": "Modpas la pa ase" }, "passwordsDontMatch": { - "message": "Modpas Pa Koresponn ak" + "message": "Modpas Pa Koresponn ak" }, "etherscanView": { - "message": "Gade kont sou DEXscan" + "message": "Gade kont sou DEXscan" }, "exchangeRate": { - "message": "Chanje to" + "message": "Chanje to" }, "exportPrivateKey": { - "message": "Voye Kòd Prive" + "message": "Voye Kòd Prive" }, "exportPrivateKeyWarning": { - "message": "Voye kle prive ak pwòp risk ou." + "message": "Voye kle prive ak pwòp risk ou." }, "failed": { - "message": "Tonbe" + "message": "Tonbe" }, "fiat": { - "message": "FIAT", - "description": "Exchange type" + "message": "FIAT", + "description": "Exchange type" }, "fileImportFail": { - "message": "Enpòte dosye ki pa travay? Klike la a!", - "description": "Helps user import their account from a JSON file" + "message": "Enpòte dosye ki pa travay? Klike la a!", + "description": "Helps user import their account from a JSON file" }, "followTwitter": { - "message": "Swiv nou sou Twitter" + "message": "Swiv nou sou Twitter" }, "forgetDevice": { - "message": "Bliye aparèy sa a" + "message": "Bliye aparèy sa a" }, "from": { - "message": "Soti nan" + "message": "Soti nan" }, "fromToSame": { - "message": "Adrès orijinal le ak sa ou resevwa pake menm" + "message": "Adrès orijinal le ak sa ou resevwa pake menm" }, "fromShapeShift": { - "message": "Soti nan ShapeShift" + "message": "Soti nan ShapeShift" }, "functionType": { - "message": "Kalite Fonksyon" + "message": "Kalite Fonksyon" }, "gas": { - "message": "Gaz", - "description": "Short indication of gas cost" + "message": "Gaz", + "description": "Short indication of gas cost" }, "gasFee": { - "message": "Frè gaz" + "message": "Frè gaz" }, "gasLimit": { - "message": "Limit gaz" + "message": "Limit gaz" }, "gasLimitCalculation": { - "message": "Nou kalkile gaz limit sijere a ki baze sou pousantaj siksè rezo a." + "message": "Nou kalkile gaz limit sijere a ki baze sou pousantaj siksè rezo a." }, "gasLimitRequired": { - "message": "Limit gaz nesesè" + "message": "Limit gaz nesesè" }, "gasLimitTooLow": { - "message": "Limit gaz dwe omwen 21000" + "message": "Limit gaz dwe omwen 21000" }, "generatingSeed": { - "message": "Génération Seed..." + "message": "Génération Seed..." }, "gasPrice": { - "message": "Pri gaz (GWEI)" + "message": "Pri gaz (GWEI)" }, "gasPriceCalculation": { - "message": "Nou kalkile pri yo gaz ki sijere ki baze sou pousantaj siksè rezo." + "message": "Nou kalkile pri yo gaz ki sijere ki baze sou pousantaj siksè rezo." }, "gasPriceRequired": { - "message": "Pri Gaz la Egzije" + "message": "Pri Gaz la Egzije" }, "generatingTransaction": { - "message": "Tranzaksyon kap fè" + "message": "Tranzaksyon kap fè" }, "getEther": { - "message": "Jwenn DEX" + "message": "Jwenn DEX" }, "getEtherFromFaucet": { - "message": "Jwenn DEX nan yon tiyo pou $1 la", - "description": "Displays network name for DEX faucet" + "message": "Jwenn DEX nan yon tiyo pou $1 la", + "description": "Displays network name for DEX faucet" }, "getHelp": { - "message": "Jwenn èd." + "message": "Jwenn èd." }, "greaterThanMin": { - "message": "dwe pi gran pase oswa egal a $ 1.", - "description": "helper for inputting hex as decimal input" + "message": "dwe pi gran pase oswa egal a $ 1.", + "description": "helper for inputting hex as decimal input" }, "hardware": { - "message": "hardware" + "message": "hardware" }, "hardwareWalletConnected": { - "message": "Hardware Wallet konekte" + "message": "Hardware Wallet konekte" }, "hardwareWallets": { - "message": "Hardware Wallet konekte" + "message": "Hardware Wallet konekte" }, "hardwareWalletsMsg": { - "message": "Chwazi yon Hardware Wallet ou ta renmen itilize ak MetaMask" + "message": "Chwazi yon Hardware Wallet ou ta renmen itilize ak DekuSan" }, "havingTroubleConnecting": { - "message": "Èske w gen pwoblèm pou konekte?" + "message": "Èske w gen pwoblèm pou konekte?" }, "here": { - "message": "isit la", - "description": "as in -click here- for more information (goes with troubleTokenBalances)" + "message": "isit la", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" }, "hereList": { - "message": "Isit la nan yon lis !!!!" + "message": "Isit la nan yon lis !!!!" }, "hexData": { - "message": "Hex Data" + "message": "Hex Data" }, "hide": { - "message": "Kache" + "message": "Kache" }, "hideToken": { - "message": "Kache Token" + "message": "Kache Token" }, "hideTokenPrompt": { - "message": "Kache Token?" + "message": "Kache Token?" }, "history": { - "message": "Istwa" + "message": "Istwa" }, "howToDeposit": { - "message": "Ki jan ou ta renmen depo DEX?" + "message": "Ki jan ou ta renmen depo DEX?" }, "holdEther": { - "message": "Li pèmèt ou kenbe ether & tokens, epi sèvi kòm on pon pou desantralize aplikasyon." + "message": "Li pèmèt ou kenbe ether & tokens, epi sèvi kòm on pon pou desantralize aplikasyon." }, "import": { - "message": "Pòte", - "description": "Button to import an account from a selected file" + "message": "Pòte", + "description": "Button to import an account from a selected file" }, "importAccount": { - "message": "Pòte Kont" + "message": "Pòte Kont" }, "importAccountMsg": { - "message": " Kont pòte pa pral asosye avèk orijinal ou te kreye nan kont MetaMask seed fraz. Aprann plis sou kont enpòte " + "message": " Kont pòte pa pral asosye avèk orijinal ou te kreye nan kont DekuSan seed fraz. Aprann plis sou kont enpòte " }, "importAnAccount": { - "message": "Pòte yon kont" + "message": "Pòte yon kont" }, "importDen": { - "message": "Pòte ki deja egziste DEN" + "message": "Pòte ki deja egziste DEN" }, "imported": { - "message": "Pòte", - "description": "status showing that an account has been fully loaded into the keyring" + "message": "Pòte", + "description": "status showing that an account has been fully loaded into the keyring" }, "importUsingSeed": { - "message": "Pòte lè sèvi avèk seed fraz" + "message": "Pòte lè sèvi avèk seed fraz" }, "infoHelp": { - "message": "Enfo & Èd" + "message": "Enfo & Èd" }, "initialTransactionConfirmed": { - "message": "Premye tranzaksyon ou konfime sou rezo a. Klike sou OK pou tounen." + "message": "Premye tranzaksyon ou konfime sou rezo a. Klike sou OK pou tounen." }, "insufficientFunds": { - "message": "Lajan ensifizan." + "message": "Lajan ensifizan." }, "insufficientTokens": { - "message": "Tokens pa valab." + "message": "Tokens pa valab." }, "invalidAddress": { - "message": "Adrès pa valab" + "message": "Adrès pa valab" }, "invalidAddressRecipient": { - "message": "Moun ki resevwa adrès la pa valab" + "message": "Moun ki resevwa adrès la pa valab" }, "invalidGasParams": { - "message": "Gaz Paramèt la pa valab" + "message": "Gaz Paramèt la pa valab" }, "invalidInput": { - "message": "Sa ou rantre a pa valab" + "message": "Sa ou rantre a pa valab" }, "invalidRequest": { - "message": "Demann pa valab" + "message": "Demann pa valab" }, "invalidRPC": { - "message": "RPC URI pa valab" + "message": "RPC URI pa valab" }, "invalidSeedPhrase": { - "message": "Seed fraz pa valab" + "message": "Seed fraz pa valab" }, "jsonFail": { - "message": "Yon bagay ale mal. Tanpri, asire w ke dosye JSON ou an byen fòmate." + "message": "Yon bagay ale mal. Tanpri, asire w ke dosye JSON ou an byen fòmate." }, "jsonFile": { - "message": "JSON Dosye", - "description": "format for importing an account" + "message": "JSON Dosye", + "description": "format for importing an account" }, "keepTrackTokens": { - "message": "Gade tokens yo ou te achte ak kont MetaMask ou." + "message": "Gade tokens yo ou te achte ak kont DekuSan ou." }, "kovan": { - "message": "Kovan Tès Rezo" + "message": "Kovan Tès Rezo" }, "knowledgeDataBase": { - "message": "Vizite baz nou an" + "message": "Vizite baz nou an" }, "max": { - "message": "Maksimòm" + "message": "Maksimòm" }, "learnMore": { - "message": "Aprann plis" + "message": "Aprann plis" }, "ledgerAccountRestriction": { - "message": "Ou bezwen sèvi ak dènye kont ou anvan ou ka ajoute yon nouvo." + "message": "Ou bezwen sèvi ak dènye kont ou anvan ou ka ajoute yon nouvo." }, "lessThanMax": { - "message": "dwe mwens pase oswa egal a $ 1.", - "description": "helper for inputting hex as decimal input" + "message": "dwe mwens pase oswa egal a $ 1.", + "description": "helper for inputting hex as decimal input" }, "likeToAddTokens": { - "message": "Èske ou ta renmen ajoute sa nan tokens?" + "message": "Èske ou ta renmen ajoute sa nan tokens?" }, "links": { - "message": "Lyen" + "message": "Lyen" }, "limit": { - "message": "Limitasyon" + "message": "Limitasyon" }, "loading": { - "message": "Telechaje..." + "message": "Telechaje..." }, "loadingTokens": { - "message": "Telechaje Tokens..." + "message": "Telechaje Tokens..." }, "localhost": { - "message": "Localhost 8545" + "message": "Localhost 8545" }, "login": { - "message": "Ouvri" + "message": "Ouvri" }, "logout": { - "message": "Dekonekte" + "message": "Dekonekte" }, "loose": { - "message": "Pèdi" + "message": "Pèdi" }, "loweCaseWords": { - "message": "seed mo sèlman gen karaktè miniskil" + "message": "seed mo sèlman gen karaktè miniskil" }, "mainnet": { - "message": "Main DEXeum Network" + "message": "Main DEXeum Network" }, "menu": { - "message": "Opsyon" + "message": "Opsyon" }, "message": { - "message": "Mesaje" + "message": "Mesaje" }, "metamaskDescription": { - "message": "MetaMask sekirize idantite pou DEXeum." + "message": "DekuSan sekirize idantite pou DEXeum." }, "metamaskSeedWords": { - "message": "MetaMask Seed Mo" + "message": "DekuSan Seed Mo" }, "min": { - "message": "Minimòm" + "message": "Minimòm" }, "myAccounts": { - "message": "Kont mwen" + "message": "Kont mwen" }, "mustSelectOne": { - "message": "Ou dwe chwazi omwen 1 token." + "message": "Ou dwe chwazi omwen 1 token." }, "needEtherInWallet": { - "message": "Pou kominike avèk aplikasyon desantralize ou dwe itilize MetaMask, ou pral bezwen DEX nan Wallet ou." + "message": "Pou kominike avèk aplikasyon desantralize ou dwe itilize DekuSan, ou pral bezwen DEX nan Wallet ou." }, "needImportFile": { - "message": "Ou dwe chwazi yon dosye pou enpòte.", - "description": "User is important an account and needs to add a file to continue" + "message": "Ou dwe chwazi yon dosye pou enpòte.", + "description": "User is important an account and needs to add a file to continue" }, "needImportPassword": { - "message": "Ou dwe antre nan yon modpas pou dosye ou te chwazi a.", - "description": "Password and file needed to import an account" + "message": "Ou dwe antre nan yon modpas pou dosye ou te chwazi a.", + "description": "Password and file needed to import an account" }, "negativeETH": { - "message": "Pa ka voye kantite lajan negatif ETH." + "message": "Pa ka voye kantite lajan negatif ETH." }, "networks": { - "message": "Rezo" + "message": "Rezo" }, "nevermind": { - "message": "Pa pwoblèm" + "message": "Pa pwoblèm" }, "newAccount": { - "message": "Nouvo Kont" + "message": "Nouvo Kont" }, "newAccountNumberName": { - "message": "Kont $1", - "description": "Default name of next account to be created on create account screen" + "message": "Kont $1", + "description": "Default name of next account to be created on create account screen" }, "newContract": { - "message": "Nouvo Kontra" + "message": "Nouvo Kontra" }, "newPassword": { - "message": "Nouvo modpas (minit 8)" + "message": "Nouvo modpas (minit 8)" }, "newRecipient": { - "message": "Nouvo Benefisyè" + "message": "Nouvo Benefisyè" }, "newRPC": { - "message": "Nouvo RPC URL" + "message": "Nouvo RPC URL" }, "next": { - "message": "Aprè sa" + "message": "Aprè sa" }, "noAddressForName": { - "message": "Pa gen adrès ki etabli pou non sa a." + "message": "Pa gen adrès ki etabli pou non sa a." }, "noDeposits": { - "message": "Pa gen depo ou te resevwa" + "message": "Pa gen depo ou te resevwa" }, "noConversionRateAvailable": { - "message": "Pa gen okenn Konvèsyon Disponib" + "message": "Pa gen okenn Konvèsyon Disponib" }, "noTransactionHistory": { - "message": "Pa gen istwa tranzaksyon." + "message": "Pa gen istwa tranzaksyon." }, "noTransactions": { - "message": "Pa gen tranzaksyon" + "message": "Pa gen tranzaksyon" }, "notFound": { - "message": "Pa jwenn" + "message": "Pa jwenn" }, "notStarted": { - "message": "Pa kòmanse" + "message": "Pa kòmanse" }, "noWebcamFoundTitle": { - "message": "Pa jwenn webcam" + "message": "Pa jwenn webcam" }, "noWebcamFound": { - "message": "Nou pakay jwenn webcam òdinatè ou. Tanpri eseye ankò." + "message": "Nou pakay jwenn webcam òdinatè ou. Tanpri eseye ankò." }, "oldUI": { - "message": "Ansyen Itilizatè kouòdone" + "message": "Ansyen Itilizatè kouòdone" }, "oldUIMessage": { - "message": "Ou te retounen nan Ansyen Itilizatè kouòdone. Ou ka chanje tounen nan nouvo Ansyen Itilizatè nan opsyon a nan meni an tèt la." + "message": "Ou te retounen nan Ansyen Itilizatè kouòdone. Ou ka chanje tounen nan nouvo Ansyen Itilizatè nan opsyon a nan meni an tèt la." }, "openInTab": { - "message": "Louvri nan etikèt" + "message": "Louvri nan etikèt" }, "or": { - "message": "oubyen", - "description": "choice between creating or importing a new account" + "message": "oubyen", + "description": "choice between creating or importing a new account" }, "origin": { - "message": "Orijin" + "message": "Orijin" }, "password": { - "message": "Modpas" + "message": "Modpas" }, "passwordCorrect": { - "message": "Tanpri asire ke modpas ou kòrèk." + "message": "Tanpri asire ke modpas ou kòrèk." }, "passwordMismatch": { - "message": "modpas sa pa menm", - "description": "in password creation process, the two new password fields did not match" + "message": "modpas sa pa menm", + "description": "in password creation process, the two new password fields did not match" }, "passwordShort": { - "message": "modpas pa sifi", - "description": "in password creation process, the password is not long enough to be secure" + "message": "modpas pa sifi", + "description": "in password creation process, the password is not long enough to be secure" }, "pastePrivateKey": { - "message": "Kole fraz prive ou a la:", - "description": "For importing an account from a private key" + "message": "Kole fraz prive ou a la:", + "description": "For importing an account from a private key" }, "pasteSeed": { - "message": "Kole seed fraz ou a la!" + "message": "Kole seed fraz ou a la!" }, "pending": { - "message": "l ap mache" + "message": "l ap mache" }, "personalAddressDetected": { - "message": "Adrès pèsonèl detekte. Antre adrès kontra token la." + "message": "Adrès pèsonèl detekte. Antre adrès kontra token la." }, "pleaseReviewTransaction": { - "message": "Tanpri revize tranzaksyon ou." + "message": "Tanpri revize tranzaksyon ou." }, "popularTokens": { - "message": "Popilè Tokens" + "message": "Popilè Tokens" }, "prev": { - "message": "Avan" + "message": "Avan" }, "privacyMsg": { - "message": "Règleman sou enfòmasyon prive" + "message": "Règleman sou enfòmasyon prive" }, "privateKey": { - "message": "Prive kle", - "description": "select this type of file to use to import an account" + "message": "Prive kle", + "description": "select this type of file to use to import an account" }, "privateKeyWarning": { - "message": "Atansyon: pa janm divilge kle sa. Nenpòt moun kapab avèk kle prive ou a vòlè sa ou gen ou sou kont ou a." + "message": "Atansyon: pa janm divilge kle sa. Nenpòt moun kapab avèk kle prive ou a vòlè sa ou gen ou sou kont ou a." }, "privateNetwork": { - "message": "Rezo Prive" + "message": "Rezo Prive" }, "qrCode": { - "message": "Montre QR Kòd" + "message": "Montre QR Kòd" }, "queue": { - "message": "Queue" + "message": "Queue" }, "readdToken": { - "message": "Ou ka ajoute token sa aprè sa ankò ou prale nan \"Ajoute token\" nan opsyon meni kont ou an." + "message": "Ou ka ajoute token sa aprè sa ankò ou prale nan \"Ajoute token\" nan opsyon meni kont ou an." }, "readMore": { - "message": "Li plis isit la." + "message": "Li plis isit la." }, "readMore2": { - "message": "Li plis isit la." + "message": "Li plis isit la." }, "receive": { - "message": "Resevwa" + "message": "Resevwa" }, "recipientAddress": { - "message": "Adrès pou resevwa" + "message": "Adrès pou resevwa" }, "refundAddress": { - "message": "Adrès pou resevwa" + "message": "Adrès pou resevwa" }, "rejected": { - "message": "Rejte" + "message": "Rejte" }, "reset": { - "message": "Repwograme" + "message": "Repwograme" }, "resetAccount": { - "message": "Repwograme Kont" + "message": "Repwograme Kont" }, "resetAccountDescription": { - "message": "Repwograme kont a netwaye tranzaksyon ou yo." + "message": "Repwograme kont a netwaye tranzaksyon ou yo." }, "restoreFromSeed": { - "message": "Restore kont?" + "message": "Restore kont?" }, "restoreVault": { - "message": "Retabli kazye" + "message": "Retabli kazye" }, "restoreAccountWithSeed": { - "message": "Retabli kont ou avèk yo Seed Fraz" + "message": "Retabli kont ou avèk yo Seed Fraz" }, "required": { - "message": "Egzije" + "message": "Egzije" }, "retryWithMoreGas": { - "message": "Reseye ak yon pri gaz pi wo isit la" + "message": "Reseye ak yon pri gaz pi wo isit la" }, "walletSeed": { - "message": "Wallet Seed" + "message": "Wallet Seed" }, "restore": { - "message": "Retabli" + "message": "Retabli" }, "revealSeedWords": { - "message": "Revele Seed Mo Yo" + "message": "Revele Seed Mo Yo" }, "revealSeedWordsTitle": { - "message": "Seed Fraz" + "message": "Seed Fraz" }, "revealSeedWordsDescription": { - "message": "Si ou pa janm chanje navigatè ou deplase òdinatè, ou pral bezwen fraz seed la pou ka gen aksè a kont ou. Sere yo on kote an sekirite e an sekrè." + "message": "Si ou pa janm chanje navigatè ou deplase òdinatè, ou pral bezwen fraz seed la pou ka gen aksè a kont ou. Sere yo on kote an sekirite e an sekrè." }, "revealSeedWordsWarningTitle": { - "message": "PA pataje fraz sa a avèk nenpòt moun!" + "message": "PA pataje fraz sa a avèk nenpòt moun!" }, "revealSeedWordsWarning": { - "message": "Yo ka itilize mo sa pou vòlè kont ou." + "message": "Yo ka itilize mo sa pou vòlè kont ou." }, "revert": { - "message": "Retounen" + "message": "Retounen" }, "remove": { - "message": "retire" + "message": "retire" }, "removeAccount": { - "message": "Retire kont" + "message": "Retire kont" }, "removeAccountDescription": { - "message": "Kont sa a pral retire nan Wallet ou. Tanpri, asire ou ke ou gen orijinal fraz seed la oubyen kle prive pou rantre kont lan avan ou kontinye. Oubyen ou ka rantre kont ou ankò apati kont \"drop-down\" ou an." + "message": "Kont sa a pral retire nan Wallet ou. Tanpri, asire ou ke ou gen orijinal fraz seed la oubyen kle prive pou rantre kont lan avan ou kontinye. Oubyen ou ka rantre kont ou ankò apati kont \"drop-down\" ou an." }, "readyToConnect": { - "message": "Pare pou konekte?" + "message": "Pare pou konekte?" }, "rinkeby": { - "message": "Rinkeby Tès Rezo" + "message": "DEXON Tès Rezo" }, "ropsten": { - "message": "Ropsten Tès Rezo" + "message": "Ropsten Tès Rezo" }, "rpc": { - "message": "Koutim RPC" + "message": "Koutim RPC" }, "currentRpc": { - "message": "Kounya RPC" + "message": "Kounya RPC" }, "connectingToMainnet": { - "message": "Konekte ak Main (Prensipal) DEXeum Rezo a" + "message": "Konekte ak Main (Prensipal) DEXeum Rezo a" }, "connectingToRopsten": { - "message": "Konekte ak Ropsten Tès Rezo a" + "message": "Konekte ak Ropsten Tès Rezo a" }, "connectingToKovan": { - "message": "Konekte nan Kovan Tès Rezo a" + "message": "Konekte nan Kovan Tès Rezo a" }, "connectingToTestnet": { - "message": "Konekte nan Rinkeby Tès Rezo a" + "message": "Konekte nan DEXON Tès Rezo a" }, "connectingToUnknown": { - "message": "Konekte nan rezo enkoni" + "message": "Konekte nan rezo enkoni" }, "sampleAccountName": { - "message": "Pa egzanp, Nouvo kont mwen an", - "description": "Help user understand concept of adding a human-readable name to their account" + "message": "Pa egzanp, Nouvo kont mwen an", + "description": "Help user understand concept of adding a human-readable name to their account" }, "save": { - "message": "Sove" + "message": "Sove" }, "speedUp": { - "message": "pi vit" + "message": "pi vit" }, "speedUpTitle": { - "message": "Monte vitès tranzaksyon" + "message": "Monte vitès tranzaksyon" }, "speedUpSubtitle": { - "message": "Ogmante pri gaz ou pou eseye efase tranzaksyon ou pi vit" + "message": "Ogmante pri gaz ou pou eseye efase tranzaksyon ou pi vit" }, "saveAsCsvFile": { - "message": "Sove kòm dosye CSV" + "message": "Sove kòm dosye CSV" }, "saveAsFile": { - "message": "Sove kòm dosye", - "description": "Account export process" + "message": "Sove kòm dosye", + "description": "Account export process" }, "saveSeedAsFile": { - "message": "Sove pawòl seed kòm dosye" + "message": "Sove pawòl seed kòm dosye" }, "search": { - "message": "Rechèch" + "message": "Rechèch" }, "searchResults": { - "message": "Rezilta rechèch" + "message": "Rezilta rechèch" }, "secretPhrase": { - "message": "Antre fraz sekrè douz mo ou a pou w restore kòf ou a." + "message": "Antre fraz sekrè douz mo ou a pou w restore kòf ou a." }, "showHexData": { - "message": "Montre Hex Data" + "message": "Montre Hex Data" }, "showHexDataDescription": { - "message": "Pran sa pouw ka montre chan entèfas hex data a" + "message": "Pran sa pouw ka montre chan entèfas hex data a" }, "newPassword8Chars": { - "message": "Nouvo modpas (pou pi pit 8)" + "message": "Nouvo modpas (pou pi pit 8)" }, "seedPhraseReq": { - "message": "Seed fraz yo se 12 long mo" + "message": "Seed fraz yo se 12 long mo" }, "select": { - "message": "Chwazi" + "message": "Chwazi" }, "selectCurrency": { - "message": "Chwazi Lajan" + "message": "Chwazi Lajan" }, "selectService": { - "message": "Chwazi Sèvis" + "message": "Chwazi Sèvis" }, "selectType": { - "message": "Chwazi Kalite" + "message": "Chwazi Kalite" }, "send": { - "message": "Voye" + "message": "Voye" }, "sendETH": { - "message": "Voye ETH" + "message": "Voye ETH" }, "sendTokens": { - "message": "Voye Tokens" + "message": "Voye Tokens" }, "sentEther": { - "message": "Voye ether" + "message": "Voye ether" }, "sentTokens": { - "message": "tokens deja voye" + "message": "tokens deja voye" }, "separateEachWord": { - "message": "Separe chak mo ak yon sèl espas" + "message": "Separe chak mo ak yon sèl espas" }, "onlySendToEtherAddress": { - "message": "Sèlman voye ETH nan yon adrès DEXeum." + "message": "Sèlman voye ETH nan yon adrès DEXeum." }, "onlySendTokensToAccountAddress": { - "message": "Sèlman voye $ 1 nan yon adrès kont DEXeum.", - "description": "displays token symbol" + "message": "Sèlman voye $ 1 nan yon adrès kont DEXeum.", + "description": "displays token symbol" }, "orderOneHere": { - "message": "Mete nan lòd on Trezor oswa Ledger epi kenbe lajan ou nan yon stòk frèt." + "message": "Mete nan lòd on Trezor oswa Ledger epi kenbe lajan ou nan yon stòk frèt." }, "outgoing": { - "message": "Ap kite" + "message": "Ap kite" }, "searchTokens": { - "message": "Rechèch Tokens" + "message": "Rechèch Tokens" }, "selectAnAddress": { - "message": "Chwazi yon adrès" + "message": "Chwazi yon adrès" }, "selectAnAccount": { - "message": "Chwazi yon kont" + "message": "Chwazi yon kont" }, "selectAnAccountHelp": { - "message": "Chwazi kont pou wè nan MetaMask" + "message": "Chwazi kont pou wè nan DekuSan" }, "selectHdPath": { - "message": "Chwazi chemen HD" + "message": "Chwazi chemen HD" }, "selectPathHelp": { - "message": "Si ou pa wè kont Ledger ou te genyen an anba a, eseye chanje chemen an \"Eritaj (MEW / MyCrypto)\"" + "message": "Si ou pa wè kont Ledger ou te genyen an anba a, eseye chanje chemen an \"Eritaj (MEW / MyCrypto)\"" }, "sendTokensAnywhere": { - "message": "Voye Tokens pou nenpòt moun ki gen yon kont DEXeum" + "message": "Voye Tokens pou nenpòt moun ki gen yon kont DEXeum" }, "settings": { - "message": "Paramèt" + "message": "Paramèt" }, "step1HardwareWallet": { - "message": "1. Konekte Materyèl bous" + "message": "1. Konekte Materyèl bous" }, "step1HardwareWalletMsg": { - "message": "Konekte materyèl bous ou dirèkteman nan òdinatè ou." + "message": "Konekte materyèl bous ou dirèkteman nan òdinatè ou." }, "step2HardwareWallet": { - "message": "2. Chwazi yon kont" + "message": "2. Chwazi yon kont" }, "step2HardwareWalletMsg": { - "message": "Chwazi kont ou vle wè a. Ou ka chwazi youn sèlman nan yon moman." + "message": "Chwazi kont ou vle wè a. Ou ka chwazi youn sèlman nan yon moman." }, "step3HardwareWallet": { - "message": "3. Kòmanse itilize dApps ak plis ankò!" + "message": "3. Kòmanse itilize dApps ak plis ankò!" }, "step3HardwareWalletMsg": { - "message": "Sèvi ak kont materyèl ou menm jan ou t ap fè pou kont DEXum. Ouvri sesyon an nan dApps, voye Eth, achte ak stòke ERC20 tokens ak e ki pake chanje tokens tankou CryptoKitties." + "message": "Sèvi ak kont materyèl ou menm jan ou t ap fè pou kont DEXum. Ouvri sesyon an nan dApps, voye Eth, achte ak stòke ERC20 tokens ak e ki pake chanje tokens tankou CryptoKitties." }, "info": { - "message": "Enfòmasyon" + "message": "Enfòmasyon" }, "scanInstructions": { - "message": "Mete kòd QR la devan kamera ou" + "message": "Mete kòd QR la devan kamera ou" }, "scanQrCode": { - "message": "Enspeksyon QR Kòd" + "message": "Enspeksyon QR Kòd" }, "shapeshiftBuy": { - "message": "Achte avèk Shapeshift" + "message": "Achte avèk Shapeshift" }, "showPrivateKeys": { - "message": "Montre Kle Prive" + "message": "Montre Kle Prive" }, "showQRCode": { - "message": "Montre Kòd QR" + "message": "Montre Kòd QR" }, "sign": { - "message": "Siyen" + "message": "Siyen" }, "signatureRequest": { - "message": "Siyati Mande" + "message": "Siyati Mande" }, "signed": { - "message": "Te Siyen" + "message": "Te Siyen" }, "signMessage": { - "message": "Siyen mesaj" + "message": "Siyen mesaj" }, "signNotice": { - "message": "Lè w siyen mesaj sa a ka gen efè segondè ki \ndanjere. Sèlman \nsit mesaj ki soti nan sit ou konplètman fè konfyans ak tout kont ou. \n Metòd danjere sa yo pral retire nan yon vèsyon fiti. " + "message": "Lè w siyen mesaj sa a ka gen efè segondè ki \ndanjere. Sèlman \nsit mesaj ki soti nan sit ou konplètman fè konfyans ak tout kont ou. \n Metòd danjere sa yo pral retire nan yon vèsyon fiti. " }, "sigRequest": { - "message": "Demann Siyati" + "message": "Demann Siyati" }, "sigRequested": { - "message": "Demann Siyati" + "message": "Demann Siyati" }, "spaceBetween": { - "message": "ka gen sèlman yon espas ant mo yo" + "message": "ka gen sèlman yon espas ant mo yo" }, "status": { - "message": "Kondisyon" + "message": "Kondisyon" }, "stateLogs": { - "message": "State Logs" + "message": "State Logs" }, "stateLogsDescription": { - "message": "State logs gen adrès kont piblik ou yo epi tranzaksyon ou te voye yo." + "message": "State logs gen adrès kont piblik ou yo epi tranzaksyon ou te voye yo." }, "stateLogError": { - "message": "Erè nan retwouve State Logs yo." + "message": "Erè nan retwouve State Logs yo." }, "submit": { - "message": "Soumèt" + "message": "Soumèt" }, "submitted": { - "message": "Te Soumèt" + "message": "Te Soumèt" }, "supportCenter": { - "message": "Vizite Sant Sipò Nou" + "message": "Vizite Sant Sipò Nou" }, "symbolBetweenZeroTen": { - "message": "Senbòl yo dwe ant 0 ak 10 karaktè." + "message": "Senbòl yo dwe ant 0 ak 10 karaktè." }, "takesTooLong": { - "message": "Pran twò lontan?" + "message": "Pran twò lontan?" }, "terms": { - "message": "Tèm pou itilize" + "message": "Tèm pou itilize" }, "testFaucet": { - "message": "Tès Tiyo" + "message": "Tès Tiyo" }, "to": { - "message": "Pou" + "message": "Pou" }, "toETHviaShapeShift": { - "message": "$1 pou ETH pa ShapeShift", - "description": "system will fill in deposit type in start of message" + "message": "$1 pou ETH pa ShapeShift", + "description": "system will fill in deposit type in start of message" }, "token": { - "message": "Token" + "message": "Token" }, "tokenAddress": { - "message": "Adrès Token" + "message": "Adrès Token" }, "tokenAlreadyAdded": { - "message": "Ou te deja ajoute token." + "message": "Ou te deja ajoute token." }, "tokenBalance": { - "message": "Balans Token ou se:" + "message": "Balans Token ou se:" }, "tokenSelection": { - "message": "Chache Tokens oswa chwazi nan lis Tokens popilè nou an." + "message": "Chache Tokens oswa chwazi nan lis Tokens popilè nou an." }, "tokenSymbol": { - "message": "Token Senbòl" + "message": "Token Senbòl" }, "tokenWarning1": { - "message": "Kenbe tras token yo ou te achte ak kont MetaMask ou. Si ou te achte tokens pandan wap itilize yon kont diferan tokens sa yo pa pral parèt la." + "message": "Kenbe tras token yo ou te achte ak kont DekuSan ou. Si ou te achte tokens pandan wap itilize yon kont diferan tokens sa yo pa pral parèt la." }, "total": { - "message": "Total" + "message": "Total" }, "transactions": { - "message": "tranzaksyon yo" + "message": "tranzaksyon yo" }, "transactionConfirmed": { - "message": "Tranzaksyon ou te konfime pou $2." + "message": "Tranzaksyon ou te konfime pou $2." }, "transactionCreated": { - "message": "Tranzaksyon ou te kreye avèk on valè de $1 pou $2." + "message": "Tranzaksyon ou te kreye avèk on valè de $1 pou $2." }, "transactionDropped": { - "message": "Tranzaksyon ou te tonbe a $2." + "message": "Tranzaksyon ou te tonbe a $2." }, "transactionSubmitted": { - "message": "Tranzaksyon ou te soumèt a $2." + "message": "Tranzaksyon ou te soumèt a $2." }, "transactionUpdated": { - "message": "Tranzaksyon ou te aktyalize a $2." + "message": "Tranzaksyon ou te aktyalize a $2." }, "transactionUpdatedGas": { - "message": "Tranzaksyon ou te aktyalize avèk on pri gaz de $1 a $2." + "message": "Tranzaksyon ou te aktyalize avèk on pri gaz de $1 a $2." }, "transactionError": { - "message": "Erè tranzaksyon. Eksepsyon jete nan kòd kontra." + "message": "Erè tranzaksyon. Eksepsyon jete nan kòd kontra." }, "transactionMemo": { - "message": "Memo tranzaksyon (opsyonèl)" + "message": "Memo tranzaksyon (opsyonèl)" }, "transactionNumber": { - "message": "Nimewo Tranzaksyon" + "message": "Nimewo Tranzaksyon" }, "transfer": { - "message": "Transfè" + "message": "Transfè" }, "transfers": { - "message": "Transfè yo" + "message": "Transfè yo" }, "trezorHardwareWallet": { - "message": "TREZOR Materyèl Bous" + "message": "TREZOR Materyèl Bous" }, "troubleTokenBalances": { - "message": "Nou te gen pwoblèm chaje balans token ou. Ou ka wè yo ", - "description": "Followed by a link (here) to view token balances" + "message": "Nou te gen pwoblèm chaje balans token ou. Ou ka wè yo ", + "description": "Followed by a link (here) to view token balances" }, "tryAgain": { - "message": "Eseye anko" + "message": "Eseye anko" }, "twelveWords": { - "message": "12 mo sa yo se sèl fason pou retabli kont MetaMask ou yo. \nKenbe yo yon kote ki an sekirite ak sekrè." + "message": "12 mo sa yo se sèl fason pou retabli kont DekuSan ou yo. \nKenbe yo yon kote ki an sekirite ak sekrè." }, "typePassword": { - "message": "Tape modpas ou" + "message": "Tape modpas ou" }, "uiWelcome": { - "message": "Byenveni nan New itilizatè koòdone (Beta)" + "message": "Byenveni nan New itilizatè koòdone (Beta)" }, "uiWelcomeMessage": { - "message": "Kounya w ap itilize nouvo MetaMask UI (itilizatè koòdone) a." + "message": "Kounya w ap itilize nouvo DekuSan UI (itilizatè koòdone) a." }, "unapproved": { - "message": "Pa apwouve" + "message": "Pa apwouve" }, "unavailable": { - "message": "Pa disponib" + "message": "Pa disponib" }, "units": { - "message": "inite yo" + "message": "inite yo" }, "unknown": { - "message": "Enkoni" + "message": "Enkoni" }, "unknownFunction": { - "message": "Fonksyon enkoni" + "message": "Fonksyon enkoni" }, "unknownNetwork": { - "message": "Rezo Prive Enkoni" + "message": "Rezo Prive Enkoni" }, "unknownNetworkId": { - "message": "Rezo ID Enkoni" + "message": "Rezo ID Enkoni" }, "unknownQrCode": { - "message": "Erè: Nou pa t kapab idantifye QR kòd sa" + "message": "Erè: Nou pa t kapab idantifye QR kòd sa" }, "unknownCameraErrorTitle": { - "message": "Ooops! Yon bagay te ale mal...." + "message": "Ooops! Yon bagay te ale mal...." }, "unknownCameraError": { - "message": "Te gen yon erè pandan y ap eseye jwenn aksè nan kamera ou. Tanpri eseye ankò..." + "message": "Te gen yon erè pandan y ap eseye jwenn aksè nan kamera ou. Tanpri eseye ankò..." }, "unlock": { - "message": "Debloke" + "message": "Debloke" }, "unlockMessage": { - "message": "Entènèt desantralize a ap tann" + "message": "Entènèt desantralize a ap tann" }, "uriErrorMsg": { - "message": "URIs mande pou apwopriye prefiks HTTP / HTTPS a." + "message": "URIs mande pou apwopriye prefiks HTTP / HTTPS a." }, "usaOnly": { - "message": "USA sèlman", - "description": "Using this exchange is limited to people inside the USA" + "message": "USA sèlman", + "description": "Using this exchange is limited to people inside the USA" }, "usedByClients": { - "message": "Itilize pa yon varyete de kliyan diferan" + "message": "Itilize pa yon varyete de kliyan diferan" }, "useOldUI": { - "message": "Itilizasyon ansyen UI (itilizatè koòdone)" + "message": "Itilizasyon ansyen UI (itilizatè koòdone)" }, "validFileImport": { - "message": "Ou dwe chwazi yon dosye ki valab pou enpòte." + "message": "Ou dwe chwazi yon dosye ki valab pou enpòte." }, "vaultCreated": { - "message": "Kòf Kreye" + "message": "Kòf Kreye" }, "viewAccount": { - "message": "Wè Kont" + "message": "Wè Kont" }, "viewOnEtherscan": { - "message": "Wè sou DEXscan" + "message": "Wè sou DEXscan" }, "visitWebSite": { - "message": "Vizite sit entènèt nou an" + "message": "Vizite sit entènèt nou an" }, "warning": { - "message": "Avètisman" + "message": "Avètisman" }, "welcomeBack": { - "message": "Bon retou!" + "message": "Bon retou!" }, "welcomeBeta": { - "message": "Byenveni nan MetaMask Beta" + "message": "Byenveni nan DekuSan Beta" }, "whatsThis": { - "message": "Kisa sa ye?" + "message": "Kisa sa ye?" }, "youNeedToAllowCameraAccess": { - "message": "Ou bezwen bay kamera aksè pou sèvi ak fonksyon sa." + "message": "Ou bezwen bay kamera aksè pou sèvi ak fonksyon sa." }, "yourSigRequested": { - "message": "Yo mande siyati ou" + "message": "Yo mande siyati ou" }, "youSign": { - "message": "Ou ap siyen kounya" + "message": "Ou ap siyen kounya" }, "yourPrivateSeedPhrase": { - "message": "Seed fraz prive ou a" + "message": "Seed fraz prive ou a" } -} +}
\ No newline at end of file diff --git a/app/_locales/it/messages.json b/app/_locales/it/messages.json index 7727e914..1998d34d 100644 --- a/app/_locales/it/messages.json +++ b/app/_locales/it/messages.json @@ -90,11 +90,11 @@ "message": "Importo + Gas" }, "appDescription": { - "message": "Dexon Browser Extension", + "message": "DEXON Browser Extension", "description": "La descrizione dell'applicazione" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "Il nome dell'applicazione" }, "approve": { @@ -147,7 +147,7 @@ "message": "Il tuo Browser non è supportato..." }, "builtInCalifornia": { - "message": "Dex San è progettato e costruito in California." + "message": "DekuSan è progettato e costruito in California." }, "buy": { "message": "Compra" @@ -156,7 +156,7 @@ "message": "Compra su Coinbase" }, "buyCoinbaseExplainer": { - "message": "Coinbase è il servizio più popolare al mondo per comprare e vendere Bitcoin, Dexon e Litecoin." + "message": "Coinbase è il servizio più popolare al mondo per comprare e vendere Bitcoin, DEXON e Litecoin." }, "bytes": { "message": "Bytes" @@ -316,10 +316,10 @@ "message": "Precisione Decimali" }, "defaultNetwork": { - "message": "La rete predefinita per transazioni in DEX è la Rete Dexon Principale." + "message": "La rete predefinita per transazioni in DEX è la Rete DEXON Principale." }, "denExplainer": { - "message": "Il DEN è il tuo archivio crittato con password dentro Dex San." + "message": "Il DEN è il tuo archivio crittato con password dentro DekuSan." }, "deposit": { "message": "Deposita" @@ -347,7 +347,7 @@ "message": "Deposita con ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Se possiedi altre criptomonete, puoi scambiare e depositare DEX direttamente nel tuo portafoglio Dex San. Nessun account richiesto." + "message": "Se possiedi altre criptomonete, puoi scambiare e depositare DEX direttamente nel tuo portafoglio DekuSan. Nessun account richiesto." }, "details": { "message": "Dettagli" @@ -546,7 +546,7 @@ "message": "Importa Account" }, "importAccountMsg": { - "message":" Gli account importati non saranno associati alla frase seed originariamente creata con Dex San. Impara di più sugli account importati " + "message":" Gli account importati non saranno associati alla frase seed originariamente creata con DekuSan. Impara di più sugli account importati " }, "importAnAccount": { "message": "Importa un account" @@ -657,7 +657,7 @@ "message": "le frasi seed hanno solo lettere minuscole" }, "mainnet": { - "message": "Rete Dexon Principale" + "message": "Rete DEXON Principale" }, "menu": { "message": "Menu" @@ -666,7 +666,7 @@ "message": "Messaggio" }, "metamaskDescription": { - "message": "Dex San è una cassaforte sicura per identità su Dexon." + "message": "DekuSan è una cassaforte sicura per identità su Dexon." }, "metamaskSeedWords": { "message": "Parole Seed di MetaMask" @@ -684,7 +684,7 @@ "message": "Devi selezionare almeno un token." }, "needEtherInWallet": { - "message": "Per interagire con applicazioni decentralizzate con Dex San, devi possedere DEX nel tuo portafoglio." + "message": "Per interagire con applicazioni decentralizzate con DekuSan, devi possedere DEX nel tuo portafoglio." }, "needImportFile": { "message": "Devi selezionare un file da importare.", @@ -936,7 +936,7 @@ "message": "Pronto a Connetterti?" }, "rinkeby": { - "message": "Rete di test Rinkeby" + "message": "Rete di test DEXON" }, "ropsten": { "message": "Rete di test Ropsten" @@ -1161,7 +1161,7 @@ "message": "Simbolo Token" }, "tokenWarning1": { - "message": "Tieni traccia dei token che hai acquistato con il tuo account Dex San. Se hai acquistato token con un account diverso, quei token non appariranno qui." + "message": "Tieni traccia dei token che hai acquistato con il tuo account DekuSan. Se hai acquistato token con un account diverso, quei token non appariranno qui." }, "total": { "message": "Totale" @@ -1219,7 +1219,7 @@ "description": "Seguito da un link (qui) per vedere il bilancio dei token" }, "twelveWords": { - "message": "Queste 12 parole sono l'unico modo per ripristinare i tuoi account Dex San. \nSalvale in un posto sicuro e segreto." + "message": "Queste 12 parole sono l'unico modo per ripristinare i tuoi account DekuSan. \nSalvale in un posto sicuro e segreto." }, "typePassword": { "message": "Inserisci Password" @@ -1228,7 +1228,7 @@ "message": "Benvenuto alla nuova interfaccia (Beta)" }, "uiWelcomeMessage": { - "message": "Stai utilizzanto la nuova interfaccia di Dex San. Guarda in giro, prova nuove funzionalità come inviare token, e facci sapere se hai dei problemi." + "message": "Stai utilizzanto la nuova interfaccia di DekuSan. Guarda in giro, prova nuove funzionalità come inviare token, e facci sapere se hai dei problemi." }, "unavailable": { "message": "Non Disponibile" @@ -1307,7 +1307,7 @@ "message": "Benvenuto nella Beta di MetaMask" }, "welcomeBeta": { - "message": "Benvenuto nella Beta di Dex San" + "message": "Benvenuto nella Beta di DekuSan" }, "whatsThis": { "message": "Cos'è questo?" diff --git a/app/_locales/ja/messages.json b/app/_locales/ja/messages.json index da6f92fb..acc1d0f2 100644 --- a/app/_locales/ja/messages.json +++ b/app/_locales/ja/messages.json @@ -79,7 +79,7 @@ "description": "The description of the application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "The name of the application" }, "attemptingConnect": { @@ -211,7 +211,7 @@ "message": "デフォルトのEther送受信ネットワークはメインネットです。" }, "denExplainer": { - "message": "DENとは、あなたのパスワードが暗号化されたDex San内のストレージです。" + "message": "DENとは、あなたのパスワードが暗号化されたDekuSan内のストレージです。" }, "deposit": { "message": "振込" @@ -239,7 +239,7 @@ "message": "ShapeShiftで交換" }, "depositShapeShiftExplainer": { - "message": "他の暗号通貨とEtherを交換して、Dex Sanのウォレットへ入金できます。アカウント作成は不要です。" + "message": "他の暗号通貨とEtherを交換して、DekuSanのウォレットへ入金できます。アカウント作成は不要です。" }, "details": { "message": "詳細" @@ -251,7 +251,7 @@ "message": "Etherを直接入金" }, "directDepositEtherExplainer": { - "message": "既にEtherをお持ちなら、Dex Sanの新しいウォレットにEtherを送信することができます。" + "message": "既にEtherをお持ちなら、DekuSanの新しいウォレットにEtherを送信することができます。" }, "done": { "message": "完了" @@ -360,7 +360,7 @@ "message": "アカウントのインポート" }, "importAccountMsg": { - "message":"追加したアカウントはDex Sanのアカウントパスフレーズとは関連付けられません。インポートしたアカウントについての詳細は" + "message":"追加したアカウントはDekuSanのアカウントパスフレーズとは関連付けられません。インポートしたアカウントについての詳細は" }, "importAnAccount": { "message": "アカウントをインポート" @@ -395,7 +395,7 @@ "description": "format for importing an account" }, "keepTrackTokens": { - "message": "Dex Sanアカウントで入手したトークンを検索できます。" + "message": "DekuSanアカウントで入手したトークンを検索できます。" }, "kovan": { "message": "Kovanテストネットワーク" @@ -456,7 +456,7 @@ "message": "一つ以上のトークンを選択してください。" }, "needEtherInWallet": { - "message": "Dex Sanで分散型アプリケーションを使用するためには、このウォレットにEtherが必要です。" + "message": "DekuSanで分散型アプリケーションを使用するためには、このウォレットにEtherが必要です。" }, "needImportFile": { "message": "インポートするファイルを選択してください。", @@ -602,7 +602,7 @@ "message": "元に戻す" }, "rinkeby": { - "message": "Rinkebyテストネットワーク" + "message": "DEXONテストネットワーク" }, "ropsten": { "message": "Ropstenテストネットワーク" @@ -729,7 +729,7 @@ "message": "トークンシンボル" }, "tokenWarning1": { - "message": "Dex Sanのアカウントで取得したアカウントのみ追加できます。他のアカウントを使用して取得したトークンは、カスタムトークンを使用してください。" + "message": "DekuSanのアカウントで取得したアカウントのみ追加できます。他のアカウントを使用して取得したトークンは、カスタムトークンを使用してください。" }, "total": { "message": "合計" @@ -757,7 +757,7 @@ "message": "新UIへようこそ! (ベータ版)" }, "uiWelcomeMessage": { - "message": "現在、Dex San の新しいUIをお使いになっています。トークン送信など、新たな機能を試してみましょう! 何か問題があればご報告ください。" + "message": "現在、DekuSan の新しいUIをお使いになっています。トークン送信など、新たな機能を試してみましょう! 何か問題があればご報告ください。" }, "unavailable": { "message": "有効ではありません。" @@ -797,7 +797,7 @@ "message": "MetaMask ベータ版へようこそ!" }, "welcomeBeta": { - "message": "Dex San ベータ版へようこそ!" + "message": "DekuSan ベータ版へようこそ!" }, "whatsThis": { "message": "この機能について" diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index 8c6a89e5..714e2e6b 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -927,7 +927,7 @@ "message": "접속 준비되었나요?" }, "rinkeby": { - "message": "Rinkeby 테스트넷" + "message": "DEXON 테스트넷" }, "ropsten": { "message": "Ropsten 테스트넷" @@ -936,7 +936,7 @@ "message": "사용자 정의 RPC" }, "connectingToTestnet": { - "message": "Rinkeby 테스트넷 접속중" + "message": "DEXON 테스트넷 접속중" }, "sampleAccountName": { "message": "예) 나의 새 계정", diff --git a/app/_locales/nl/messages.json b/app/_locales/nl/messages.json index 341704fb..f637d4db 100644 --- a/app/_locales/nl/messages.json +++ b/app/_locales/nl/messages.json @@ -75,11 +75,11 @@ "message": "Bedrag + gas" }, "appDescription": { - "message": "Dexon Browser-extensie", + "message": "DEXON Browser-extensie", "description": "De beschrijving van de applicatie" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "De naam van de applicatie" }, "attemptingConnect": { @@ -117,7 +117,7 @@ "message": "Lenen met Dharma (Beta)" }, "builtInCalifornia": { - "message": "Dex San is ontworpen en gebouwd in Californië." + "message": "DekuSan is ontworpen en gebouwd in Californië." }, "buy": { "message": "Kopen" @@ -126,7 +126,7 @@ "message": "Koop op Coinbase" }, "buyCoinbaseExplainer": { - "message": "Coinbase is 's werelds populairste manier om Bitcoin, Dexon en Litecoin te kopen en verkopen." + "message": "Coinbase is 's werelds populairste manier om Bitcoin, DEXON en Litecoin te kopen en verkopen." }, "cancel": { "message": "Annuleer" @@ -223,7 +223,7 @@ "message": "Het standaardnetwerk voor DEX-transacties is Main Net." }, "denExplainer": { - "message": "Uw DEN is uw wachtwoord-gecodeerde opslag binnen Dex San." + "message": "Uw DEN is uw wachtwoord-gecodeerde opslag binnen DekuSan." }, "deposit": { "message": "Storting" @@ -251,7 +251,7 @@ "message": "Stort met ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Als u andere cryptocurrencies bezit, kunt u DEX direct in uw Dex San-portemonnee ruilen en storten. Geen account nodig." + "message": "Als u andere cryptocurrencies bezit, kunt u DEX direct in uw DekuSan-portemonnee ruilen en storten. Geen account nodig." }, "details": { "message": "Details" @@ -396,7 +396,7 @@ "message": "Account importeren" }, "importAccountMsg": { - "message":" Geïmporteerde accounts worden niet gekoppeld aan de seedphrase van uw oorspronkelijk gemaakte Dex San-account. Meer informatie over geïmporteerde accounts" + "message":" Geïmporteerde accounts worden niet gekoppeld aan de seedphrase van uw oorspronkelijk gemaakte DekuSan-account. Meer informatie over geïmporteerde accounts" }, "importAnAccount": { "message": "Importeer een account" @@ -486,7 +486,7 @@ "message": "Bericht" }, "metamaskDescription": { - "message": "Dex San is een veilige identiteitskluis voor Dexon." + "message": "DekuSan is een veilige identiteitskluis voor Dexon." }, "min": { "message": "Minimum" @@ -498,7 +498,7 @@ "message": "Moet ten minste één token selecteren." }, "needEtherInWallet": { - "message": "Om te communiceren met gedecentraliseerde applicaties met Dex San, heb je DEX nodig in je portemonnee." + "message": "Om te communiceren met gedecentraliseerde applicaties met DekuSan, heb je DEX nodig in je portemonnee." }, "needImportFile": { "message": "U moet een bestand selecteren om te importeren.", @@ -644,7 +644,7 @@ "message": "terugkeren" }, "rinkeby": { - "message": "Rinkeby testnetwerk" + "message": "DEXON testnetwerk" }, "ropsten": { "message": "Ropsten testnetwerk" @@ -776,7 +776,7 @@ "message": "Token Symbol" }, "tokenWarning1": { - "message": "Houd de tokens bij die je hebt gekocht met je Dex San-account. Als je tokens met een ander account hebt gekocht, worden die tokens hier niet weergegeven." + "message": "Houd de tokens bij die je hebt gekocht met je DekuSan-account. Als je tokens met een ander account hebt gekocht, worden die tokens hier niet weergegeven." }, "total": { "message": "Totaal" @@ -798,7 +798,7 @@ "description": "Gevolgd door een link (hier) om tegensaldi te bekijken" }, "twelveWords": { - "message": "Deze 12 woorden zijn de enige manier om uw Dex San-accounts te herstellen.\nBewaar ze ergens veilig en geheim." + "message": "Deze 12 woorden zijn de enige manier om uw DekuSan-accounts te herstellen.\nBewaar ze ergens veilig en geheim." }, "typePassword": { "message": "Typ uw wachtwoord" @@ -807,7 +807,7 @@ "message": "Welkom bij de nieuwe gebruikersinterface (bèta)" }, "uiWelcomeMessage": { - "message": "U gebruikt nu de nieuwe gebruikersinterface van Dex San. Kijk rond, probeer nieuwe functies uit zoals het verzenden van tokens en laat ons weten of u problemen ondervindt." + "message": "U gebruikt nu de nieuwe gebruikersinterface van DekuSan. Kijk rond, probeer nieuwe functies uit zoals het verzenden van tokens en laat ons weten of u problemen ondervindt." }, "unavailable": { "message": "Niet beschikbaar" @@ -853,7 +853,7 @@ "message": "Welkom bij MetaMask" }, "welcomeBeta": { - "message": "Welkom bij Dex San Beta" + "message": "Welkom bij DekuSan Beta" }, "whatsThis": { "message": "Wat is dit?" diff --git a/app/_locales/ph/messages.json b/app/_locales/ph/messages.json index 4d94055d..0853bcad 100644 --- a/app/_locales/ph/messages.json +++ b/app/_locales/ph/messages.json @@ -69,11 +69,11 @@ "message": "Halaga + Gas" }, "appDescription": { - "message": "Dexon Browser Extension", + "message": "DEXON Browser Extension", "description": "Ang deskripsyon ng application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "Ang pangalan ng application" }, "attemptingConnect": { @@ -184,7 +184,7 @@ "message": "Ang default network para sa DEX transactions ay ang Main Net." }, "denExplainer": { - "message": "Ang iyong DEN ang nagsisilbing password-encrypted storage mo sa loob ng Dex San." + "message": "Ang iyong DEN ang nagsisilbing password-encrypted storage mo sa loob ng DekuSan." }, "deposit": { "message": "Deposito" @@ -212,7 +212,7 @@ "message": "I-deposito gamit ang ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Kung ikaw ay nagmamay-ari ng iba pang cryptocurrencies, pwede kang mag-trade at mag-deposito ng DEX diretso sa iyong Dex San wallet. Hindi mo na kailangan ng account." + "message": "Kung ikaw ay nagmamay-ari ng iba pang cryptocurrencies, pwede kang mag-trade at mag-deposito ng DEX diretso sa iyong DekuSan wallet. Hindi mo na kailangan ng account." }, "details": { "message": "Detalye" @@ -387,7 +387,7 @@ "message": "Loose" }, "mainnet": { - "message": "Main Dexon Network" + "message": "Main DEXON Network" }, "message": { "message": "Mensahe" @@ -399,7 +399,7 @@ "message": "Aking mga Account" }, "needEtherInWallet": { - "message": "Upang makipag-ugnayan sa decentralized applications gamit ang Dex San, kakailanganin mo ng DEX sa iyong wallet." + "message": "Upang makipag-ugnayan sa decentralized applications gamit ang DekuSan, kakailanganin mo ng DEX sa iyong wallet." }, "needImportFile": { "message": "Dapat kang pumili ng file para i-import.", @@ -515,7 +515,7 @@ "message": "Ibalik" }, "rinkeby": { - "message": "Rinkeby Test Network" + "message": "DEXON Test Network" }, "ropsten": { "message": "Ropsten Test Network" @@ -541,7 +541,7 @@ "message": "Magpadala ng Tokens" }, "sendTokensAnywhere": { - "message": "Magpadala ng Tokens sa sinumang may Dexon account" + "message": "Magpadala ng Tokens sa sinumang may DEXON account" }, "settings": { "message": "Mga Setting" @@ -615,7 +615,7 @@ "message": "Maligayang pagdating sa Bagong UI (Beta)" }, "uiWelcomeMessage": { - "message": "Ginagamit mo na ngayon ang bagong Dex San UI. I-explore at subukan ang mga bagong features tulad ng pagpapadala ng mga token, at ipaalam sa amin kung mayroon kang anumang mga isyu." + "message": "Ginagamit mo na ngayon ang bagong DekuSan UI. I-explore at subukan ang mga bagong features tulad ng pagpapadala ng mga token, at ipaalam sa amin kung mayroon kang anumang mga isyu." }, "unavailable": { "message": "Hindi Magagamit" diff --git a/app/_locales/pt/messages.json b/app/_locales/pt/messages.json index 334078b7..bc3231f6 100644 --- a/app/_locales/pt/messages.json +++ b/app/_locales/pt/messages.json @@ -79,7 +79,7 @@ "description": "A descrição da aplicação" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "Nome da aplicação" }, "attemptingConnect": { @@ -117,7 +117,7 @@ "message": "Pedir Empréstimo Com Dharma (Beta)" }, "builtInCalifornia": { - "message": "Dex San é desenhada e construída na California." + "message": "DekuSan é desenhada e construída na California." }, "buy": { "message": "Comprar" @@ -223,7 +223,7 @@ "message": "A rede pré definida para transações em DEX é a Main Net." }, "denExplainer": { - "message": " DEN é o armazenamento encriptado da sua palavra-passe no Dex San." + "message": " DEN é o armazenamento encriptado da sua palavra-passe no DekuSan." }, "deposit": { "message": "Depósito" @@ -251,7 +251,7 @@ "message": "Depositar com ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Se tem criptomoedas, pode trocar e depositar DEX diretamente na sua carteira Dex San. Não precisa de conta." + "message": "Se tem criptomoedas, pode trocar e depositar DEX diretamente na sua carteira DekuSan. Não precisa de conta." }, "details": { "message": "Detalhes" @@ -396,7 +396,7 @@ "message": "Importar Conta" }, "importAccountMsg": { - "message":"Contas importadas não irão ser associadas com a frase seed da conta criada originalmente pelo Dex San. Saiba mais sobre contas importadas." + "message":"Contas importadas não irão ser associadas com a frase seed da conta criada originalmente pelo DekuSan. Saiba mais sobre contas importadas." }, "importAnAccount": { "message": "Importar uma conta" @@ -486,7 +486,7 @@ "message": "Mensagem" }, "metamaskDescription": { - "message": "O Dex San é um lugar seguro para guardar a sua identidade em em Dexon." + "message": "O DekuSan é um lugar seguro para guardar a sua identidade em em Dexon." }, "min": { "message": "Mínimo" @@ -498,7 +498,7 @@ "message": "Deve escolher no mínimo 1 token." }, "needEtherInWallet": { - "message": "Para interagir com applicações descentralizadas usando Dex San tem de ter DEX na sua carteira." + "message": "Para interagir com applicações descentralizadas usando DekuSan tem de ter DEX na sua carteira." }, "needImportFile": { "message": "Deve selecionar um ficheiro para importar.", @@ -644,7 +644,7 @@ "message": "Reverter" }, "rinkeby": { - "message": "Rede de Teste Rinkeby" + "message": "Rede de Teste DEXON" }, "ropsten": { "message": "Rede de Teste Ropsten" @@ -776,7 +776,7 @@ "message": "Símbolo do Token" }, "tokenWarning1": { - "message": "Registe os tokens que comprou com a sua conta Dex San. Se comprou tokens utilizando uma conta diferente, esses tokens não irão aparecer aqui." + "message": "Registe os tokens que comprou com a sua conta DekuSan. Se comprou tokens utilizando uma conta diferente, esses tokens não irão aparecer aqui." }, "total": { "message": "Total" @@ -798,7 +798,7 @@ "description": "Seguido de um link (aqui) para ver o balanço dos seus tokens" }, "twelveWords": { - "message": "Estas 12 palavras são a única forma de recuperar as suas contas na Dex San.\nGuarde-as num local seguro e secreto." + "message": "Estas 12 palavras são a única forma de recuperar as suas contas na DekuSan.\nGuarde-as num local seguro e secreto." }, "typePassword": { "message": "Digite a sua Palavra-passe" @@ -807,7 +807,7 @@ "message": "Bem-vindo ao seu Novo UI (Beta)" }, "uiWelcomeMessage": { - "message": "Está agora a usar o novo UI da Dex San. Dê uma vista de olhos, experimenta as novas funcionalidades como enviar tokens e diga-nos se tiver algum problema." + "message": "Está agora a usar o novo UI da DekuSan. Dê uma vista de olhos, experimenta as novas funcionalidades como enviar tokens e diga-nos se tiver algum problema." }, "unavailable": { "message": "Indisponível" @@ -853,7 +853,7 @@ "message": "Bem-vindo ao MetaMask" }, "welcomeBeta": { - "message": "Bem-vindo ao Dex San Beta" + "message": "Bem-vindo ao DekuSan Beta" }, "whatsThis": { "message": "O que é isto?" diff --git a/app/_locales/ru/messages.json b/app/_locales/ru/messages.json index 540986ea..eb4f7db4 100644 --- a/app/_locales/ru/messages.json +++ b/app/_locales/ru/messages.json @@ -79,7 +79,7 @@ "description": "The description of the application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "The name of the application" }, "approved": { @@ -120,7 +120,7 @@ "message": "Взять в долг на Dharma (Beta)" }, "builtInCalifornia": { - "message": "Dex San спроектирован и разработан в Калифорнии." + "message": "DekuSan спроектирован и разработан в Калифорнии." }, "buy": { "message": "Купить" @@ -129,7 +129,7 @@ "message": "Купить на Coinbase" }, "buyCoinbaseExplainer": { - "message": "Биржа Coinbase – это наиболее популярный способ купить или продать Bitcoin, Dexon и Litecoin." + "message": "Биржа Coinbase – это наиболее популярный способ купить или продать Bitcoin, DEXON и Litecoin." }, "ok": { "message": "ОК" @@ -232,10 +232,10 @@ "message": "Количество десятичных разрядов" }, "defaultNetwork": { - "message": "Основная сеть Dexon – это сеть по умолчанию для DEX транзакций." + "message": "Основная сеть DEXON – это сеть по умолчанию для DEX транзакций." }, "denExplainer": { - "message": "DEN – это зашифрованное паролем хранилище внутри Dex San." + "message": "DEN – это зашифрованное паролем хранилище внутри DekuSan." }, "deposit": { "message": "Пополнить" @@ -263,7 +263,7 @@ "message": "Пополнить через ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Если у вас есть другие криптовалюты, вы можете торговать и пополнять DEX напрямую в ваш Dex San кошелек. Нет необходимости в счете." + "message": "Если у вас есть другие криптовалюты, вы можете торговать и пополнять DEX напрямую в ваш DekuSan кошелек. Нет необходимости в счете." }, "details": { "message": "Детали" @@ -411,7 +411,7 @@ "message": "Импортировать счет" }, "importAccountMsg": { - "message":" Импортированные счета не будут ассоциированы с вашей ключевой фразой, созданной Dex San. Узнать больше про импорт счетов " + "message":" Импортированные счета не будут ассоциированы с вашей ключевой фразой, созданной DekuSan. Узнать больше про импорт счетов " }, "importAnAccount": { "message": "Импортировать аккаунт" @@ -458,7 +458,7 @@ "description": "format for importing an account" }, "keepTrackTokens": { - "message": "Следите за купленными вами токенами с помощью аккаунта Dex San." + "message": "Следите за купленными вами токенами с помощью аккаунта DekuSan." }, "kovan": { "message": "Тестовая сеть Kovan" @@ -513,7 +513,7 @@ "message": "Сообщение" }, "metamaskDescription": { - "message": "Dex San – безопасный кошелек для Dexon." + "message": "DekuSan – безопасный кошелек для Dexon." }, "min": { "message": "Минимум" @@ -525,7 +525,7 @@ "message": "Необходимо выбрать как минимум 1 токен." }, "needEtherInWallet": { - "message": "Для взаимодействия с децентрализованными приложениями с помощью Dex San нужен DEX в вашем кошельке." + "message": "Для взаимодействия с децентрализованными приложениями с помощью DekuSan нужен DEX в вашем кошельке." }, "needImportFile": { "message": "Вы должны выбрать файл для импорта.", @@ -680,7 +680,7 @@ "message": "Восстановить" }, "rinkeby": { - "message": "Тестовая сеть Rinkeby" + "message": "Тестовая сеть DEXON" }, "ropsten": { "message": "Тестовая сеть Ropsten" @@ -698,7 +698,7 @@ "message": "Соединение с тестовой сетью Kovan" }, "connectingToTestnet": { - "message": "Соединение с тестовой сетью Rinkeby" + "message": "Соединение с тестовой сетью DEXON" }, "connectingToUnknown": { "message": "Соединение с неизвестной сетью" @@ -751,7 +751,7 @@ "message": "Отправить токены" }, "onlySendToEtherAddress": { - "message": "Отправляйте ETH только на Dexon адреса." + "message": "Отправляйте ETH только на DEXON адреса." }, "searchTokens": { "message": "Поиск токенов" @@ -851,7 +851,7 @@ "message": "Символ токена" }, "tokenWarning1": { - "message": "Отслеживаются токены, купленные на счет в Dex San. Если вы купили токены, используя другой счет, такие токены не будут тут отображены." + "message": "Отслеживаются токены, купленные на счет в DekuSan. Если вы купили токены, используя другой счет, такие токены не будут тут отображены." }, "total": { "message": "Всего" @@ -873,7 +873,7 @@ "description": "Followed by a link (here) to view token balances" }, "twelveWords": { - "message": "Эти 12 слов являются единственной возможностью восстановить ваши счета в Dex San.\nСохраните из в надежном секретном месте." + "message": "Эти 12 слов являются единственной возможностью восстановить ваши счета в DekuSan.\nСохраните из в надежном секретном месте." }, "typePassword": { "message": "Введите пароль" @@ -882,7 +882,7 @@ "message": "Новый интерфейс (Beta)" }, "uiWelcomeMessage": { - "message": "Теперь вы используете новый интерфейс пользователя Dex San. Осмотритесь, попробуйте новые функции, например, отправить токены и, если возникнут проблемы, сообщите нам." + "message": "Теперь вы используете новый интерфейс пользователя DekuSan. Осмотритесь, попробуйте новые функции, например, отправить токены и, если возникнут проблемы, сообщите нам." }, "unapproved": { "message": "Не одобрена" @@ -931,7 +931,7 @@ "message": "Добро пожаловать в MetaMask" }, "welcomeBeta": { - "message": "Добро пожаловать в Dex San Beta" + "message": "Добро пожаловать в DekuSan Beta" }, "whatsThis": { "message": "Что это?" diff --git a/app/_locales/sl/messages.json b/app/_locales/sl/messages.json index 86ab25a8..f606b2d1 100644 --- a/app/_locales/sl/messages.json +++ b/app/_locales/sl/messages.json @@ -87,11 +87,11 @@ "message": "Znesek + Gas" }, "appDescription": { - "message": "Denarnica za Dexon v brskalniku", + "message": "Denarnica za DEXON v brskalniku", "description": "The description of the application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "The name of the application" }, "approve": { @@ -144,7 +144,7 @@ "message": "Vaš brskalnik ni podptrt ..." }, "builtInCalifornia": { - "message": "Dex San je ustvarjen v Kaliforniji." + "message": "DekuSan je ustvarjen v Kaliforniji." }, "buy": { "message": "Kupi" @@ -319,7 +319,7 @@ "message": "Privzeto omrežje za transkacije je glavno omrežje." }, "denExplainer": { - "message": "DEN je vaša šifrirana shramba v Dex Sanu." + "message": "DEN je vaša šifrirana shramba v DekuSanu." }, "deposit": { "message": "Vplačaj" @@ -347,7 +347,7 @@ "message": "Vplačilo z ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Če imate druge kriptovalute, lahko vpačate ether neposredno v Dex San. Brez računov." + "message": "Če imate druge kriptovalute, lahko vpačate ether neposredno v DekuSan. Brez računov." }, "details": { "message": "Podrobnosti" @@ -359,7 +359,7 @@ "message": "Neposredno vplačilo ehera" }, "directDepositEtherExplainer": { - "message": "Če že imate ether, ga lahko najhitreje dobite v Dex San z direktnim vplačilom." + "message": "Če že imate ether, ga lahko najhitreje dobite v DekuSan z direktnim vplačilom." }, "done": { "message": "Končano" @@ -672,7 +672,7 @@ "message": "Sporočilo" }, "metamaskDescription": { - "message": "Dex San je varen identitetni sklad za Dexon." + "message": "DekuSan je varen identitetni sklad za Dexon." }, "metamaskSeedWords": { "message": "Seed Words" @@ -693,7 +693,7 @@ "message": "Izbran mora biti vsaj 1 žeton." }, "needEtherInWallet": { - "message": "Za interakcijo z decentraliziranimi aplikacijami, ki uporabljajo Dex San, boste v svoji denarnici potrebovali eter." + "message": "Za interakcijo z decentraliziranimi aplikacijami, ki uporabljajo DekuSan, boste v svoji denarnici potrebovali eter." }, "needImportFile": { "message": "Za uvoz morate izbrati datoteko.", @@ -972,7 +972,7 @@ "message": "Pripravljeni na povezovanje?" }, "rinkeby": { - "message": "Testno omrežje Rinkeby" + "message": "Testno omrežje DEXON" }, "ropsten": { "message": "Testno omrežje Ropsten" @@ -1067,7 +1067,7 @@ "message": "Če obstoječih Ledger ne vidite, poskusite izbrati \"Legacy (MEW / MyCrypto)\"" }, "sendTokensAnywhere": { - "message": "Pošljite žetone vsem, ki imajo Dexon račun" + "message": "Pošljite žetone vsem, ki imajo DEXON račun" }, "settings": { "message": "Nastavitve" @@ -1197,7 +1197,7 @@ "message": "Simbol žetona" }, "tokenWarning1": { - "message": "Spremljajte žetone, ki ste jih kupili s svojim Dex San računom. Če ste kupili žetone z drugačnim računom, ti žetoni ne bodo prikazani tukaj." + "message": "Spremljajte žetone, ki ste jih kupili s svojim DekuSan računom. Če ste kupili žetone z drugačnim računom, ti žetoni ne bodo prikazani tukaj." }, "total": { "message": "Skupno" @@ -1261,7 +1261,7 @@ "message": "Poskusi znova" }, "twelveWords": { - "message": "Edini način za obnovitev Dex San računa, je teh 12 besed.\nShranite jih na varno in skrivno mesto." + "message": "Edini način za obnovitev DekuSan računa, je teh 12 besed.\nShranite jih na varno in skrivno mesto." }, "typePassword": { "message": "Vnesite vaše MetaMask geslo" @@ -1270,7 +1270,7 @@ "message": "Dobrodošli v nov UI (Beta)" }, "uiWelcomeMessage": { - "message": "Zdaj uporabljate novi Dex San uporabniški vmesnik. Razglejte se, preizkusite nove funkcije, kot so pošiljanje žetonov, in nas obvestite, če imate kakšne težave." + "message": "Zdaj uporabljate novi DekuSan uporabniški vmesnik. Razglejte se, preizkusite nove funkcije, kot so pošiljanje žetonov, in nas obvestite, če imate kakšne težave." }, "unavailable": { "message": "Ni na voljo" @@ -1343,7 +1343,7 @@ "message": "Opozorilo" }, "welcomeBeta": { - "message": "Dobrodošli v Dex San Beta" + "message": "Dobrodošli v DekuSan Beta" }, "whatsThis": { "message": "Kaj je to?" diff --git a/app/_locales/th/messages.json b/app/_locales/th/messages.json index 38d39709..a17d5f03 100644 --- a/app/_locales/th/messages.json +++ b/app/_locales/th/messages.json @@ -79,7 +79,7 @@ "description": "The description of the application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "The name of the application" }, "attemptingConnect": { @@ -117,7 +117,7 @@ "message": "ยืมด้วย Dharma (เบต้า)" }, "builtInCalifornia": { - "message": "Dex San ออกแบบและพัฒนาที่แคลิฟอร์เนีย" + "message": "DekuSan ออกแบบและพัฒนาที่แคลิฟอร์เนีย" }, "buy": { "message": "ซื้อ" @@ -223,7 +223,7 @@ "message": "ค่าเริ่มต้นของเครือข่ายสำหรับทำรายการธุรกรรมอีเธอร์คือ Main Net" }, "denExplainer": { - "message": "DEN ของคุณคือตัวเก็บข้อมูลที่เข้ารหัสไว้ด้วยรหัสผ่านของคุณภายใน Dex San " + "message": "DEN ของคุณคือตัวเก็บข้อมูลที่เข้ารหัสไว้ด้วยรหัสผ่านของคุณภายใน DekuSan " }, "deposit": { "message": "ฝาก" @@ -251,7 +251,7 @@ "message": "ฝากด้วย ShapeShift" }, "depositShapeShiftExplainer": { - "message": "ถ้ามีเงินสกุลอื่นอยู่ก็สามารถแลกเงินและฝากเป็นอีเธอร์ได้โดยตรงเข้ากระเป๋า Dex San ได้เลยไม่ต้องสมัครบัญชี" + "message": "ถ้ามีเงินสกุลอื่นอยู่ก็สามารถแลกเงินและฝากเป็นอีเธอร์ได้โดยตรงเข้ากระเป๋า DekuSan ได้เลยไม่ต้องสมัครบัญชี" }, "details": { "message": "รายละเอียด" @@ -486,7 +486,7 @@ "message": "ข้อความ" }, "metamaskDescription": { - "message": "Dex San คือที่เก็บตัวตนนิรภัยสำหรับอีเธอเรียม" + "message": "DekuSan คือที่เก็บตัวตนนิรภัยสำหรับอีเธอเรียม" }, "min": { "message": "ขั้นต่ำ" @@ -498,7 +498,7 @@ "message": "ต้องเลือกอย่างน้อย 1 โทเค็น" }, "needEtherInWallet": { - "message": "คุณจะต้องมีอีเธอร์ในกระเป๋าเงินของคุณในการใช้งานกับแอพพลิเคชันแบบกระจายด้วย Dex San" + "message": "คุณจะต้องมีอีเธอร์ในกระเป๋าเงินของคุณในการใช้งานกับแอพพลิเคชันแบบกระจายด้วย DekuSan" }, "needImportFile": { "message": "คุณต้องเลือกไฟล์ที่จะนำเข้า", @@ -644,7 +644,7 @@ "message": "ย้อนกลับ" }, "rinkeby": { - "message": "เครือข่ายทดสอบ Rinkeby" + "message": "เครือข่ายทดสอบ DEXON" }, "ropsten": { "message": "เครือข่ายทดสอบ Ropsten" @@ -776,7 +776,7 @@ "message": "สัญลักษณ์ประจำตัว" }, "tokenWarning1": { - "message": "ติดตามโทเค็นที่คุณซื้อด้วยบัญชี Dex San ของคุณ หากคุณซื้อโทเค็นโดยใช้บัญชีอื่นโทเค็นเหล่านั้นจะไม่ปรากฏที่นี่" + "message": "ติดตามโทเค็นที่คุณซื้อด้วยบัญชี DekuSan ของคุณ หากคุณซื้อโทเค็นโดยใช้บัญชีอื่นโทเค็นเหล่านั้นจะไม่ปรากฏที่นี่" }, "total": { "message": "รวม" @@ -798,7 +798,7 @@ "description": "Followed by a link (here) to view token balances" }, "twelveWords": { - "message": "กลุ่มคำ 12 คำเหล่านี้เป็นวิธีเดียวที่จะกู้คืนบัญชี Dex San ของคุณ \n กรุณาเก็บไว้ในที่ปลอดภัยและเก็บเป็นความลับ" + "message": "กลุ่มคำ 12 คำเหล่านี้เป็นวิธีเดียวที่จะกู้คืนบัญชี DekuSan ของคุณ \n กรุณาเก็บไว้ในที่ปลอดภัยและเก็บเป็นความลับ" }, "typePassword": { "message": "พิมพ์รหัสผ่านของคุณ" @@ -807,7 +807,7 @@ "message": "ยินดีต้อนรับสู่หน้าตาใหม่ (เบต้า)" }, "uiWelcomeMessage": { - "message": "ขณะนี้คุณใช้งาน Dex San หน้าตาใหม่แล้ว ลองใช้ความสามรถใหม่ ๆ เช่นการส่งโทเค็นและหากพบปัญหากรุณาแจ้งให้เราทราบ" + "message": "ขณะนี้คุณใช้งาน DekuSan หน้าตาใหม่แล้ว ลองใช้ความสามรถใหม่ ๆ เช่นการส่งโทเค็นและหากพบปัญหากรุณาแจ้งให้เราทราบ" }, "unavailable": { "message": "ใช้งานไม่ได้" @@ -853,7 +853,7 @@ "message": "ยินดีต้อนรับสู่ MetaMask เบต้า" }, "welcomeBeta": { - "message": "ยินดีต้อนรับสู่ Dex San เบต้า" + "message": "ยินดีต้อนรับสู่ DekuSan เบต้า" }, "whatsThis": { "message": "นี่คืออะไร?" diff --git a/app/_locales/tr/messages.json b/app/_locales/tr/messages.json index 3b234f64..bb83da48 100644 --- a/app/_locales/tr/messages.json +++ b/app/_locales/tr/messages.json @@ -30,11 +30,11 @@ "message": "Tutar + Gas" }, "appDescription": { - "message": "Dexon Tarayıcı Uzantısı", + "message": "DEXON Tarayıcı Uzantısı", "description": "Uygulama açıklaması" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "Uygulama ismi" }, "approved": { @@ -75,7 +75,7 @@ "message": "Dharma (Beta) ile ödünç al" }, "builtInCalifornia": { - "message": "Dex San California'da tasarlandı ve yaratıldı" + "message": "DekuSan California'da tasarlandı ve yaratıldı" }, "buy": { "message": "Satın al" @@ -190,7 +190,7 @@ "message": "Ether işlemleri için varsayılan ağ Main Net." }, "denExplainer": { - "message": "DEN'iniz Dex San içersinde parola-şifrelenmiş deponuzdur." + "message": "DEN'iniz DekuSan içersinde parola-şifrelenmiş deponuzdur." }, "deposit": { "message": "Yatır" @@ -218,7 +218,7 @@ "message": "ShapeShift ile yatır" }, "depositShapeShiftExplainer": { - "message": "Eğer başka kripto paralara sahipseniz, Dex San cüzdanınıza direk olarak DEX yatırabilirsiniz. Hesaba gerek yoktur." + "message": "Eğer başka kripto paralara sahipseniz, DekuSan cüzdanınıza direk olarak DEX yatırabilirsiniz. Hesaba gerek yoktur." }, "details": { "message": "Ayrıntılar" @@ -372,7 +372,7 @@ "message": "Hesap Al" }, "importAccountMsg": { - "message":" Alınan hesaplar orjinal kaynakifadenizle yarattığınız Dex San hesabınızla ilişkilendirilmez. Alınan hesaplar ile ilgili daha fazla bilgi edinin " + "message":" Alınan hesaplar orjinal kaynakifadenizle yarattığınız DekuSan hesabınızla ilişkilendirilmez. Alınan hesaplar ile ilgili daha fazla bilgi edinin " }, "importAnAccount": { "message": "Hesap al" @@ -419,7 +419,7 @@ "description": "Hesap alımı için düzenle" }, "keepTrackTokens": { - "message": "Dex San hesabınızla satın aldığınız jetonların kaydını tutun." + "message": "DekuSan hesabınızla satın aldığınız jetonların kaydını tutun." }, "kovan": { "message": "Kovan Test Ağı" @@ -468,13 +468,13 @@ "message": "kaynak kelimeleri sadece küçük harflerden oluşabilir." }, "mainnet": { - "message": "Main Dexon Ağı" + "message": "Main DEXON Ağı" }, "message": { "message": "Mesaj" }, "metamaskDescription": { - "message": "Dex San Dexon için güvenli bir kimlik kasasıdır." + "message": "DekuSan DEXON için güvenli bir kimlik kasasıdır." }, "min": { "message": "Minimum" @@ -486,7 +486,7 @@ "message": "En az bir jeton seçilmeli" }, "needEtherInWallet": { - "message": "Dex San kullanarak merkezi olamayan uygulamalarla etkileşmek için cüzdanınızda DEX bulunmalıdır." + "message": "DekuSan kullanarak merkezi olamayan uygulamalarla etkileşmek için cüzdanınızda DEX bulunmalıdır." }, "needImportFile": { "message": "Almak için bir dosya seçmelisiniz.", @@ -641,7 +641,7 @@ "message": "Geri döndür" }, "rinkeby": { - "message": "Rinkeby Test Ağı" + "message": "DEXON Test Ağı" }, "ropsten": { "message": "Ropsten Test Ağı" @@ -650,7 +650,7 @@ "message": "Geçerli RPC" }, "connectingToMainnet": { - "message": "Main Dexon Ağına bağlanıyor" + "message": "Main DEXON Ağına bağlanıyor" }, "connectingToRopsten": { "message": "Ropsten Test Ağına bağlanıyor" @@ -659,7 +659,7 @@ "message": "Kovan Test Ağına bağlanıyor" }, "connectingToTestnet": { - "message": "Rinkeby Test Ağına bağlanıyor" + "message": "DEXON Test Ağına bağlanıyor" }, "connectingToUnknown": { "message": "Bilinmeyen Ağa bağlanıyor" @@ -718,13 +718,13 @@ "message": "Jeton Gönder" }, "onlySendToEtherAddress": { - "message": "Dexon adresine sadece ETH gönder." + "message": "DEXON adresine sadece ETH gönder." }, "searchTokens": { "message": "Jeton ara" }, "sendTokensAnywhere": { - "message": "Dexon hesabı olan birine Jeton gönder" + "message": "DEXON hesabı olan birine Jeton gönder" }, "settings": { "message": "Ayarlar" @@ -818,7 +818,7 @@ "message": "Jeton Sembolü" }, "tokenWarning1": { - "message": "Dex San hesabınızla aldığınız jetonların kaydını tutun. Başka bir hesapla jetonlar satın aldıysanız, o jetonlar burada gözükmeyecektir." + "message": "DekuSan hesabınızla aldığınız jetonların kaydını tutun. Başka bir hesapla jetonlar satın aldıysanız, o jetonlar burada gözükmeyecektir." }, "total": { "message": "Toplam" @@ -843,7 +843,7 @@ "description": "Jeton bakiyelerini görmek için bir link (burası) ile takip ediliyor" }, "twelveWords": { - "message": "Dex San hesaplarınızı geri getirmenin tek yolu bu 12 kelimedir.\nBu kelimeleri güvenli ve gizli bir yerde saklayın." + "message": "DekuSan hesaplarınızı geri getirmenin tek yolu bu 12 kelimedir.\nBu kelimeleri güvenli ve gizli bir yerde saklayın." }, "typePassword": { "message": "Parolanızı girin" @@ -852,7 +852,7 @@ "message": "Yeni UI (Beta)'ya hoşgeldiniz" }, "uiWelcomeMessage": { - "message": "Şu anda yeni Dex San UI kullanmaktasınız. Gözatın, jeton gönderme gibi yeni özellikleri deneyin ve herhangi bir sorunlar karşılaşırsanız bize haber verin" + "message": "Şu anda yeni DekuSan UI kullanmaktasınız. Gözatın, jeton gönderme gibi yeni özellikleri deneyin ve herhangi bir sorunlar karşılaşırsanız bize haber verin" }, "unapproved": { "message": "Onaylanmadı" @@ -898,7 +898,7 @@ "message": "Uyarı" }, "welcomeBeta": { - "message": "Dex San Beta'ya Hoşgeldiniz" + "message": "DekuSan Beta'ya Hoşgeldiniz" }, "whatsThis": { "message": "Bu nedir?" diff --git a/app/_locales/vi/messages.json b/app/_locales/vi/messages.json index a13a0fcc..b28b6a58 100644 --- a/app/_locales/vi/messages.json +++ b/app/_locales/vi/messages.json @@ -70,11 +70,11 @@ }, "appDescription": { "description": "Mô tả phần mềm", - "message": "Tính năng Dexon cho trình duyệt" + "message": "Tính năng DEXON cho trình duyệt" }, "appName": { "description": "Tên phần mềm", - "message": "Dex San" + "message": "DekuSan" }, "attemptingConnect": { "message": "Đang kết nối đến blockchain." @@ -184,7 +184,7 @@ "message": "Mạng lưới mặc định dùng cho các giao dịch DEX là Main Net (tiền ETH thật)." }, "denExplainer": { - "message": "Số DEN của bạn là mật khẩu đã được mã hóa và lưu trữ trong Dex San" + "message": "Số DEN của bạn là mật khẩu đã được mã hóa và lưu trữ trong DekuSan" }, "deposit": { "message": "Ký gửi/nạp tiền" @@ -212,7 +212,7 @@ "message": "Ký gửi với ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Nếu bạn sở hữu các đồng tiền điện tử khác, bạn có thể giao dịch và ký gửi DEX trực tiếp vào ví Dex San của bạn. Không cần tạo thêm tài khoản." + "message": "Nếu bạn sở hữu các đồng tiền điện tử khác, bạn có thể giao dịch và ký gửi DEX trực tiếp vào ví DekuSan của bạn. Không cần tạo thêm tài khoản." }, "details": { "message": "Chi tiết" @@ -387,7 +387,7 @@ "message": "Nới lỏng" }, "mainnet": { - "message": "Mạng Dexon MainNet (tiền ETH thật)" + "message": "Mạng DEXON MainNet (tiền ETH thật)" }, "message": { "message": "Tin nhắn" @@ -399,7 +399,7 @@ "message": "Tài khoản của tôi" }, "needEtherInWallet": { - "message": "Để tương tác với các ứng dụng phân tán bằng Dex San, bạn sẽ phải cần có DEX trong ví của bạn." + "message": "Để tương tác với các ứng dụng phân tán bằng DekuSan, bạn sẽ phải cần có DEX trong ví của bạn." }, "needImportFile": { "description": "Người dùng đang nhập một tài khoản và cần thêm tập tin để tiếp tục", @@ -515,7 +515,7 @@ "message": "Chuyển lại" }, "rinkeby": { - "message": "Mạng thử nghiệm Rinkeby" + "message": "Mạng thử nghiệm DEXON" }, "ropsten": { "message": "Mạng thử nghiệm Ropsten" @@ -615,7 +615,7 @@ "message": "Chào mừng bạn đến với giao diện mới (Beta)" }, "uiWelcomeMessage": { - "message": "Bạn đang sử dụng giao diện mới của Dex San. Chúng tôi khuyến khích bạn thử nghiệm và khám phá các tính năng mới như gửi token, và nếu bạn có gặp phải vấn đề gì khó khăn, xin hãy liên hệ ngay để chúng tôi có thể giúp đỡ bạn." + "message": "Bạn đang sử dụng giao diện mới của DekuSan. Chúng tôi khuyến khích bạn thử nghiệm và khám phá các tính năng mới như gửi token, và nếu bạn có gặp phải vấn đề gì khó khăn, xin hãy liên hệ ngay để chúng tôi có thể giúp đỡ bạn." }, "unavailable": { "message": "Không có sẵn" diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index b4462c08..a88fc3c0 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -78,11 +78,11 @@ "message": "数量 + Gas" }, "appDescription": { - "message": "Dexon 浏览器插件", + "message": "DEXON 浏览器插件", "description": "The description of the application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "The name of the application" }, "approved": { @@ -123,7 +123,7 @@ "message": "Borrow With Dharma (Beta)" }, "builtInCalifornia": { - "message": "Dex San在加利福尼亚设计和制造。" + "message": "DekuSan在加利福尼亚设计和制造。" }, "buy": { "message": "购买" @@ -244,7 +244,7 @@ "message": "默认以太坊交易网络为主网。" }, "denExplainer": { - "message": "你的 DEN 是存储在 Dex San 中的已加密密码。" + "message": "你的 DEN 是存储在 DekuSan 中的已加密密码。" }, "deposit": { "message": "存入" @@ -272,7 +272,7 @@ "message": "从 ShapeShift 存入" }, "depositShapeShiftExplainer": { - "message": "如果你拥有其他加密货币,你可以直接交易并存入 DEX 到你的 Dex San 钱包。 不需要帐户。" + "message": "如果你拥有其他加密货币,你可以直接交易并存入 DEX 到你的 DekuSan 钱包。 不需要帐户。" }, "details": { "message": "详情" @@ -432,7 +432,7 @@ "message": "导入账户" }, "importAccountMsg": { - "message":" Imported accounts will not be associated with your originally created Dex San account seedphrase. Learn more about imported accounts " + "message":" Imported accounts will not be associated with your originally created DekuSan account seedphrase. Learn more about imported accounts " }, "importAnAccount": { "message": "导入一个账户" @@ -479,7 +479,7 @@ "description": "format for importing an account" }, "keepTrackTokens": { - "message": "Keep track of the tokens you’ve bought with your Dex San account." + "message": "Keep track of the tokens you’ve bought with your DekuSan account." }, "kovan": { "message": "Kovan 测试网络" @@ -534,10 +534,10 @@ "message": "消息" }, "metamaskDescription": { - "message": "Dex San is a secure identity vault for Dexon." + "message": "DekuSan is a secure identity vault for Dexon." }, "metamaskSeedWords": { - "message": "Dex San 助记词" + "message": "DekuSan 助记词" }, "min": { "message": "最小" @@ -549,7 +549,7 @@ "message": "至少选择一种代币." }, "needEtherInWallet": { - "message": "使用 Dex San 与 DAPP 交互,需要你的钱包里有 DEX。" + "message": "使用 DekuSan 与 DAPP 交互,需要你的钱包里有 DEX。" }, "needImportFile": { "message": "必须选择导入一个文件。", @@ -716,7 +716,7 @@ "message": "还原" }, "rinkeby": { - "message": "Rinkeby 测试网络" + "message": "DEXON 测试网络" }, "ropsten": { "message": "Ropsten 测试网络" @@ -734,7 +734,7 @@ "message": "正在连接到Kovan测试网络" }, "connectingToTestnet": { - "message": "正在连接到Rinkeby测试网络" + "message": "正在连接到DEXON测试网络" }, "connectingToUnknown": { "message": "正在连接到未知网络" @@ -902,7 +902,7 @@ "message": "代币符号" }, "tokenWarning1": { - "message": "Keep track of the tokens you’ve bought with your Dex San account. If you bought tokens using a different account, those tokens will not appear here." + "message": "Keep track of the tokens you’ve bought with your DekuSan account. If you bought tokens using a different account, those tokens will not appear here." }, "total": { "message": "总量" @@ -927,7 +927,7 @@ "description": "Followed by a link (here) to view token balances" }, "twelveWords": { - "message": "这12个单词是恢复Dex San帐户的唯一方法。.\n将它们存放在安全和秘密的地方。." + "message": "这12个单词是恢复DekuSan帐户的唯一方法。.\n将它们存放在安全和秘密的地方。." }, "typePassword": { "message": "输入你的密码" @@ -936,7 +936,7 @@ "message": "欢迎使用新版界面 (Beta)" }, "uiWelcomeMessage": { - "message": "你现在正在使用新的 Dex San 界面。 尝试发送代币等新功能,有任何问题请告知我们。" + "message": "你现在正在使用新的 DekuSan 界面。 尝试发送代币等新功能,有任何问题请告知我们。" }, "unapproved": { "message": "未批准" @@ -982,7 +982,7 @@ "message": "警告" }, "welcomeBeta": { - "message": "欢迎使用 Dex San 测试版" + "message": "欢迎使用 DekuSan 测试版" }, "whatsThis": { "message": "这是什么?" diff --git a/app/_locales/zh_TW/messages.json b/app/_locales/zh_TW/messages.json index c5b16d1a..18d223a3 100644 --- a/app/_locales/zh_TW/messages.json +++ b/app/_locales/zh_TW/messages.json @@ -1,4 +1,5 @@ { +<<<<<<< HEAD "privacyMode": { "message": "隱私模式" }, @@ -43,6 +44,10 @@ }, "providerRequestInfo": { "message": "下面列出的域正在嘗試請求訪問Ethereum API,以便它可以與以太坊區塊鏈進行交互。在批准Ethereum訪問之前,請務必仔細檢查您是否在正確的站點上。" +======= + "aboutDekuSan": { + "message": "DekuSan 是 DEXON Foundation 官方開發的 DEXON 瀏覽器擴充插件。" +>>>>>>> Complete onboarding flow }, "accept": { "message": "接受" @@ -75,11 +80,11 @@ "message": "數額 + Gas" }, "appDescription": { - "message": "Dexon 瀏覽器擴充插件", + "message": "DEXON 瀏覽器擴充插件", "description": "The description of the application" }, "appName": { - "message": "Dex San", + "message": "DekuSan", "description": "The name of the application" }, "approved": { @@ -120,7 +125,7 @@ "message": "透過 Dharma (Beta) 借用" }, "builtInCalifornia": { - "message": "Dex San 是在加州設計製造." + "message": "DekuSan 是在加州設計製造." }, "buy": { "message": "購買" @@ -235,7 +240,7 @@ "message": "預設 DEX 交易網路為主網路(Main Net)。" }, "denExplainer": { - "message": "你的 DEN 是在你的 Dex San 中的加密密碼儲存庫。" + "message": "你的 DEN 是在你的 DekuSan 中的加密密碼儲存庫。" }, "deposit": { "message": "存入" @@ -263,7 +268,7 @@ "message": "從 ShapeShift 存入" }, "depositShapeShiftExplainer": { - "message": "如果你擁有其他加密貨幣,你可以直接交易並存入 DEX 到你的 Dex San 錢包。不需要開帳戶。" + "message": "如果你擁有其他加密貨幣,你可以直接交易並存入 DEX 到你的 DekuSan 錢包。不需要開帳戶。" }, "details": { "message": "詳情" @@ -407,7 +412,7 @@ "message": "你想怎麼存入 DEX?" }, "holdEther": { - "message": "Dex San 讓您能保存 ether 和代幣, 並成為您接觸分散式應用程式的途徑." + "message": "DekuSan 讓您能保存 ether 和代幣, 並成為您接觸分散式應用程式的途徑." }, "import": { "message": "導入", @@ -417,7 +422,7 @@ "message": "導入帳戶" }, "importAccountMsg": { - "message":" 匯入的帳戶與您原有 Dex San 帳戶的助憶詞並無關聯. 請查看與導入帳戶相關的資料 " + "message":" 匯入的帳戶與您原有 DekuSan 帳戶的助憶詞並無關聯. 請查看與導入帳戶相關的資料 " }, "importAnAccount": { "message": "導入一個帳戶" @@ -464,7 +469,7 @@ "description": "format for importing an account" }, "keepTrackTokens": { - "message": "持續追蹤您 Dex San 帳戶中的代幣。" + "message": "持續追蹤您 DekuSan 帳戶中的代幣。" }, "kovan": { "message": "Kovan 測試網路" @@ -507,7 +512,7 @@ "message": "登出" }, "loose": { - "message": "非 Dex San 帳號" + "message": "非 DekuSan 帳號" }, "loweCaseWords": { "message": "助憶詞僅包含小寫字元" @@ -519,7 +524,7 @@ "message": "訊息" }, "metamaskDescription": { - "message": "Dex San 是Dexon的安全身份識別金庫." + "message": "DekuSan 是Dexon的安全身份識別金庫." }, "min": { "message": "最小" @@ -531,7 +536,7 @@ "message": "必須選擇至少 1 代幣." }, "needEtherInWallet": { - "message": "要使用 Dex San 存取 DAPP 時,您的錢包中需要有 DEX。" + "message": "要使用 DekuSan 存取 DAPP 時,您的錢包中需要有 DEX。" }, "needImportFile": { "message": "您必須選擇一個檔案來導入。", @@ -686,7 +691,7 @@ "message": "還原" }, "rinkeby": { - "message": "Rinkeby 測試網路" + "message": "DEXON 測試網路" }, "ropsten": { "message": "Ropsten 測試網路" @@ -695,7 +700,7 @@ "message": "當前的 RPC" }, "connectingToMainnet": { - "message": "連線到主 Dexon 網路" + "message": "連線到主 DEXON 網路" }, "connectingToRopsten": { "message": "連線到 Ropsten 測試網路" @@ -704,7 +709,7 @@ "message": "連線到 Kovan 測試網路" }, "connectingToTestnet": { - "message": "連線到 Rinkeby 測試網路" + "message": "連線到 DEXON 測試網路" }, "connectingToUnknown": { "message": "連線到未知網路" @@ -860,7 +865,7 @@ "message": "代幣代號" }, "tokenWarning1": { - "message": "使用 Dex San 帳戶追蹤你已購得的代幣。如果你使用不同的帳戶保存購得的代幣,那些代幣就不會出現在這裡。" + "message": "使用 DekuSan 帳戶追蹤你已購得的代幣。如果你使用不同的帳戶保存購得的代幣,那些代幣就不會出現在這裡。" }, "total": { "message": "總量" @@ -882,7 +887,7 @@ "description": "Followed by a link (here) to view token balances" }, "twelveWords": { - "message": "這 12 個單詞是唯一回復你的 Dex San 帳號的方法。\n將它們儲存到那些安全且隱密的地方吧。" + "message": "這 12 個單詞是唯一回復你的 DekuSan 帳號的方法。\n將它們儲存到那些安全且隱密的地方吧。" }, "typePassword": { "message": "請輸入密碼" @@ -891,7 +896,7 @@ "message": "歡迎使用新版界面 (Beta)" }, "uiWelcomeMessage": { - "message": "你現在正在使用新版 Dex San 界面。試試諸如發送代幣等新功能吧,有任何問題請告知我們。" + "message": "你現在正在使用新版 DekuSan 界面。試試諸如發送代幣等新功能吧,有任何問題請告知我們。" }, "unapproved": { "message": "未同意" @@ -937,7 +942,7 @@ "message": "警告" }, "welcomeBeta": { - "message": "歡迎到 Dex San Beta" + "message": "歡迎到 DekuSan Beta" }, "whatsThis": { "message": "這是什麼?" diff --git a/app/error.html b/app/error.html index 366b3d94..f285556b 100644 --- a/app/error.html +++ b/app/error.html @@ -1,6 +1,6 @@ <html> <head> - <title>MetaMask Error</title> + <title>DekuSan Error</title> <link href="https://fonts.googleapis.com/css?family=Rokkitt" rel="stylesheet"> <style> *{ diff --git a/app/home.html b/app/home.html index 051133cf..d6a45e2f 100644 --- a/app/home.html +++ b/app/home.html @@ -3,7 +3,7 @@ <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=no"> - <title>MetaMask</title> + <title>DekuSan</title> </head> <body> <div id="app-content"></div> diff --git a/app/images/arrow-popout.svg b/app/images/arrow-popout.svg index 7e25f7cd..0e4a3ed2 100644 --- a/app/images/arrow-popout.svg +++ b/app/images/arrow-popout.svg @@ -1,3 +1,3 @@ <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M8.67589 0.641872C8.65169 0.642635 8.62756 0.644749 8.6036 0.648202H4.79279C4.55863 0.644896 4.34082 0.767704 4.22278 0.969601C4.10473 1.1715 4.10473 1.4212 4.22278 1.6231C4.34082 1.825 4.55863 1.9478 4.79279 1.9445H7.12113L0.437932 8.61587C0.268309 8.77843 0.19998 9.01984 0.259298 9.24697C0.318616 9.47411 0.496311 9.65149 0.723852 9.71071C0.951393 9.76992 1.19322 9.70171 1.35608 9.53239L8.03927 2.86102V5.18524C8.03596 5.41898 8.15899 5.6364 8.36124 5.75424C8.56349 5.87208 8.81364 5.87208 9.0159 5.75424C9.21815 5.6364 9.34118 5.41898 9.33787 5.18524V1.37863C9.36404 1.18976 9.30558 0.998955 9.17804 0.857009C9.0505 0.715062 8.86682 0.636369 8.67589 0.641872Z" fill="#359BDD"/> +<path d="M8.67589 0.641872C8.65169 0.642635 8.62756 0.644749 8.6036 0.648202H4.79279C4.55863 0.644896 4.34082 0.767704 4.22278 0.969601C4.10473 1.1715 4.10473 1.4212 4.22278 1.6231C4.34082 1.825 4.55863 1.9478 4.79279 1.9445H7.12113L0.437932 8.61587C0.268309 8.77843 0.19998 9.01984 0.259298 9.24697C0.318616 9.47411 0.496311 9.65149 0.723852 9.71071C0.951393 9.76992 1.19322 9.70171 1.35608 9.53239L8.03927 2.86102V5.18524C8.03596 5.41898 8.15899 5.6364 8.36124 5.75424C8.56349 5.87208 8.81364 5.87208 9.0159 5.75424C9.21815 5.6364 9.34118 5.41898 9.33787 5.18524V1.37863C9.36404 1.18976 9.30558 0.998955 9.17804 0.857009C9.0505 0.715062 8.86682 0.636369 8.67589 0.641872Z" fill="#FFFFFF"/> </svg> diff --git a/app/images/arrow-right.svg b/app/images/arrow-right.svg index ea5cd060..c0789310 100644 --- a/app/images/arrow-right.svg +++ b/app/images/arrow-right.svg @@ -5,7 +5,7 @@ <desc>Created with Sketch.</desc> <defs></defs> <g id="Confirm-Send-ETH---V3" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-500.000000, -235.000000)"> - <g id="Group-4" transform="translate(312.000000, 99.000000)" fill="#5B5B5B"> + <g id="Group-4" transform="translate(312.000000, 99.000000)" fill="#FFFFFF"> <g id="Group-18" transform="translate(109.000000, 119.000000)"> <g id="arrow-right" transform="translate(78.000000, 17.000000)"> <path d="M13.2809946,0.467462271 L13.2809946,0.467462271 C12.6477116,1.09191648 12.6477116,2.10286154 13.2809946,2.72571868 L19.1052554,8.46878095 L2.61883998,8.46878095 C1.72479329,8.46878095 0.999190175,9.18426813 0.999190175,10.0658505 L0.999190175,10.0674476 C0.999190175,10.94903 1.72479329,11.6629201 2.61883998,11.6629201 L19.1052554,11.6629201 L13.2809946,17.4075795 C12.6477116,18.0304366 12.6477116,19.0413817 13.2809946,19.6658359 C13.9126581,20.288693 14.9378964,20.288693 15.5711795,19.6658359 L25.3052748,10.0658505 L15.5711795,0.467462271 C14.9378964,-0.155394872 13.9126581,-0.155394872 13.2809946,0.467462271" id="Fill-1"></path> diff --git a/app/images/caret-left.svg b/app/images/caret-left.svg index 0ea26616..9368dc2c 100644 --- a/app/images/caret-left.svg +++ b/app/images/caret-left.svg @@ -5,7 +5,7 @@ <desc>Created with sketchtool.</desc> <defs></defs> <g id="Action-Screens" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="Approve---insufficient-amount" transform="translate(-75.000000, -69.000000)" stroke="#3099F2" stroke-width="2"> + <g id="Approve---insufficient-amount" transform="translate(-75.000000, -69.000000)" stroke="#954A97" stroke-width="2"> <g id="Group-7" transform="translate(53.000000, 51.000000)"> <g id="cancel" transform="translate(24.000000, 14.000000)"> <g id="Group"> diff --git a/app/images/caret-right.svg b/app/images/caret-right.svg index 8981ac25..369fbb4b 100644 --- a/app/images/caret-right.svg +++ b/app/images/caret-right.svg @@ -3,74 +3,11 @@ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve">
<style type="text/css">
- .st0{fill:#231F20;}
- .st1{fill:none;stroke:#000000;stroke-width:35;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-
- .st2{fill:none;stroke:#000000;stroke-width:35;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:25,61;}
- .st3{display:none;}
- .st4{display:inline;}
- .st5{fill:#EC008C;}
- .st6{display:inline;fill:#FFF200;}
+ .st0{fill:#c0c0c0;}
</style>
-<g id="Layer_4">
-</g>
<g id="Layer_1">
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <g>
- <path class="st0" d="M380.4,756.7c-4.5,0-9-1.7-12.4-5.1c-6.8-6.8-6.8-17.9,0-24.7L594.9,500L368,273.2
- c-6.8-6.8-6.8-17.9,0-24.7c6.8-6.8,17.9-6.8,24.7,0L632,487.6c6.8,6.8,6.8,17.9,0,24.7L392.8,751.6
- C389.3,755,384.9,756.7,380.4,756.7z"/>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
-</g>
-<g id="Layer_2" class="st3">
+ <path class="st0" d="M380.4,756.7c-4.5,0-9-1.7-12.4-5.1c-6.8-6.8-6.8-17.9,0-24.7L594.9,500L368,273.2
+ c-6.8-6.8-6.8-17.9,0-24.7c6.8-6.8,17.9-6.8,24.7,0L632,487.6c6.8,6.8,6.8,17.9,0,24.7L392.8,751.6
+ C389.3,755,384.9,756.7,380.4,756.7z"/>
</g>
</svg>
diff --git a/app/loading.html b/app/loading.html index 71403a5a..f042046a 100644 --- a/app/loading.html +++ b/app/loading.html @@ -4,7 +4,7 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> - <title>MetaMask Loading</title> + <title>DekuSan Loading</title> <style> #div-logo { position: absolute; diff --git a/app/manifest.json b/app/manifest.json index aaaadebc..f8201b32 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -37,7 +37,7 @@ "19": "images/icon-19.png", "38": "images/icon-38.png" }, - "default_title": "Dex San", + "default_title": "DekuSan", "default_popup": "popup.html" }, "content_scripts": [ diff --git a/app/notification.html b/app/notification.html index 042ffa6b..6e466026 100644 --- a/app/notification.html +++ b/app/notification.html @@ -2,7 +2,7 @@ <html style="height:600px;"> <head> <meta charset="utf-8"> - <title>MetaMask Notification</title> + <title>DekuSan Notification</title> <style> body { overflow: hidden; diff --git a/app/phishing.html b/app/phishing.html index 284d0fca..e3cba471 100644 --- a/app/phishing.html +++ b/app/phishing.html @@ -55,10 +55,17 @@ <img src="/images/ethereum-metamask-chrome.png" style="width:100%"> <h3>ATTENTION</h3> +<<<<<<< HEAD <p>This domain is currently on the MetaMask domain warning list. This means that based on information available to us, MetaMask believes this domain could currently compromise your security and, as an added safety feature, MetaMask has restricted access to the site. To override this, please read the rest of this warning for instructions on how to continue at your own risk. </p> <p>There are many reasons sites can appear on our warning list, and our warning list compiles from other widely used industry lists. Such reasons can include known fraud or security risks, such as domains that test positive on the <a href="https://github.com/metamask/eth-phishing-detect">Ethereum Phishing Detector</a>. Domains on these warning lists may include outright malicious websites and legitimate websites that have been compromised by a malicious actor. <p id="esdbLink"></p> <p>Note that this warning list is compiled on a voluntary basis. This list may be inaccurate or incomplete. Just because a domain does not appear on this list is not an implicit guarantee of that domain's safety. As always, your transactions are your own responsibility. If you wish to interact with any domain on our warning list, you can do so by <a id="unsafe-continue">continuing at your own risk</a>.</p> +======= + <p>DekuSan believes this domain could currently compromise your security and has prevented you from interacting with it.</p> + <p>This is because the site tested positive on the <a href="https://github.com/metamask/eth-phishing-detect">Ethereum Phishing Detector</a>. This includes outright malicious websites and legitimate websites that have been compromised by a malicious actor.</p> + <p id="esdbLink"></p> + <p>You can turn DekuSan off to interact with this site, but it is advised not to.</p> +>>>>>>> Complete onboarding flow <p> If you think this domain is incorrectly flagged or if a blocked legitimate website has resolved its security issues, <a href="https://github.com/metamask/eth-phishing-detect/issues/new">please file an issue</a>. diff --git a/app/popup.html b/app/popup.html index 1ba0fda9..ad8a8505 100644 --- a/app/popup.html +++ b/app/popup.html @@ -3,7 +3,7 @@ <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=no"> - <title>MetaMask</title> + <title>DekuSan</title> </head> <body style="width:357px; height:600px;"> <div id="app-content"></div> diff --git a/app/scripts/README.md b/app/scripts/README.md index f5a90724..60ba14ba 100644 --- a/app/scripts/README.md +++ b/app/scripts/README.md @@ -1,4 +1,4 @@ -# Main MetaMask Code +# Main DekuSan Code This folder contains the core-code. diff --git a/app/scripts/background.js b/app/scripts/background.js index 6056962d..b47c5bac 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -97,8 +97,8 @@ setupMetamaskMeshMetrics() */ /** - * The data emitted from the MetaMaskController.store EventEmitter, also used to initialize the MetaMaskController. Available in UI on React state as state.metamask. - * @typedef MetaMaskState + * The data emitted from the DekuSanController.store EventEmitter, also used to initialize the DekuSanController. Available in UI on React state as state.metamask. + * @typedef DekuSanState * @property {boolean} isInitialized - Whether the first vault has been created. * @property {boolean} isUnlocked - Whether the vault is currently decrypted and accounts are available for selection. * @property {boolean} isAccountMenuOpen - Represents whether the main account selection UI is currently displayed. @@ -123,7 +123,7 @@ setupMetamaskMeshMetrics() * @property {string} currentLocale - A locale string matching the user's preferred display language. * @property {Object} provider - The current selected network provider. * @property {string} provider.rpcTarget - The address for the RPC API, if using an RPC API. - * @property {string} provider.type - An identifier for the type of network selected, allows MetaMask to use custom provider strategies for known networks. + * @property {string} provider.type - An identifier for the type of network selected, allows DekuSan to use custom provider strategies for known networks. * @property {string} network - A stringified number of the current network ID. * @property {Object} accounts - An object mapping lower-case hex addresses to objects with "balance" and "address" keys, both storing hex string values. * @property {hex} currentBlockGasLimit - The most recently seen block gas limit, in a lower case hex prefixed string. @@ -151,19 +151,20 @@ setupMetamaskMeshMetrics() /** * @typedef VersionedData - * @property {MetaMaskState} data - The data emitted from MetaMask controller, or used to initialize it. + * @property {DekuSanState} data - The data emitted from DekuSan controller, or used to initialize it. * @property {Number} version - The latest migration version that has been run. */ /** - * Initializes the MetaMask controller, and sets up all platform configuration. + * Initializes the DekuSan controller, and sets up all platform configuration. * @returns {Promise} Setup complete. */ async function initialize () { const initState = await loadStateFromPersistence() + console.log(initState) const initLangCode = await getFirstPreferredLangCode() await setupController(initState, initLangCode) - log.debug('MetaMask initialization complete.') + log.debug('DekuSan initialization complete.') } // @@ -173,7 +174,7 @@ async function initialize () { /** * Loads any stored data, prioritizing the latest storage strategy. * Migrates that data schema in case it was last loaded on an older version. - * @returns {Promise<MetaMaskState>} Last data emitted from previous instance of MetaMask. + * @returns {Promise<DekuSanState>} Last data emitted from previous instance of DekuSan. */ async function loadStateFromPersistence () { // migrations @@ -196,14 +197,22 @@ async function loadStateFromPersistence () { // we were able to recover (though it might be old) versionedData = diskStoreState const vaultStructure = getObjStructure(versionedData) +<<<<<<< HEAD sentry.captureMessage('MetaMask - Empty vault found - recovered from diskStore', { +======= + raven.captureMessage('DekuSan - Empty vault found - recovered from diskStore', { +>>>>>>> Complete onboarding flow // "extra" key is required by Sentry extra: { vaultStructure }, }) } else { // unable to recover, clear state versionedData = migrator.generateInitialState(firstTimeState) +<<<<<<< HEAD sentry.captureMessage('MetaMask - Empty vault found - unable to recover') +======= + raven.captureMessage('DekuSan - Empty vault found - unable to recover') +>>>>>>> Complete onboarding flow } } @@ -220,7 +229,7 @@ async function loadStateFromPersistence () { // migrate data versionedData = await migrator.migrateData(versionedData) if (!versionedData) { - throw new Error('MetaMask - migrator returned undefined') + throw new Error('DekuSan - migrator returned undefined') } // write to disk @@ -229,7 +238,7 @@ async function loadStateFromPersistence () { } else { // throw in setTimeout so as to not block boot setTimeout(() => { - throw new Error('MetaMask - Localstore not supported') + throw new Error('DekuSan - Localstore not supported') }) } @@ -238,7 +247,7 @@ async function loadStateFromPersistence () { } /** - * Initializes the MetaMask Controller with any initial state and default language. + * Initializes the DekuSan Controller with any initial state and default language. * Configures platform-specific error reporting strategy. * Streams emitted state updates to platform-specific storage strategy. * Creates platform listeners for new Dapps/Contexts, and sets up their data connections to the controller. @@ -249,7 +258,7 @@ async function loadStateFromPersistence () { */ function setupController (initState, initLangCode) { // - // MetaMask Controller + // DekuSan Controller // const controller = new MetamaskController({ @@ -289,13 +298,13 @@ function setupController (initState, initLangCode) { storeTransform(versionifyData), createStreamSink(persistData), (error) => { - log.error('MetaMask - Persistence pipeline failed', error) + log.error('DekuSan - Persistence pipeline failed', error) } ) /** * Assigns the given state to the versioned object (with metadata), and returns that. - * @param {Object} state - The state object as emitted by the MetaMaskController. + * @param {Object} state - The state object as emitted by the DekuSanController. * @returns {VersionedData} The state object wrapped in an object that includes a metadata key. */ function versionifyData (state) { @@ -305,10 +314,10 @@ function setupController (initState, initLangCode) { async function persistData (state) { if (!state) { - throw new Error('MetaMask - updated state is missing', state) + throw new Error('DekuSan - updated state is missing', state) } if (!state.data) { - throw new Error('MetaMask - updated state does not have data', state) + throw new Error('DekuSan - updated state does not have data', state) } if (localStore.isSupported) { try { @@ -348,23 +357,27 @@ function setupController (initState, initLangCode) { */ /** - * Connects a Port to the MetaMask controller via a multiplexed duplex stream. - * This method identifies trusted (MetaMask) interfaces, and connects them differently from untrusted (web pages). + * Connects a Port to the DekuSan controller via a multiplexed duplex stream. + * This method identifies trusted (DekuSan) interfaces, and connects them differently from untrusted (web pages). * @param {Port} remotePort - The port provided by a new context. */ function connectRemote (remotePort) { const processName = remotePort.name - const isMetaMaskInternalProcess = metamaskInternalProcessHash[processName] + const isDekuSanInternalProcess = metamaskInternalProcessHash[processName] +<<<<<<< HEAD if (metamaskBlacklistedPorts.includes(remotePort.name)) { return false } if (isMetaMaskInternalProcess) { +======= + if (isDekuSanInternalProcess) { +>>>>>>> Complete onboarding flow const portStream = new PortStream(remotePort) // communication with popup controller.isClientOpen = true - controller.setupTrustedCommunication(portStream, 'MetaMask') + controller.setupTrustedCommunication(portStream, 'DekuSan') if (processName === ENVIRONMENT_TYPE_POPUP) { popupIsOpen = true diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js index 92e382ea..195c32b4 100644 --- a/app/scripts/contentscript.js +++ b/app/scripts/contentscript.js @@ -19,7 +19,7 @@ let isEnabled = false // // But for now that is only Firefox // If we create a FireFox-only code path using that API, -// MetaMask will be much faster loading and performant on Firefox. +// DekuSan will be much faster loading and performant on Firefox. if (shouldInjectWeb3()) { injectScript(inpageBundle) @@ -76,7 +76,7 @@ function setupStreams () { pluginStream, approvalTransform, pageStream, - (err) => logStreamDisconnectWarning('MetaMask Contentscript Forwarding', err) + (err) => logStreamDisconnectWarning('DekuSan Contentscript Forwarding', err) ) // setup local multistream channels @@ -87,13 +87,13 @@ function setupStreams () { mux, pageStream, mux, - (err) => logStreamDisconnectWarning('MetaMask Inpage', err) + (err) => logStreamDisconnectWarning('DekuSan Inpage', err) ) pump( mux, pluginStream, mux, - (err) => logStreamDisconnectWarning('MetaMask Background', err) + (err) => logStreamDisconnectWarning('DekuSan Background', err) ) // connect ping stream @@ -102,7 +102,7 @@ function setupStreams () { mux, pongStream, mux, - (err) => logStreamDisconnectWarning('MetaMask PingPongStream', err) + (err) => logStreamDisconnectWarning('DekuSan PingPongStream', err) ) // connect phishing warning stream @@ -287,7 +287,7 @@ function blacklistedDomainCheck () { * Redirects the current page to a phishing information page */ function redirectToPhishingWarning () { - console.log('MetaMask - routing to Phishing Warning component') + console.log('DekuSan - routing to Phishing Warning component') const extensionURL = extension.runtime.getURL('phishing.html') window.location.href = `${extensionURL}#${querystring.stringify({ hostname: window.location.hostname, diff --git a/app/scripts/controllers/blacklist.js b/app/scripts/controllers/blacklist.js index e55b09d0..f52adebb 100644 --- a/app/scripts/controllers/blacklist.js +++ b/app/scripts/controllers/blacklist.js @@ -20,7 +20,7 @@ class BlacklistController { * @param {object} opts Overrides the defaults for the initial state of this.store * @property {object} store The the store of the current phishing config * @property {object} store.phishing Contains fuzzylist, whitelist and blacklist arrays. @see - * {@link https://github.com/MetaMask/eth-phishing-detect/blob/master/src/config.json} + * {@link https://github.com/DekuSan/eth-phishing-detect/blob/master/src/config.json} * @property {object} _phishingDetector The PhishingDetector instantiated by passing store.phishing to * PhishingDetector. * @property {object} _phishingUpdateIntervalRef Id of the interval created to periodically update the blacklist @@ -122,10 +122,10 @@ class BlacklistController { /** * Sets this._phishingDetector to a new PhishingDetector instance. - * @see {@link https://github.com/MetaMask/eth-phishing-detect} + * @see {@link https://github.com/DekuSan/eth-phishing-detect} * * @private - * @param {object} config A config object like that found at {@link https://github.com/MetaMask/eth-phishing-detect/blob/master/src/config.json} + * @param {object} config A config object like that found at {@link https://github.com/DekuSan/eth-phishing-detect/blob/master/src/config.json} * */ _setupPhishingDetector (config) { diff --git a/app/scripts/controllers/currency.js b/app/scripts/controllers/currency.js index fce65fd9..295046af 100644 --- a/app/scripts/controllers/currency.js +++ b/app/scripts/controllers/currency.js @@ -176,8 +176,12 @@ class CurrencyController { } } } catch (err) { +<<<<<<< HEAD // reset current conversion rate log.warn(`MetaMask - Failed to query currency conversion:`, nativeCurrency, currentCurrency, err) +======= + log.warn(`DekuSan - Failed to query currency conversion:`, currentCurrency, err) +>>>>>>> Complete onboarding flow this.setConversionRate(0) this.setConversionDate('N/A') // throw error diff --git a/app/scripts/controllers/detect-tokens.js b/app/scripts/controllers/detect-tokens.js index 62e63979..fcf07bd5 100644 --- a/app/scripts/controllers/detect-tokens.js +++ b/app/scripts/controllers/detect-tokens.js @@ -53,7 +53,7 @@ class DetectTokensController { this._preferences.addToken(contractAddress, contracts[contractAddress].symbol, contracts[contractAddress].decimals) } } else { - warn(`MetaMask - DetectTokensController balance fetch failed for ${contractAddress}.`, error) + warn(`DekuSan - DetectTokensController balance fetch failed for ${contractAddress}.`, error) } }) } diff --git a/app/scripts/controllers/network/createMetamaskMiddleware.js b/app/scripts/controllers/network/createMetamaskMiddleware.js index 319c5bf3..7afeb07f 100644 --- a/app/scripts/controllers/network/createMetamaskMiddleware.js +++ b/app/scripts/controllers/network/createMetamaskMiddleware.js @@ -19,7 +19,7 @@ function createMetamaskMiddleware ({ createScaffoldMiddleware({ // staticSubprovider eth_syncing: false, - web3_clientVersion: `MetaMask/v${version}`, + web3_clientVersion: `DekuSan/v${version}`, }), createWalletSubprovider({ getAccounts, diff --git a/app/scripts/controllers/network/enums.js b/app/scripts/controllers/network/enums.js index 5a419105..586c0119 100644 --- a/app/scripts/controllers/network/enums.js +++ b/app/scripts/controllers/network/enums.js @@ -2,7 +2,7 @@ const ROPSTEN = 'ropsten' const RINKEBY = 'rinkeby' const KOVAN = 'kovan' const MAINNET = 'mainnet' -const TESTNET = 'testnet' +const TESTNET = 'rinkeby' const LOCALHOST = 'localhost' const MAINNET_CODE = 1 @@ -12,7 +12,7 @@ const RINKEYBY_CODE = 4 const KOVAN_CODE = 42 const ROPSTEN_DISPLAY_NAME = 'Ropsten' -const RINKEBY_DISPLAY_NAME = 'Rinkeby' +const RINKEBY_DISPLAY_NAME = 'DEXON' const KOVAN_DISPLAY_NAME = 'Kovan' const MAINNET_DISPLAY_NAME = 'Main DEXON Network' const TESTNET_DISPLAY_NAME = 'DEXON Test Network' diff --git a/app/scripts/controllers/network/network.js b/app/scripts/controllers/network/network.js index 3c893201..a9defca9 100644 --- a/app/scripts/controllers/network/network.js +++ b/app/scripts/controllers/network/network.js @@ -24,12 +24,13 @@ const { } = require('./enums') const INFURA_PROVIDER_TYPES = [MAINNET, TESTNET] -const env = process.env.METAMASK_ENV -const METAMASK_DEBUG = process.env.METAMASK_DEBUG -const testMode = (METAMASK_DEBUG || env === 'test') +// const env = process.env.METAMASK_ENV +// const METAMASK_DEBUG = process.env.METAMASK_DEBUG +// const testMode = (METAMASK_DEBUG || env === 'test') const defaultProviderConfig = { - type: testMode ? TESTNET : MAINNET, + // type: testMode ? TESTNET : MAINNET, + type: MAINNET, } const defaultNetworkConfig = { diff --git a/app/scripts/controllers/token-rates.js b/app/scripts/controllers/token-rates.js index 3f948285..f9fb2aa4 100644 --- a/app/scripts/controllers/token-rates.js +++ b/app/scripts/controllers/token-rates.js @@ -47,6 +47,25 @@ class TokenRatesController { } /** +<<<<<<< HEAD +======= + * Fetches a token exchange rate by address + * + * @param {String} address - Token contract address + */ + async fetchExchangeRate (address) { + try { + const response = await fetch(`https://metamask.balanc3.net/prices?from=${address}&to=ETH&autoConversion=false&summaryOnly=true`) + const json = await response.json() + return json && json.length ? json[0].averagePrice : 0 + } catch (error) { + warn(`DekuSan - TokenRatesController exchange rate fetch failed for ${address}.`, error) + return 0 + } + } + + /** +>>>>>>> Complete onboarding flow * @type {Number} */ set interval (interval) { diff --git a/app/scripts/controllers/transactions/README.md b/app/scripts/controllers/transactions/README.md index b414762d..75e3749a 100644 --- a/app/scripts/controllers/transactions/README.md +++ b/app/scripts/controllers/transactions/README.md @@ -1,7 +1,7 @@ # Transaction Controller Transaction Controller is an aggregate of sub-controllers and trackers -exposed to the MetaMask controller. +exposed to the DekuSan controller. - txStateManager responsible for the state of a transaction and @@ -62,7 +62,7 @@ txMeta = { "gasPriceSpecified": false, //whether or not the user/dapp has specified gasPrice "gasLimitSpecified": false, //whether or not the user/dapp has specified gas "estimatedGas": "5208", - "origin": "MetaMask", //debug + "origin": "DekuSan", //debug "nonceDetails": { "params": { "highestLocallyConfirmed": 0, diff --git a/app/scripts/controllers/transactions/index.js b/app/scripts/controllers/transactions/index.js index 2ce736be..8fbc3cbc 100644 --- a/app/scripts/controllers/transactions/index.js +++ b/app/scripts/controllers/transactions/index.js @@ -143,7 +143,7 @@ class TransactionController extends EventEmitter { */ async newUnapprovedTransaction (txParams, opts = {}) { - log.debug(`MetaMaskController newUnapprovedTransaction ${JSON.stringify(txParams)}`) + log.debug(`DekuSanController newUnapprovedTransaction ${JSON.stringify(txParams)}`) const initialTxMeta = await this.addUnapprovedTransaction(txParams) initialTxMeta.origin = opts.origin this.txStateManager.updateTx(initialTxMeta, '#newUnapprovedTransaction - adding the origin') @@ -154,11 +154,11 @@ class TransactionController extends EventEmitter { case 'submitted': return resolve(finishedTxMeta.hash) case 'rejected': - return reject(cleanErrorStack(new Error('MetaMask Tx Signature: User denied transaction signature.'))) + return reject(cleanErrorStack(new Error('DekuSan Tx Signature: User denied transaction signature.'))) case 'failed': return reject(cleanErrorStack(new Error(finishedTxMeta.err.message))) default: - return reject(cleanErrorStack(new Error(`MetaMask Tx Signature: Unknown problem: ${JSON.stringify(finishedTxMeta.txParams)}`))) + return reject(cleanErrorStack(new Error(`DekuSan Tx Signature: Unknown problem: ${JSON.stringify(finishedTxMeta.txParams)}`))) } }) }) diff --git a/app/scripts/inpage.js b/app/scripts/inpage.js index b2556a27..bde7d9e6 100644 --- a/app/scripts/inpage.js +++ b/app/scripts/inpage.js @@ -178,7 +178,7 @@ function cleanContextForImports () { try { global.define = undefined } catch (_) { - console.warn('MetaMask - global.define could not be deleted.') + console.warn('DekuSan - global.define could not be deleted.') } } @@ -189,6 +189,6 @@ function restoreContextAfterImports () { try { global.define = __define } catch (_) { - console.warn('MetaMask - global.define could not be overwritten.') + console.warn('DekuSan - global.define could not be overwritten.') } } diff --git a/app/scripts/lib/get-first-preferred-lang-code.js b/app/scripts/lib/get-first-preferred-lang-code.js index 170d508c..55f3fb6f 100644 --- a/app/scripts/lib/get-first-preferred-lang-code.js +++ b/app/scripts/lib/get-first-preferred-lang-code.js @@ -27,7 +27,7 @@ async function getFirstPreferredLangCode () { } // safeguard for Brave Browser until they implement chrome.i18n.getAcceptLanguages - // https://github.com/MetaMask/metamask-extension/issues/4270 + // https://github.com/DekuSan/metamask-extension/issues/4270 if (!userPreferredLocaleCodes) { userPreferredLocaleCodes = [] } diff --git a/app/scripts/lib/message-manager.js b/app/scripts/lib/message-manager.js index e8662959..de028849 100644 --- a/app/scripts/lib/message-manager.js +++ b/app/scripts/lib/message-manager.js @@ -12,7 +12,7 @@ const createId = require('./random-id') * @typedef {Object} Message * @property {number} id An id to track and identify the message object * @property {Object} msgParams The parameters to pass to the eth_sign method once the signature request is approved. - * @property {Object} msgParams.metamaskId Added to msgParams for tracking and identification within MetaMask. + * @property {Object} msgParams.metamaskId Added to msgParams for tracking and identification within DekuSan. * @property {string} msgParams.data A hex string conversion of the raw buffer data of the signature request * @property {number} time The epoch time at which the this message was created * @property {string} status Indicates whether the signature request is 'unapproved', 'approved', 'signed' or 'rejected' @@ -82,9 +82,9 @@ module.exports = class MessageManager extends EventEmitter { case 'signed': return resolve(data.rawSig) case 'rejected': - return reject(new Error('MetaMask Message Signature: User denied message signature.')) + return reject(new Error('DekuSan Message Signature: User denied message signature.')) default: - return reject(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) + return reject(new Error(`DekuSan Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) } }) }) @@ -147,8 +147,8 @@ module.exports = class MessageManager extends EventEmitter { * Approves a Message. Sets the message status via a call to this.setMsgStatusApproved, and returns a promise with * any the message params modified for proper signing. * - * @param {Object} msgParams The msgParams to be used when eth_sign is called, plus data added by MetaMask. - * @param {Object} msgParams.metamaskId Added to msgParams for tracking and identification within MetaMask. + * @param {Object} msgParams The msgParams to be used when eth_sign is called, plus data added by DekuSan. + * @param {Object} msgParams.metamaskId Added to msgParams for tracking and identification within DekuSan. * @returns {Promise<object>} Promises the msgParams object with metamaskId removed. * */ diff --git a/app/scripts/lib/migrator/index.js b/app/scripts/lib/migrator/index.js index 345ca800..94c21318 100644 --- a/app/scripts/lib/migrator/index.js +++ b/app/scripts/lib/migrator/index.js @@ -47,7 +47,7 @@ class Migrator extends EventEmitter { } catch (err) { // rewrite error message to add context without clobbering stack const originalErrorMessage = err.message - err.message = `MetaMask Migration Error #${migration.version}: ${originalErrorMessage}` + err.message = `DekuSan Migration Error #${migration.version}: ${originalErrorMessage}` console.warn(err.stack) // emit error instead of throw so as to not break the run (gracefully fail) this.emit('error', err) diff --git a/app/scripts/lib/notification-manager.js b/app/scripts/lib/notification-manager.js index 969a9459..830b72b9 100644 --- a/app/scripts/lib/notification-manager.js +++ b/app/scripts/lib/notification-manager.js @@ -13,7 +13,7 @@ class NotificationManager { */ /** - * Either brings an existing MetaMask notification window into focus, or creates a new notification window. New + * Either brings an existing DekuSan notification window into focus, or creates a new notification window. New * notification windows are given a 'popup' type. * */ @@ -40,7 +40,7 @@ class NotificationManager { } /** - * Closes a MetaMask notification if it window exists. + * Closes a DekuSan notification if it window exists. * */ closePopup () { @@ -53,7 +53,7 @@ class NotificationManager { } /** - * Checks all open MetaMask windows, and returns the first one it finds that is a notification window (i.e. has the + * Checks all open DekuSan windows, and returns the first one it finds that is a notification window (i.e. has the * type 'popup') * * @private @@ -68,7 +68,7 @@ class NotificationManager { } /** - * Returns all open MetaMask windows. + * Returns all open DekuSan windows. * * @private * @param {Function} cb A node style callback that to which the windows will be passed. @@ -86,10 +86,10 @@ class NotificationManager { } /** - * Given an array of windows, returns the 'popup' that has been opened by MetaMask, or null if no such window exists. + * Given an array of windows, returns the 'popup' that has been opened by DekuSan, or null if no such window exists. * * @private - * @param {array} windows An array of objects containing data about the open MetaMask extension windows. + * @param {array} windows An array of objects containing data about the open DekuSan extension windows. * */ _getPopupIn (windows) { diff --git a/app/scripts/lib/personal-message-manager.js b/app/scripts/lib/personal-message-manager.js index fdb94f5e..333f4f93 100644 --- a/app/scripts/lib/personal-message-manager.js +++ b/app/scripts/lib/personal-message-manager.js @@ -15,7 +15,7 @@ const log = require('loglevel') * @property {number} id An id to track and identify the message object * @property {Object} msgParams The parameters to pass to the personal_sign method once the signature request is * approved. - * @property {Object} msgParams.metamaskId Added to msgParams for tracking and identification within MetaMask. + * @property {Object} msgParams.metamaskId Added to msgParams for tracking and identification within DekuSan. * @property {string} msgParams.data A hex string conversion of the raw buffer data of the signature request * @property {number} time The epoch time at which the this message was created * @property {string} status Indicates whether the signature request is 'unapproved', 'approved', 'signed' or 'rejected' @@ -80,7 +80,7 @@ module.exports = class PersonalMessageManager extends EventEmitter { addUnapprovedMessageAsync (msgParams, req) { return new Promise((resolve, reject) => { if (!msgParams.from) { - reject(new Error('MetaMask Message Signature: from field is required.')) + reject(new Error('DekuSan Message Signature: from field is required.')) } const msgId = this.addUnapprovedMessage(msgParams, req) this.once(`${msgId}:finished`, (data) => { @@ -88,9 +88,9 @@ module.exports = class PersonalMessageManager extends EventEmitter { case 'signed': return resolve(data.rawSig) case 'rejected': - return reject(new Error('MetaMask Message Signature: User denied message signature.')) + return reject(new Error('DekuSan Message Signature: User denied message signature.')) default: - return reject(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) + return reject(new Error(`DekuSan Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) } }) }) @@ -156,8 +156,8 @@ module.exports = class PersonalMessageManager extends EventEmitter { * Approves a PersonalMessage. Sets the message status via a call to this.setMsgStatusApproved, and returns a promise * with any the message params modified for proper signing. * - * @param {Object} msgParams The msgParams to be used when eth_sign is called, plus data added by MetaMask. - * @param {Object} msgParams.metamaskId Added to msgParams for tracking and identification within MetaMask. + * @param {Object} msgParams The msgParams to be used when eth_sign is called, plus data added by DekuSan. + * @param {Object} msgParams.metamaskId Added to msgParams for tracking and identification within DekuSan. * @returns {Promise<object>} Promises the msgParams object with metamaskId removed. * */ diff --git a/app/scripts/lib/resolver.js b/app/scripts/lib/resolver.js new file mode 100644 index 00000000..6719a6fc --- /dev/null +++ b/app/scripts/lib/resolver.js @@ -0,0 +1,71 @@ +const namehash = require('eth-ens-namehash') +const multihash = require('multihashes') +const HttpProvider = require('ethjs-provider-http') +const Eth = require('ethjs-query') +const EthContract = require('ethjs-contract') +const registrarAbi = require('./contracts/registrar') +const resolverAbi = require('./contracts/resolver') + +function ens (name, provider) { + const eth = new Eth(new HttpProvider(getProvider(provider.type))) + const hash = namehash.hash(name) + const contract = new EthContract(eth) + const Registrar = contract(registrarAbi).at(getRegistrar(provider.type)) + return new Promise((resolve, reject) => { + if (provider.type === 'mainnet' || provider.type === 'ropsten') { + Registrar.resolver(hash).then((address) => { + if (address === '0x0000000000000000000000000000000000000000') { + reject(null) + } else { + const Resolver = contract(resolverAbi).at(address['0']) + return Resolver.content(hash) + } + }).then((contentHash) => { + if (contentHash['0'] === '0x0000000000000000000000000000000000000000000000000000000000000000') reject(null) + if (contentHash.ret !== '0x') { + const hex = contentHash['0'].substring(2) + const buf = multihash.fromHexString(hex) + resolve(multihash.toB58String(multihash.encode(buf, 'sha2-256'))) + } else { + reject(null) + } + }) + } else { + return reject('unsupport') + } + }) +} + +function getProvider (type) { + switch (type) { + case 'mainnet': + return 'https://mainnet.infura.io/' + case 'testnet': + return 'http://testnet.dexon.org:8545/' + default: + return 'http://localhost:8545/' + } +} + +function getRegistrar (type) { + switch (type) { + case 'mainnet': + return '0x314159265dd8dbb310642f98f50c066173c1259b' + case 'testnet': + return '0x314159265dd8dbb310642f98f50c066173c1259b' + default: + return '0x0000000000000000000000000000000000000000' + } +} + +module.exports.resolve = function (name, provider) { + const path = name.split('.') + const topLevelDomain = path[path.length - 1] + if (topLevelDomain === 'eth' || topLevelDomain === 'test') { + return ens(name, provider) + } else { + return new Promise((resolve, reject) => { + reject(null) + }) + } +} diff --git a/app/scripts/lib/setupMetamaskMeshMetrics.js b/app/scripts/lib/setupMetamaskMeshMetrics.js index fd3b93fc..b7c2e519 100644 --- a/app/scripts/lib/setupMetamaskMeshMetrics.js +++ b/app/scripts/lib/setupMetamaskMeshMetrics.js @@ -7,6 +7,6 @@ module.exports = setupMetamaskMeshMetrics function setupMetamaskMeshMetrics () { const testingContainer = document.createElement('iframe') testingContainer.src = 'https://metamask.github.io/mesh-testing/' - console.log('Injecting MetaMask Mesh testing client') + console.log('Injecting DekuSan Mesh testing client') document.head.appendChild(testingContainer) } diff --git a/app/scripts/lib/typed-message-manager.js b/app/scripts/lib/typed-message-manager.js index b10145f3..ef1e8820 100644 --- a/app/scripts/lib/typed-message-manager.js +++ b/app/scripts/lib/typed-message-manager.js @@ -14,7 +14,7 @@ const jsonschema = require('jsonschema') * @property {number} id An id to track and identify the message object * @property {Object} msgParams The parameters to pass to the eth_signTypedData method once the signature request is * approved. - * @property {Object} msgParams.metamaskId Added to msgParams for tracking and identification within MetaMask. + * @property {Object} msgParams.metamaskId Added to msgParams for tracking and identification within DekuSan. * @property {Object} msgParams.from The address that is making the signature request. * @property {string} msgParams.data A hex string conversion of the raw buffer data of the signature request * @property {number} time The epoch time at which the this message was created @@ -78,11 +78,11 @@ module.exports = class TypedMessageManager extends EventEmitter { case 'signed': return resolve(data.rawSig) case 'rejected': - return reject(new Error('MetaMask Message Signature: User denied message signature.')) + return reject(new Error('DekuSan Message Signature: User denied message signature.')) case 'errored': - return reject(new Error(`MetaMask Message Signature: ${data.error}`)) + return reject(new Error(`DekuSan Message Signature: ${data.error}`)) default: - return reject(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) + return reject(new Error(`DekuSan Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) } }) }) @@ -186,8 +186,8 @@ module.exports = class TypedMessageManager extends EventEmitter { * Approves a TypedMessage. Sets the message status via a call to this.setMsgStatusApproved, and returns a promise * with any the message params modified for proper signing. * - * @param {Object} msgParams The msgParams to be used when eth_sign is called, plus data added by MetaMask. - * @param {Object} msgParams.metamaskId Added to msgParams for tracking and identification within MetaMask. + * @param {Object} msgParams The msgParams to be used when eth_sign is called, plus data added by DekuSan. + * @param {Object} msgParams.metamaskId Added to msgParams for tracking and identification within DekuSan. * @returns {Promise<object>} Promises the msgParams object with metamaskId removed. * */ diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index c7e9cfcc..e81b8ea4 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -1,6 +1,6 @@ /** * @file The central metamask controller. Aggregates other controllers and exports an api. - * @copyright Copyright (c) 2018 MetaMask + * @copyright Copyright (c) 2018 DekuSan * @license MIT */ @@ -281,7 +281,7 @@ module.exports = class MetamaskController extends EventEmitter { const providerOpts = { static: { eth_syncing: false, - web3_clientVersion: `MetaMask/v${version}`, + web3_clientVersion: `DekuSan/v${version}`, }, version, // account mgmt @@ -917,7 +917,7 @@ module.exports = class MetamaskController extends EventEmitter { * @returns {Promise<Object>} Full state update. */ signMessage (msgParams) { - log.info('MetaMaskController - signMessage') + log.info('DekuSanController - signMessage') const msgId = msgParams.metamaskId // sets the status op the message to 'approved' @@ -976,7 +976,7 @@ module.exports = class MetamaskController extends EventEmitter { * @returns {Promise<Object>} - A full state update. */ signPersonalMessage (msgParams) { - log.info('MetaMaskController - signPersonalMessage') + log.info('DekuSanController - signPersonalMessage') const msgId = msgParams.metamaskId // sets the status op the message to 'approved' // and removes the metamaskId for signing @@ -1029,7 +1029,7 @@ module.exports = class MetamaskController extends EventEmitter { * @returns {Object} Full state update. */ async signTypedMessage (msgParams) { - log.info('MetaMaskController - eth_signTypedData') + log.info('DekuSanController - eth_signTypedData') const msgId = msgParams.metamaskId const version = msgParams.version try { @@ -1056,7 +1056,7 @@ module.exports = class MetamaskController extends EventEmitter { this.typedMessageManager.setMsgStatusSigned(msgId, signature) return this.getState() } catch (error) { - log.info('MetaMaskController - eth_signTypedData failed.', error) + log.info('DekuSanController - eth_signTypedData failed.', error) this.typedMessageManager.errorMessage(msgId, error) } } @@ -1075,7 +1075,7 @@ module.exports = class MetamaskController extends EventEmitter { } // --------------------------------------------------------------------------- - // MetaMask Version 3 Migration Account Restauration Methods + // DekuSan Version 3 Migration Account Restauration Methods /** * A legacy method (probably dead code) that was used when we swapped out our @@ -1155,7 +1155,7 @@ module.exports = class MetamaskController extends EventEmitter { * transaction. * @param {number} originalTxId - the id of the txMeta that you want to attempt to cancel * @param {string=} customGasPrice - the hex value to use for the cancel transaction - * @returns {object} MetaMask state + * @returns {object} DekuSan state */ async createCancelTransaction (originalTxId, customGasPrice, cb) { try { @@ -1223,7 +1223,7 @@ module.exports = class MetamaskController extends EventEmitter { setupUntrustedCommunication (connectionStream, originDomain) { // Check if new connection is blacklisted if (this.blacklistController.checkForPhishing(originDomain)) { - log.debug('MetaMask - sending phishing warning for', originDomain) + log.debug('DekuSan - sending phishing warning for', originDomain) this.sendPhishingWarning(connectionStream, originDomain) return } @@ -1394,7 +1394,7 @@ module.exports = class MetamaskController extends EventEmitter { } /** - * A method for emitting the full MetaMask state to all registered listeners. + * A method for emitting the full DekuSan state to all registered listeners. * @private */ privateSendUpdate () { @@ -1568,7 +1568,7 @@ module.exports = class MetamaskController extends EventEmitter { // TODO: Replace isClientOpen methods with `controllerConnectionChanged` events. /** - * A method for recording whether the MetaMask user interface is open or not. + * A method for recording whether the DekuSan user interface is open or not. * @private * @param {boolean} open */ diff --git a/app/scripts/migrations/005.js b/app/scripts/migrations/005.js index f7b68dfe..6c9e1b08 100644 --- a/app/scripts/migrations/005.js +++ b/app/scripts/migrations/005.js @@ -21,7 +21,7 @@ module.exports = { const newState = selectSubstateForKeyringController(state) versionedData.data = newState } catch (err) { - console.warn('MetaMask Migration #5' + err.stack) + console.warn('DekuSan Migration #5' + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/006.js b/app/scripts/migrations/006.js index 51ea6e3e..f27dc804 100644 --- a/app/scripts/migrations/006.js +++ b/app/scripts/migrations/006.js @@ -20,7 +20,7 @@ module.exports = { const newState = migrateState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/007.js b/app/scripts/migrations/007.js index d9887b9c..f48d9606 100644 --- a/app/scripts/migrations/007.js +++ b/app/scripts/migrations/007.js @@ -20,7 +20,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/008.js b/app/scripts/migrations/008.js index da7cb2e6..1d20cb72 100644 --- a/app/scripts/migrations/008.js +++ b/app/scripts/migrations/008.js @@ -20,7 +20,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/009.js b/app/scripts/migrations/009.js index f47db55a..833fcc9d 100644 --- a/app/scripts/migrations/009.js +++ b/app/scripts/migrations/009.js @@ -20,7 +20,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/010.js b/app/scripts/migrations/010.js index e4b9ac07..c1d45984 100644 --- a/app/scripts/migrations/010.js +++ b/app/scripts/migrations/010.js @@ -20,7 +20,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/011.js b/app/scripts/migrations/011.js index 782ec809..1fe5531a 100644 --- a/app/scripts/migrations/011.js +++ b/app/scripts/migrations/011.js @@ -19,7 +19,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/012.js b/app/scripts/migrations/012.js index f69ccbb0..87818a1a 100644 --- a/app/scripts/migrations/012.js +++ b/app/scripts/migrations/012.js @@ -19,7 +19,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/013.js b/app/scripts/migrations/013.js index fb7131f8..ec756ccd 100644 --- a/app/scripts/migrations/013.js +++ b/app/scripts/migrations/013.js @@ -19,7 +19,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/014.js b/app/scripts/migrations/014.js index 0fe92125..b5cc1d2e 100644 --- a/app/scripts/migrations/014.js +++ b/app/scripts/migrations/014.js @@ -19,7 +19,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/015.js b/app/scripts/migrations/015.js index 5e2f9e63..549200f5 100644 --- a/app/scripts/migrations/015.js +++ b/app/scripts/migrations/015.js @@ -20,7 +20,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/016.js b/app/scripts/migrations/016.js index 048c7a40..a7c53666 100644 --- a/app/scripts/migrations/016.js +++ b/app/scripts/migrations/016.js @@ -20,7 +20,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/017.js b/app/scripts/migrations/017.js index 5f6d906d..fc92b4c4 100644 --- a/app/scripts/migrations/017.js +++ b/app/scripts/migrations/017.js @@ -19,7 +19,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/018.js b/app/scripts/migrations/018.js index ffbf24a4..003f9ebb 100644 --- a/app/scripts/migrations/018.js +++ b/app/scripts/migrations/018.js @@ -21,7 +21,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/019.js b/app/scripts/migrations/019.js index ce5da685..46a56d90 100644 --- a/app/scripts/migrations/019.js +++ b/app/scripts/migrations/019.js @@ -21,7 +21,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/020.js b/app/scripts/migrations/020.js index 8159b3e7..f0937753 100644 --- a/app/scripts/migrations/020.js +++ b/app/scripts/migrations/020.js @@ -21,7 +21,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/021.js b/app/scripts/migrations/021.js index d84e77b5..b9ff4776 100644 --- a/app/scripts/migrations/021.js +++ b/app/scripts/migrations/021.js @@ -19,7 +19,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/022.js b/app/scripts/migrations/022.js index 1fbe241e..ed341e88 100644 --- a/app/scripts/migrations/022.js +++ b/app/scripts/migrations/022.js @@ -20,7 +20,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/023.js b/app/scripts/migrations/023.js index 18493a78..cdd92515 100644 --- a/app/scripts/migrations/023.js +++ b/app/scripts/migrations/023.js @@ -20,7 +20,7 @@ module.exports = { const newState = transformState(state) versionedData.data = newState } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) } return Promise.resolve(versionedData) }, diff --git a/app/scripts/migrations/026.js b/app/scripts/migrations/026.js index 4e907e09..4f7593e9 100644 --- a/app/scripts/migrations/026.js +++ b/app/scripts/migrations/026.js @@ -18,7 +18,7 @@ module.exports = { const state = versionedData.data versionedData.data = transformState(state) } catch (err) { - console.warn(`MetaMask Migration #${version}` + err.stack) + console.warn(`DekuSan Migration #${version}` + err.stack) return Promise.reject(err) } return Promise.resolve(versionedData) diff --git a/app/scripts/popup-core.js b/app/scripts/popup-core.js index db885ec9..f455ec53 100644 --- a/app/scripts/popup-core.js +++ b/app/scripts/popup-core.js @@ -10,7 +10,7 @@ const setupMultiplex = require('./lib/stream-utils.js').setupMultiplex module.exports = initializePopup /** - * Asynchronously initializes the MetaMask popup UI + * Asynchronously initializes the DekuSan popup UI * * @param {{ container: Element, connectionStream: * }} config Popup configuration object * @param {Function} cb Called when initialization is complete diff --git a/app/scripts/ui.js b/app/scripts/ui.js index 682a4aaa..3d8c0b9a 100644 --- a/app/scripts/ui.js +++ b/app/scripts/ui.js @@ -1,5 +1,4 @@ const injectCss = require('inject-css') -const OldMetaMaskUiCss = require('../../old-ui/css') const NewMetaMaskUiCss = require('../../ui/css') const {getShouldUseNewUi} = require('../../ui/app/selectors') const startPopup = require('./popup-core') @@ -47,6 +46,7 @@ async function start () { const container = document.getElementById('app-content') startPopup({ container, connectionStream }, (err, store) => { if (err) return displayCriticalError(err) +<<<<<<< HEAD const state = store.getState() let betaUIState = Boolean(state.featureFlags && state.featureFlags.betaUI) @@ -66,6 +66,9 @@ async function start () { deleteInjectedCss = injectCss(css) } }) +======= + injectCss(NewMetaMaskUiCss()) +>>>>>>> Complete onboarding flow }) diff --git a/app/unsupport.html b/app/unsupport.html index 6f514eb1..5c16d5ec 100644 --- a/app/unsupport.html +++ b/app/unsupport.html @@ -2,7 +2,7 @@ <html> <head> <meta charset="UTF-8"> - <title>MetaMask</title> + <title>DekuSan</title> </head> <style> *{ diff --git a/development/README.md b/development/README.md index 1e18d4f1..3c2f76cd 100644 --- a/development/README.md +++ b/development/README.md @@ -1,5 +1,5 @@ # Development -Several files which are needed for developing on(!) MetaMask. +Several files which are needed for developing on(!) DekuSan. Usually each files contains information about its scope / usage.
\ No newline at end of file diff --git a/development/announcer.js b/development/announcer.js index ea1bfdd3..e0d92162 100644 --- a/development/announcer.js +++ b/development/announcer.js @@ -7,6 +7,6 @@ var changelog = fs.readFileSync(path.join(__dirname, '..', 'CHANGELOG.md')).toSt var log = changelog.split(version)[1].split('##')[0].trim() -const msg = `*MetaMask ${version}* now published! It should auto-update soon!\n${log}` +const msg = `*DekuSan ${version}* now published! It should auto-update soon!\n${log}` console.log(msg) diff --git a/development/index.html b/development/index.html index e5a02744..862a9cad 100644 --- a/development/index.html +++ b/development/index.html @@ -2,7 +2,7 @@ <html> <head> <meta charset="utf-8"> - <title>MetaMask</title> + <title>DekuSan</title> </head> <body> <script src="./bundle.js" type="text/javascript" charset="utf-8"></script> diff --git a/development/mock-dev.js b/development/mock-dev.js index 1af10a13..7375cfee 100644 --- a/development/mock-dev.js +++ b/development/mock-dev.js @@ -62,11 +62,11 @@ function updateQueryParams (newView) { // CSS // -const MetaMaskUiCss = require('../ui/css') +const DekuSanUiCss = require('../ui/css') const injectCss = require('inject-css') // -// MetaMask Controller +// DekuSan Controller // const controller = new MetamaskController({ @@ -101,7 +101,7 @@ function modifyBackgroundConnection (backgroundConnectionModifier) { actions._setBackgroundConnection(modifiedBackgroundConnection) } -var css = MetaMaskUiCss() +var css = DekuSanUiCss() injectCss(css) // parse opts diff --git a/development/states/conf-tx.json b/development/states/conf-tx.json index d47b26fd..51d48cce 100644 --- a/development/states/conf-tx.json +++ b/development/states/conf-tx.json @@ -56,7 +56,7 @@ "read": true, "date": "Thu Feb 09 2017", "title": "Terms of Use", - "body": "# Terms of Use #\n\n**THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION AND A WAIVER OF CLASS ACTION RIGHTS AS DETAILED IN SECTION 13. PLEASE READ THE AGREEMENT CAREFULLY.**\n\n_Our Terms of Use have been updated as of September 5, 2016_\n\n## 1. Acceptance of Terms ##\n\nMetaMask provides a platform for managing Ethereum (or \"ETH\") accounts, and allowing ordinary websites to interact with the Ethereum blockchain, while keeping the user in control over what transactions they approve, through our website located at[ ](http://metamask.io)[https://metamask.io/](https://metamask.io/) and browser plugin (the \"Site\") — which includes text, images, audio, code and other materials (collectively, the “Content”) and all of the features, and services provided. The Site, and any other features, tools, materials, or other services offered from time to time by MetaMask are referred to here as the “Service.” Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully before using the Service. By using or otherwise accessing the Services, or clicking to accept or agree to these Terms where that option is made available, you (1) accept and agree to these Terms (2) consent to the collection, use, disclosure and other handling of information as described in our Privacy Policy and (3) any additional terms, rules and conditions of participation issued by MetaMask from time to time. If you do not agree to the Terms, then you may not access or use the Content or Services.\n\n## 2. Modification of Terms of Use ##\n\nExcept for Section 13, providing for binding arbitration and waiver of class action rights, MetaMask reserves the right, at its sole discretion, to modify or replace the Terms of Use at any time. The most current version of these Terms will be posted on our Site. You shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by you after any modification to the Terms constitutes your acceptance of the Terms of Use as modified.\n\n\n\n## 3. Eligibility ##\n\nYou hereby represent and warrant that you are fully able and competent to enter into the terms, conditions, obligations, affirmations, representations and warranties set forth in these Terms and to abide by and comply with these Terms.\n\nMetaMask is a global platform and by accessing the Content or Services, you are representing and warranting that, you are of the legal age of majority in your jurisdiction as is required to access such Services and Content and enter into arrangements as provided by the Service. You further represent that you are otherwise legally permitted to use the service in your jurisdiction including owning cryptographic tokens of value, and interacting with the Services or Content in any way. You further represent you are responsible for ensuring compliance with the laws of your jurisdiction and acknowledge that MetaMask is not liable for your compliance with such laws.\n\n## 4 Account Password and Security ##\n\nWhen setting up an account within MetaMask, you will be responsible for keeping your own account secrets, which may be a twelve-word seed phrase, an account file, or other locally stored secret information. MetaMask encrypts this information locally with a password you provide, that we never send to our servers. You agree to (a) never use the same password for MetaMask that you have ever used outside of this service; (b) keep your secret information and password confidential and do not share them with anyone else; (c) immediately notify MetaMask of any unauthorized use of your account or breach of security. MetaMask cannot and will not be liable for any loss or damage arising from your failure to comply with this section.\n\n## 5. Representations, Warranties, and Risks ##\n\n### 5.1. Warranty Disclaimer ###\n\nYou expressly understand and agree that your use of the Service is at your sole risk. The Service (including the Service and the Content) are provided on an \"AS IS\" and \"as available\" basis, without warranties of any kind, either express or implied, including, without limitation, implied warranties of merchantability, fitness for a particular purpose or non-infringement. You acknowledge that MetaMask has no control over, and no duty to take any action regarding: which users gain access to or use the Service; what effects the Content may have on you; how you may interpret or use the Content; or what actions you may take as a result of having been exposed to the Content. You release MetaMask from all liability for you having acquired or not acquired Content through the Service. MetaMask makes no representations concerning any Content contained in or accessed through the Service, and MetaMask will not be responsible or liable for the accuracy, copyright compliance, legality or decency of material contained in or accessed through the Service.\n\n### 5.2 Sophistication and Risk of Cryptographic Systems ###\n\nBy utilizing the Service or interacting with the Content or platform in any way, you represent that you understand the inherent risks associated with cryptographic systems; and warrant that you have an understanding of the usage and intricacies of native cryptographic tokens, like Ether (ETH) and Bitcoin (BTC), smart contract based tokens such as those that follow the Ethereum Token Standard (https://github.com/ethereum/EIPs/issues/20), and blockchain-based software systems.\n\n### 5.3 Risk of Regulatory Actions in One or More Jurisdictions ###\n\nMetaMask and ETH could be impacted by one or more regulatory inquiries or regulatory action, which could impede or limit the ability of MetaMask to continue to develop, or which could impede or limit your ability to access or use the Service or Ethereum blockchain.\n\n### 5.4 Risk of Weaknesses or Exploits in the Field of Cryptography ###\n\nYou acknowledge and understand that Cryptography is a progressing field. Advances in code cracking or technical advances such as the development of quantum computers may present risks to cryptocurrencies and Services of Content, which could result in the theft or loss of your cryptographic tokens or property. To the extent possible, MetaMask intends to update the protocol underlying Services to account for any advances in cryptography and to incorporate additional security measures, but does not guarantee or otherwise represent full security of the system. By using the Service or accessing Content, you acknowledge these inherent risks.\n\n### 5.5 Volatility of Crypto Currencies ###\n\nYou understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum blockchain. You acknowledge these risks and represent that MetaMask cannot be held liable for such fluctuations or increased costs.\n\n### 5.6 Application Security ###\n\nYou acknowledge that Ethereum applications are code subject to flaws and acknowledge that you are solely responsible for evaluating any code provided by the Services or Content and the trustworthiness of any third-party websites, products, smart-contracts, or Content you access or use through the Service. You further expressly acknowledge and represent that Ethereum applications can be written maliciously or negligently, that MetaMask cannot be held liable for your interaction with such applications and that such applications may cause the loss of property or even identity. This warning and others later provided by MetaMask in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Service or Content.\n\n## 6. Indemnity ##\n\nYou agree to release and to indemnify, defend and hold harmless MetaMask and its parents, subsidiaries, affiliates and agencies, as well as the officers, directors, employees, shareholders and representatives of any of the foregoing entities, from and against any and all losses, liabilities, expenses, damages, costs (including attorneys’ fees and court costs) claims or actions of any kind whatsoever arising or resulting from your use of the Service, your violation of these Terms of Use, and any of your acts or omissions that implicate publicity rights, defamation or invasion of privacy. MetaMask reserves the right, at its own expense, to assume exclusive defense and control of any matter otherwise subject to indemnification by you and, in such case, you agree to cooperate with MetaMask in the defense of such matter.\n\n## 7. Limitation on liability ##\n\nYOU ACKNOWLEDGE AND AGREE THAT YOU ASSUME FULL RESPONSIBILITY FOR YOUR USE OF THE SITE AND SERVICE. YOU ACKNOWLEDGE AND AGREE THAT ANY INFORMATION YOU SEND OR RECEIVE DURING YOUR USE OF THE SITE AND SERVICE MAY NOT BE SECURE AND MAY BE INTERCEPTED OR LATER ACQUIRED BY UNAUTHORIZED PARTIES. YOU ACKNOWLEDGE AND AGREE THAT YOUR USE OF THE SITE AND SERVICE IS AT YOUR OWN RISK. RECOGNIZING SUCH, YOU UNDERSTAND AND AGREE THAT, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER METAMASK NOR ITS SUPPLIERS OR LICENSORS WILL BE LIABLE TO YOU FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR OTHER DAMAGES OF ANY KIND, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER TANGIBLE OR INTANGIBLE LOSSES OR ANY OTHER DAMAGES BASED ON CONTRACT, TORT, STRICT LIABILITY OR ANY OTHER THEORY (EVEN IF METAMASK HAD BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), RESULTING FROM THE SITE OR SERVICE; THE USE OR THE INABILITY TO USE THE SITE OR SERVICE; UNAUTHORIZED ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; STATEMENTS OR CONDUCT OF ANY THIRD PARTY ON THE SITE OR SERVICE; ANY ACTIONS WE TAKE OR FAIL TO TAKE AS A RESULT OF COMMUNICATIONS YOU SEND TO US; HUMAN ERRORS; TECHNICAL MALFUNCTIONS; FAILURES, INCLUDING PUBLIC UTILITY OR TELEPHONE OUTAGES; OMISSIONS, INTERRUPTIONS, LATENCY, DELETIONS OR DEFECTS OF ANY DEVICE OR NETWORK, PROVIDERS, OR SOFTWARE (INCLUDING, BUT NOT LIMITED TO, THOSE THAT DO NOT PERMIT PARTICIPATION IN THE SERVICE); ANY INJURY OR DAMAGE TO COMPUTER EQUIPMENT; INABILITY TO FULLY ACCESS THE SITE OR SERVICE OR ANY OTHER WEBSITE; THEFT, TAMPERING, DESTRUCTION, OR UNAUTHORIZED ACCESS TO, IMAGES OR OTHER CONTENT OF ANY KIND; DATA THAT IS PROCESSED LATE OR INCORRECTLY OR IS INCOMPLETE OR LOST; TYPOGRAPHICAL, PRINTING OR OTHER ERRORS, OR ANY COMBINATION THEREOF; OR ANY OTHER MATTER RELATING TO THE SITE OR SERVICE.\n\nSOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. ACCORDINGLY, SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU.\n\n## 8. Our Proprietary Rights ##\n\nAll title, ownership and intellectual property rights in and to the Service are owned by MetaMask or its licensors. You acknowledge and agree that the Service contains proprietary and confidential information that is protected by applicable intellectual property and other laws. Except as expressly authorized by MetaMask, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, display or create derivative works based on the Service, in whole or in part. MetaMask issues a license for MetaMask, found [here](https://github.com/MetaMask/metamask-plugin/blob/master/LICENSE). For information on other licenses utilized in the development of MetaMask, please see our attribution page at: [https://metamask.io/attributions.html](https://metamask.io/attributions.html)\n\n## 9. Links ##\n\nThe Service provides, or third parties may provide, links to other World Wide Web or accessible sites, applications or resources. Because MetaMask has no control over such sites, applications and resources, you acknowledge and agree that MetaMask is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products or other materials on or available from such sites or resources. You further acknowledge and agree that MetaMask shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource.\n\n## 10. Termination and Suspension ##\n\nMetaMask may terminate or suspend all or part of the Service and your MetaMask access immediately, without prior notice or liability, if you breach any of the terms or conditions of the Terms. Upon termination of your access, your right to use the Service will immediately cease.\n\nThe following provisions of the Terms survive any termination of these Terms: INDEMNITY; WARRANTY DISCLAIMERS; LIMITATION ON LIABILITY; OUR PROPRIETARY RIGHTS; LINKS; TERMINATION; NO THIRD PARTY BENEFICIARIES; BINDING ARBITRATION AND CLASS ACTION WAIVER; GENERAL INFORMATION.\n\n## 11. No Third Party Beneficiaries ##\n\nYou agree that, except as otherwise expressly provided in these Terms, there shall be no third party beneficiaries to the Terms.\n\n## 12. Notice and Procedure For Making Claims of Copyright Infringement ##\n\nIf you believe that your copyright or the copyright of a person on whose behalf you are authorized to act has been infringed, please provide MetaMask’s Copyright Agent a written Notice containing the following information:\n\n· an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright or other intellectual property interest;\n\n· a description of the copyrighted work or other intellectual property that you claim has been infringed;\n\n· a description of where the material that you claim is infringing is located on the Service;\n\n· your address, telephone number, and email address;\n\n· a statement by you that you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law;\n\n· a statement by you, made under penalty of perjury, that the above information in your Notice is accurate and that you are the copyright or intellectual property owner or authorized to act on the copyright or intellectual property owner's behalf.\n\nMetaMask’s Copyright Agent can be reached at:\n\nEmail: copyright [at] metamask [dot] io\n\nMail:\n\nAttention:\n\nMetaMask Copyright ℅ ConsenSys\n\n49 Bogart Street\n\nBrooklyn, NY 11206\n\n## 13. Binding Arbitration and Class Action Waiver ##\n\nPLEASE READ THIS SECTION CAREFULLY – IT MAY SIGNIFICANTLY AFFECT YOUR LEGAL RIGHTS, INCLUDING YOUR RIGHT TO FILE A LAWSUIT IN COURT\n\n### 13.1 Initial Dispute Resolution ###\n\nThe parties shall use their best efforts to engage directly to settle any dispute, claim, question, or disagreement and engage in good faith negotiations which shall be a condition to either party initiating a lawsuit or arbitration.\n\n### 13.2 Binding Arbitration ###\n\nIf the parties do not reach an agreed upon solution within a period of 30 days from the time informal dispute resolution under the Initial Dispute Resolution provision begins, then either party may initiate binding arbitration as the sole means to resolve claims, subject to the terms set forth below. Specifically, all claims arising out of or relating to these Terms (including their formation, performance and breach), the parties’ relationship with each other and/or your use of the Service shall be finally settled by binding arbitration administered by the American Arbitration Association in accordance with the provisions of its Commercial Arbitration Rules and the supplementary procedures for consumer related disputes of the American Arbitration Association (the \"AAA\"), excluding any rules or procedures governing or permitting class actions.\n\nThe arbitrator, and not any federal, state or local court or agency, shall have exclusive authority to resolve all disputes arising out of or relating to the interpretation, applicability, enforceability or formation of these Terms, including, but not limited to any claim that all or any part of these Terms are void or voidable, or whether a claim is subject to arbitration. The arbitrator shall be empowered to grant whatever relief would be available in a court under law or in equity. The arbitrator’s award shall be written, and binding on the parties and may be entered as a judgment in any court of competent jurisdiction.\n\nThe parties understand that, absent this mandatory provision, they would have the right to sue in court and have a jury trial. They further understand that, in some instances, the costs of arbitration could exceed the costs of litigation and the right to discovery may be more limited in arbitration than in court.\n\n### 13.3 Location ###\n\nBinding arbitration shall take place in New York. You agree to submit to the personal jurisdiction of any federal or state court in New York County, New York, in order to compel arbitration, to stay proceedings pending arbitration, or to confirm, modify, vacate or enter judgment on the award entered by the arbitrator.\n\n### 13.4 Class Action Waiver ###\n\nThe parties further agree that any arbitration shall be conducted in their individual capacities only and not as a class action or other representative action, and the parties expressly waive their right to file a class action or seek relief on a class basis. YOU AND METAMASK AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY, AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING. If any court or arbitrator determines that the class action waiver set forth in this paragraph is void or unenforceable for any reason or that an arbitration can proceed on a class basis, then the arbitration provision set forth above shall be deemed null and void in its entirety and the parties shall be deemed to have not agreed to arbitrate disputes.\n\n### 13.5 Exception - Litigation of Intellectual Property and Small Claims Court Claims ###\n\nNotwithstanding the parties' decision to resolve all disputes through arbitration, either party may bring an action in state or federal court to protect its intellectual property rights (\"intellectual property rights\" means patents, copyrights, moral rights, trademarks, and trade secrets, but not privacy or publicity rights). Either party may also seek relief in a small claims court for disputes or claims within the scope of that court’s jurisdiction.\n\n### 13.6 30-Day Right to Opt Out ###\n\nYou have the right to opt-out and not be bound by the arbitration and class action waiver provisions set forth above by sending written notice of your decision to opt-out to the following address: MetaMask ℅ ConsenSys, 49 Bogart Street, Brooklyn NY 11206 and via email at support@metamask.io. The notice must be sent within 30 days of September 6, 2016 or your first use of the Service, whichever is later, otherwise you shall be bound to arbitrate disputes in accordance with the terms of those paragraphs. If you opt-out of these arbitration provisions, MetaMask also will not be bound by them.\n\n### 13.7 Changes to This Section ###\n\nMetaMask will provide 60-days’ notice of any changes to this section. Changes will become effective on the 60th day, and will apply prospectively only to any claims arising after the 60th day.\n\nFor any dispute not subject to arbitration you and MetaMask agree to submit to the personal and exclusive jurisdiction of and venue in the federal and state courts located in New York, New York. You further agree to accept service of process by mail, and hereby waive any and all jurisdictional and venue defenses otherwise available.\n\nThe Terms and the relationship between you and MetaMask shall be governed by the laws of the State of New York without regard to conflict of law provisions.\n\n## 14. General Information ##\n\n### 14.1 Entire Agreement ###\n\nThese Terms (and any additional terms, rules and conditions of participation that MetaMask may post on the Service) constitute the entire agreement between you and MetaMask with respect to the Service and supersedes any prior agreements, oral or written, between you and MetaMask. In the event of a conflict between these Terms and the additional terms, rules and conditions of participation, the latter will prevail over the Terms to the extent of the conflict.\n\n### 14.2 Waiver and Severability of Terms ###\n\nThe failure of MetaMask to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by an arbitrator or court of competent jurisdiction to be invalid, the parties nevertheless agree that the arbitrator or court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect.\n\n### 14.3 Statute of Limitations ###\n\nYou agree that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to the use of the Service or the Terms must be filed within one (1) year after such claim or cause of action arose or be forever barred.\n\n### 14.4 Section Titles ###\n\nThe section titles in the Terms are for convenience only and have no legal or contractual effect.\n\n### 14.5 Communications ###\n\nUsers with questions, complaints or claims with respect to the Service may contact us using the relevant contact information set forth above and at communications@metamask.io.\n\n## 15 Related Links ##\n\n**[Terms of Use](https://metamask.io/terms.html)**\n\n**[Privacy](https://metamask.io/privacy.html)**\n\n**[Attributions](https://metamask.io/attributions.html)**\n\n", + "body": "# Terms of Use #\n\n**THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION AND A WAIVER OF CLASS ACTION RIGHTS AS DETAILED IN SECTION 13. PLEASE READ THE AGREEMENT CAREFULLY.**\n\n_Our Terms of Use have been updated as of September 5, 2016_\n\n## 1. Acceptance of Terms ##\n\nDekuSan provides a platform for managing Ethereum (or \"ETH\") accounts, and allowing ordinary websites to interact with the Ethereum blockchain, while keeping the user in control over what transactions they approve, through our website located at[ ](http://metamask.io)[https://metamask.io/](https://metamask.io/) and browser plugin (the \"Site\") — which includes text, images, audio, code and other materials (collectively, the “Content”) and all of the features, and services provided. The Site, and any other features, tools, materials, or other services offered from time to time by DekuSan are referred to here as the “Service.” Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully before using the Service. By using or otherwise accessing the Services, or clicking to accept or agree to these Terms where that option is made available, you (1) accept and agree to these Terms (2) consent to the collection, use, disclosure and other handling of information as described in our Privacy Policy and (3) any additional terms, rules and conditions of participation issued by DekuSan from time to time. If you do not agree to the Terms, then you may not access or use the Content or Services.\n\n## 2. Modification of Terms of Use ##\n\nExcept for Section 13, providing for binding arbitration and waiver of class action rights, DekuSan reserves the right, at its sole discretion, to modify or replace the Terms of Use at any time. The most current version of these Terms will be posted on our Site. You shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by you after any modification to the Terms constitutes your acceptance of the Terms of Use as modified.\n\n\n\n## 3. Eligibility ##\n\nYou hereby represent and warrant that you are fully able and competent to enter into the terms, conditions, obligations, affirmations, representations and warranties set forth in these Terms and to abide by and comply with these Terms.\n\nDekuSan is a global platform and by accessing the Content or Services, you are representing and warranting that, you are of the legal age of majority in your jurisdiction as is required to access such Services and Content and enter into arrangements as provided by the Service. You further represent that you are otherwise legally permitted to use the service in your jurisdiction including owning cryptographic tokens of value, and interacting with the Services or Content in any way. You further represent you are responsible for ensuring compliance with the laws of your jurisdiction and acknowledge that DekuSan is not liable for your compliance with such laws.\n\n## 4 Account Password and Security ##\n\nWhen setting up an account within DekuSan, you will be responsible for keeping your own account secrets, which may be a twelve-word seed phrase, an account file, or other locally stored secret information. DekuSan encrypts this information locally with a password you provide, that we never send to our servers. You agree to (a) never use the same password for DekuSan that you have ever used outside of this service; (b) keep your secret information and password confidential and do not share them with anyone else; (c) immediately notify DekuSan of any unauthorized use of your account or breach of security. DekuSan cannot and will not be liable for any loss or damage arising from your failure to comply with this section.\n\n## 5. Representations, Warranties, and Risks ##\n\n### 5.1. Warranty Disclaimer ###\n\nYou expressly understand and agree that your use of the Service is at your sole risk. The Service (including the Service and the Content) are provided on an \"AS IS\" and \"as available\" basis, without warranties of any kind, either express or implied, including, without limitation, implied warranties of merchantability, fitness for a particular purpose or non-infringement. You acknowledge that DekuSan has no control over, and no duty to take any action regarding: which users gain access to or use the Service; what effects the Content may have on you; how you may interpret or use the Content; or what actions you may take as a result of having been exposed to the Content. You release DekuSan from all liability for you having acquired or not acquired Content through the Service. DekuSan makes no representations concerning any Content contained in or accessed through the Service, and DekuSan will not be responsible or liable for the accuracy, copyright compliance, legality or decency of material contained in or accessed through the Service.\n\n### 5.2 Sophistication and Risk of Cryptographic Systems ###\n\nBy utilizing the Service or interacting with the Content or platform in any way, you represent that you understand the inherent risks associated with cryptographic systems; and warrant that you have an understanding of the usage and intricacies of native cryptographic tokens, like Ether (ETH) and Bitcoin (BTC), smart contract based tokens such as those that follow the Ethereum Token Standard (https://github.com/ethereum/EIPs/issues/20), and blockchain-based software systems.\n\n### 5.3 Risk of Regulatory Actions in One or More Jurisdictions ###\n\nDekuSan and ETH could be impacted by one or more regulatory inquiries or regulatory action, which could impede or limit the ability of DekuSan to continue to develop, or which could impede or limit your ability to access or use the Service or Ethereum blockchain.\n\n### 5.4 Risk of Weaknesses or Exploits in the Field of Cryptography ###\n\nYou acknowledge and understand that Cryptography is a progressing field. Advances in code cracking or technical advances such as the development of quantum computers may present risks to cryptocurrencies and Services of Content, which could result in the theft or loss of your cryptographic tokens or property. To the extent possible, DekuSan intends to update the protocol underlying Services to account for any advances in cryptography and to incorporate additional security measures, but does not guarantee or otherwise represent full security of the system. By using the Service or accessing Content, you acknowledge these inherent risks.\n\n### 5.5 Volatility of Crypto Currencies ###\n\nYou understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum blockchain. You acknowledge these risks and represent that DekuSan cannot be held liable for such fluctuations or increased costs.\n\n### 5.6 Application Security ###\n\nYou acknowledge that Ethereum applications are code subject to flaws and acknowledge that you are solely responsible for evaluating any code provided by the Services or Content and the trustworthiness of any third-party websites, products, smart-contracts, or Content you access or use through the Service. You further expressly acknowledge and represent that Ethereum applications can be written maliciously or negligently, that DekuSan cannot be held liable for your interaction with such applications and that such applications may cause the loss of property or even identity. This warning and others later provided by DekuSan in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Service or Content.\n\n## 6. Indemnity ##\n\nYou agree to release and to indemnify, defend and hold harmless DekuSan and its parents, subsidiaries, affiliates and agencies, as well as the officers, directors, employees, shareholders and representatives of any of the foregoing entities, from and against any and all losses, liabilities, expenses, damages, costs (including attorneys’ fees and court costs) claims or actions of any kind whatsoever arising or resulting from your use of the Service, your violation of these Terms of Use, and any of your acts or omissions that implicate publicity rights, defamation or invasion of privacy. DekuSan reserves the right, at its own expense, to assume exclusive defense and control of any matter otherwise subject to indemnification by you and, in such case, you agree to cooperate with DekuSan in the defense of such matter.\n\n## 7. Limitation on liability ##\n\nYOU ACKNOWLEDGE AND AGREE THAT YOU ASSUME FULL RESPONSIBILITY FOR YOUR USE OF THE SITE AND SERVICE. YOU ACKNOWLEDGE AND AGREE THAT ANY INFORMATION YOU SEND OR RECEIVE DURING YOUR USE OF THE SITE AND SERVICE MAY NOT BE SECURE AND MAY BE INTERCEPTED OR LATER ACQUIRED BY UNAUTHORIZED PARTIES. YOU ACKNOWLEDGE AND AGREE THAT YOUR USE OF THE SITE AND SERVICE IS AT YOUR OWN RISK. RECOGNIZING SUCH, YOU UNDERSTAND AND AGREE THAT, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER METAMASK NOR ITS SUPPLIERS OR LICENSORS WILL BE LIABLE TO YOU FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR OTHER DAMAGES OF ANY KIND, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER TANGIBLE OR INTANGIBLE LOSSES OR ANY OTHER DAMAGES BASED ON CONTRACT, TORT, STRICT LIABILITY OR ANY OTHER THEORY (EVEN IF METAMASK HAD BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), RESULTING FROM THE SITE OR SERVICE; THE USE OR THE INABILITY TO USE THE SITE OR SERVICE; UNAUTHORIZED ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; STATEMENTS OR CONDUCT OF ANY THIRD PARTY ON THE SITE OR SERVICE; ANY ACTIONS WE TAKE OR FAIL TO TAKE AS A RESULT OF COMMUNICATIONS YOU SEND TO US; HUMAN ERRORS; TECHNICAL MALFUNCTIONS; FAILURES, INCLUDING PUBLIC UTILITY OR TELEPHONE OUTAGES; OMISSIONS, INTERRUPTIONS, LATENCY, DELETIONS OR DEFECTS OF ANY DEVICE OR NETWORK, PROVIDERS, OR SOFTWARE (INCLUDING, BUT NOT LIMITED TO, THOSE THAT DO NOT PERMIT PARTICIPATION IN THE SERVICE); ANY INJURY OR DAMAGE TO COMPUTER EQUIPMENT; INABILITY TO FULLY ACCESS THE SITE OR SERVICE OR ANY OTHER WEBSITE; THEFT, TAMPERING, DESTRUCTION, OR UNAUTHORIZED ACCESS TO, IMAGES OR OTHER CONTENT OF ANY KIND; DATA THAT IS PROCESSED LATE OR INCORRECTLY OR IS INCOMPLETE OR LOST; TYPOGRAPHICAL, PRINTING OR OTHER ERRORS, OR ANY COMBINATION THEREOF; OR ANY OTHER MATTER RELATING TO THE SITE OR SERVICE.\n\nSOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. ACCORDINGLY, SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU.\n\n## 8. Our Proprietary Rights ##\n\nAll title, ownership and intellectual property rights in and to the Service are owned by DekuSan or its licensors. You acknowledge and agree that the Service contains proprietary and confidential information that is protected by applicable intellectual property and other laws. Except as expressly authorized by DekuSan, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, display or create derivative works based on the Service, in whole or in part. DekuSan issues a license for DekuSan, found [here](https://github.com/DekuSan/metamask-plugin/blob/master/LICENSE). For information on other licenses utilized in the development of DekuSan, please see our attribution page at: [https://metamask.io/attributions.html](https://metamask.io/attributions.html)\n\n## 9. Links ##\n\nThe Service provides, or third parties may provide, links to other World Wide Web or accessible sites, applications or resources. Because DekuSan has no control over such sites, applications and resources, you acknowledge and agree that DekuSan is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products or other materials on or available from such sites or resources. You further acknowledge and agree that DekuSan shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource.\n\n## 10. Termination and Suspension ##\n\nDekuSan may terminate or suspend all or part of the Service and your DekuSan access immediately, without prior notice or liability, if you breach any of the terms or conditions of the Terms. Upon termination of your access, your right to use the Service will immediately cease.\n\nThe following provisions of the Terms survive any termination of these Terms: INDEMNITY; WARRANTY DISCLAIMERS; LIMITATION ON LIABILITY; OUR PROPRIETARY RIGHTS; LINKS; TERMINATION; NO THIRD PARTY BENEFICIARIES; BINDING ARBITRATION AND CLASS ACTION WAIVER; GENERAL INFORMATION.\n\n## 11. No Third Party Beneficiaries ##\n\nYou agree that, except as otherwise expressly provided in these Terms, there shall be no third party beneficiaries to the Terms.\n\n## 12. Notice and Procedure For Making Claims of Copyright Infringement ##\n\nIf you believe that your copyright or the copyright of a person on whose behalf you are authorized to act has been infringed, please provide DekuSan’s Copyright Agent a written Notice containing the following information:\n\n· an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright or other intellectual property interest;\n\n· a description of the copyrighted work or other intellectual property that you claim has been infringed;\n\n· a description of where the material that you claim is infringing is located on the Service;\n\n· your address, telephone number, and email address;\n\n· a statement by you that you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law;\n\n· a statement by you, made under penalty of perjury, that the above information in your Notice is accurate and that you are the copyright or intellectual property owner or authorized to act on the copyright or intellectual property owner's behalf.\n\nDekuSan’s Copyright Agent can be reached at:\n\nEmail: copyright [at] metamask [dot] io\n\nMail:\n\nAttention:\n\nDekuSan Copyright ℅ ConsenSys\n\n49 Bogart Street\n\nBrooklyn, NY 11206\n\n## 13. Binding Arbitration and Class Action Waiver ##\n\nPLEASE READ THIS SECTION CAREFULLY – IT MAY SIGNIFICANTLY AFFECT YOUR LEGAL RIGHTS, INCLUDING YOUR RIGHT TO FILE A LAWSUIT IN COURT\n\n### 13.1 Initial Dispute Resolution ###\n\nThe parties shall use their best efforts to engage directly to settle any dispute, claim, question, or disagreement and engage in good faith negotiations which shall be a condition to either party initiating a lawsuit or arbitration.\n\n### 13.2 Binding Arbitration ###\n\nIf the parties do not reach an agreed upon solution within a period of 30 days from the time informal dispute resolution under the Initial Dispute Resolution provision begins, then either party may initiate binding arbitration as the sole means to resolve claims, subject to the terms set forth below. Specifically, all claims arising out of or relating to these Terms (including their formation, performance and breach), the parties’ relationship with each other and/or your use of the Service shall be finally settled by binding arbitration administered by the American Arbitration Association in accordance with the provisions of its Commercial Arbitration Rules and the supplementary procedures for consumer related disputes of the American Arbitration Association (the \"AAA\"), excluding any rules or procedures governing or permitting class actions.\n\nThe arbitrator, and not any federal, state or local court or agency, shall have exclusive authority to resolve all disputes arising out of or relating to the interpretation, applicability, enforceability or formation of these Terms, including, but not limited to any claim that all or any part of these Terms are void or voidable, or whether a claim is subject to arbitration. The arbitrator shall be empowered to grant whatever relief would be available in a court under law or in equity. The arbitrator’s award shall be written, and binding on the parties and may be entered as a judgment in any court of competent jurisdiction.\n\nThe parties understand that, absent this mandatory provision, they would have the right to sue in court and have a jury trial. They further understand that, in some instances, the costs of arbitration could exceed the costs of litigation and the right to discovery may be more limited in arbitration than in court.\n\n### 13.3 Location ###\n\nBinding arbitration shall take place in New York. You agree to submit to the personal jurisdiction of any federal or state court in New York County, New York, in order to compel arbitration, to stay proceedings pending arbitration, or to confirm, modify, vacate or enter judgment on the award entered by the arbitrator.\n\n### 13.4 Class Action Waiver ###\n\nThe parties further agree that any arbitration shall be conducted in their individual capacities only and not as a class action or other representative action, and the parties expressly waive their right to file a class action or seek relief on a class basis. YOU AND METAMASK AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY, AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING. If any court or arbitrator determines that the class action waiver set forth in this paragraph is void or unenforceable for any reason or that an arbitration can proceed on a class basis, then the arbitration provision set forth above shall be deemed null and void in its entirety and the parties shall be deemed to have not agreed to arbitrate disputes.\n\n### 13.5 Exception - Litigation of Intellectual Property and Small Claims Court Claims ###\n\nNotwithstanding the parties' decision to resolve all disputes through arbitration, either party may bring an action in state or federal court to protect its intellectual property rights (\"intellectual property rights\" means patents, copyrights, moral rights, trademarks, and trade secrets, but not privacy or publicity rights). Either party may also seek relief in a small claims court for disputes or claims within the scope of that court’s jurisdiction.\n\n### 13.6 30-Day Right to Opt Out ###\n\nYou have the right to opt-out and not be bound by the arbitration and class action waiver provisions set forth above by sending written notice of your decision to opt-out to the following address: DekuSan ℅ ConsenSys, 49 Bogart Street, Brooklyn NY 11206 and via email at support@metamask.io. The notice must be sent within 30 days of September 6, 2016 or your first use of the Service, whichever is later, otherwise you shall be bound to arbitrate disputes in accordance with the terms of those paragraphs. If you opt-out of these arbitration provisions, DekuSan also will not be bound by them.\n\n### 13.7 Changes to This Section ###\n\nDekuSan will provide 60-days’ notice of any changes to this section. Changes will become effective on the 60th day, and will apply prospectively only to any claims arising after the 60th day.\n\nFor any dispute not subject to arbitration you and DekuSan agree to submit to the personal and exclusive jurisdiction of and venue in the federal and state courts located in New York, New York. You further agree to accept service of process by mail, and hereby waive any and all jurisdictional and venue defenses otherwise available.\n\nThe Terms and the relationship between you and DekuSan shall be governed by the laws of the State of New York without regard to conflict of law provisions.\n\n## 14. General Information ##\n\n### 14.1 Entire Agreement ###\n\nThese Terms (and any additional terms, rules and conditions of participation that DekuSan may post on the Service) constitute the entire agreement between you and DekuSan with respect to the Service and supersedes any prior agreements, oral or written, between you and DekuSan. In the event of a conflict between these Terms and the additional terms, rules and conditions of participation, the latter will prevail over the Terms to the extent of the conflict.\n\n### 14.2 Waiver and Severability of Terms ###\n\nThe failure of DekuSan to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by an arbitrator or court of competent jurisdiction to be invalid, the parties nevertheless agree that the arbitrator or court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect.\n\n### 14.3 Statute of Limitations ###\n\nYou agree that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to the use of the Service or the Terms must be filed within one (1) year after such claim or cause of action arose or be forever barred.\n\n### 14.4 Section Titles ###\n\nThe section titles in the Terms are for convenience only and have no legal or contractual effect.\n\n### 14.5 Communications ###\n\nUsers with questions, complaints or claims with respect to the Service may contact us using the relevant contact information set forth above and at communications@metamask.io.\n\n## 15 Related Links ##\n\n**[Terms of Use](https://metamask.io/terms.html)**\n\n**[Privacy](https://metamask.io/privacy.html)**\n\n**[Attributions](https://metamask.io/attributions.html)**\n\n", "id": 0 }, "network": "3", diff --git a/development/states/first-time.json b/development/states/first-time.json index ff707872..10878db8 100644 --- a/development/states/first-time.json +++ b/development/states/first-time.json @@ -16,7 +16,7 @@ "read": false, "date": "Thu Feb 09 2017", "title": "Terms of Use", - "body": "# Terms of Use #\n\n**THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION AND A WAIVER OF CLASS ACTION RIGHTS AS DETAILED IN SECTION 13. PLEASE READ THE AGREEMENT CAREFULLY.**\n\n_Our Terms of Use have been updated as of September 5, 2016_\n\n## 1. Acceptance of Terms ##\n\nMetaMask provides a platform for managing Ethereum (or \"ETH\") accounts, and allowing ordinary websites to interact with the Ethereum blockchain, while keeping the user in control over what transactions they approve, through our website located at[ ](http://metamask.io)[https://metamask.io/](https://metamask.io/) and browser plugin (the \"Site\") — which includes text, images, audio, code and other materials (collectively, the “Content”) and all of the features, and services provided. The Site, and any other features, tools, materials, or other services offered from time to time by MetaMask are referred to here as the “Service.” Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully before using the Service. By using or otherwise accessing the Services, or clicking to accept or agree to these Terms where that option is made available, you (1) accept and agree to these Terms (2) consent to the collection, use, disclosure and other handling of information as described in our Privacy Policy and (3) any additional terms, rules and conditions of participation issued by MetaMask from time to time. If you do not agree to the Terms, then you may not access or use the Content or Services.\n\n## 2. Modification of Terms of Use ##\n\nExcept for Section 13, providing for binding arbitration and waiver of class action rights, MetaMask reserves the right, at its sole discretion, to modify or replace the Terms of Use at any time. The most current version of these Terms will be posted on our Site. You shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by you after any modification to the Terms constitutes your acceptance of the Terms of Use as modified.\n\n\n\n## 3. Eligibility ##\n\nYou hereby represent and warrant that you are fully able and competent to enter into the terms, conditions, obligations, affirmations, representations and warranties set forth in these Terms and to abide by and comply with these Terms.\n\nMetaMask is a global platform and by accessing the Content or Services, you are representing and warranting that, you are of the legal age of majority in your jurisdiction as is required to access such Services and Content and enter into arrangements as provided by the Service. You further represent that you are otherwise legally permitted to use the service in your jurisdiction including owning cryptographic tokens of value, and interacting with the Services or Content in any way. You further represent you are responsible for ensuring compliance with the laws of your jurisdiction and acknowledge that MetaMask is not liable for your compliance with such laws.\n\n## 4 Account Password and Security ##\n\nWhen setting up an account within MetaMask, you will be responsible for keeping your own account secrets, which may be a twelve-word seed phrase, an account file, or other locally stored secret information. MetaMask encrypts this information locally with a password you provide, that we never send to our servers. You agree to (a) never use the same password for MetaMask that you have ever used outside of this service; (b) keep your secret information and password confidential and do not share them with anyone else; (c) immediately notify MetaMask of any unauthorized use of your account or breach of security. MetaMask cannot and will not be liable for any loss or damage arising from your failure to comply with this section.\n\n## 5. Representations, Warranties, and Risks ##\n\n### 5.1. Warranty Disclaimer ###\n\nYou expressly understand and agree that your use of the Service is at your sole risk. The Service (including the Service and the Content) are provided on an \"AS IS\" and \"as available\" basis, without warranties of any kind, either express or implied, including, without limitation, implied warranties of merchantability, fitness for a particular purpose or non-infringement. You acknowledge that MetaMask has no control over, and no duty to take any action regarding: which users gain access to or use the Service; what effects the Content may have on you; how you may interpret or use the Content; or what actions you may take as a result of having been exposed to the Content. You release MetaMask from all liability for you having acquired or not acquired Content through the Service. MetaMask makes no representations concerning any Content contained in or accessed through the Service, and MetaMask will not be responsible or liable for the accuracy, copyright compliance, legality or decency of material contained in or accessed through the Service.\n\n### 5.2 Sophistication and Risk of Cryptographic Systems ###\n\nBy utilizing the Service or interacting with the Content or platform in any way, you represent that you understand the inherent risks associated with cryptographic systems; and warrant that you have an understanding of the usage and intricacies of native cryptographic tokens, like Ether (ETH) and Bitcoin (BTC), smart contract based tokens such as those that follow the Ethereum Token Standard (https://github.com/ethereum/EIPs/issues/20), and blockchain-based software systems.\n\n### 5.3 Risk of Regulatory Actions in One or More Jurisdictions ###\n\nMetaMask and ETH could be impacted by one or more regulatory inquiries or regulatory action, which could impede or limit the ability of MetaMask to continue to develop, or which could impede or limit your ability to access or use the Service or Ethereum blockchain.\n\n### 5.4 Risk of Weaknesses or Exploits in the Field of Cryptography ###\n\nYou acknowledge and understand that Cryptography is a progressing field. Advances in code cracking or technical advances such as the development of quantum computers may present risks to cryptocurrencies and Services of Content, which could result in the theft or loss of your cryptographic tokens or property. To the extent possible, MetaMask intends to update the protocol underlying Services to account for any advances in cryptography and to incorporate additional security measures, but does not guarantee or otherwise represent full security of the system. By using the Service or accessing Content, you acknowledge these inherent risks.\n\n### 5.5 Volatility of Crypto Currencies ###\n\nYou understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum blockchain. You acknowledge these risks and represent that MetaMask cannot be held liable for such fluctuations or increased costs.\n\n### 5.6 Application Security ###\n\nYou acknowledge that Ethereum applications are code subject to flaws and acknowledge that you are solely responsible for evaluating any code provided by the Services or Content and the trustworthiness of any third-party websites, products, smart-contracts, or Content you access or use through the Service. You further expressly acknowledge and represent that Ethereum applications can be written maliciously or negligently, that MetaMask cannot be held liable for your interaction with such applications and that such applications may cause the loss of property or even identity. This warning and others later provided by MetaMask in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Service or Content.\n\n## 6. Indemnity ##\n\nYou agree to release and to indemnify, defend and hold harmless MetaMask and its parents, subsidiaries, affiliates and agencies, as well as the officers, directors, employees, shareholders and representatives of any of the foregoing entities, from and against any and all losses, liabilities, expenses, damages, costs (including attorneys’ fees and court costs) claims or actions of any kind whatsoever arising or resulting from your use of the Service, your violation of these Terms of Use, and any of your acts or omissions that implicate publicity rights, defamation or invasion of privacy. MetaMask reserves the right, at its own expense, to assume exclusive defense and control of any matter otherwise subject to indemnification by you and, in such case, you agree to cooperate with MetaMask in the defense of such matter.\n\n## 7. Limitation on liability ##\n\nYOU ACKNOWLEDGE AND AGREE THAT YOU ASSUME FULL RESPONSIBILITY FOR YOUR USE OF THE SITE AND SERVICE. YOU ACKNOWLEDGE AND AGREE THAT ANY INFORMATION YOU SEND OR RECEIVE DURING YOUR USE OF THE SITE AND SERVICE MAY NOT BE SECURE AND MAY BE INTERCEPTED OR LATER ACQUIRED BY UNAUTHORIZED PARTIES. YOU ACKNOWLEDGE AND AGREE THAT YOUR USE OF THE SITE AND SERVICE IS AT YOUR OWN RISK. RECOGNIZING SUCH, YOU UNDERSTAND AND AGREE THAT, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER METAMASK NOR ITS SUPPLIERS OR LICENSORS WILL BE LIABLE TO YOU FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR OTHER DAMAGES OF ANY KIND, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER TANGIBLE OR INTANGIBLE LOSSES OR ANY OTHER DAMAGES BASED ON CONTRACT, TORT, STRICT LIABILITY OR ANY OTHER THEORY (EVEN IF METAMASK HAD BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), RESULTING FROM THE SITE OR SERVICE; THE USE OR THE INABILITY TO USE THE SITE OR SERVICE; UNAUTHORIZED ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; STATEMENTS OR CONDUCT OF ANY THIRD PARTY ON THE SITE OR SERVICE; ANY ACTIONS WE TAKE OR FAIL TO TAKE AS A RESULT OF COMMUNICATIONS YOU SEND TO US; HUMAN ERRORS; TECHNICAL MALFUNCTIONS; FAILURES, INCLUDING PUBLIC UTILITY OR TELEPHONE OUTAGES; OMISSIONS, INTERRUPTIONS, LATENCY, DELETIONS OR DEFECTS OF ANY DEVICE OR NETWORK, PROVIDERS, OR SOFTWARE (INCLUDING, BUT NOT LIMITED TO, THOSE THAT DO NOT PERMIT PARTICIPATION IN THE SERVICE); ANY INJURY OR DAMAGE TO COMPUTER EQUIPMENT; INABILITY TO FULLY ACCESS THE SITE OR SERVICE OR ANY OTHER WEBSITE; THEFT, TAMPERING, DESTRUCTION, OR UNAUTHORIZED ACCESS TO, IMAGES OR OTHER CONTENT OF ANY KIND; DATA THAT IS PROCESSED LATE OR INCORRECTLY OR IS INCOMPLETE OR LOST; TYPOGRAPHICAL, PRINTING OR OTHER ERRORS, OR ANY COMBINATION THEREOF; OR ANY OTHER MATTER RELATING TO THE SITE OR SERVICE.\n\nSOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. ACCORDINGLY, SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU.\n\n## 8. Our Proprietary Rights ##\n\nAll title, ownership and intellectual property rights in and to the Service are owned by MetaMask or its licensors. You acknowledge and agree that the Service contains proprietary and confidential information that is protected by applicable intellectual property and other laws. Except as expressly authorized by MetaMask, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, display or create derivative works based on the Service, in whole or in part. MetaMask issues a license for MetaMask, found [here](https://github.com/MetaMask/metamask-plugin/blob/master/LICENSE). For information on other licenses utilized in the development of MetaMask, please see our attribution page at: [https://metamask.io/attributions.html](https://metamask.io/attributions.html)\n\n## 9. Links ##\n\nThe Service provides, or third parties may provide, links to other World Wide Web or accessible sites, applications or resources. Because MetaMask has no control over such sites, applications and resources, you acknowledge and agree that MetaMask is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products or other materials on or available from such sites or resources. You further acknowledge and agree that MetaMask shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource.\n\n## 10. Termination and Suspension ##\n\nMetaMask may terminate or suspend all or part of the Service and your MetaMask access immediately, without prior notice or liability, if you breach any of the terms or conditions of the Terms. Upon termination of your access, your right to use the Service will immediately cease.\n\nThe following provisions of the Terms survive any termination of these Terms: INDEMNITY; WARRANTY DISCLAIMERS; LIMITATION ON LIABILITY; OUR PROPRIETARY RIGHTS; LINKS; TERMINATION; NO THIRD PARTY BENEFICIARIES; BINDING ARBITRATION AND CLASS ACTION WAIVER; GENERAL INFORMATION.\n\n## 11. No Third Party Beneficiaries ##\n\nYou agree that, except as otherwise expressly provided in these Terms, there shall be no third party beneficiaries to the Terms.\n\n## 12. Notice and Procedure For Making Claims of Copyright Infringement ##\n\nIf you believe that your copyright or the copyright of a person on whose behalf you are authorized to act has been infringed, please provide MetaMask’s Copyright Agent a written Notice containing the following information:\n\n· an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright or other intellectual property interest;\n\n· a description of the copyrighted work or other intellectual property that you claim has been infringed;\n\n· a description of where the material that you claim is infringing is located on the Service;\n\n· your address, telephone number, and email address;\n\n· a statement by you that you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law;\n\n· a statement by you, made under penalty of perjury, that the above information in your Notice is accurate and that you are the copyright or intellectual property owner or authorized to act on the copyright or intellectual property owner's behalf.\n\nMetaMask’s Copyright Agent can be reached at:\n\nEmail: copyright [at] metamask [dot] io\n\nMail:\n\nAttention:\n\nMetaMask Copyright ℅ ConsenSys\n\n49 Bogart Street\n\nBrooklyn, NY 11206\n\n## 13. Binding Arbitration and Class Action Waiver ##\n\nPLEASE READ THIS SECTION CAREFULLY – IT MAY SIGNIFICANTLY AFFECT YOUR LEGAL RIGHTS, INCLUDING YOUR RIGHT TO FILE A LAWSUIT IN COURT\n\n### 13.1 Initial Dispute Resolution ###\n\nThe parties shall use their best efforts to engage directly to settle any dispute, claim, question, or disagreement and engage in good faith negotiations which shall be a condition to either party initiating a lawsuit or arbitration.\n\n### 13.2 Binding Arbitration ###\n\nIf the parties do not reach an agreed upon solution within a period of 30 days from the time informal dispute resolution under the Initial Dispute Resolution provision begins, then either party may initiate binding arbitration as the sole means to resolve claims, subject to the terms set forth below. Specifically, all claims arising out of or relating to these Terms (including their formation, performance and breach), the parties’ relationship with each other and/or your use of the Service shall be finally settled by binding arbitration administered by the American Arbitration Association in accordance with the provisions of its Commercial Arbitration Rules and the supplementary procedures for consumer related disputes of the American Arbitration Association (the \"AAA\"), excluding any rules or procedures governing or permitting class actions.\n\nThe arbitrator, and not any federal, state or local court or agency, shall have exclusive authority to resolve all disputes arising out of or relating to the interpretation, applicability, enforceability or formation of these Terms, including, but not limited to any claim that all or any part of these Terms are void or voidable, or whether a claim is subject to arbitration. The arbitrator shall be empowered to grant whatever relief would be available in a court under law or in equity. The arbitrator’s award shall be written, and binding on the parties and may be entered as a judgment in any court of competent jurisdiction.\n\nThe parties understand that, absent this mandatory provision, they would have the right to sue in court and have a jury trial. They further understand that, in some instances, the costs of arbitration could exceed the costs of litigation and the right to discovery may be more limited in arbitration than in court.\n\n### 13.3 Location ###\n\nBinding arbitration shall take place in New York. You agree to submit to the personal jurisdiction of any federal or state court in New York County, New York, in order to compel arbitration, to stay proceedings pending arbitration, or to confirm, modify, vacate or enter judgment on the award entered by the arbitrator.\n\n### 13.4 Class Action Waiver ###\n\nThe parties further agree that any arbitration shall be conducted in their individual capacities only and not as a class action or other representative action, and the parties expressly waive their right to file a class action or seek relief on a class basis. YOU AND METAMASK AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY, AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING. If any court or arbitrator determines that the class action waiver set forth in this paragraph is void or unenforceable for any reason or that an arbitration can proceed on a class basis, then the arbitration provision set forth above shall be deemed null and void in its entirety and the parties shall be deemed to have not agreed to arbitrate disputes.\n\n### 13.5 Exception - Litigation of Intellectual Property and Small Claims Court Claims ###\n\nNotwithstanding the parties' decision to resolve all disputes through arbitration, either party may bring an action in state or federal court to protect its intellectual property rights (\"intellectual property rights\" means patents, copyrights, moral rights, trademarks, and trade secrets, but not privacy or publicity rights). Either party may also seek relief in a small claims court for disputes or claims within the scope of that court’s jurisdiction.\n\n### 13.6 30-Day Right to Opt Out ###\n\nYou have the right to opt-out and not be bound by the arbitration and class action waiver provisions set forth above by sending written notice of your decision to opt-out to the following address: MetaMask ℅ ConsenSys, 49 Bogart Street, Brooklyn NY 11206 and via email at support@metamask.io. The notice must be sent within 30 days of September 6, 2016 or your first use of the Service, whichever is later, otherwise you shall be bound to arbitrate disputes in accordance with the terms of those paragraphs. If you opt-out of these arbitration provisions, MetaMask also will not be bound by them.\n\n### 13.7 Changes to This Section ###\n\nMetaMask will provide 60-days’ notice of any changes to this section. Changes will become effective on the 60th day, and will apply prospectively only to any claims arising after the 60th day.\n\nFor any dispute not subject to arbitration you and MetaMask agree to submit to the personal and exclusive jurisdiction of and venue in the federal and state courts located in New York, New York. You further agree to accept service of process by mail, and hereby waive any and all jurisdictional and venue defenses otherwise available.\n\nThe Terms and the relationship between you and MetaMask shall be governed by the laws of the State of New York without regard to conflict of law provisions.\n\n## 14. General Information ##\n\n### 14.1 Entire Agreement ###\n\nThese Terms (and any additional terms, rules and conditions of participation that MetaMask may post on the Service) constitute the entire agreement between you and MetaMask with respect to the Service and supersedes any prior agreements, oral or written, between you and MetaMask. In the event of a conflict between these Terms and the additional terms, rules and conditions of participation, the latter will prevail over the Terms to the extent of the conflict.\n\n### 14.2 Waiver and Severability of Terms ###\n\nThe failure of MetaMask to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by an arbitrator or court of competent jurisdiction to be invalid, the parties nevertheless agree that the arbitrator or court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect.\n\n### 14.3 Statute of Limitations ###\n\nYou agree that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to the use of the Service or the Terms must be filed within one (1) year after such claim or cause of action arose or be forever barred.\n\n### 14.4 Section Titles ###\n\nThe section titles in the Terms are for convenience only and have no legal or contractual effect.\n\n### 14.5 Communications ###\n\nUsers with questions, complaints or claims with respect to the Service may contact us using the relevant contact information set forth above and at communications@metamask.io.\n\n## 15 Related Links ##\n\n**[Terms of Use](https://metamask.io/terms.html)**\n\n**[Privacy](https://metamask.io/privacy.html)**\n\n**[Attributions](https://metamask.io/attributions.html)**\n\n", + "body": "# Terms of Use #\n\n**THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION AND A WAIVER OF CLASS ACTION RIGHTS AS DETAILED IN SECTION 13. PLEASE READ THE AGREEMENT CAREFULLY.**\n\n_Our Terms of Use have been updated as of September 5, 2016_\n\n## 1. Acceptance of Terms ##\n\nDekuSan provides a platform for managing Ethereum (or \"ETH\") accounts, and allowing ordinary websites to interact with the Ethereum blockchain, while keeping the user in control over what transactions they approve, through our website located at[ ](http://metamask.io)[https://metamask.io/](https://metamask.io/) and browser plugin (the \"Site\") — which includes text, images, audio, code and other materials (collectively, the “Content”) and all of the features, and services provided. The Site, and any other features, tools, materials, or other services offered from time to time by DekuSan are referred to here as the “Service.” Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully before using the Service. By using or otherwise accessing the Services, or clicking to accept or agree to these Terms where that option is made available, you (1) accept and agree to these Terms (2) consent to the collection, use, disclosure and other handling of information as described in our Privacy Policy and (3) any additional terms, rules and conditions of participation issued by DekuSan from time to time. If you do not agree to the Terms, then you may not access or use the Content or Services.\n\n## 2. Modification of Terms of Use ##\n\nExcept for Section 13, providing for binding arbitration and waiver of class action rights, DekuSan reserves the right, at its sole discretion, to modify or replace the Terms of Use at any time. The most current version of these Terms will be posted on our Site. You shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by you after any modification to the Terms constitutes your acceptance of the Terms of Use as modified.\n\n\n\n## 3. Eligibility ##\n\nYou hereby represent and warrant that you are fully able and competent to enter into the terms, conditions, obligations, affirmations, representations and warranties set forth in these Terms and to abide by and comply with these Terms.\n\nDekuSan is a global platform and by accessing the Content or Services, you are representing and warranting that, you are of the legal age of majority in your jurisdiction as is required to access such Services and Content and enter into arrangements as provided by the Service. You further represent that you are otherwise legally permitted to use the service in your jurisdiction including owning cryptographic tokens of value, and interacting with the Services or Content in any way. You further represent you are responsible for ensuring compliance with the laws of your jurisdiction and acknowledge that DekuSan is not liable for your compliance with such laws.\n\n## 4 Account Password and Security ##\n\nWhen setting up an account within DekuSan, you will be responsible for keeping your own account secrets, which may be a twelve-word seed phrase, an account file, or other locally stored secret information. DekuSan encrypts this information locally with a password you provide, that we never send to our servers. You agree to (a) never use the same password for DekuSan that you have ever used outside of this service; (b) keep your secret information and password confidential and do not share them with anyone else; (c) immediately notify DekuSan of any unauthorized use of your account or breach of security. DekuSan cannot and will not be liable for any loss or damage arising from your failure to comply with this section.\n\n## 5. Representations, Warranties, and Risks ##\n\n### 5.1. Warranty Disclaimer ###\n\nYou expressly understand and agree that your use of the Service is at your sole risk. The Service (including the Service and the Content) are provided on an \"AS IS\" and \"as available\" basis, without warranties of any kind, either express or implied, including, without limitation, implied warranties of merchantability, fitness for a particular purpose or non-infringement. You acknowledge that DekuSan has no control over, and no duty to take any action regarding: which users gain access to or use the Service; what effects the Content may have on you; how you may interpret or use the Content; or what actions you may take as a result of having been exposed to the Content. You release DekuSan from all liability for you having acquired or not acquired Content through the Service. DekuSan makes no representations concerning any Content contained in or accessed through the Service, and DekuSan will not be responsible or liable for the accuracy, copyright compliance, legality or decency of material contained in or accessed through the Service.\n\n### 5.2 Sophistication and Risk of Cryptographic Systems ###\n\nBy utilizing the Service or interacting with the Content or platform in any way, you represent that you understand the inherent risks associated with cryptographic systems; and warrant that you have an understanding of the usage and intricacies of native cryptographic tokens, like Ether (ETH) and Bitcoin (BTC), smart contract based tokens such as those that follow the Ethereum Token Standard (https://github.com/ethereum/EIPs/issues/20), and blockchain-based software systems.\n\n### 5.3 Risk of Regulatory Actions in One or More Jurisdictions ###\n\nDekuSan and ETH could be impacted by one or more regulatory inquiries or regulatory action, which could impede or limit the ability of DekuSan to continue to develop, or which could impede or limit your ability to access or use the Service or Ethereum blockchain.\n\n### 5.4 Risk of Weaknesses or Exploits in the Field of Cryptography ###\n\nYou acknowledge and understand that Cryptography is a progressing field. Advances in code cracking or technical advances such as the development of quantum computers may present risks to cryptocurrencies and Services of Content, which could result in the theft or loss of your cryptographic tokens or property. To the extent possible, DekuSan intends to update the protocol underlying Services to account for any advances in cryptography and to incorporate additional security measures, but does not guarantee or otherwise represent full security of the system. By using the Service or accessing Content, you acknowledge these inherent risks.\n\n### 5.5 Volatility of Crypto Currencies ###\n\nYou understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum blockchain. You acknowledge these risks and represent that DekuSan cannot be held liable for such fluctuations or increased costs.\n\n### 5.6 Application Security ###\n\nYou acknowledge that Ethereum applications are code subject to flaws and acknowledge that you are solely responsible for evaluating any code provided by the Services or Content and the trustworthiness of any third-party websites, products, smart-contracts, or Content you access or use through the Service. You further expressly acknowledge and represent that Ethereum applications can be written maliciously or negligently, that DekuSan cannot be held liable for your interaction with such applications and that such applications may cause the loss of property or even identity. This warning and others later provided by DekuSan in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Service or Content.\n\n## 6. Indemnity ##\n\nYou agree to release and to indemnify, defend and hold harmless DekuSan and its parents, subsidiaries, affiliates and agencies, as well as the officers, directors, employees, shareholders and representatives of any of the foregoing entities, from and against any and all losses, liabilities, expenses, damages, costs (including attorneys’ fees and court costs) claims or actions of any kind whatsoever arising or resulting from your use of the Service, your violation of these Terms of Use, and any of your acts or omissions that implicate publicity rights, defamation or invasion of privacy. DekuSan reserves the right, at its own expense, to assume exclusive defense and control of any matter otherwise subject to indemnification by you and, in such case, you agree to cooperate with DekuSan in the defense of such matter.\n\n## 7. Limitation on liability ##\n\nYOU ACKNOWLEDGE AND AGREE THAT YOU ASSUME FULL RESPONSIBILITY FOR YOUR USE OF THE SITE AND SERVICE. YOU ACKNOWLEDGE AND AGREE THAT ANY INFORMATION YOU SEND OR RECEIVE DURING YOUR USE OF THE SITE AND SERVICE MAY NOT BE SECURE AND MAY BE INTERCEPTED OR LATER ACQUIRED BY UNAUTHORIZED PARTIES. YOU ACKNOWLEDGE AND AGREE THAT YOUR USE OF THE SITE AND SERVICE IS AT YOUR OWN RISK. RECOGNIZING SUCH, YOU UNDERSTAND AND AGREE THAT, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER METAMASK NOR ITS SUPPLIERS OR LICENSORS WILL BE LIABLE TO YOU FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR OTHER DAMAGES OF ANY KIND, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER TANGIBLE OR INTANGIBLE LOSSES OR ANY OTHER DAMAGES BASED ON CONTRACT, TORT, STRICT LIABILITY OR ANY OTHER THEORY (EVEN IF METAMASK HAD BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), RESULTING FROM THE SITE OR SERVICE; THE USE OR THE INABILITY TO USE THE SITE OR SERVICE; UNAUTHORIZED ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; STATEMENTS OR CONDUCT OF ANY THIRD PARTY ON THE SITE OR SERVICE; ANY ACTIONS WE TAKE OR FAIL TO TAKE AS A RESULT OF COMMUNICATIONS YOU SEND TO US; HUMAN ERRORS; TECHNICAL MALFUNCTIONS; FAILURES, INCLUDING PUBLIC UTILITY OR TELEPHONE OUTAGES; OMISSIONS, INTERRUPTIONS, LATENCY, DELETIONS OR DEFECTS OF ANY DEVICE OR NETWORK, PROVIDERS, OR SOFTWARE (INCLUDING, BUT NOT LIMITED TO, THOSE THAT DO NOT PERMIT PARTICIPATION IN THE SERVICE); ANY INJURY OR DAMAGE TO COMPUTER EQUIPMENT; INABILITY TO FULLY ACCESS THE SITE OR SERVICE OR ANY OTHER WEBSITE; THEFT, TAMPERING, DESTRUCTION, OR UNAUTHORIZED ACCESS TO, IMAGES OR OTHER CONTENT OF ANY KIND; DATA THAT IS PROCESSED LATE OR INCORRECTLY OR IS INCOMPLETE OR LOST; TYPOGRAPHICAL, PRINTING OR OTHER ERRORS, OR ANY COMBINATION THEREOF; OR ANY OTHER MATTER RELATING TO THE SITE OR SERVICE.\n\nSOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. ACCORDINGLY, SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU.\n\n## 8. Our Proprietary Rights ##\n\nAll title, ownership and intellectual property rights in and to the Service are owned by DekuSan or its licensors. You acknowledge and agree that the Service contains proprietary and confidential information that is protected by applicable intellectual property and other laws. Except as expressly authorized by DekuSan, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, display or create derivative works based on the Service, in whole or in part. DekuSan issues a license for DekuSan, found [here](https://github.com/DekuSan/metamask-plugin/blob/master/LICENSE). For information on other licenses utilized in the development of DekuSan, please see our attribution page at: [https://metamask.io/attributions.html](https://metamask.io/attributions.html)\n\n## 9. Links ##\n\nThe Service provides, or third parties may provide, links to other World Wide Web or accessible sites, applications or resources. Because DekuSan has no control over such sites, applications and resources, you acknowledge and agree that DekuSan is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products or other materials on or available from such sites or resources. You further acknowledge and agree that DekuSan shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource.\n\n## 10. Termination and Suspension ##\n\nDekuSan may terminate or suspend all or part of the Service and your DekuSan access immediately, without prior notice or liability, if you breach any of the terms or conditions of the Terms. Upon termination of your access, your right to use the Service will immediately cease.\n\nThe following provisions of the Terms survive any termination of these Terms: INDEMNITY; WARRANTY DISCLAIMERS; LIMITATION ON LIABILITY; OUR PROPRIETARY RIGHTS; LINKS; TERMINATION; NO THIRD PARTY BENEFICIARIES; BINDING ARBITRATION AND CLASS ACTION WAIVER; GENERAL INFORMATION.\n\n## 11. No Third Party Beneficiaries ##\n\nYou agree that, except as otherwise expressly provided in these Terms, there shall be no third party beneficiaries to the Terms.\n\n## 12. Notice and Procedure For Making Claims of Copyright Infringement ##\n\nIf you believe that your copyright or the copyright of a person on whose behalf you are authorized to act has been infringed, please provide DekuSan’s Copyright Agent a written Notice containing the following information:\n\n· an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright or other intellectual property interest;\n\n· a description of the copyrighted work or other intellectual property that you claim has been infringed;\n\n· a description of where the material that you claim is infringing is located on the Service;\n\n· your address, telephone number, and email address;\n\n· a statement by you that you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law;\n\n· a statement by you, made under penalty of perjury, that the above information in your Notice is accurate and that you are the copyright or intellectual property owner or authorized to act on the copyright or intellectual property owner's behalf.\n\nDekuSan’s Copyright Agent can be reached at:\n\nEmail: copyright [at] metamask [dot] io\n\nMail:\n\nAttention:\n\nDekuSan Copyright ℅ ConsenSys\n\n49 Bogart Street\n\nBrooklyn, NY 11206\n\n## 13. Binding Arbitration and Class Action Waiver ##\n\nPLEASE READ THIS SECTION CAREFULLY – IT MAY SIGNIFICANTLY AFFECT YOUR LEGAL RIGHTS, INCLUDING YOUR RIGHT TO FILE A LAWSUIT IN COURT\n\n### 13.1 Initial Dispute Resolution ###\n\nThe parties shall use their best efforts to engage directly to settle any dispute, claim, question, or disagreement and engage in good faith negotiations which shall be a condition to either party initiating a lawsuit or arbitration.\n\n### 13.2 Binding Arbitration ###\n\nIf the parties do not reach an agreed upon solution within a period of 30 days from the time informal dispute resolution under the Initial Dispute Resolution provision begins, then either party may initiate binding arbitration as the sole means to resolve claims, subject to the terms set forth below. Specifically, all claims arising out of or relating to these Terms (including their formation, performance and breach), the parties’ relationship with each other and/or your use of the Service shall be finally settled by binding arbitration administered by the American Arbitration Association in accordance with the provisions of its Commercial Arbitration Rules and the supplementary procedures for consumer related disputes of the American Arbitration Association (the \"AAA\"), excluding any rules or procedures governing or permitting class actions.\n\nThe arbitrator, and not any federal, state or local court or agency, shall have exclusive authority to resolve all disputes arising out of or relating to the interpretation, applicability, enforceability or formation of these Terms, including, but not limited to any claim that all or any part of these Terms are void or voidable, or whether a claim is subject to arbitration. The arbitrator shall be empowered to grant whatever relief would be available in a court under law or in equity. The arbitrator’s award shall be written, and binding on the parties and may be entered as a judgment in any court of competent jurisdiction.\n\nThe parties understand that, absent this mandatory provision, they would have the right to sue in court and have a jury trial. They further understand that, in some instances, the costs of arbitration could exceed the costs of litigation and the right to discovery may be more limited in arbitration than in court.\n\n### 13.3 Location ###\n\nBinding arbitration shall take place in New York. You agree to submit to the personal jurisdiction of any federal or state court in New York County, New York, in order to compel arbitration, to stay proceedings pending arbitration, or to confirm, modify, vacate or enter judgment on the award entered by the arbitrator.\n\n### 13.4 Class Action Waiver ###\n\nThe parties further agree that any arbitration shall be conducted in their individual capacities only and not as a class action or other representative action, and the parties expressly waive their right to file a class action or seek relief on a class basis. YOU AND METAMASK AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY, AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING. If any court or arbitrator determines that the class action waiver set forth in this paragraph is void or unenforceable for any reason or that an arbitration can proceed on a class basis, then the arbitration provision set forth above shall be deemed null and void in its entirety and the parties shall be deemed to have not agreed to arbitrate disputes.\n\n### 13.5 Exception - Litigation of Intellectual Property and Small Claims Court Claims ###\n\nNotwithstanding the parties' decision to resolve all disputes through arbitration, either party may bring an action in state or federal court to protect its intellectual property rights (\"intellectual property rights\" means patents, copyrights, moral rights, trademarks, and trade secrets, but not privacy or publicity rights). Either party may also seek relief in a small claims court for disputes or claims within the scope of that court’s jurisdiction.\n\n### 13.6 30-Day Right to Opt Out ###\n\nYou have the right to opt-out and not be bound by the arbitration and class action waiver provisions set forth above by sending written notice of your decision to opt-out to the following address: DekuSan ℅ ConsenSys, 49 Bogart Street, Brooklyn NY 11206 and via email at support@metamask.io. The notice must be sent within 30 days of September 6, 2016 or your first use of the Service, whichever is later, otherwise you shall be bound to arbitrate disputes in accordance with the terms of those paragraphs. If you opt-out of these arbitration provisions, DekuSan also will not be bound by them.\n\n### 13.7 Changes to This Section ###\n\nDekuSan will provide 60-days’ notice of any changes to this section. Changes will become effective on the 60th day, and will apply prospectively only to any claims arising after the 60th day.\n\nFor any dispute not subject to arbitration you and DekuSan agree to submit to the personal and exclusive jurisdiction of and venue in the federal and state courts located in New York, New York. You further agree to accept service of process by mail, and hereby waive any and all jurisdictional and venue defenses otherwise available.\n\nThe Terms and the relationship between you and DekuSan shall be governed by the laws of the State of New York without regard to conflict of law provisions.\n\n## 14. General Information ##\n\n### 14.1 Entire Agreement ###\n\nThese Terms (and any additional terms, rules and conditions of participation that DekuSan may post on the Service) constitute the entire agreement between you and DekuSan with respect to the Service and supersedes any prior agreements, oral or written, between you and DekuSan. In the event of a conflict between these Terms and the additional terms, rules and conditions of participation, the latter will prevail over the Terms to the extent of the conflict.\n\n### 14.2 Waiver and Severability of Terms ###\n\nThe failure of DekuSan to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by an arbitrator or court of competent jurisdiction to be invalid, the parties nevertheless agree that the arbitrator or court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect.\n\n### 14.3 Statute of Limitations ###\n\nYou agree that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to the use of the Service or the Terms must be filed within one (1) year after such claim or cause of action arose or be forever barred.\n\n### 14.4 Section Titles ###\n\nThe section titles in the Terms are for convenience only and have no legal or contractual effect.\n\n### 14.5 Communications ###\n\nUsers with questions, complaints or claims with respect to the Service may contact us using the relevant contact information set forth above and at communications@metamask.io.\n\n## 15 Related Links ##\n\n**[Terms of Use](https://metamask.io/terms.html)**\n\n**[Privacy](https://metamask.io/privacy.html)**\n\n**[Attributions](https://metamask.io/attributions.html)**\n\n", "id": 0 }, "network": "3", diff --git a/development/test.html b/development/test.html index 49084c0a..2e01d3f6 100644 --- a/development/test.html +++ b/development/test.html @@ -2,7 +2,7 @@ <html> <head> <meta charset="utf-8"> - <title>MetaMask</title> + <title>DekuSan</title> <script> window.METAMASK_DEBUG = true diff --git a/development/ui-dev.js b/development/ui-dev.js index bae0ce50..86fb6dd5 100644 --- a/development/ui-dev.js +++ b/development/ui-dev.js @@ -34,7 +34,7 @@ let selectedView = queryString.view || 'first time' updateQueryParams(selectedView) // CSS -const MetaMaskUiCss = require('../ui/css') +const DekuSanUiCss = require('../ui/css') const injectCss = require('inject-css') @@ -57,7 +57,7 @@ const actions = { }, } -var css = MetaMaskUiCss() +var css = DekuSanUiCss() injectCss(css) // parse opts diff --git a/docs/QA_Guide.md b/docs/QA_Guide.md index 0b7c0e02..850e35f6 100644 --- a/docs/QA_Guide.md +++ b/docs/QA_Guide.md @@ -3,7 +3,7 @@ Steps to mark a full pass of QA complete. * Browsers: Opera, Chrome, Firefox, Edge. * OS: Ubuntu, Mac OSX, Windows -* Load older version of MetaMask and attempt to simulate updating the extension. +* Load older version of DekuSan and attempt to simulate updating the extension. * Open Developer Console in background and popup, inspect errors. * Watch the state logs * Transactions (unapproved txs -> rejected/submitted -> confirmed) @@ -41,7 +41,7 @@ Steps to mark a full pass of QA complete. * hd keyring * imported keyring * Change network from mainnet → ropsten → rinkeby → localhost (ganache) -* Ganache set blocktime to simulate retryTx in MetaMask +* Ganache set blocktime to simulate retryTx in DekuSan * Copy public key to clipboard * Export private key diff --git a/docs/README.md b/docs/README.md index 0739cfa4..7868abd1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,5 +9,5 @@ - [How to live reload on local dependency changes](./developing-on-deps.md) - [How to add new networks to the Provider Menu](./adding-new-networks.md) - [How to manage notices that appear when the app starts up](./notices.md) -- [How to port MetaMask to a new platform](./porting_to_new_environment.md) +- [How to port DekuSan to a new platform](./porting_to_new_environment.md) - [How to generate a visualization of this repository's development](./development-visualization.md)
\ No newline at end of file diff --git a/docs/bumping_version.md b/docs/bumping_version.md index df38369a..46319ef2 100644 --- a/docs/bumping_version.md +++ b/docs/bumping_version.md @@ -1,10 +1,10 @@ -# How to Bump MetaMask's Version Automatically +# How to Bump DekuSan's Version Automatically ``` npm run version:bump patch ``` -MetaMask publishes using a loose [semver](https://semver.org/) interpretation. We divide the three segments of our version into three types of version bump: +DekuSan publishes using a loose [semver](https://semver.org/) interpretation. We divide the three segments of our version into three types of version bump: ## Major diff --git a/docs/development-visualization.md b/docs/development-visualization.md index 95847300..c6483393 100644 --- a/docs/development-visualization.md +++ b/docs/development-visualization.md @@ -27,7 +27,7 @@ gource \ --date-format "%b %d, %Y" \ --highlight-dirs \ --user-friction 0.1 \ - --title "MetaMask Development History" \ + --title "DekuSan Development History" \ --output-ppm-stream - \ --output-framerate 30 \ | ffmpeg -y -r 30 -f image2pipe -vcodec ppm -i - -b 65536K metamask-dev-history.mp4 diff --git a/docs/extension_description/en.txt b/docs/extension_description/en.txt index 53bc4780..be363324 100644 --- a/docs/extension_description/en.txt +++ b/docs/extension_description/en.txt @@ -1,8 +1,8 @@ -MetaMask is an extension for accessing Ethereum enabled distributed applications, or "Dapps" in your normal browser! +DekuSan is an extension for accessing Ethereum enabled distributed applications, or "Dapps" in your normal browser! The extension injects the Ethereum web3 API into every website's javascript context, so that dapps can read from the blockchain. -MetaMask also lets the user create and manage their own identities, so when a Dapp wants to perform a transaction and write to the blockchain, the user gets a secure interface to review the transaction, before approving or rejecting it. +DekuSan also lets the user create and manage their own identities, so when a Dapp wants to perform a transaction and write to the blockchain, the user gets a secure interface to review the transaction, before approving or rejecting it. -Because it adds functionality to the normal browser context, MetaMask requires the permission to read and write to any webpage. You can always "view the source" of MetaMask the way you do any extension, or view the source code on Github: -https://github.com/MetaMask/metamask-plugin
\ No newline at end of file +Because it adds functionality to the normal browser context, DekuSan requires the permission to read and write to any webpage. You can always "view the source" of DekuSan the way you do any extension, or view the source code on Github: +https://github.com/DekuSan/metamask-plugin
\ No newline at end of file diff --git a/docs/multi_vault_planning.md b/docs/multi_vault_planning.md index fdde2bc5..9ab815ce 100644 --- a/docs/multi_vault_planning.md +++ b/docs/multi_vault_planning.md @@ -13,7 +13,7 @@ ReduxStore(reducer, initState) ReduxStore.subscribe(toDisk) -### KeyChainManager / idStore 2.0 (maybe just in MetaMaskController) +### KeyChainManager / idStore 2.0 (maybe just in DekuSanController) keychains: [] getAllAccounts(cb) getAllKeychainViewStates(cb) -> returns [ KeyChainViewState] @@ -46,7 +46,7 @@ ReduxStore.subscribe(toDisk) Where they should end up: -##### MetaMaskController +##### DekuSanController - getNetwork() diff --git a/docs/porting_to_new_environment.md b/docs/porting_to_new_environment.md index d901f2b7..33a09217 100644 --- a/docs/porting_to_new_environment.md +++ b/docs/porting_to_new_environment.md @@ -1,24 +1,24 @@ -# Guide to Porting MetaMask to a New Environment +# Guide to Porting DekuSan to a New Environment -MetaMask has been under continuous development for nearly two years now, and we’ve gradually discovered some useful abstractions that have allowed us to grow more easily. A couple of those layers together allow MetaMask to be ported to new environments and contexts increasingly easily (although it still could be easier, and please let us know if you get stuck!) +DekuSan has been under continuous development for nearly two years now, and we’ve gradually discovered some useful abstractions that have allowed us to grow more easily. A couple of those layers together allow DekuSan to be ported to new environments and contexts increasingly easily (although it still could be easier, and please let us know if you get stuck!) Before we get started, it's worth becoming familiar with our basic architecture: ![metamask-architecture-diagram](./architecture.png) -The `metamask-background` describes the file at `app/scripts/background.js`, which is the web extension singleton. This context instantiates an instance of the `MetaMask Controller`, which represents the user's accounts, a connection to the blockchain, and the interaction with new Dapps. +The `metamask-background` describes the file at `app/scripts/background.js`, which is the web extension singleton. This context instantiates an instance of the `DekuSan Controller`, which represents the user's accounts, a connection to the blockchain, and the interaction with new Dapps. When a new site is visited, the WebExtension creates a new `ContentScript` in that page's context, which can be seen at `app/scripts/contentscript.js`. This script represents a per-page setup process, which creates the per-page `web3` api, connects it to the background script via the Port API (wrapped in a [stream abstraction](https://github.com/substack/stream-handbook)), and injected into the DOM before anything loads. -The most confusing part about porting MetaMask to a new platform is the way we provide the Web3 API over a series of streams between contexts. Once you understand how we create the [InpageProvider](../app/scripts/lib/inpage-provider.js) in the [inpage.js script](../app/scripts/inpage.js), you will be able to understand how the [port-stream](../app/scripts/lib/port-stream.js) is just a thin wrapper around the [postMessage API](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage), and a similar stream API can be wrapped around any communication channel to communicate with the `MetaMaskController` via its `setupUntrustedCommunication(stream, domain)` method. +The most confusing part about porting DekuSan to a new platform is the way we provide the Web3 API over a series of streams between contexts. Once you understand how we create the [InpageProvider](../app/scripts/lib/inpage-provider.js) in the [inpage.js script](../app/scripts/inpage.js), you will be able to understand how the [port-stream](../app/scripts/lib/port-stream.js) is just a thin wrapper around the [postMessage API](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage), and a similar stream API can be wrapped around any communication channel to communicate with the `DekuSanController` via its `setupUntrustedCommunication(stream, domain)` method. -### The MetaMask Controller +### The DekuSan Controller -The core functionality of MetaMask all lives in what we call [The MetaMask Controller](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/metamask-controller.js). Our goal for this file is for it to eventually be its own javascript module that can be imported into any JS-compatible context, allowing it to fully manage an app's relationship to Ethereum. +The core functionality of DekuSan all lives in what we call [The DekuSan Controller](https://github.com/DekuSan/metamask-extension/blob/master/app/scripts/metamask-controller.js). Our goal for this file is for it to eventually be its own javascript module that can be imported into any JS-compatible context, allowing it to fully manage an app's relationship to Ethereum. #### Constructor -When calling `new MetaMask(opts)`, many platform-specific options are configured. The keys on `opts` are as follows: +When calling `new DekuSan(opts)`, many platform-specific options are configured. The keys on `opts` are as follows: - initState: The last emitted state, used for restoring persistent state between sessions. - platform: The `platform` object defines a variety of platform-specific functions, including opening the confirmation view, and opening websites. @@ -36,29 +36,29 @@ An object that provides two simple methods, which can encrypt in any format you The `platform` object has a variety of options: -- reload (function) - Will be called when MetaMask would like to reload its own context. -- openWindow ({ url }) - Will be called when MetaMask would like to open a web page. It will be passed a single `options` object with a `url` key, with a string value. -- getVersion() - Should return the current MetaMask version, as described in the current `CHANGELOG.md` or `app/manifest.json`. +- reload (function) - Will be called when DekuSan would like to reload its own context. +- openWindow ({ url }) - Will be called when DekuSan would like to open a web page. It will be passed a single `options` object with a `url` key, with a string value. +- getVersion() - Should return the current DekuSan version, as described in the current `CHANGELOG.md` or `app/manifest.json`. -#### [metamask.getState()](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/metamask-controller.js#L241) +#### [metamask.getState()](https://github.com/DekuSan/metamask-extension/blob/master/app/scripts/metamask-controller.js#L241) -This method returns a javascript object representing the current MetaMask state. This includes things like known accounts, sent transactions, current exchange rates, and more! The controller is also an event emitter, so you can subscribe to state updates via `metamask.on('update', handleStateUpdate)`. State examples available [here](https://github.com/MetaMask/metamask-extension/tree/master/development/states) under the `metamask` key. (Warning: some are outdated) +This method returns a javascript object representing the current DekuSan state. This includes things like known accounts, sent transactions, current exchange rates, and more! The controller is also an event emitter, so you can subscribe to state updates via `metamask.on('update', handleStateUpdate)`. State examples available [here](https://github.com/DekuSan/metamask-extension/tree/master/development/states) under the `metamask` key. (Warning: some are outdated) -#### [metamask.getApi()](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/metamask-controller.js#L274-L335) +#### [metamask.getApi()](https://github.com/DekuSan/metamask-extension/blob/master/app/scripts/metamask-controller.js#L274-L335) Returns a JavaScript object filled with callback functions representing every operation our user interface ever performs. Everything from creating new accounts, changing the current network, to sending a transaction, is provided via these API methods. We export this external API on an object because it allows us to easily expose this API over a port using [dnode](https://www.npmjs.com/package/dnode), which is how our WebExtension's UI works! ### The UI -The MetaMask UI is essentially just a website that can be configured by passing it the API and state subscriptions from above. Anyone could make a UI that consumes these, effectively reskinning MetaMask. +The DekuSan UI is essentially just a website that can be configured by passing it the API and state subscriptions from above. Anyone could make a UI that consumes these, effectively reskinning DekuSan. -You can see this in action in our file [ui/index.js](https://github.com/MetaMask/metamask-extension/blob/master/ui/index.js). There you can see an argument being passed in named `accountManager`, which is essentially a MetaMask controller (forgive its really outdated parameter name!). With access to that object, the UI is able to initialize a whole React/Redux app that relies on this API for its account/blockchain-related/persistent states. +You can see this in action in our file [ui/index.js](https://github.com/DekuSan/metamask-extension/blob/master/ui/index.js). There you can see an argument being passed in named `accountManager`, which is essentially a DekuSan controller (forgive its really outdated parameter name!). With access to that object, the UI is able to initialize a whole React/Redux app that relies on this API for its account/blockchain-related/persistent states. ## Putting it Together -As an example, a WebExtension is always defined by a `manifest.json` file. [In ours](https://github.com/MetaMask/metamask-extension/blob/master/app/manifest.json#L31), you can see that [background.js](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/background.js) is defined as a script to run in the background, and this is the file that we use to initialize the MetaMask controller. +As an example, a WebExtension is always defined by a `manifest.json` file. [In ours](https://github.com/DekuSan/metamask-extension/blob/master/app/manifest.json#L31), you can see that [background.js](https://github.com/DekuSan/metamask-extension/blob/master/app/scripts/background.js) is defined as a script to run in the background, and this is the file that we use to initialize the DekuSan controller. -In that file, there's a lot going on, so it's maybe worth focusing on our MetaMask controller constructor to start. It looks something like this: +In that file, there's a lot going on, so it's maybe worth focusing on our DekuSan controller constructor to start. It looks something like this: ```javascript const controller = new MetamaskController({ @@ -74,22 +74,22 @@ const controller = new MetamaskController({ ``` Since `background.js` is essentially the Extension setup file, we can see it doing all the things specific to the extension platform: - Defining how to open the UI for new messages, transactions, and even requests to unlock (reveal to the site) their account. -- Provide the instance's initial state, leaving MetaMask persistence to the platform. +- Provide the instance's initial state, leaving DekuSan persistence to the platform. - Providing a `platform` object. This is becoming our catch-all adapter for platforms to define a few other platform-variant features we require, like opening a web link. (Soon we will be moving encryption out here too, since our browser-encryption isn't portable enough!) ## Ports, streams, and Web3! -Everything so far has been enough to create a MetaMask wallet on virtually any platform that runs JS, but MetaMask's most unique feature isn't being a wallet, it's providing an Ethereum-enabled JavaScript context to websites. +Everything so far has been enough to create a DekuSan wallet on virtually any platform that runs JS, but DekuSan's most unique feature isn't being a wallet, it's providing an Ethereum-enabled JavaScript context to websites. -MetaMask has two kinds of [duplex stream APIs](https://github.com/substack/stream-handbook#duplex) that it exposes: -- [metamask.setupTrustedCommunication(connectionStream, originDomain)](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/metamask-controller.js#L352) - This stream is used to connect the user interface over a remote port, and may not be necessary for contexts where the interface and the metamask-controller share a process. -- [metamask.setupUntrustedCommunication(connectionStream, originDomain)](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/metamask-controller.js#L337) - This method is used to connect a new web site's web3 API to MetaMask's blockchain connection. Additionally, the `originDomain` is used to block detected phishing sites. +DekuSan has two kinds of [duplex stream APIs](https://github.com/substack/stream-handbook#duplex) that it exposes: +- [metamask.setupTrustedCommunication(connectionStream, originDomain)](https://github.com/DekuSan/metamask-extension/blob/master/app/scripts/metamask-controller.js#L352) - This stream is used to connect the user interface over a remote port, and may not be necessary for contexts where the interface and the metamask-controller share a process. +- [metamask.setupUntrustedCommunication(connectionStream, originDomain)](https://github.com/DekuSan/metamask-extension/blob/master/app/scripts/metamask-controller.js#L337) - This method is used to connect a new web site's web3 API to DekuSan's blockchain connection. Additionally, the `originDomain` is used to block detected phishing sites. ### Web3 as a Stream -If you are making a MetaMask-powered browser for a new platform, one of the trickiest tasks will be injecting the Web3 API into websites that are visited. On WebExtensions, we actually have to pipe data through a total of three JS contexts just to let sites talk to our background process (site -> contentscript -> background). +If you are making a DekuSan-powered browser for a new platform, one of the trickiest tasks will be injecting the Web3 API into websites that are visited. On WebExtensions, we actually have to pipe data through a total of three JS contexts just to let sites talk to our background process (site -> contentscript -> background). -To see how we do that, you can refer to the [inpage script](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/inpage.js) that we inject into every website. There you can see it creates a multiplex stream to the background, and uses it to initialize what we call the [inpage-provider](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/lib/inpage-provider.js), which you can see stubs a few methods out, but mostly just passes calls to `sendAsync` through the stream it's passed! That's really all the magic that's needed to create a web3-like API in a remote context, once you have a stream to MetaMask available. +To see how we do that, you can refer to the [inpage script](https://github.com/DekuSan/metamask-extension/blob/master/app/scripts/inpage.js) that we inject into every website. There you can see it creates a multiplex stream to the background, and uses it to initialize what we call the [inpage-provider](https://github.com/DekuSan/metamask-extension/blob/master/app/scripts/lib/inpage-provider.js), which you can see stubs a few methods out, but mostly just passes calls to `sendAsync` through the stream it's passed! That's really all the magic that's needed to create a web3-like API in a remote context, once you have a stream to DekuSan available. In `inpage.js` you can see we create a `PortStream`, that's just a class we use to wrap WebExtension ports as streams, so we can reuse our favorite stream abstraction over the more irregular API surface of the WebExtension. In a new platform, you will probably need to construct this stream differently. The key is that you need to construct a stream that talks from the site context to the background. Once you have that set up, it works like magic! @@ -97,5 +97,5 @@ If streams seem new and confusing to you, that's ok, they can seem strange at fi ## Conclusion -I hope this has been helpful to you! If you have any other questions, or points you think need clarification in this guide, please [open an issue on our GitHub](https://github.com/MetaMask/metamask-plugin/issues/new)! +I hope this has been helpful to you! If you have any other questions, or points you think need clarification in this guide, please [open an issue on our GitHub](https://github.com/DekuSan/metamask-plugin/issues/new)! diff --git a/docs/publishing.md b/docs/publishing.md index 45662900..76415030 100644 --- a/docs/publishing.md +++ b/docs/publishing.md @@ -1,6 +1,6 @@ # Publishing Guide -When publishing a new version of MetaMask, we follow this procedure: +When publishing a new version of DekuSan, we follow this procedure: ## Preparation @@ -21,7 +21,7 @@ npm run version:bump $BUMP_TYPE` where `$BUMP_TYPE` is one of `major`, `minor`, While we develop on the main `develop` branch, our production version is maintained on the `master` branch. -With each pull request, the @MetaMaskBot will comment with a build of that new pull request, so after bumping the version on `develop`, open a pull request against `master`, and once the pull request is reviewed and merged, you can download those builds for publication. +With each pull request, the @DekuSanBot will comment with a build of that new pull request, so after bumping the version on `develop`, open a pull request against `master`, and once the pull request is reviewed and merged, you can download those builds for publication. ## Publishing @@ -29,5 +29,5 @@ With each pull request, the @MetaMaskBot will comment with a build of that new p 2. Visit [the chrome developer dashboard](https://chrome.google.com/webstore/developer/dashboard?authuser=2). 3. Publish to [firefox addon marketplace](http://addons.mozilla.org/en-us/firefox/addon/ether-metamask). 4. Publish to [Opera store](https://addons.opera.com/en/extensions/details/metamask/). -5. Post on [Github releases](https://github.com/MetaMask/metamask-extension/releases) page. +5. Post on [Github releases](https://github.com/DekuSan/metamask-extension/releases) page. 6. Run the `npm run announce` script, and post that announcement in our public places. diff --git a/docs/state_dump.md b/docs/state_dump.md index 855445dc..4b6e5d2f 100644 --- a/docs/state_dump.md +++ b/docs/state_dump.md @@ -2,11 +2,11 @@ Sometimes a UI bug is hard to reproduce, but we'd like to rapidly develop against the application state that caused the bug. -In this case, a MetaMask developer will sometimes ask a user with a bug to perform a "state dump", so we can use some internal tools to reproduce and fix the bug. +In this case, a DekuSan developer will sometimes ask a user with a bug to perform a "state dump", so we can use some internal tools to reproduce and fix the bug. To take a state dump, follow these steps: -1. Get the MetaMask popup to the point where it shows the bug (the developer will probably specify exactly where). +1. Get the DekuSan popup to the point where it shows the bug (the developer will probably specify exactly where). 2. Right click on the extension popup UI, and in the menu, click "Inspect". This will open the developer tools. 3. In case it isn't already selected, click the "Console" tab in the new Developer Tools window. 4. In the console, type this command exactly: `logState()`. This should print a bunch of JSON text into your console. diff --git a/docs/team.md b/docs/team.md index 72f9d322..d406d6ef 100644 --- a/docs/team.md +++ b/docs/team.md @@ -1,31 +1,31 @@ # The Team -Here is an overview of the current MetaMask team, and their primary roles and responsibilities, in the order they joined the team. +Here is an overview of the current DekuSan team, and their primary roles and responsibilities, in the order they joined the team. ## Core Team Members -The core team maintains aspects of the main product (the extension) and the core libraries (the MetaMask Controller, provider-engine, etc). +The core team maintains aspects of the main product (the extension) and the core libraries (the DekuSan Controller, provider-engine, etc). ### Aaron Davis @kumavis Founder / Technical Lead -Especially in charge of connection to the blockchain. Wrote [provider-engine](https://github.com/MetaMask/provider-engine), and is currently working with @hermanjunge on our JavaScript light-client. +Especially in charge of connection to the blockchain. Wrote [provider-engine](https://github.com/DekuSan/provider-engine), and is currently working with @hermanjunge on our JavaScript light-client. ### Dan Finlay @danfinlay Software Engineer / Product Lead -Focused on the deliverable, user-valuable aspects of MetaMask, including usability and documentation. Coordinates efforts between different branches of the team, and integrations with other projects. +Focused on the deliverable, user-valuable aspects of DekuSan, including usability and documentation. Coordinates efforts between different branches of the team, and integrations with other projects. ### Frankie Pangilinan @frankiebee Software Engineer / Transaction Manager Lead -Frankie contributes code throughout MetaMask, but has become especially specialized in the way MetaMask manages transactions. She is also the original lead of the [Mascara](https://github.com/MetaMask/mascara) project. +Frankie contributes code throughout DekuSan, but has become especially specialized in the way DekuSan manages transactions. She is also the original lead of the [Mascara](https://github.com/DekuSan/mascara) project. ### Kevin Serrano @@ -39,14 +39,14 @@ Kevin is a software engineer, but also spends a lot of his time keeping the team @tmashuang QA Engineer -Thomas is the head of MetaMask Quality Assurance. He both takes the final pass of branches of code before we ship to production, and is also in charge of continuously improving our automated quality assurance process. +Thomas is the head of DekuSan Quality Assurance. He both takes the final pass of branches of code before we ship to production, and is also in charge of continuously improving our automated quality assurance process. ### Christian Jeria @cjeria User Experience Designer -Christian is the lead of MetaMask's user experience. He is continuously designing prototypes, testing them with users, and refining them with our developers for production. +Christian is the lead of DekuSan's user experience. He is continuously designing prototypes, testing them with users, and refining them with our developers for production. ### Paul Bouchon @@ -57,7 +57,7 @@ The newest member of the team! Paul is currently being onboarded, and finding hi ## Laboratory Team Members -These team members are working on projects that will benefit MetaMask, but are not directly working on the product itself. +These team members are working on projects that will benefit DekuSan, but are not directly working on the product itself. ### Herman Junge @@ -68,7 +68,7 @@ Herman is currently leading the Mustekala project, a JavaScript, IPFS-based Ethe ## Kyokan Team Members -[Kyokan](http://kyokan.io/) is a consulting firm that has been working closely with the MetaMask team on the latest version of our user interface. Their team members are not members of ConsenSys LLC, but they contribute a lot to the project. +[Kyokan](http://kyokan.io/) is a consulting firm that has been working closely with the DekuSan team on the latest version of our user interface. Their team members are not members of ConsenSys LLC, but they contribute a lot to the project. - Daniel Tsui (@sdsui) - Chi Kei Chan (@chikeichan) diff --git a/docs/translating-guide.md b/docs/translating-guide.md index 684316e4..0841c790 100644 --- a/docs/translating-guide.md +++ b/docs/translating-guide.md @@ -1,6 +1,6 @@ -# MetaMask Translation Guide +# DekuSan Translation Guide -The MetaMask browser extension supports new translations added in the form of new locales files added in `app/_locales`. +The DekuSan browser extension supports new translations added in the form of new locales files added in `app/_locales`. - [The MDN Guide to Internationalizing Extensions](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Internationalization) @@ -10,10 +10,10 @@ The MetaMask browser extension supports new translations added in the form of ne - Inside that folder there should be a `messages.json`. - An easy way to start your translation is to first **make a copy** of `app/_locales/en/messages.json` (the English translation), and then **translate the `message` key** for each in-app message. - **The `description` key** is just to add context for what the translation is about, it **does not need to be translated**. -- Add the language to the [locales index](https://github.com/MetaMask/metamask-extension/blob/master/app/_locales/index.json) `app/_locales/index.json` +- Add the language to the [locales index](https://github.com/DekuSan/metamask-extension/blob/master/app/_locales/index.json) `app/_locales/index.json` -That's it! When MetaMask is loaded on a computer with that language set as the system language, they will see your translation instead of the default one. +That's it! When DekuSan is loaded on a computer with that language set as the system language, they will see your translation instead of the default one. ## Testing @@ -25,5 +25,5 @@ node development/verify-locale-strings.js $YOUR_LOCALE Where `$YOUR_LOCALE` is your locale string (example: `es`), i.e. the name of your language folder. -To verify that your translation works in the app, you will need to [build a local copy](https://github.com/MetaMask/metamask-extension#building-locally) of MetaMask. You will need to change your browser language, your operating system language, and restart your browser (sorry it's so much work!). +To verify that your translation works in the app, you will need to [build a local copy](https://github.com/DekuSan/metamask-extension#building-locally) of DekuSan. You will need to change your browser language, your operating system language, and restart your browser (sorry it's so much work!). diff --git a/docs/video_script.txt b/docs/video_script.txt index d9e37a4e..f9fdac2f 100644 --- a/docs/video_script.txt +++ b/docs/video_script.txt @@ -1,10 +1,10 @@ -Hi, and welcome to MetaMask. +Hi, and welcome to DekuSan. Today we’re happy to share our gift to the Ethereum ecosystem. -The MetaMask browser extension turns Google Chrome into an Ethereum browser, letting websites retrieve data from the blockchain, and letting users securely manage identities and sign transactions. +The DekuSan browser extension turns Google Chrome into an Ethereum browser, letting websites retrieve data from the blockchain, and letting users securely manage identities and sign transactions. -When you start up MetaMask, you are given a seed phrase that can be used to restore all the accounts you ever create within MetaMask. +When you start up DekuSan, you are given a seed phrase that can be used to restore all the accounts you ever create within DekuSan. You can switch the current account with the switch account button in the top right, and you can add more accounts at the bottom of the account list. @@ -14,21 +14,21 @@ At first glance, Metamask enables you to send ether like a normal wallet applica Here’s a simple Ethereum distributed app, or Ðapp, called Tokens, that lets you easily deploy your own currency. -When you visit a Dapp like Tokens with MetaMask installed, that website has access to the Ethereum blockchain via the standard Web3 Javascript API. When it wants to write to the blockchain, it asks web3 to send the transaction, prompting MetaMask to ask for user confirmation. +When you visit a Dapp like Tokens with DekuSan installed, that website has access to the Ethereum blockchain via the standard Web3 Javascript API. When it wants to write to the blockchain, it asks web3 to send the transaction, prompting DekuSan to ask for user confirmation. After you submit a transaction, wait for the next block for the change to be reflected on the website...and there it is! -Now I have my own MetaMaskCoins! I can check my balance or, if I want to send some to another account, I can click the copy link on it. I check its balance, see it has none, then send it some meta-coins! +Now I have my own DekuSanCoins! I can check my balance or, if I want to send some to another account, I can click the copy link on it. I check its balance, see it has none, then send it some meta-coins! This has been nice, but it’s all been on the Morden test net. But with Metamask, I can always switch what network I’m working on, say the main network, and I’m ready issue a token with the full security of the main Ethereum blockchain. -MetaMask connects to these blockchains with no synchronization time because we host blockchain nodes by default. You can always point MetaMask at your own Ethereum RPC Server, and fully control your connection to the blockchain. +DekuSan connects to these blockchains with no synchronization time because we host blockchain nodes by default. You can always point DekuSan at your own Ethereum RPC Server, and fully control your connection to the blockchain. -And that’s how MetaMask lets ordinary websites talk to a trusted Ethereum provider, all while letting the user store and manage their own private keys. We hope this will make it easier than ever for people to get started creating and using a new wave of blockchain-enabled websites. +And that’s how DekuSan lets ordinary websites talk to a trusted Ethereum provider, all while letting the user store and manage their own private keys. We hope this will make it easier than ever for people to get started creating and using a new wave of blockchain-enabled websites. If you’d like to get started with Metamask right now, go ahead and click here to get the Chrome extension. -If you’d like to learn more about MetaMask, you can visit our website at metamask.io. +If you’d like to learn more about DekuSan, you can visit our website at metamask.io. You’re also welcome to join our slack, follow our twitter or read our source code. You can find all of those links and more at Metamask.io diff --git a/mascara/example/app/index.html b/mascara/example/app/index.html index 8afb6f3f..02317a87 100644 --- a/mascara/example/app/index.html +++ b/mascara/example/app/index.html @@ -4,7 +4,7 @@ <head> <meta charset="utf-8"> <script src="http://localhost:9001/metamascara.js"></script> - <title>MetaMask ZeroClient Example</title> + <title>DekuSan ZeroClient Example</title> </head> <body> diff --git a/mascara/proxy/index.html b/mascara/proxy/index.html index 4e167db7..8bf51cfe 100644 --- a/mascara/proxy/index.html +++ b/mascara/proxy/index.html @@ -4,9 +4,9 @@ <head> <meta charset="utf-8"> - <title>MetaMask ZeroClient Iframe</title> - <meta name="description" content="MetaMask ZeroClient"> - <meta name="author" content="MetaMask"> + <title>DekuSan ZeroClient Iframe</title> + <meta name="description" content="DekuSan ZeroClient"> + <meta name="author" content="DekuSan"> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> @@ -14,7 +14,7 @@ </head> <body> - Hello! I am the MetaMask iframe. + Hello! I am the DekuSan iframe. <script src="./proxy.js"></script> </body> </html> diff --git a/mascara/src/app/buy-ether-widget/index.js b/mascara/src/app/buy-ether-widget/index.js index c60221a0..f238bd40 100644 --- a/mascara/src/app/buy-ether-widget/index.js +++ b/mascara/src/app/buy-ether-widget/index.js @@ -132,7 +132,7 @@ class BuyEtherWidget extends Component { <div className="buy-ether__action-content-wrapper"> <div dangerouslySetInnerHTML={{ __html: qrImage.createTableTag(4) }} /> <div className="buy-ether__body-text">Deposit Ether directly into your account.</div> - <div className="buy-ether__small-body-text">(This is the account address that MetaMask created for you to recieve funds.)</div> + <div className="buy-ether__small-body-text">(This is the account address that DekuSan created for you to recieve funds.)</div> <div className="buy-ether__buttons"> <button className="first-time-flow__button" diff --git a/mascara/src/app/first-time/breadcrumbs.js b/mascara/src/app/first-time/breadcrumbs.js index d86e10d4..a9a5118b 100644 --- a/mascara/src/app/first-time/breadcrumbs.js +++ b/mascara/src/app/first-time/breadcrumbs.js @@ -16,7 +16,7 @@ export default class Breadcrumbs extends Component { <div key={i} className="breadcrumb" - style={{backgroundColor: i === currentIndex ? '#D8D8D8' : '#FFFFFF'}} + style={{ backgroundColor: i === currentIndex ? '#954a97' : '#FFFFFF'}} /> ))} </div> diff --git a/mascara/src/app/first-time/buy-ether-screen.js b/mascara/src/app/first-time/buy-ether-screen.js index e270392e..6962a72d 100644 --- a/mascara/src/app/first-time/buy-ether-screen.js +++ b/mascara/src/app/first-time/buy-ether-screen.js @@ -127,7 +127,7 @@ class BuyEtherScreen extends Component { <div className="buy-ether__action-content-wrapper"> <div dangerouslySetInnerHTML={{ __html: qrImage.createTableTag(4) }} /> <div className="buy-ether__body-text">Deposit Ether directly into your account.</div> - <div className="buy-ether__small-body-text">(This is the account address that MetaMask created for you to recieve funds.)</div> + <div className="buy-ether__small-body-text">(This is the account address that DekuSan created for you to recieve funds.)</div> <div className="buy-ether__buttons"> <button className="first-time-flow__button" @@ -153,7 +153,7 @@ class BuyEtherScreen extends Component { <Identicon address={this.props.address} diameter={70} /> <div className="buy-ether__title">Deposit Ether</div> <div className="buy-ether__body-text"> - MetaMask works best if you have Ether in your account to pay for transaction gas fees and more. To get Ether, choose from one of these methods. + DekuSan works best if you have Ether in your account to pay for transaction gas fees and more. To get Ether, choose from one of these methods. </div> <div className="buy-ether__content-wrapper"> <div className="buy-ether__content-headline-wrapper"> diff --git a/mascara/src/app/first-time/confirm-seed-screen.js b/mascara/src/app/first-time/confirm-seed-screen.js index dfbaffe3..445ef1e2 100644 --- a/mascara/src/app/first-time/confirm-seed-screen.js +++ b/mascara/src/app/first-time/confirm-seed-screen.js @@ -7,7 +7,6 @@ import shuffle from 'lodash.shuffle' import { compose } from 'recompose' import Identicon from '../../../../ui/app/components/identicon' import { confirmSeedWords, showModal } from '../../../../ui/app/actions' -import Breadcrumbs from './breadcrumbs' import LoadingScreen from './loading-screen' import { DEFAULT_ROUTE, INITIALIZE_BACKUP_PHRASE_ROUTE } from '../../../../ui/app/routes' @@ -135,7 +134,6 @@ class ConfirmSeedScreen extends Component { </button> </div> </div> - <Breadcrumbs total={3} currentIndex={1} /> </div> </div> </div> diff --git a/mascara/src/app/first-time/create-password-screen.js b/mascara/src/app/first-time/create-password-screen.js index 0908787d..89fa48d1 100644 --- a/mascara/src/app/first-time/create-password-screen.js +++ b/mascara/src/app/first-time/create-password-screen.js @@ -4,7 +4,6 @@ import {connect} from 'react-redux' import { withRouter } from 'react-router-dom' import { compose } from 'recompose' import { createNewVaultAndKeychain } from '../../../../ui/app/actions' -import Breadcrumbs from './breadcrumbs' import EventEmitter from 'events' import Mascot from '../../../../ui/app/components/mascot' import classnames from 'classnames' @@ -123,7 +122,7 @@ class CreatePasswordScreen extends Component { height="225" /> <div className="info"> - MetaMask is a secure identity vault for Ethereum. + DekuSan is a secure identity vault for Ethereum. </div> <div className="info"> It allows you to hold ether & tokens, and interact with decentralized applications. @@ -189,7 +188,6 @@ class CreatePasswordScreen extends Component { Import an account </a> { */ } - <Breadcrumbs total={3} currentIndex={0} /> </form> </div> </div> diff --git a/mascara/src/app/first-time/import-account-screen.js b/mascara/src/app/first-time/import-account-screen.js index 555a2638..86473fdc 100644 --- a/mascara/src/app/first-time/import-account-screen.js +++ b/mascara/src/app/first-time/import-account-screen.js @@ -187,7 +187,7 @@ class ImportAccountScreen extends Component { Import </button> <a - href="https://github.com/MetaMask/faq/blob/master/README.md#q-i-cant-use-the-import-feature-for-uploading-a-json-file-the-window-keeps-closing-when-i-try-to-select-a-file" + href="https://github.com/DekuSan/faq/blob/master/README.md#q-i-cant-use-the-import-feature-for-uploading-a-json-file-the-window-keeps-closing-when-i-try-to-select-a-file" className="first-time-flow__link import-account__faq-link" rel="noopener noreferrer" target="_blank" diff --git a/mascara/src/app/first-time/index.css b/mascara/src/app/first-time/index.css index 54c74a58..2b50dee1 100644 --- a/mascara/src/app/first-time/index.css +++ b/mascara/src/app/first-time/index.css @@ -2,13 +2,13 @@ font-family: 'Roboto'; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url('/fonts/Roboto/Roboto-Regular.ttf') format('truetype'); + src: local("Roboto"), local("Roboto-Regular"), url("/fonts/Roboto/Roboto-Regular.ttf") format("truetype"); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; } .first-time-flow { width: 100vw; - background-color: #fff; + background-color: #222222; overflow: auto; display: flex; justify-content: center; @@ -64,7 +64,6 @@ width: 100%; height: 100%; justify-content: center; - padding: 0 10px; } .first-view-main, @@ -108,7 +107,7 @@ .buy-ether { display: flex; flex-flow: column nowrap; - margin: 60px 0 30px 0; + margin: 20px 0 20px 0; position: relative; } @@ -123,7 +122,6 @@ .backup-phrase, .import-account, .buy-ether { - margin: 24px; display: flex; flex-flow: column nowrap; width: calc(100vw - 80px); @@ -147,7 +145,7 @@ } .first-view-main { - height: 100%; + height: calc(100% - 12px); flex-direction: column; align-items: center; justify-content: flex-start; @@ -181,12 +179,8 @@ .tou__body { margin: 0 !important; - padding: 16px 20px !important; - height: 30vh !important; - } - - .backup-phrase__content-wrapper { - flex-flow: column nowrap; + padding: 6px 10px !important; + height: 70vh !important; } .backup-phrase__body-text { @@ -212,7 +206,6 @@ .import-account__secret-phrase { width: initial !important; height: initial !important; - min-height: 190px; } .backup-phrase__confirm-seed-options { @@ -220,20 +213,18 @@ } } -.tou { - max-width: 46rem; -} - .create-password__title, .unique-image__title, .tou__title, .backup-phrase__title, .import-account__title, .buy-ether__title { - color: #1B344D; - font-size: 40px; - line-height: 51px; - margin-bottom: 24px; + color: #954A97; + font-size: 24px; + font-weight: 800; + font-stretch: condensed; + line-height: 24px; + margin-bottom: 20px; } .import-account__title { @@ -254,7 +245,6 @@ } .unique-image__title, -.tou__title, .backup-phrase__title, .buy-ether__title { margin-top: 24px; @@ -263,7 +253,7 @@ .unique-image__body-text, .backup-phrase__body-text, .buy-ether__body-text { - color: #1B344D; + color: #9b9b9b; font-size: 16px; line-height: 23px; font-family: Roboto; @@ -297,13 +287,12 @@ } .tou__body { - border: 1px solid #979797; - border-radius: 8px; - background-color: #FFFFFF; + border-radius: 2px; + background-color: #303030; margin: 0 142px 0 0; height: 200px; overflow-y: auto; - color: #757575; + color: #9b9b9b; font-family: Roboto; font-size: 12px; line-height: 15px; @@ -320,6 +309,7 @@ .backup-phrase__phrase { flex-grow: .5; min-width: 0; + max-width: 100%; } .backup-phrase__next-button { @@ -336,23 +326,25 @@ width: 285px; flex-grow: .5; min-width: 0; + max-width: 100%; } .backup-phrase__tips-text { - color: #5B5D67; + color: #9b9b9b; font-size: 16px; line-height: 23px; font-family: Roboto; min-width: 0; + max-width: 100%; } .backup-phrase__tips-text--link { - color: #2f9ae0; + color: #954A97; cursor: pointer; } .backup-phrase__tips-text--link:hover { - color: #2f9ae0; + color: #954A97; } .backup-phrase__tips-text--strong { @@ -362,6 +354,7 @@ @media only screen and (max-width: 768px) { .backup-phrase__content-wrapper { flex-direction: column; + flex-flow: column nowrap; } .backup-phrase__phrase { @@ -405,7 +398,7 @@ bottom: 0; height: 100%; width: 100%; - background-color: rgba(0,0,0,0.6); + background-color: rgba(0, 0, 0, 0.6); display: flex; flex-flow: column nowrap; align-items: center; @@ -449,11 +442,12 @@ button.backup-phrase__reveal-button:hover { .import-account__secret-phrase { height: 190px; width: 495px; - border: 1px solid #CDCDCD; + border: 1px solid #4a4a4a; border-radius: 6px; - background-color: #FFFFFF; + background-color: #222222; margin: 25px 0 36px; padding: 17px; + color: #FFF; } .import-account__secret-phrase { @@ -475,19 +469,20 @@ button.backup-phrase__reveal-button:hover { } .backup-phrase__confirm-seed-option { - color: #5B5D67; + color: #9b9b9b; font-family: Roboto; - font-size: 16px; - line-height: 21px; - background-color: #E7E7E7; - padding: 8px 19px; + font-size: 14px; + line-height: 18px; + background-color: #303030; + padding: 6px 10px; box-shadow: none; - min-width: 65px; - margin: 7px; + min-width: 40px; + margin: 4px; + border-radius: 2px; } .backup-phrase__confirm-seed-option--selected { - background-color: #85D1CC; + background-color: #5d5d5d; color: #FFFFFF; } @@ -502,7 +497,7 @@ button.backup-phrase__confirm-seed-option:hover { } .import-account__selector-label { - color: #1B344D; + color: #9b9b9b; font-size: 16px; } @@ -547,7 +542,7 @@ button.backup-phrase__confirm-seed-option:hover { .import-account__input-label { margin-bottom: 9px; - color: #1B344D; + color: #9b9b9b; font-size: 18px; line-height: 23px; } @@ -650,7 +645,6 @@ button.backup-phrase__confirm-seed-option:hover { min-width: 140px; } - .buy-ether__side-panel-item { border-bottom: 1px solid #CDCDCD; } @@ -687,7 +681,7 @@ button.backup-phrase__confirm-seed-option:hover { .buy-ether__faq-link { margin-top: 26px; - color: #1B344D !important; + color: #954a97 !important; font-size: 14px !important; line-height: 18px !important; font-family: Roboto; @@ -703,28 +697,29 @@ button.backup-phrase__confirm-seed-option:hover { } .first-time-flow__button { - height: 54px; - width: 198px; - box-shadow: 0 2px 4px 0 rgba(0,0,0,0.14); + height: 44px; + width: 100%; + border-radius: 4px; color: #FFFFFF; - font-size: 20px; + font-size: 16px; font-weight: 500; font-family: Roboto; + font-stretch: condensed; line-height: 26px; text-align: center; text-transform: uppercase; - margin: 35px 0 14px; + margin: 20px 0 30px; transition: 200ms ease-in-out; - background-color: rgba(247, 134, 28, 0.9); + background-color: rgba(149, 74, 151, 0.9); } button.first-time-flow__button[disabled] { opacity: .6; } -button.first-time-flow__button:hover { - transform: scale(1); - background-color: rgba(247, 134, 28, 0.9); +button.first-time-flow__button:not([disabled]):hover { + transform: scale(1.03); + background-color: rgba(149, 74, 151, 0.9); } .first-time-flow__button--tertiary { @@ -745,7 +740,7 @@ button.first-time-flow__button--tertiary:hover { } .first-time-flow__link { - color: #1B344D; + color: #9b9b9b; font-size: 18px; line-height: 23px; } @@ -753,6 +748,7 @@ button.first-time-flow__button--tertiary:hover { .breadcrumbs { display: flex; flex-flow: row nowrap; + margin-top: 20px; } .breadcrumb { @@ -782,7 +778,7 @@ button.first-time-flow__button--tertiary:hover { } .loading-screen__message { - color: #1B344D; + color: #9b9b9b; font-size: 20px; line-height: 26px; text-align: center; @@ -796,7 +792,7 @@ button.first-time-flow__button--tertiary:hover { } .shapeshift-logo { - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAloAAADICAYAAAAwak+LAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QQVCi8l1wQKFgAAIABJREFUeNrt3XmYZFWd5vH33BtbRi61UQUWoI1Nqa2iotI8DiIi4AoUKjoPAg2UjAvY2CpKOyKLgAqKPbZYzaMCj233Y2sXOlhOS4+K7YYO1W4gIspaSFcBtWVVbrHc85s/Yl8zMjMiMzLr+8EyI2O9ce/JuG/8zrnnSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQD9ZfdINjLQAAuoWdCnTCuVd+28ndLhd883u3XPr4/vb+Tzz3qlUDw8tfEATBP9z22QufQ4sAAHRLjFUAme0w2edk/ooTzr3qVjn3T9+/5dIfL/2AdeWhLoh/YHDZyteHYezwXDZzN40BAEDQQpe5uyQ7R9IqWfQOSaeccO7HdpnZJZLuuuPLlz+1VN7pCeddlfY+em4slnxvPJk6Lj207FCZySTlslN30RYAAAQtdJU59ytnVnWFnib51U76mjfdc/xfXfmY5C75wT9e9vBifY8nv/vTweTkxMfN+5OHRlYelEimh1zgkqWQZWbKZSbvoDUAALqJMVqQJJ1wzhW7JK1oaCDOeW/2qJkdJul2M10lubv/4ytXjPX7ezr+nCvjMnuWpHc5F1wYT6YeH16+aoXkBiUr/U+S5KN8dt/ojiO+d9NH/kBrAAB0S8AqgCSZ3ANNQpbkXBCGscNiscRUEIZHmI++LYt+/8qzLvvMCedcmejbkHX25e+U978y73+eGhh80/LVB2WGlx9wSLOQJZnM/MTE3tEpWgIAoJvoOkTJQ5KOqotaxf8kOaViQfzgWDqRyWWmJqMo/9f5vH/fcWde+gUz+7xceP+P/vljmYV8A8ed+dFnOOdOl3StmYWxeGLbyIrVY2E8vtbKXaP1IasgivK79u56aoxmAADoJipaKLlDUlSOWM6VKlpS1WXnXDI5kF47MDicDWPx+30UvUNmv5TP//IVZ/zPixZiwV/xtktPfsXbLv25ye6NfPTpMJ54aMWatbnlBzztoCCMHdQ+ZJmcnMb37v7Vb3/wjd00AwBAN1HRQjFv2J1yyksKy9e5cuqSSpWt4g0ucOlUeujZqYH06MT4Ph/lc4dJ+uyxZ3z4f0m61My+Kmmieaa3mqefscIDY87pBCm4WvKHypQPY4mpoeUHPJhKpdeVw5VreNnGK5zTxNjoE/KjRkMAABC00P2cJU06yRdyR1AJV67YeVhT2VKlSzEIlw2NrLAoisYmx0bvy2Uyh8jpGufc5ZL2VNJM1JCUOk41rmFhnaSU9zYii3JhPPHb5avXrosnkgOS/rxVyKqvZJWu8D6vzMTYw7QCAABBC72yT9LvJL2kEKSKg+FVClaV5OIqdyglIReGseHhFav/wjmnfC63NTs1vieXyx7moyjpfZQ175OS4oXntGmSVN3V3mSSd85NBmEYhGFM8UTqoYH0cCIxMLRO0vPNfOtnstZXmEyT4/u2e+/vpAkAAAha6A3nRr33D4Zh8JJyBauuolWqZlUCVimMVa4zM8Xi8afH4iue7pyTmWXMvLz3ymemtk2O79uRy0yuldMq54KWecvMZGbj8Xjy4YGhkcHU4PCfBUGoIBbKBeGATM8r3M83j2uuVc6qVLIKM2g5TYztif3m9i/+jEYAACBooSd+8OXLM8effXlY3UXoasZolfJLVVWrlGacasZv1eY3l3RBLBmGUjyRelp6ZPnTnAuVz2d2To7tezw7Nb46ivIH+CiKgiBwQSweJZKpB1ODy4aSA+nDnOn5peAlp8FiClPbEV4tx2XVVrIKv3pFuWxeM+jJBACAoIXZ+IOknc65VSpVsVSqbFWqV6WuQ+dKv7nKz9J1VSGt0u1oMnOSIoVhbNXQspWrtHyVAueyT/7pIa1Yc7BiiVRa0hGSSd4Xh2O1S1JtWPOcZaochRhFUTaKou+z6QEAvcD0Dqj2czPbVckytYGqFJzKt1WXslzrMGTtbjeTnEs4Wcq5wilxWhWXzFoXnVzjnRu7DJuEMB/lXZTP/ZRNDwAgaKGnnNyPvLdnlsZllQfDq2oerdI9yznLVboWy9WsSigz72sqYa4uFpXvG4SF5lj9VNW/FCtq5q19yHKlkNV4yKEV/yvcXvgZRbl4lM/9hq0PACBooafu+MoVeyTLSi5fCk/lAfDlHOWqKlz1Y7dq60o+ihQEYetUVDX2S8511BpdEMhHeZn3apq4WoSshl+t8JqZifE/OmknWx8AQNBCz5nZd03KVk/vUD2PVnXAKgevqi7EwpGGhaMMwzCsTUFOajVsPnBBXS9k67FZQRiTZIryuUpFTGreXdiiklW6bXJ873bnglG2PACAoIX5CFpbJEvVVpuaZZ5mXYaS96WQFasJV67Z48sv6moDk6Z5bUkuCOUk5TJT5fvVzjffWMmq/mmF0GXZzNSIc9rDlgcAELQwH35h3o/XzJ2lup/OVVWfKhWufC4nM68wFi8kmtocpuoB9Q3jqlyTOlbrXyRJYSyuMBbT1OR4eU6s+pBlVX2FVqxkmRWqWrmpie2SJu761g1TbHYAAEEL82FrPp97QIGrmzOrroBVk6JM+VxWzjmFsXhd159ryEiuyW+FCpWTZjidQxCESqRSmhrbK/NRzW3V0ziUL1mlC3FqfF/GOfdzNjkAgKCF+bInyucD13I6h6rT8hRPp5OZnFAQhArjibpw5RpHZLWoUgWu42xVe7MrhK1keliTE/uUz2Ukc5VKllUqWNUVLTMpMzXxZ845pnYAABC0ME+c2yNpmcmPNUznoNpuQO8jTY2PK55MKYzF2uSjxpnlG26qHvM13SI2a8hBqPTQcmUmxpXNThavbRwcb6XB8d5nvc/LzH7CRgcAELQwL374lY+NO+f25nO5h+qnc6ieHyvKZTU1PqZkOl0c+F7VpdgQykoPax6ynExB9XkPq8tVHZ1qpzIVxeCylcpNTWhy32jx4MJSBav0z0sy+Sgf+chPbLnt759gqwMACFqYT1vyudzKqvPoVKcl5aYmlZkaV2pwpDJPlmvS91eftJqnpOJ9O2uK09W8nHMaXrFa3rwm9u0pn3TazKs0sbx5U+RzSTP/CzY1AICghfn2Y/P+EEmRq5m41GlybFTZ7JTSwyuK82TVzhhfOzarbkLShhDWJEB1eK7odg8wMw0vP0DOSft2PSXv85XxWt7LZMplMvskbWFTAwAIWphvPy1UgGyyFJK89xrbs0vevAaHVzR2A1ZlnoZClpu+ruWCoDGMTZu42te3hleuUTw1oL07n1Q+ly1UtYoTlmYnx3dL7k42NQCAoIV59cN/vvqB4pF6oVygKJvR2OhOBWGooWLIclWD2JtP59BqALxrfj7DZkcodha7WjLvNbRsldIjKzS6a7uyUxPlylYuO7XcOfcHtjYAgKCFeWdmvzWzMJeZ1Nje3QrDmAZHltdN96CGcDWzQDT9DPDdMDi8QstWHqix0V2aHB9VFEV7iq/IjPAAgJ6KsQrQNAI598eJsdHD87msBgZHNDC0rJyIXP0M7y1ngJ+umlWV+IOgZeJq3lPYeTIz8xoYWqYgDPXUfz2qfCqbkZyXNMGWBgD0EhUttPLafDYTSw4MamBopOmJnqc9ArD9lPB117sZZKfZlb9S6WGtOfgw5bKTBzrn0pLWsJkBAAQtzKvjzrz0ODMbSI+sCAZHVhQCU7mIVTVjfPXPGUznUHOqnZrn7c7YrFbMTIlUWqsP/nO5wIVmdjxbGwBA0MJ8e0ciOfBQKj0UVNJO7QD42hg08+kcGhPVNCGrwyMNOxFPJLV67TMHJDuLTQ0AIGhh3hx39mUDZnbUwODw6kqEqg1WTmoxNqsSmloNp2o5zMq1mQW+iyGrJJZI5MJY/GVHrb9oiK0OAOgVBsOjlvdrw1hsdxCE66qzTbtqVvuhWPWTNjSZYLR6gP18fcMIwlQild6Wy2beLumz3Xzut1xyi83l8f967XmuG6830+cB5tJ2Z9Pe+qntvuWSW6xbr9vsffH3SNACiqFHR6bSQy82WXnclCsPVm8cj9Uw91XbLsPW0zlUT4Daqy7DmvdpppVrDk6O7dl5RreC1lwDVv3z8MGMxRCwlkK7LS37XMNWtz4DQNDCEhaG4RlhGM/Vto26ENTwMdRuqtEmZjlNQ9cbfzyxMpZIjh11yntWb9l8w1P99uFK4MJiCFjtnnMxtN1uhkygGcZoobZBhOFrXRAMlI8CbChCVQ2ArxtW5VzrObOadw0Wr7PiKXhaBrLefFZ777XywEOOjqL8Qf38AcuHOBZru3rLJbdYP7ffZss20+Xl7xPTfqlnFaDklWd99Ox4YuApJ/eMSsRp1iXYNA11xXx//U0kB+Lx5MCJku7p5wDUzfEjIGCxFtqvh07/3jpdl53+7dY/H3/zS6SAwSpAVcx5VSKZekZlOoe6GeAbxmZVdRnOcmxWy5DV42pW+ZtGPJFMJFLvXAw7K3aQINwt3fXDOlq6qGhBknTcmR9dnkwPPrNtuGkznYM6yVUtfzE5FzTJVvPxZc4pPbJ8+IiTznv6Pd+9ZWs3dxrdOnpwNt+0gdm2sW4ePdjP/vXa89xclrvdY/kbRTUqWig0hFhseTyefGlDdnKuYWxWfdKa6XQOLWeAX5CPJtPwijVrk+nBM7r5AT6bD1o+nLEYQ1anj+vHMNZquefyt8jfMepR0YIkKR5PvsYFwUAlZDXrCnTtDjhskpQ66zKsPPPCfD45J604YO1fFhdgXufAavd4uhKw0IFjNs+x2NstQQldL2SwCiBJYRg707nAqeY8hK7FDPCuKn817zbsrMuw+nnrX2T+PuvMTEPLVh1zzFs/eOBcvpXPxwc0OwEsxqAy2yrvfC8vf1/oBSpa0HFnf3RlLB4/tmkAasO1nxJ+ZhauoFX4xhGEq4dXrHm6pO39tANgLi0sxvBearuLpd3y9wWCFnpqaGTVRS4IaitUNfNoucZqllrHMtfZaPiaaxb6U84FQZBIpS+S1FcnmmYHAAIcQNDCIpdKJa7O5fzhTnqrpHhHc2a1nc6hw3BT/Uuw4JHrzlR66G/ZqcyvxTaL+HyvE9oYQNDCEnDr9RfkJZ21/r2fv0bSPznpxdWZxzVkrLlO59AkcdmChaxxSW+UdMfXP3FONJed42LZEfby6LO5vHYnoauTEDKboLKQ66TT1yeUzv92MjPnnOOgFBC00B23ffbC+yS95LS/+fwnTe6S2klK26Wk6kudTefQaN6Py8hJ+vqm6zactT9s27mcVmSuO67ZHIU2H6FiIdfJXNbN/ha6Zrud5jLlROmxzjnr1il5ZjNvF3N1LQ0cdYiyN1zwd+6k8z8VZDNTL8hlp+SjSOVzHjY9Fc/sZ4Cvn5PUze9Hxi8kvaDbIatfD2uf63L1alLHhVqv3ZiFuxuP79b7Wuj30q9tt7SOmSYFBC30T2NwbiSRiP1Izr1OJuVzGeWykzLz0+anWXUZVt/LzUtT3C3pik3XbXjppus2/H42TzDdt8h++2BfqJ15t9dDv4SSbrzHXrSPua7vfgwkBCQQtLCknPyev19rzv3aBcExgQvkgkDOBTJvymWmlM9nW57PcNZdhvN6qh19TdIRm67bcOX+spPoRSVoIXfYS6Fy0+tlmGtXU78EroVou0CvMEYLOvWiG44ws19Kiskkq+oRNEkyk8/nlfVesXhSQTD7fL4AgwoekfTuTddtuL1bT9jpWIvFcPTYTMeNTDfof6bPtxRmwu/0QIhunCNzrutof267wEJhMN1+bv17N54q2ddMSskKn1lmVolZJlnprDRWuBQEoeLJVFUDmnY6+DY397QJXizpi5uu27C3n791z/dg814efdeto8Lm8p5ms126EW466VbuVjuYy3N1M5ws9rY7l0DZzTDKlB5LGxWt/dhp7/+Hd8rrRlNtBat8ufiLK2Wu4mXzkTKT44onUgrDcA7xvhefIc4ku0fSWzddt+H+xfCNutlz9Gq27k7v04uxRzN5T/Nx3rxOl6fTENeustXto8fm0va6uW7no+3OdDtR5UK/YYzWfupNH/jCRqfgRhcEClxhPFb5clC8HFTGapV/Vt0vn8toYt9umfeNRyO2ylY94yQzPfX4g089/uA9J/U6ZPX6G2e3x8rMdDm7XRGZ7Xrq1fqdz+Xp1SH6/TovWD8f6UcIA0ELPffmi29KvuniL/5vOfdu51xhgHvxp1OLy67ucvm2QDKnfbufUHZyTLIOPsN6UM0yM02O7dbW+3+pidGdd//s1r97cj7XaemEub3YcXVjpzUf3Q+9nO9noSokvd6Rd2M5urFul1rbpbsNBC0smNM/dHPoAndXEATra6pUQd2/FhWsxkqXU5hIyDmnzMQ+je3ZoXwu2zAplutRyHLFqtr2R36vJx97oDC2zLlrFnId93KntRDvpV/aLsuy/7XdXlX7gPnGGK39J2Q9Q9JPJR0suUIWqj7CsMnRhtON1ZKkIIjJBaHMRzIfaXJ0p+IDQ0oODMnN5OjE8ml4OmPea3T3Nu3e/lj16+zYsnnjf/T7zngus4F3swtwrjvPmYz5WoqhZC5H7/X7e+uHtgssFVS09o+Q9TJJdxdCVnW4KXUHVlWtZjpWKwgUi8drnjM3Na7x0R0yH3VUxMpk8/rIhldr1chgx+9p28P3as+Tf6oPc5ctpsrBbCoI/bjjXkxhol929t1cjtkMwO9G213K7QToJipaSz5k3XSipNs7CtXONVatSpeLVa1mla54Mq3c1GRNl6H5SON7dmhoxZrGiU6rk75zuuqCN+iF69bqmve8Qe+7/puamMo2nri6/Jpe2x+5T7lspv65xiV9Z7FWR2ayQ5rP6kA3jm7D0gwdM223tB3sr6hoLWFv/uBNl5rp32UWFuJSh+oqXdXjuKpnjS9XuoKYYolk01A0PrqjMg9XXcgan8zoXW8+Ri9ct1aStGrZoK658GSlEvHmjTUI9eRjf1R2arLZzQ9LenQpbLdu7WSW2s6q3wbVo3H9znUuMYCghUUUsr70t5KukhSYitWnwv/N+LkajzasOhKxON4rnmre7eejvCb27moSwqR3nf5yHX/UuprrDz1wuS4++3gFzjUs6fat92tyrOXcozdu2bxxyXyIs8PC/v5FASBooe+86QNfcG+8ZpN708Vf/JbMPiGzqnBVqCsVrjLV3jazwNVQ6XKBwjDecvB7lMtqfHRn+bWyubxe+9+eo1Nf8fym93/Rsw/RhzecpKDYfRiEoXZt36rJfXtadilu2bzx8+ywANouQNBCz3hvg27XrttlOqUSrco5q/pC3VVzrHQ5pyAWKowlWt43ymU0NTYqSTr+pet0/mkva/vcL3rWwTrzdS+RmbRr+1bt3bmt3d0/x9YHAPQjBsMvEevfd+Nq5+wnZnpWaci6K4ctV54+wVUulANXeZS7rO4owc6+lJaqTMn0sHKZyRZVJ6fs1LhWrxjWhW89trP3dNwR2vrYNn35X+5SELQ81U8k6WZawNI31+7SfppigIoPsP+gorVUNqRz95nZOitVp8xkZpX6lVVOEG3Fk0VXiliV/ddcKl2xeFJhrF12d9r6+DZt+r93dfR8d939gDbe/FUF7efjelTSA/O9w+/n04wslWDEuqHtAgQt9I0wFl8VxhKTTvqTeS/zvhC0Sj/NZObL47PMfCFyFW9rOp5LdWO61D54mXkl08Nt7xMGgW76+vd00zd+2Pb9/OGRbXr/lTdoeCg93Vv/9pbNG8cWagfJTmtxVWfme1v107ohXAEELcyRcy4dxhMHB7H4k+aUl/lKZat0HsLqSlc5QDWrdNWGqtoCV+vAFcaThXMgtguFYaCv/5+f6Edbmp/3+fEndumsi65RJpvr5G1/gh0VwYb31X5Zmy0v7RkgaGGWeSsIwjXxeNLCMP6ENyucHseKVa5mlS7fvNKlVpUua13pCoJQQRjvaEGvuXGT7vh/v6u5bueefXr7hz4tMy83fS3g+1s2b9y+VHe8vTxRc7f1enm6uX67MdZrqYS1Xi0DIQ4gaO0P4i4MD0wkU5kgCLNmFplFxapVMTRNU+mq6URsU+mqvy0xMFh53mlcf/O39PuHC0cUTmayOu+D12vHzt0tp3Goc+1SrXIspR1VvwSb+Vi/831KpeoxV3M5DyFtd2n+7YCghfmRDOOJeDyR8i6ITZmP5H1UVd2q+tkwpstqx3eVK12qqXRZXaUrnhyYtvuwJJfL6+Jr/1G/uf8xnX/JZ/Rf256YbvB7yROSfj2fK7KTnWg3Phine47FeMTaXEJAvyzTdIGk1Xbp1eSzrboD66/vtL3Qdglb6A2md9g/OOdcPBZPxC0WH8tnpwascFoeObnyFBClGR1KxajyOQ3L50As3M9caVIIVyluucppdkxSYmBQ2cmxThZM+Xykd330hlxuYm+8w5AlSb/asnnjU/O9Ijs5999Md3RL5YN0unVTfVu/rJPS67Rbnm4sS7fWzVzOO9nJY3vZdglZc98+IGhhcSSuoXhyIPI+8vlMRt6iwDknmSsEKlPl5NClM0uXTpPoinNwTTdHl0zxZErZyXF1Mj2EmWkgmXDR1Iw+h6/aH7+R9vvOarY79MW+jbq5XXrZrTmbKh6fmv3XPgmtiwtdh/unMAjCIJketDCeyMskb14qdR+WjlasGhRfP0B+ujm6nAsVhD1rXtu2bN5450KGif3pdftlOfv1/Xe6XJ2cdJm2CxC0sISYWRiLJWKJVFrxeCLno8r4Le994WhF7+WrxnFVX64Z21U3R5ecFIunerXoly3VMLFUdlT9uLy9WKZ+PPpzumWi7S7+vxkqjYsLXYeQnFMYS8SDWDyfy0zGfD5f6TJ0rjiOq9At6OQKPYlW7jEsPUX54EQ5J2emeCpdGKfluvo5u0/Sd/vpg7GXH3qLeSfVrXEn3VwH3RwLM9vl6kW7memy0HaX9t8MCFro17wlF0sk07KEt1xm0kX5nOSC4iD5QM4Vo1Zp1LwrDoZ3TmaVcx6WxnY5FyiWSCqfy3ZzMR+UtLUfv4l2+wNyKeyo5rpuelmFWuhl6ka7meuy9GrHTsgibKF634ol4fQP3dzlP0xnUT6rbGbSyXxV4HLFQFUJXOWAVfxZmQPLyUc5TY2NTvtquexUbmx0Z7yDJvk/tmze+KXFsE1m+mHZ7Z2TmTnnnC30c8x0vcx1PbR6/rkczTefwaEfJqpd6Lbb73rxdzGT7UGQJWhhSQSt8keK8vmcZScnCuWrDgJXTfAy09TYaGHcVheC1pbNG2mz6HrQAoBeYTA8pstZCsO4GxhaplgsUTwysTThaVQ3KL5xYLwkBWHYraX5DBsEALCYMEYL7VNW1eV4ckCxRFK5bEa57KScC+RccTYtFxR/FubjKle6XKBYIqUol53roPi8pC+zTQAABC0smZxV3wfjXFAIXPGEMpPj8j5fmKjUWTFIFSY/dc6Vz5voXCAXhjLvO8t0zT0i6QE2CgBgMaHrcOn4l54mrprLhfCUSg8pNTAkOSmK8vJRpNJcXN5H8pEvzskVKYwl5roQt23ZvHGCzQwAIGhhIVwgaVuv4lWr64IwpoHBZUqk0pJUnPA0qprwtPCvXO2avU+yiQEABC0siE3Xbdgt6a09i1lWdZ3V3m5misWTSg0OK5FKFytb+WJly8tHkczbNEO02vYd3r5l88YdbGUAAEELCxm2fiLp0q7nLGsdhaqvc84pFksoPbJSYSxW6DaM8sUKVyQFwTSv2DKJfYqtCwAgaKEfXCfp3rmmLGsapWqvKw12byY5MKSBoWUKY3FFUSTv8zLfumrlfcuJtrZLupvNCgAgaGHBbbpuQ07SCZL8HHLWrB9XFcHkXKBkekgDQyOSXGH81sxfdAvdhgAAghb6KWw9Ienkuees6ktN+g+ttn/RmjyTmSkIY0oPLdfA4IjMS/l8NJPFuYotCgAgaKHfwtZ3JN06l5jV7NfZPo1kUhDqeX+xTme/8XitGBmS99M++dYtmzduYWsCAAha6MewdbpmOsmnNbuq8WhDq3+QNT5B5apCZWswldTHLzpN5552rL549Tv1rjNeo1wukjdrWg+TdBlbEQCwmHGS1SXu9A/dfLikeySlOkpZ1eOsbJqgVe46nO5xpngs1GcufosOPWhlzStOZXL65Jdu08/+856pHU89mQorRybulXTEls0bt7IVAQCLVcgqWNp+99Pbdj33mPVZSSd1mLPa30FNjja0ZnWuyuXxyYwuPvfVesGzDml4xlgs1Cv/8rl65dEvCJ/aM+buue8BJRNxSfrtls0bmdYBAEDQQt+HrTufe8z6oyWt6+wR1tFVHT2Tmd72uqN16itf2PZ+y4bT7qSXH6lXHH2k7v3jo9qxa89Htv3xP3/N1gMALGZ0He4nTv/QzQdIuk/Sqlbb3eq6AguXmnQb1h9tWD8+ywqP8t50xOFrdfV71su5zptaJpuX99FPBlLJ9c65XWw9AMBixWD4/cSm6zbskHRO63DdZt53a3V7m4eYac2qYV3z16fNKGRJUjIR00Aq+XJJO83sMjNbwxYEABC00O9h698kfbBpOprFKXcajjasujE9kNQ1F67vxmJfKeleM/s4WxAAQNBCv/ucpF+1vtk6vK714yMz/c2Zr9KBq0a6tcwHSPqwmW0zs9eYWZzNCAAgaKHvbLpuQ0bSa+pzVCdRqpOjDb2Z3nfmCTr6+Yf1YvEPknS7pN+a2avZmgAAghb6MWw9Jen1LaJU7WVrdXujfOR17JGH6/ijnt3rt/AsSf9uZp9kawIACFrox7D1HUmbGs5R2G78e90dq3+NItORzzlUF58zr4Wm57IlAQAELfRr2HqLpD813mKt0lVTJmnNyiE658aRAAACs0lEQVRdct5r5vstGFsRAEDQQt8y02slTdTOnTVdoqk92jCXi/SxC07V4ECCFQoAAEELJbd+6u33SmpxqhurSWTNOElXX3iq1q5exsoEAICghSZh6wpJX6sJV9Y0bpWvMEmZbE5vPOFIHfmcQ1mJAAAQtNCS6QJJ25rWraxxzJaZ6dgXH66z33A06w4AAIIW2rn10+fvkvTfK1nK2mQy6Wmrl+n9Z53IigMAgKCFDsPWjyVdXh+qqn8zkxKJmD550WlKJmKsNAAACFronPuEZL9rFbXiYaCrLzhFy4YGWFUAABC0MBPf+PT5OUknSvL1PYj5vNcZrztK656+hhUFAABBC7MKW9e/Y5ukU6pTVhR5nfn6o/TGV72IFQQAAEELcwxb/ybTNyTJe9PzDj9Ip5/44n5bzJAtBQAAFq3177vxwfOv/Irl8pH1mb1mdgJbCADQz6hooa01K4Zed8W7T3kscM73ySI9Luky59yIc+77bCEAALCo3f/wEyv2jU+90Mw+YmbbF6iClTGzvzKz5WwRAACwZJnZUWb2FTN7xMxyPQ5YT5jZp1jrAABgfwtcI2Z2hJldbmY7ehCyLjSz1axpAABA8DJ7mZl9zcweNbP8LMPVLjO70czirFEAAIDGwLXMzF5oZleb2Z4ZhKwPm9lBrEEAAIDOg9crzOybZrbVzKIm0zR81cxGWFMAAACzD1zLzexIM7vWzHaa2fVmdjBrBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAv/H8XHE+1w0AAOwAAAABJRU5ErkJggg=='); + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAloAAADICAYAAAAwak+LAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QQVCi8l1wQKFgAAIABJREFUeNrt3XmYZFWd5vH33BtbRi61UQUWoI1Nqa2iotI8DiIi4AoUKjoPAg2UjAvY2CpKOyKLgAqKPbZYzaMCj233Y2sXOlhOS4+K7YYO1W4gIspaSFcBtWVVbrHc85s/Yl8zMjMiMzLr+8EyI2O9ce/JuG/8zrnnSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQD9ZfdINjLQAAuoWdCnTCuVd+28ndLhd883u3XPr4/vb+Tzz3qlUDw8tfEATBP9z22QufQ4sAAHRLjFUAme0w2edk/ooTzr3qVjn3T9+/5dIfL/2AdeWhLoh/YHDZyteHYezwXDZzN40BAEDQQpe5uyQ7R9IqWfQOSaeccO7HdpnZJZLuuuPLlz+1VN7pCeddlfY+em4slnxvPJk6Lj207FCZySTlslN30RYAAAQtdJU59ytnVnWFnib51U76mjfdc/xfXfmY5C75wT9e9vBifY8nv/vTweTkxMfN+5OHRlYelEimh1zgkqWQZWbKZSbvoDUAALqJMVqQJJ1wzhW7JK1oaCDOeW/2qJkdJul2M10lubv/4ytXjPX7ezr+nCvjMnuWpHc5F1wYT6YeH16+aoXkBiUr/U+S5KN8dt/ojiO+d9NH/kBrAAB0S8AqgCSZ3ANNQpbkXBCGscNiscRUEIZHmI++LYt+/8qzLvvMCedcmejbkHX25e+U978y73+eGhh80/LVB2WGlx9wSLOQJZnM/MTE3tEpWgIAoJvoOkTJQ5KOqotaxf8kOaViQfzgWDqRyWWmJqMo/9f5vH/fcWde+gUz+7xceP+P/vljmYV8A8ed+dFnOOdOl3StmYWxeGLbyIrVY2E8vtbKXaP1IasgivK79u56aoxmAADoJipaKLlDUlSOWM6VKlpS1WXnXDI5kF47MDicDWPx+30UvUNmv5TP//IVZ/zPixZiwV/xtktPfsXbLv25ye6NfPTpMJ54aMWatbnlBzztoCCMHdQ+ZJmcnMb37v7Vb3/wjd00AwBAN1HRQjFv2J1yyksKy9e5cuqSSpWt4g0ucOlUeujZqYH06MT4Ph/lc4dJ+uyxZ3z4f0m61My+Kmmieaa3mqefscIDY87pBCm4WvKHypQPY4mpoeUHPJhKpdeVw5VreNnGK5zTxNjoE/KjRkMAABC00P2cJU06yRdyR1AJV67YeVhT2VKlSzEIlw2NrLAoisYmx0bvy2Uyh8jpGufc5ZL2VNJM1JCUOk41rmFhnaSU9zYii3JhPPHb5avXrosnkgOS/rxVyKqvZJWu8D6vzMTYw7QCAABBC72yT9LvJL2kEKSKg+FVClaV5OIqdyglIReGseHhFav/wjmnfC63NTs1vieXyx7moyjpfZQ175OS4oXntGmSVN3V3mSSd85NBmEYhGFM8UTqoYH0cCIxMLRO0vPNfOtnstZXmEyT4/u2e+/vpAkAAAha6A3nRr33D4Zh8JJyBauuolWqZlUCVimMVa4zM8Xi8afH4iue7pyTmWXMvLz3ymemtk2O79uRy0yuldMq54KWecvMZGbj8Xjy4YGhkcHU4PCfBUGoIBbKBeGATM8r3M83j2uuVc6qVLIKM2g5TYztif3m9i/+jEYAACBooSd+8OXLM8effXlY3UXoasZolfJLVVWrlGacasZv1eY3l3RBLBmGUjyRelp6ZPnTnAuVz2d2To7tezw7Nb46ivIH+CiKgiBwQSweJZKpB1ODy4aSA+nDnOn5peAlp8FiClPbEV4tx2XVVrIKv3pFuWxeM+jJBACAoIXZ+IOknc65VSpVsVSqbFWqV6WuQ+dKv7nKz9J1VSGt0u1oMnOSIoVhbNXQspWrtHyVAueyT/7pIa1Yc7BiiVRa0hGSSd4Xh2O1S1JtWPOcZaochRhFUTaKou+z6QEAvcD0Dqj2czPbVckytYGqFJzKt1WXslzrMGTtbjeTnEs4Wcq5wilxWhWXzFoXnVzjnRu7DJuEMB/lXZTP/ZRNDwAgaKGnnNyPvLdnlsZllQfDq2oerdI9yznLVboWy9WsSigz72sqYa4uFpXvG4SF5lj9VNW/FCtq5q19yHKlkNV4yKEV/yvcXvgZRbl4lM/9hq0PACBooafu+MoVeyTLSi5fCk/lAfDlHOWqKlz1Y7dq60o+ihQEYetUVDX2S8511BpdEMhHeZn3apq4WoSshl+t8JqZifE/OmknWx8AQNBCz5nZd03KVk/vUD2PVnXAKgevqi7EwpGGhaMMwzCsTUFOajVsPnBBXS9k67FZQRiTZIryuUpFTGreXdiiklW6bXJ873bnglG2PACAoIX5CFpbJEvVVpuaZZ5mXYaS96WQFasJV67Z48sv6moDk6Z5bUkuCOUk5TJT5fvVzjffWMmq/mmF0GXZzNSIc9rDlgcAELQwH35h3o/XzJ2lup/OVVWfKhWufC4nM68wFi8kmtocpuoB9Q3jqlyTOlbrXyRJYSyuMBbT1OR4eU6s+pBlVX2FVqxkmRWqWrmpie2SJu761g1TbHYAAEEL82FrPp97QIGrmzOrroBVk6JM+VxWzjmFsXhd159ryEiuyW+FCpWTZjidQxCESqRSmhrbK/NRzW3V0ziUL1mlC3FqfF/GOfdzNjkAgKCF+bInyucD13I6h6rT8hRPp5OZnFAQhArjibpw5RpHZLWoUgWu42xVe7MrhK1keliTE/uUz2Ukc5VKllUqWNUVLTMpMzXxZ845pnYAABC0ME+c2yNpmcmPNUznoNpuQO8jTY2PK55MKYzF2uSjxpnlG26qHvM13SI2a8hBqPTQcmUmxpXNThavbRwcb6XB8d5nvc/LzH7CRgcAELQwL374lY+NO+f25nO5h+qnc6ieHyvKZTU1PqZkOl0c+F7VpdgQykoPax6ynExB9XkPq8tVHZ1qpzIVxeCylcpNTWhy32jx4MJSBav0z0sy+Sgf+chPbLnt759gqwMACFqYT1vyudzKqvPoVKcl5aYmlZkaV2pwpDJPlmvS91eftJqnpOJ9O2uK09W8nHMaXrFa3rwm9u0pn3TazKs0sbx5U+RzSTP/CzY1AICghfn2Y/P+EEmRq5m41GlybFTZ7JTSwyuK82TVzhhfOzarbkLShhDWJEB1eK7odg8wMw0vP0DOSft2PSXv85XxWt7LZMplMvskbWFTAwAIWphvPy1UgGyyFJK89xrbs0vevAaHVzR2A1ZlnoZClpu+ruWCoDGMTZu42te3hleuUTw1oL07n1Q+ly1UtYoTlmYnx3dL7k42NQCAoIV59cN/vvqB4pF6oVygKJvR2OhOBWGooWLIclWD2JtP59BqALxrfj7DZkcodha7WjLvNbRsldIjKzS6a7uyUxPlylYuO7XcOfcHtjYAgKCFeWdmvzWzMJeZ1Nje3QrDmAZHltdN96CGcDWzQDT9DPDdMDi8QstWHqix0V2aHB9VFEV7iq/IjPAAgJ6KsQrQNAI598eJsdHD87msBgZHNDC0rJyIXP0M7y1ngJ+umlWV+IOgZeJq3lPYeTIz8xoYWqYgDPXUfz2qfCqbkZyXNMGWBgD0EhUttPLafDYTSw4MamBopOmJnqc9ArD9lPB117sZZKfZlb9S6WGtOfgw5bKTBzrn0pLWsJkBAAQtzKvjzrz0ODMbSI+sCAZHVhQCU7mIVTVjfPXPGUznUHOqnZrn7c7YrFbMTIlUWqsP/nO5wIVmdjxbGwBA0MJ8e0ciOfBQKj0UVNJO7QD42hg08+kcGhPVNCGrwyMNOxFPJLV67TMHJDuLTQ0AIGhh3hx39mUDZnbUwODw6kqEqg1WTmoxNqsSmloNp2o5zMq1mQW+iyGrJJZI5MJY/GVHrb9oiK0OAOgVBsOjlvdrw1hsdxCE66qzTbtqVvuhWPWTNjSZYLR6gP18fcMIwlQild6Wy2beLumz3Xzut1xyi83l8f967XmuG6830+cB5tJ2Z9Pe+qntvuWSW6xbr9vsffH3SNACiqFHR6bSQy82WXnclCsPVm8cj9Uw91XbLsPW0zlUT4Daqy7DmvdpppVrDk6O7dl5RreC1lwDVv3z8MGMxRCwlkK7LS37XMNWtz4DQNDCEhaG4RlhGM/Vto26ENTwMdRuqtEmZjlNQ9cbfzyxMpZIjh11yntWb9l8w1P99uFK4MJiCFjtnnMxtN1uhkygGcZoobZBhOFrXRAMlI8CbChCVQ2ArxtW5VzrObOadw0Wr7PiKXhaBrLefFZ777XywEOOjqL8Qf38AcuHOBZru3rLJbdYP7ffZss20+Xl7xPTfqlnFaDklWd99Ox4YuApJ/eMSsRp1iXYNA11xXx//U0kB+Lx5MCJku7p5wDUzfEjIGCxFtqvh07/3jpdl53+7dY/H3/zS6SAwSpAVcx5VSKZekZlOoe6GeAbxmZVdRnOcmxWy5DV42pW+ZtGPJFMJFLvXAw7K3aQINwt3fXDOlq6qGhBknTcmR9dnkwPPrNtuGkznYM6yVUtfzE5FzTJVvPxZc4pPbJ8+IiTznv6Pd+9ZWs3dxrdOnpwNt+0gdm2sW4ePdjP/vXa89xclrvdY/kbRTUqWig0hFhseTyefGlDdnKuYWxWfdKa6XQOLWeAX5CPJtPwijVrk+nBM7r5AT6bD1o+nLEYQ1anj+vHMNZquefyt8jfMepR0YIkKR5PvsYFwUAlZDXrCnTtDjhskpQ66zKsPPPCfD45J604YO1fFhdgXufAavd4uhKw0IFjNs+x2NstQQldL2SwCiBJYRg707nAqeY8hK7FDPCuKn817zbsrMuw+nnrX2T+PuvMTEPLVh1zzFs/eOBcvpXPxwc0OwEsxqAy2yrvfC8vf1/oBSpa0HFnf3RlLB4/tmkAasO1nxJ+ZhauoFX4xhGEq4dXrHm6pO39tANgLi0sxvBearuLpd3y9wWCFnpqaGTVRS4IaitUNfNoucZqllrHMtfZaPiaaxb6U84FQZBIpS+S1FcnmmYHAAIcQNDCIpdKJa7O5fzhTnqrpHhHc2a1nc6hw3BT/Uuw4JHrzlR66G/ZqcyvxTaL+HyvE9oYQNDCEnDr9RfkJZ21/r2fv0bSPznpxdWZxzVkrLlO59AkcdmChaxxSW+UdMfXP3FONJed42LZEfby6LO5vHYnoauTEDKboLKQ66TT1yeUzv92MjPnnOOgFBC00B23ffbC+yS95LS/+fwnTe6S2klK26Wk6kudTefQaN6Py8hJ+vqm6zactT9s27mcVmSuO67ZHIU2H6FiIdfJXNbN/ha6Zrud5jLlROmxzjnr1il5ZjNvF3N1LQ0cdYiyN1zwd+6k8z8VZDNTL8hlp+SjSOVzHjY9Fc/sZ4Cvn5PUze9Hxi8kvaDbIatfD2uf63L1alLHhVqv3ZiFuxuP79b7Wuj30q9tt7SOmSYFBC30T2NwbiSRiP1Izr1OJuVzGeWykzLz0+anWXUZVt/LzUtT3C3pik3XbXjppus2/H42TzDdt8h++2BfqJ15t9dDv4SSbrzHXrSPua7vfgwkBCQQtLCknPyev19rzv3aBcExgQvkgkDOBTJvymWmlM9nW57PcNZdhvN6qh19TdIRm67bcOX+spPoRSVoIXfYS6Fy0+tlmGtXU78EroVou0CvMEYLOvWiG44ws19Kiskkq+oRNEkyk8/nlfVesXhSQTD7fL4AgwoekfTuTddtuL1bT9jpWIvFcPTYTMeNTDfof6bPtxRmwu/0QIhunCNzrutof267wEJhMN1+bv17N54q2ddMSskKn1lmVolZJlnprDRWuBQEoeLJVFUDmnY6+DY397QJXizpi5uu27C3n791z/dg814efdeto8Lm8p5ms126EW466VbuVjuYy3N1M5ws9rY7l0DZzTDKlB5LGxWt/dhp7/+Hd8rrRlNtBat8ufiLK2Wu4mXzkTKT44onUgrDcA7xvhefIc4ku0fSWzddt+H+xfCNutlz9Gq27k7v04uxRzN5T/Nx3rxOl6fTENeustXto8fm0va6uW7no+3OdDtR5UK/YYzWfupNH/jCRqfgRhcEClxhPFb5clC8HFTGapV/Vt0vn8toYt9umfeNRyO2ylY94yQzPfX4g089/uA9J/U6ZPX6G2e3x8rMdDm7XRGZ7Xrq1fqdz+Xp1SH6/TovWD8f6UcIA0ELPffmi29KvuniL/5vOfdu51xhgHvxp1OLy67ucvm2QDKnfbufUHZyTLIOPsN6UM0yM02O7dbW+3+pidGdd//s1r97cj7XaemEub3YcXVjpzUf3Q+9nO9noSokvd6Rd2M5urFul1rbpbsNBC0smNM/dHPoAndXEATra6pUQd2/FhWsxkqXU5hIyDmnzMQ+je3ZoXwu2zAplutRyHLFqtr2R36vJx97oDC2zLlrFnId93KntRDvpV/aLsuy/7XdXlX7gPnGGK39J2Q9Q9JPJR0suUIWqj7CsMnRhtON1ZKkIIjJBaHMRzIfaXJ0p+IDQ0oODMnN5OjE8ml4OmPea3T3Nu3e/lj16+zYsnnjf/T7zngus4F3swtwrjvPmYz5WoqhZC5H7/X7e+uHtgssFVS09o+Q9TJJdxdCVnW4KXUHVlWtZjpWKwgUi8drnjM3Na7x0R0yH3VUxMpk8/rIhldr1chgx+9p28P3as+Tf6oPc5ctpsrBbCoI/bjjXkxhol929t1cjtkMwO9G213K7QToJipaSz5k3XSipNs7CtXONVatSpeLVa1mla54Mq3c1GRNl6H5SON7dmhoxZrGiU6rk75zuuqCN+iF69bqmve8Qe+7/puamMo2nri6/Jpe2x+5T7lspv65xiV9Z7FWR2ayQ5rP6kA3jm7D0gwdM223tB3sr6hoLWFv/uBNl5rp32UWFuJSh+oqXdXjuKpnjS9XuoKYYolk01A0PrqjMg9XXcgan8zoXW8+Ri9ct1aStGrZoK658GSlEvHmjTUI9eRjf1R2arLZzQ9LenQpbLdu7WSW2s6q3wbVo3H9znUuMYCghUUUsr70t5KukhSYitWnwv/N+LkajzasOhKxON4rnmre7eejvCb27moSwqR3nf5yHX/UuprrDz1wuS4++3gFzjUs6fat92tyrOXcozdu2bxxyXyIs8PC/v5FASBooe+86QNfcG+8ZpN708Vf/JbMPiGzqnBVqCsVrjLV3jazwNVQ6XKBwjDecvB7lMtqfHRn+bWyubxe+9+eo1Nf8fym93/Rsw/RhzecpKDYfRiEoXZt36rJfXtadilu2bzx8+ywANouQNBCz3hvg27XrttlOqUSrco5q/pC3VVzrHQ5pyAWKowlWt43ymU0NTYqSTr+pet0/mkva/vcL3rWwTrzdS+RmbRr+1bt3bmt3d0/x9YHAPQjBsMvEevfd+Nq5+wnZnpWaci6K4ctV54+wVUulANXeZS7rO4owc6+lJaqTMn0sHKZyRZVJ6fs1LhWrxjWhW89trP3dNwR2vrYNn35X+5SELQ81U8k6WZawNI31+7SfppigIoPsP+gorVUNqRz95nZOitVp8xkZpX6lVVOEG3Fk0VXiliV/ddcKl2xeFJhrF12d9r6+DZt+r93dfR8d939gDbe/FUF7efjelTSA/O9w+/n04wslWDEuqHtAgQt9I0wFl8VxhKTTvqTeS/zvhC0Sj/NZObL47PMfCFyFW9rOp5LdWO61D54mXkl08Nt7xMGgW76+vd00zd+2Pb9/OGRbXr/lTdoeCg93Vv/9pbNG8cWagfJTmtxVWfme1v107ohXAEELcyRcy4dxhMHB7H4k+aUl/lKZat0HsLqSlc5QDWrdNWGqtoCV+vAFcaThXMgtguFYaCv/5+f6Edbmp/3+fEndumsi65RJpvr5G1/gh0VwYb31X5Zmy0v7RkgaGGWeSsIwjXxeNLCMP6ENyucHseKVa5mlS7fvNKlVpUua13pCoJQQRjvaEGvuXGT7vh/v6u5bueefXr7hz4tMy83fS3g+1s2b9y+VHe8vTxRc7f1enm6uX67MdZrqYS1Xi0DIQ4gaO0P4i4MD0wkU5kgCLNmFplFxapVMTRNU+mq6URsU+mqvy0xMFh53mlcf/O39PuHC0cUTmayOu+D12vHzt0tp3Goc+1SrXIspR1VvwSb+Vi/831KpeoxV3M5DyFtd2n+7YCghfmRDOOJeDyR8i6ITZmP5H1UVd2q+tkwpstqx3eVK12qqXRZXaUrnhyYtvuwJJfL6+Jr/1G/uf8xnX/JZ/Rf256YbvB7yROSfj2fK7KTnWg3Phine47FeMTaXEJAvyzTdIGk1Xbp1eSzrboD66/vtL3Qdglb6A2md9g/OOdcPBZPxC0WH8tnpwascFoeObnyFBClGR1KxajyOQ3L50As3M9caVIIVyluucppdkxSYmBQ2cmxThZM+Xykd330hlxuYm+8w5AlSb/asnnjU/O9Ijs5999Md3RL5YN0unVTfVu/rJPS67Rbnm4sS7fWzVzOO9nJY3vZdglZc98+IGhhcSSuoXhyIPI+8vlMRt6iwDknmSsEKlPl5NClM0uXTpPoinNwTTdHl0zxZErZyXF1Mj2EmWkgmXDR1Iw+h6/aH7+R9vvOarY79MW+jbq5XXrZrTmbKh6fmv3XPgmtiwtdh/unMAjCIJketDCeyMskb14qdR+WjlasGhRfP0B+ujm6nAsVhD1rXtu2bN5450KGif3pdftlOfv1/Xe6XJ2cdJm2CxC0sISYWRiLJWKJVFrxeCLno8r4Le994WhF7+WrxnFVX64Z21U3R5ecFIunerXoly3VMLFUdlT9uLy9WKZ+PPpzumWi7S7+vxkqjYsLXYeQnFMYS8SDWDyfy0zGfD5f6TJ0rjiOq9At6OQKPYlW7jEsPUX54EQ5J2emeCpdGKfluvo5u0/Sd/vpg7GXH3qLeSfVrXEn3VwH3RwLM9vl6kW7memy0HaX9t8MCFro17wlF0sk07KEt1xm0kX5nOSC4iD5QM4Vo1Zp1LwrDoZ3TmaVcx6WxnY5FyiWSCqfy3ZzMR+UtLUfv4l2+wNyKeyo5rpuelmFWuhl6ka7meuy9GrHTsgibKF634ol4fQP3dzlP0xnUT6rbGbSyXxV4HLFQFUJXOWAVfxZmQPLyUc5TY2NTvtquexUbmx0Z7yDJvk/tmze+KXFsE1m+mHZ7Z2TmTnnnC30c8x0vcx1PbR6/rkczTefwaEfJqpd6Lbb73rxdzGT7UGQJWhhSQSt8keK8vmcZScnCuWrDgJXTfAy09TYaGHcVheC1pbNG2mz6HrQAoBeYTA8pstZCsO4GxhaplgsUTwysTThaVQ3KL5xYLwkBWHYraX5DBsEALCYMEYL7VNW1eV4ckCxRFK5bEa57KScC+RccTYtFxR/FubjKle6XKBYIqUol53roPi8pC+zTQAABC0smZxV3wfjXFAIXPGEMpPj8j5fmKjUWTFIFSY/dc6Vz5voXCAXhjLvO8t0zT0i6QE2CgBgMaHrcOn4l54mrprLhfCUSg8pNTAkOSmK8vJRpNJcXN5H8pEvzskVKYwl5roQt23ZvHGCzQwAIGhhIVwgaVuv4lWr64IwpoHBZUqk0pJUnPA0qprwtPCvXO2avU+yiQEABC0siE3Xbdgt6a09i1lWdZ3V3m5misWTSg0OK5FKFytb+WJly8tHkczbNEO02vYd3r5l88YdbGUAAEELCxm2fiLp0q7nLGsdhaqvc84pFksoPbJSYSxW6DaM8sUKVyQFwTSv2DKJfYqtCwAgaKEfXCfp3rmmLGsapWqvKw12byY5MKSBoWUKY3FFUSTv8zLfumrlfcuJtrZLupvNCgAgaGHBbbpuQ07SCZL8HHLWrB9XFcHkXKBkekgDQyOSXGH81sxfdAvdhgAAghb6KWw9Ienkuees6ktN+g+ttn/RmjyTmSkIY0oPLdfA4IjMS/l8NJPFuYotCgAgaKHfwtZ3JN06l5jV7NfZPo1kUhDqeX+xTme/8XitGBmS99M++dYtmzduYWsCAAha6MewdbpmOsmnNbuq8WhDq3+QNT5B5apCZWswldTHLzpN5552rL549Tv1rjNeo1wukjdrWg+TdBlbEQCwmHGS1SXu9A/dfLikeySlOkpZ1eOsbJqgVe46nO5xpngs1GcufosOPWhlzStOZXL65Jdu08/+856pHU89mQorRybulXTEls0bt7IVAQCLVcgqWNp+99Pbdj33mPVZSSd1mLPa30FNjja0ZnWuyuXxyYwuPvfVesGzDml4xlgs1Cv/8rl65dEvCJ/aM+buue8BJRNxSfrtls0bmdYBAEDQQt+HrTufe8z6oyWt6+wR1tFVHT2Tmd72uqN16itf2PZ+y4bT7qSXH6lXHH2k7v3jo9qxa89Htv3xP3/N1gMALGZ0He4nTv/QzQdIuk/Sqlbb3eq6AguXmnQb1h9tWD8+ywqP8t50xOFrdfV71su5zptaJpuX99FPBlLJ9c65XWw9AMBixWD4/cSm6zbskHRO63DdZt53a3V7m4eYac2qYV3z16fNKGRJUjIR00Aq+XJJO83sMjNbwxYEABC00O9h698kfbBpOprFKXcajjasujE9kNQ1F67vxmJfKeleM/s4WxAAQNBCv/ucpF+1vtk6vK714yMz/c2Zr9KBq0a6tcwHSPqwmW0zs9eYWZzNCAAgaKHvbLpuQ0bSa+pzVCdRqpOjDb2Z3nfmCTr6+Yf1YvEPknS7pN+a2avZmgAAghb6MWw9Jen1LaJU7WVrdXujfOR17JGH6/ijnt3rt/AsSf9uZp9kawIACFrox7D1HUmbGs5R2G78e90dq3+NItORzzlUF58zr4Wm57IlAQAELfRr2HqLpD813mKt0lVTJmnNyiE658aRAAACs0lEQVRdct5r5vstGFsRAEDQQt8y02slTdTOnTVdoqk92jCXi/SxC07V4ECCFQoAAEELJbd+6u33SmpxqhurSWTNOElXX3iq1q5exsoEAICghSZh6wpJX6sJV9Y0bpWvMEmZbE5vPOFIHfmcQ1mJAAAQtNCS6QJJ25rWraxxzJaZ6dgXH66z33A06w4AAIIW2rn10+fvkvTfK1nK2mQy6Wmrl+n9Z53IigMAgKCFDsPWjyVdXh+qqn8zkxKJmD550WlKJmKsNAAACFronPuEZL9rFbXiYaCrLzhFy4YGWFUAABC0MBPf+PT5OUknSvL1PYj5vNcZrztK656+hhUFAABBC7MKW9e/Y5ukU6pTVhR5nfn6o/TGV72IFQQAAEELcwxb/ybTNyTJe9PzDj9Ip5/44n5bzJAtBQAAFq3177vxwfOv/Irl8pH1mb1mdgJbCADQz6hooa01K4Zed8W7T3kscM73ySI9Luky59yIc+77bCEAALCo3f/wEyv2jU+90Mw+YmbbF6iClTGzvzKz5WwRAACwZJnZUWb2FTN7xMxyPQ5YT5jZp1jrAABgfwtcI2Z2hJldbmY7ehCyLjSz1axpAABA8DJ7mZl9zcweNbP8LMPVLjO70czirFEAAIDGwLXMzF5oZleb2Z4ZhKwPm9lBrEEAAIDOg9crzOybZrbVzKIm0zR81cxGWFMAAACzD1zLzexIM7vWzHaa2fVmdjBrBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAv/H8XHE+1w0AAOwAAAABJRU5ErkJggg=="); width: 161px; height: 84px; background-size: cover; @@ -807,7 +803,7 @@ button.first-time-flow__button--tertiary:hover { .shapeshift-form { width: 360px; border-radius: 8px; - background-color: rgba(0, 0, 0, .05); + background-color: rgba(0, 0, 0, 0.05); padding: 17px 15px; } diff --git a/mascara/src/app/first-time/notice-screen.js b/mascara/src/app/first-time/notice-screen.js index 8cb6f105..c7fe9472 100644 --- a/mascara/src/app/first-time/notice-screen.js +++ b/mascara/src/app/first-time/notice-screen.js @@ -6,8 +6,6 @@ import { withRouter } from 'react-router-dom' import { compose } from 'recompose' import debounce from 'lodash.debounce' import { markNoticeRead } from '../../../../ui/app/actions' -import Identicon from '../../../../ui/app/components/identicon' -import Breadcrumbs from './breadcrumbs' import { INITIALIZE_BACKUP_PHRASE_ROUTE } from '../../../../ui/app/routes' import LoadingScreen from './loading-screen' @@ -71,7 +69,6 @@ class NoticeScreen extends Component { render () { const { - address, nextUnreadNotice: { title, body }, isLoading, } = this.props @@ -88,7 +85,6 @@ class NoticeScreen extends Component { className="tou" onScroll={this.onScroll} > - <Identicon address={address} diameter={70} /> <div className="tou__title">{title}</div> <Markdown className="tou__body markdown" @@ -102,7 +98,6 @@ class NoticeScreen extends Component { > Accept </button> - <Breadcrumbs total={3} currentIndex={2} /> </div> </div> </div> diff --git a/mascara/src/app/first-time/seed-screen.js b/mascara/src/app/first-time/seed-screen.js index 97d5d793..6b4d4a2c 100644 --- a/mascara/src/app/first-time/seed-screen.js +++ b/mascara/src/app/first-time/seed-screen.js @@ -6,7 +6,6 @@ import { withRouter } from 'react-router-dom' import { compose } from 'recompose' import Identicon from '../../../../ui/app/components/identicon' import {exportAsFile} from '../../../../ui/app/util' -import Breadcrumbs from './breadcrumbs' import LoadingScreen from './loading-screen' import { DEFAULT_ROUTE, INITIALIZE_CONFIRM_SEED_ROUTE } from '../../../../ui/app/routes' @@ -69,7 +68,7 @@ class BackupPhraseScreen extends Component { exportSeedWords = () => { const { seedWords } = this.props - exportAsFile('MetaMask Secret Backup Phrase', seedWords, 'text/plain') + exportAsFile('DekuSan Secret Backup Phrase', seedWords, 'text/plain') } renderSecretWordsContainer () { @@ -142,7 +141,6 @@ class BackupPhraseScreen extends Component { > Next </button> - <Breadcrumbs total={3} currentIndex={1} /> </div> </div> ) diff --git a/mascara/src/app/first-time/unique-image-screen.js b/mascara/src/app/first-time/unique-image-screen.js index 9555e531..4e94d6c9 100644 --- a/mascara/src/app/first-time/unique-image-screen.js +++ b/mascara/src/app/first-time/unique-image-screen.js @@ -4,7 +4,6 @@ import { withRouter } from 'react-router-dom' import { compose } from 'recompose' import {connect} from 'react-redux' import Identicon from '../../../../ui/app/components/identicon' -import Breadcrumbs from './breadcrumbs' import { INITIALIZE_NOTICE_ROUTE } from '../../../../ui/app/routes' class UniqueImageScreen extends Component { @@ -32,7 +31,6 @@ class UniqueImageScreen extends Component { > Next </button> - <Breadcrumbs total={3} currentIndex={1} /> </div> </div> </div> diff --git a/mascara/src/background.js b/mascara/src/background.js index d8d1c8c5..99d7a8bc 100644 --- a/mascara/src/background.js +++ b/mascara/src/background.js @@ -38,10 +38,10 @@ const dbController = new DbController({ start().catch(log.error) async function start () { - log.debug('MetaMask initializing...') + log.debug('DekuSan initializing...') const initState = await loadStateFromPersistence() await setupController(initState) - log.debug('MetaMask initialization complete.') + log.debug('DekuSan initialization complete.') } // @@ -61,7 +61,7 @@ async function loadStateFromPersistence () { async function setupController (initState, client) { // - // MetaMask Controller + // DekuSan Controller // const platform = new SwPlatform() @@ -103,10 +103,10 @@ async function setupController (initState, client) { }) function connectRemote (connectionStream, context) { - var isMetaMaskInternalProcess = (context === 'popup') - if (isMetaMaskInternalProcess) { + var isDekuSanInternalProcess = (context === 'popup') + if (isDekuSanInternalProcess) { // communication with popup - controller.setupTrustedCommunication(connectionStream, 'MetaMask') + controller.setupTrustedCommunication(connectionStream, 'DekuSan') global.metamaskPopupIsOpen = true } else { // communication with page diff --git a/mascara/src/ui.js b/mascara/src/ui.js index f9e7670e..805ab08e 100644 --- a/mascara/src/ui.js +++ b/mascara/src/ui.js @@ -1,14 +1,14 @@ const injectCss = require('inject-css') const SwController = require('sw-controller') const SwStream = require('sw-stream') -const MetaMaskUiCss = require('../../ui/css') +const DekuSanUiCss = require('../../ui/css') const MetamascaraPlatform = require('../../app/scripts/platforms/window') const startPopup = require('../../app/scripts/popup-core') // create platform global global.platform = new MetamascaraPlatform() -var css = MetaMaskUiCss() +var css = DekuSanUiCss() injectCss(css) const container = document.getElementById('app-content') diff --git a/notices/README.md b/notices/README.md index 9362769c..ae841c35 100644 --- a/notices/README.md +++ b/notices/README.md @@ -1,5 +1,5 @@ # Notices -Those notices are of legal nature. They are displayed to the users of MetaMask. +Those notices are of legal nature. They are displayed to the users of DekuSan. Any changes or additions must be reviewed by the product management.
\ No newline at end of file diff --git a/notices/archive/notice_0.md b/notices/archive/notice_0.md index c485edd1..3d1c04b2 100644 --- a/notices/archive/notice_0.md +++ b/notices/archive/notice_0.md @@ -6,11 +6,11 @@ _Our Terms of Use have been updated as of September 5, 2016_ ## 1. Acceptance of Terms ## -MetaMask provides a platform for managing Ethereum (or "ETH") accounts, and allowing ordinary websites to interact with the Ethereum blockchain, while keeping the user in control over what transactions they approve, through our website located at[ ](http://metamask.io)[https://metamask.io/](https://metamask.io/) and browser plugin (the "Site") — which includes text, images, audio, code and other materials (collectively, the “Content”) and all of the features, and services provided. The Site, and any other features, tools, materials, or other services offered from time to time by MetaMask are referred to here as the “Service.” Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully before using the Service. By using or otherwise accessing the Services, or clicking to accept or agree to these Terms where that option is made available, you (1) accept and agree to these Terms (2) consent to the collection, use, disclosure and other handling of information as described in our Privacy Policy and (3) any additional terms, rules and conditions of participation issued by MetaMask from time to time. If you do not agree to the Terms, then you may not access or use the Content or Services. +DekuSan provides a platform for managing Ethereum (or "ETH") accounts, and allowing ordinary websites to interact with the Ethereum blockchain, while keeping the user in control over what transactions they approve, through our website located at[ ](http://metamask.io)[https://metamask.io/](https://metamask.io/) and browser plugin (the "Site") — which includes text, images, audio, code and other materials (collectively, the “Content”) and all of the features, and services provided. The Site, and any other features, tools, materials, or other services offered from time to time by DekuSan are referred to here as the “Service.” Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully before using the Service. By using or otherwise accessing the Services, or clicking to accept or agree to these Terms where that option is made available, you (1) accept and agree to these Terms (2) consent to the collection, use, disclosure and other handling of information as described in our Privacy Policy and (3) any additional terms, rules and conditions of participation issued by DekuSan from time to time. If you do not agree to the Terms, then you may not access or use the Content or Services. ## 2. Modification of Terms of Use ## -Except for Section 13, providing for binding arbitration and waiver of class action rights, MetaMask reserves the right, at its sole discretion, to modify or replace the Terms of Use at any time. The most current version of these Terms will be posted on our Site. You shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by you after any modification to the Terms constitutes your acceptance of the Terms of Use as modified. +Except for Section 13, providing for binding arbitration and waiver of class action rights, DekuSan reserves the right, at its sole discretion, to modify or replace the Terms of Use at any time. The most current version of these Terms will be posted on our Site. You shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by you after any modification to the Terms constitutes your acceptance of the Terms of Use as modified. @@ -18,17 +18,17 @@ Except for Section 13, providing for binding arbitration and waiver of class act You hereby represent and warrant that you are fully able and competent to enter into the terms, conditions, obligations, affirmations, representations and warranties set forth in these Terms and to abide by and comply with these Terms. -MetaMask is a global platform and by accessing the Content or Services, you are representing and warranting that, you are of the legal age of majority in your jurisdiction as is required to access such Services and Content and enter into arrangements as provided by the Service. You further represent that you are otherwise legally permitted to use the service in your jurisdiction including owning cryptographic tokens of value, and interacting with the Services or Content in any way. You further represent you are responsible for ensuring compliance with the laws of your jurisdiction and acknowledge that MetaMask is not liable for your compliance with such laws. +DekuSan is a global platform and by accessing the Content or Services, you are representing and warranting that, you are of the legal age of majority in your jurisdiction as is required to access such Services and Content and enter into arrangements as provided by the Service. You further represent that you are otherwise legally permitted to use the service in your jurisdiction including owning cryptographic tokens of value, and interacting with the Services or Content in any way. You further represent you are responsible for ensuring compliance with the laws of your jurisdiction and acknowledge that DekuSan is not liable for your compliance with such laws. ## 4 Account Password and Security ## -When setting up an account within MetaMask, you will be responsible for keeping your own account secrets, which may be a twelve-word seed phrase, an account file, or other locally stored secret information. MetaMask encrypts this information locally with a password you provide, that we never send to our servers. You agree to (a) never use the same password for MetaMask that you have ever used outside of this service; (b) keep your secret information and password confidential and do not share them with anyone else; (c) immediately notify MetaMask of any unauthorized use of your account or breach of security. MetaMask cannot and will not be liable for any loss or damage arising from your failure to comply with this section. +When setting up an account within DekuSan, you will be responsible for keeping your own account secrets, which may be a twelve-word seed phrase, an account file, or other locally stored secret information. DekuSan encrypts this information locally with a password you provide, that we never send to our servers. You agree to (a) never use the same password for DekuSan that you have ever used outside of this service; (b) keep your secret information and password confidential and do not share them with anyone else; (c) immediately notify DekuSan of any unauthorized use of your account or breach of security. DekuSan cannot and will not be liable for any loss or damage arising from your failure to comply with this section. ## 5. Representations, Warranties, and Risks ## ### 5.1. Warranty Disclaimer ### -You expressly understand and agree that your use of the Service is at your sole risk. The Service (including the Service and the Content) are provided on an "AS IS" and "as available" basis, without warranties of any kind, either express or implied, including, without limitation, implied warranties of merchantability, fitness for a particular purpose or non-infringement. You acknowledge that MetaMask has no control over, and no duty to take any action regarding: which users gain access to or use the Service; what effects the Content may have on you; how you may interpret or use the Content; or what actions you may take as a result of having been exposed to the Content. You release MetaMask from all liability for you having acquired or not acquired Content through the Service. MetaMask makes no representations concerning any Content contained in or accessed through the Service, and MetaMask will not be responsible or liable for the accuracy, copyright compliance, legality or decency of material contained in or accessed through the Service. +You expressly understand and agree that your use of the Service is at your sole risk. The Service (including the Service and the Content) are provided on an "AS IS" and "as available" basis, without warranties of any kind, either express or implied, including, without limitation, implied warranties of merchantability, fitness for a particular purpose or non-infringement. You acknowledge that DekuSan has no control over, and no duty to take any action regarding: which users gain access to or use the Service; what effects the Content may have on you; how you may interpret or use the Content; or what actions you may take as a result of having been exposed to the Content. You release DekuSan from all liability for you having acquired or not acquired Content through the Service. DekuSan makes no representations concerning any Content contained in or accessed through the Service, and DekuSan will not be responsible or liable for the accuracy, copyright compliance, legality or decency of material contained in or accessed through the Service. ### 5.2 Sophistication and Risk of Cryptographic Systems ### @@ -36,23 +36,23 @@ By utilizing the Service or interacting with the Content or platform in any way, ### 5.3 Risk of Regulatory Actions in One or More Jurisdictions ### -MetaMask and ETH could be impacted by one or more regulatory inquiries or regulatory action, which could impede or limit the ability of MetaMask to continue to develop, or which could impede or limit your ability to access or use the Service or Ethereum blockchain. +DekuSan and ETH could be impacted by one or more regulatory inquiries or regulatory action, which could impede or limit the ability of DekuSan to continue to develop, or which could impede or limit your ability to access or use the Service or Ethereum blockchain. ### 5.4 Risk of Weaknesses or Exploits in the Field of Cryptography ### -You acknowledge and understand that Cryptography is a progressing field. Advances in code cracking or technical advances such as the development of quantum computers may present risks to cryptocurrencies and Services of Content, which could result in the theft or loss of your cryptographic tokens or property. To the extent possible, MetaMask intends to update the protocol underlying Services to account for any advances in cryptography and to incorporate additional security measures, but does not guarantee or otherwise represent full security of the system. By using the Service or accessing Content, you acknowledge these inherent risks. +You acknowledge and understand that Cryptography is a progressing field. Advances in code cracking or technical advances such as the development of quantum computers may present risks to cryptocurrencies and Services of Content, which could result in the theft or loss of your cryptographic tokens or property. To the extent possible, DekuSan intends to update the protocol underlying Services to account for any advances in cryptography and to incorporate additional security measures, but does not guarantee or otherwise represent full security of the system. By using the Service or accessing Content, you acknowledge these inherent risks. ### 5.5 Volatility of Crypto Currencies ### -You understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum blockchain. You acknowledge these risks and represent that MetaMask cannot be held liable for such fluctuations or increased costs. +You understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum blockchain. You acknowledge these risks and represent that DekuSan cannot be held liable for such fluctuations or increased costs. ### 5.6 Application Security ### -You acknowledge that Ethereum applications are code subject to flaws and acknowledge that you are solely responsible for evaluating any code provided by the Services or Content and the trustworthiness of any third-party websites, products, smart-contracts, or Content you access or use through the Service. You further expressly acknowledge and represent that Ethereum applications can be written maliciously or negligently, that MetaMask cannot be held liable for your interaction with such applications and that such applications may cause the loss of property or even identity. This warning and others later provided by MetaMask in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Service or Content. +You acknowledge that Ethereum applications are code subject to flaws and acknowledge that you are solely responsible for evaluating any code provided by the Services or Content and the trustworthiness of any third-party websites, products, smart-contracts, or Content you access or use through the Service. You further expressly acknowledge and represent that Ethereum applications can be written maliciously or negligently, that DekuSan cannot be held liable for your interaction with such applications and that such applications may cause the loss of property or even identity. This warning and others later provided by DekuSan in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Service or Content. ## 6. Indemnity ## -You agree to release and to indemnify, defend and hold harmless MetaMask and its parents, subsidiaries, affiliates and agencies, as well as the officers, directors, employees, shareholders and representatives of any of the foregoing entities, from and against any and all losses, liabilities, expenses, damages, costs (including attorneys’ fees and court costs) claims or actions of any kind whatsoever arising or resulting from your use of the Service, your violation of these Terms of Use, and any of your acts or omissions that implicate publicity rights, defamation or invasion of privacy. MetaMask reserves the right, at its own expense, to assume exclusive defense and control of any matter otherwise subject to indemnification by you and, in such case, you agree to cooperate with MetaMask in the defense of such matter. +You agree to release and to indemnify, defend and hold harmless DekuSan and its parents, subsidiaries, affiliates and agencies, as well as the officers, directors, employees, shareholders and representatives of any of the foregoing entities, from and against any and all losses, liabilities, expenses, damages, costs (including attorneys’ fees and court costs) claims or actions of any kind whatsoever arising or resulting from your use of the Service, your violation of these Terms of Use, and any of your acts or omissions that implicate publicity rights, defamation or invasion of privacy. DekuSan reserves the right, at its own expense, to assume exclusive defense and control of any matter otherwise subject to indemnification by you and, in such case, you agree to cooperate with DekuSan in the defense of such matter. ## 7. Limitation on liability ## @@ -62,15 +62,15 @@ SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMIT ## 8. Our Proprietary Rights ## -All title, ownership and intellectual property rights in and to the Service are owned by MetaMask or its licensors. You acknowledge and agree that the Service contains proprietary and confidential information that is protected by applicable intellectual property and other laws. Except as expressly authorized by MetaMask, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, display or create derivative works based on the Service, in whole or in part. MetaMask issues a license for MetaMask, found [here](https://github.com/MetaMask/metamask-plugin/blob/master/LICENSE). For information on other licenses utilized in the development of MetaMask, please see our attribution page at: [https://metamask.io/attributions.html](https://metamask.io/attributions.html) +All title, ownership and intellectual property rights in and to the Service are owned by DekuSan or its licensors. You acknowledge and agree that the Service contains proprietary and confidential information that is protected by applicable intellectual property and other laws. Except as expressly authorized by DekuSan, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, display or create derivative works based on the Service, in whole or in part. DekuSan issues a license for DekuSan, found [here](https://github.com/DekuSan/metamask-plugin/blob/master/LICENSE). For information on other licenses utilized in the development of DekuSan, please see our attribution page at: [https://metamask.io/attributions.html](https://metamask.io/attributions.html) ## 9. Links ## -The Service provides, or third parties may provide, links to other World Wide Web or accessible sites, applications or resources. Because MetaMask has no control over such sites, applications and resources, you acknowledge and agree that MetaMask is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products or other materials on or available from such sites or resources. You further acknowledge and agree that MetaMask shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource. +The Service provides, or third parties may provide, links to other World Wide Web or accessible sites, applications or resources. Because DekuSan has no control over such sites, applications and resources, you acknowledge and agree that DekuSan is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products or other materials on or available from such sites or resources. You further acknowledge and agree that DekuSan shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource. ## 10. Termination and Suspension ## -MetaMask may terminate or suspend all or part of the Service and your MetaMask access immediately, without prior notice or liability, if you breach any of the terms or conditions of the Terms. Upon termination of your access, your right to use the Service will immediately cease. +DekuSan may terminate or suspend all or part of the Service and your DekuSan access immediately, without prior notice or liability, if you breach any of the terms or conditions of the Terms. Upon termination of your access, your right to use the Service will immediately cease. The following provisions of the Terms survive any termination of these Terms: INDEMNITY; WARRANTY DISCLAIMERS; LIMITATION ON LIABILITY; OUR PROPRIETARY RIGHTS; LINKS; TERMINATION; NO THIRD PARTY BENEFICIARIES; BINDING ARBITRATION AND CLASS ACTION WAIVER; GENERAL INFORMATION. @@ -80,7 +80,7 @@ You agree that, except as otherwise expressly provided in these Terms, there sha ## 12. Notice and Procedure For Making Claims of Copyright Infringement ## -If you believe that your copyright or the copyright of a person on whose behalf you are authorized to act has been infringed, please provide MetaMask’s Copyright Agent a written Notice containing the following information: +If you believe that your copyright or the copyright of a person on whose behalf you are authorized to act has been infringed, please provide DekuSan’s Copyright Agent a written Notice containing the following information: · an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright or other intellectual property interest; @@ -94,7 +94,7 @@ If you believe that your copyright or the copyright of a person on whose behalf · a statement by you, made under penalty of perjury, that the above information in your Notice is accurate and that you are the copyright or intellectual property owner or authorized to act on the copyright or intellectual property owner's behalf. -MetaMask’s Copyright Agent can be reached at: +DekuSan’s Copyright Agent can be reached at: Email: copyright [at] metamask [dot] io @@ -102,7 +102,7 @@ Mail: Attention: -MetaMask Copyright ℅ ConsenSys +DekuSan Copyright ℅ ConsenSys 49 Bogart Street @@ -138,25 +138,25 @@ Notwithstanding the parties' decision to resolve all disputes through arbitratio ### 13.6 30-Day Right to Opt Out ### -You have the right to opt-out and not be bound by the arbitration and class action waiver provisions set forth above by sending written notice of your decision to opt-out to the following address: MetaMask ℅ ConsenSys, 49 Bogart Street, Brooklyn NY 11206 and via email at support@metamask.io. The notice must be sent within 30 days of September 6, 2016 or your first use of the Service, whichever is later, otherwise you shall be bound to arbitrate disputes in accordance with the terms of those paragraphs. If you opt-out of these arbitration provisions, MetaMask also will not be bound by them. +You have the right to opt-out and not be bound by the arbitration and class action waiver provisions set forth above by sending written notice of your decision to opt-out to the following address: DekuSan ℅ ConsenSys, 49 Bogart Street, Brooklyn NY 11206 and via email at support@metamask.io. The notice must be sent within 30 days of September 6, 2016 or your first use of the Service, whichever is later, otherwise you shall be bound to arbitrate disputes in accordance with the terms of those paragraphs. If you opt-out of these arbitration provisions, DekuSan also will not be bound by them. ### 13.7 Changes to This Section ### -MetaMask will provide 60-days’ notice of any changes to this section. Changes will become effective on the 60th day, and will apply prospectively only to any claims arising after the 60th day. +DekuSan will provide 60-days’ notice of any changes to this section. Changes will become effective on the 60th day, and will apply prospectively only to any claims arising after the 60th day. -For any dispute not subject to arbitration you and MetaMask agree to submit to the personal and exclusive jurisdiction of and venue in the federal and state courts located in New York, New York. You further agree to accept service of process by mail, and hereby waive any and all jurisdictional and venue defenses otherwise available. +For any dispute not subject to arbitration you and DekuSan agree to submit to the personal and exclusive jurisdiction of and venue in the federal and state courts located in New York, New York. You further agree to accept service of process by mail, and hereby waive any and all jurisdictional and venue defenses otherwise available. -The Terms and the relationship between you and MetaMask shall be governed by the laws of the State of New York without regard to conflict of law provisions. +The Terms and the relationship between you and DekuSan shall be governed by the laws of the State of New York without regard to conflict of law provisions. ## 14. General Information ## ### 14.1 Entire Agreement ### -These Terms (and any additional terms, rules and conditions of participation that MetaMask may post on the Service) constitute the entire agreement between you and MetaMask with respect to the Service and supersedes any prior agreements, oral or written, between you and MetaMask. In the event of a conflict between these Terms and the additional terms, rules and conditions of participation, the latter will prevail over the Terms to the extent of the conflict. +These Terms (and any additional terms, rules and conditions of participation that DekuSan may post on the Service) constitute the entire agreement between you and DekuSan with respect to the Service and supersedes any prior agreements, oral or written, between you and DekuSan. In the event of a conflict between these Terms and the additional terms, rules and conditions of participation, the latter will prevail over the Terms to the extent of the conflict. ### 14.2 Waiver and Severability of Terms ### -The failure of MetaMask to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by an arbitrator or court of competent jurisdiction to be invalid, the parties nevertheless agree that the arbitrator or court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect. +The failure of DekuSan to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by an arbitrator or court of competent jurisdiction to be invalid, the parties nevertheless agree that the arbitrator or court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect. ### 14.3 Statute of Limitations ### diff --git a/notices/archive/notice_2.md b/notices/archive/notice_2.md index 62f368c5..07ce841c 100644 --- a/notices/archive/notice_2.md +++ b/notices/archive/notice_2.md @@ -1,6 +1,6 @@ -MetaMask is beta software. +DekuSan is beta software. -When you log in to MetaMask, your current account's address is visible to every new site you visit. This can be used to look up your account balances of Ether and other tokens. +When you log in to DekuSan, your current account's address is visible to every new site you visit. This can be used to look up your account balances of Ether and other tokens. -For your privacy, for now, please sign out of MetaMask when you're done using a site. +For your privacy, for now, please sign out of DekuSan when you're done using a site. diff --git a/notices/archive/notice_3.md b/notices/archive/notice_3.md index 59dd0f5c..854c0a7a 100644 --- a/notices/archive/notice_3.md +++ b/notices/archive/notice_3.md @@ -1,6 +1,6 @@ Please take a moment to [back up your seed phrase again](https://support.metamask.io/kb/article/28-abbu-always-be-backed-up-how-to-make-sure-your-12-word-metamask-seed-phrase-is-backed-up). -MetaMask has become aware of a previous issue where a very small number of users were shown the wrong seed phrase to back up. The only way to protect yourself from this issue, is to back up your seed phrase again now. +DekuSan has become aware of a previous issue where a very small number of users were shown the wrong seed phrase to back up. The only way to protect yourself from this issue, is to back up your seed phrase again now. You can follow the guide at this link: diff --git a/notices/archive/notice_4.md b/notices/archive/notice_4.md index afe29eed..c8e3bcdf 100644 --- a/notices/archive/notice_4.md +++ b/notices/archive/notice_4.md @@ -1,6 +1,6 @@ -Dear MetaMask Users, +Dear DekuSan Users, -There have been several instances of high-profile legitimate websites such as BTC Manager and Games Workshop that have had their websites temporarily compromised. This involves showing a fake MetaMask window on the page asking for user's seed phrases. MetaMask will never open itself to ask you for your seed phrase, and users are encouraged to report these instances immediately to either [our phishing blacklist](https://github.com/MetaMask/eth-phishing-detect/issues) or our support email at [support@metamask.io](mailto:support@metamask.io). +There have been several instances of high-profile legitimate websites such as BTC Manager and Games Workshop that have had their websites temporarily compromised. This involves showing a fake DekuSan window on the page asking for user's seed phrases. DekuSan will never open itself in this way and users are encouraged to report these instances immediately to either [our phishing blacklist](https://github.com/DekuSan/eth-phishing-detect/issues) or our support email at [support@metamask.io](mailto:support@metamask.io). Please read our full article on this ongoing issue at [https://medium.com/metamask/new-phishing-strategy-becoming-common-1b1123837168](https://medium.com/metamask/new-phishing-strategy-becoming-common-1b1123837168). diff --git a/old-ui/app/accounts/import/index.js b/old-ui/app/accounts/import/index.js index b2c3a4a1..3d85959f 100644 --- a/old-ui/app/accounts/import/index.js +++ b/old-ui/app/accounts/import/index.js @@ -50,7 +50,7 @@ AccountImportSubview.prototype.render = function () { padding: '5px 15px 0px 15px', }, }, [ - h('span', 'Imported accounts will not be associated with your originally created MetaMask account seedphrase. Learn more about imported accounts '), + h('span', 'Imported accounts will not be associated with your originally created DekuSan account seedphrase. Learn more about imported accounts '), h('span', { style: { color: 'rgba(247, 134, 28, 1)', diff --git a/old-ui/app/accounts/import/json.js b/old-ui/app/accounts/import/json.js index 8388f17a..27b9c57f 100644 --- a/old-ui/app/accounts/import/json.js +++ b/old-ui/app/accounts/import/json.js @@ -5,7 +5,7 @@ const actions = require('../../../../ui/app/actions') const FileInput = require('react-simple-file-input').default const PropTypes = require('prop-types') -const HELP_LINK = 'https://github.com/MetaMask/faq/blob/master/README.md#q-i-cant-use-the-import-feature-for-uploading-a-json-file-the-window-keeps-closing-when-i-try-to-select-a-file' +const HELP_LINK = 'https://github.com/DekuSan/faq/blob/master/README.md#q-i-cant-use-the-import-feature-for-uploading-a-json-file-the-window-keeps-closing-when-i-try-to-select-a-file' class JsonImportSubview extends Component { constructor (props) { diff --git a/old-ui/app/components/account-export.js b/old-ui/app/components/account-export.js index 51b85b78..fa2a0f05 100644 --- a/old-ui/app/components/account-export.js +++ b/old-ui/app/components/account-export.js @@ -117,7 +117,7 @@ ExportAccountView.prototype.render = function () { style: { marginLeft: '10px', }, - onClick: () => exportAsFile(`MetaMask ${nickname} Private Key`, plainKey), + onClick: () => exportAsFile(`DekuSan ${nickname} Private Key`, plainKey), }, 'Save as File'), ]) } diff --git a/old-ui/app/components/app-bar.js b/old-ui/app/components/app-bar.js index 34c7edf2..73f24a7c 100644 --- a/old-ui/app/components/app-bar.js +++ b/old-ui/app/components/app-bar.js @@ -78,7 +78,7 @@ module.exports = class AppBar extends Component { zIndex: 12, }, }, [ - 'Try the New MetaMask', + 'Try the New DekuSan', AppBar.renderSpace(), h('span.banner__link', { async onClick () { diff --git a/old-ui/app/components/buy-button-subview.js b/old-ui/app/components/buy-button-subview.js index 8bb73ae3..641edcf9 100644 --- a/old-ui/app/components/buy-button-subview.js +++ b/old-ui/app/components/buy-button-subview.js @@ -138,7 +138,7 @@ BuyButtonSubview.prototype.primarySubview = function () { case '1': return this.mainnetSubview() - // Ropsten, Rinkeby, Kovan + // Ropsten, DEXON, Kovan case '3': case '4': case '42': diff --git a/old-ui/app/components/network.js b/old-ui/app/components/network.js index 59596dab..9d741997 100644 --- a/old-ui/app/components/network.js +++ b/old-ui/app/components/network.js @@ -53,7 +53,7 @@ Network.prototype.render = function () { hoverText = 'Kovan Test Network' iconName = 'kovan-test-network' } else if (providerName === 'rinkeby') { - hoverText = 'Rinkeby Test Network' + hoverText = 'DEXON Test Network' iconName = 'rinkeby-test-network' } else { hoverText = 'Unknown Private Network' @@ -105,7 +105,7 @@ Network.prototype.render = function () { style: { color: '#e7a218', }}, - 'Rinkeby Test Net'), + 'DEXON Test Net'), props.onClick && h('i.fa.fa-caret-down.fa-lg'), ]) default: diff --git a/old-ui/app/config.js b/old-ui/app/config.js index da71809c..a5e9be55 100644 --- a/old-ui/app/config.js +++ b/old-ui/app/config.js @@ -191,7 +191,7 @@ ConfigScreen.prototype.render = function () { if (err) { state.dispatch(actions.displayWarning('Error in retrieving state logs.')) } else { - exportAsFile('MetaMask State Logs.json', result) + exportAsFile('DekuSan State Logs.json', result) } }) }, @@ -368,7 +368,7 @@ function currentProviderDisplay (metamaskState) { case 'rinkeby': title = 'Current Network' - value = 'Rinkeby Test Network' + value = 'DEXON Test Network' break default: diff --git a/old-ui/app/css/index.css b/old-ui/app/css/index.css index fbf0a1a2..14e8e12e 100644 --- a/old-ui/app/css/index.css +++ b/old-ui/app/css/index.css @@ -30,7 +30,7 @@ html { .app-root { overflow: hidden; - position: relative + position: relative; } .app-primary { @@ -76,6 +76,7 @@ button, input[type="submit"] { color: white; transform-origin: center center; transition: transform 50ms ease-in; + /* default orange */ background: rgba(247, 134, 28, 1); box-shadow: 0px 3px 6px rgba(247, 134, 28, 0.36); @@ -104,6 +105,7 @@ button.spaced { button:not([disabled]):hover, input[type="submit"]:not([disabled]):hover { transform: scale(1.1); } + button:not([disabled]):active, input[type="submit"]:not([disabled]):active { transform: scale(0.95); } @@ -117,7 +119,7 @@ a { color: inherit; } -a:hover{ +a:hover { color: #df6b0e; } @@ -195,7 +197,6 @@ textarea.twelve-word-phrase { display: flex; align-items: center; font-size: 0.6em; - } .network-name { @@ -211,6 +212,7 @@ textarea.twelve-word-phrase { display: flex; justify-content: flex-end; } + /* app sections */ @@ -261,6 +263,7 @@ app sections opacity: 0.0; transition: opacity 400ms ease-in, transform 400ms ease-in; } + .lock.unlocked { transform: scale(1); opacity: 1; @@ -271,15 +274,18 @@ app sections transform: scaleX(1) translateX(0); transition: transform 250ms ease-in; } + .lock.unlocked .lock-top { transform: scaleX(-1) translateX(-12px); transition: transform 250ms ease-in; } + .lock.unlocked:hover { border-radius: 4px; background: #e5e5e5; border: 1px solid #b1b1b1; } + .lock.unlocked:active { background: #c3c3c3; } @@ -299,34 +305,40 @@ app sections .unlock-screen input[type=password] { width: 260px; + /*height: 36px; margin-bottom: 24px; padding: 8px;*/ } -.sizing-input{ +.sizing-input { font-size: 14px; height: 30px; padding-left: 5px; } -.editable-label{ + +.editable-label { display: flex; } + /* Webkit */ .unlock-screen input::-webkit-input-placeholder { text-align: center; font-size: 1.2em; } + /* Firefox 18- */ .unlock-screen input:-moz-placeholder { text-align: center; font-size: 1.2em; } + /* Firefox 19+ */ .unlock-screen input::-moz-placeholder { text-align: center; font-size: 1.2em; } + /* IE */ .unlock-screen input:-ms-input-placeholder { text-align: center; @@ -346,8 +358,6 @@ input.large-input { letter-spacing: 0.1em; } - - /* accounts */ .accounts-section { @@ -416,9 +426,7 @@ input.large-input { /* accounts screen */ -.identity-section { - -} +.identity-section {} .identity-section .identity-panel { background: #E9E9E9; @@ -437,7 +445,7 @@ input.large-input { .identity-section .accounts-list-option:hover, .identity-section .accounts-list-option.selected { - background:white; + background: white; } /* account detail screen */ @@ -459,9 +467,7 @@ input.large-input { flex-grow: 10; } -.name-label{ - -} +.name-label {} .unapproved-tx-icon { height: 16px; @@ -475,6 +481,7 @@ input.large-input { height: 100%; visibility: hidden; } + .editing-label { display: flex; justify-content: flex-start; @@ -484,9 +491,11 @@ input.large-input { text-rendering: geometricPrecision; color: #954a97; } + .name-label:hover .edit-text { visibility: visible; } + /* tx confirm */ .unconftx-section input[type=password] { @@ -501,9 +510,7 @@ input.large-input { /* Send Screen */ -.send-screen { - -} +.send-screen {} .send-screen section { margin: 8px 16px; @@ -525,17 +532,17 @@ input.large-input { } /* Info screen */ -.info-gray{ +.info-gray { font-family: 'Montserrat Regular'; text-transform: uppercase; color: #AEAEAE; } -.icon-size{ +.icon-size { width: 20px; } -.info{ +.info { font-family: 'Montserrat Regular', Arial; padding-bottom: 10px; display: inline-block; @@ -548,7 +555,6 @@ input.large-input { align-items: center; } - .custom-radio-selected { width: 17px; height: 17px; @@ -573,31 +579,25 @@ input.large-input { color: rgba(247, 134, 28, 1); } -.radio-titles-subtext { - -} - -.selected-exchange { +.radio-titles-subtext {} -} - -.buy-radio { +.selected-exchange {} -} +.buy-radio {} -.eth-warning{ +.eth-warning { transition: opacity 400ms ease-in, transform 400ms ease-in; } -.buy-subview{ +.buy-subview { transition: opacity 400ms ease-in, transform 400ms ease-in; } -.input-container:hover .edit-text{ +.input-container:hover .edit-text { visibility: visible; } -.buy-inputs{ +.buy-inputs { font-family: 'Montserrat Light'; font-size: 13px; height: 20px; @@ -607,9 +607,9 @@ input.large-input { border-color: transparent; border-width: 0.5px; border-radius: 2px; - } -.input-container:hover .buy-inputs{ + +.input-container:hover .buy-inputs { box-sizing: inherit; border: solid; border-color: #954a97; @@ -617,7 +617,7 @@ input.large-input { border-radius: 2px; } -.buy-inputs:focus{ +.buy-inputs:focus { border: solid; border-color: #954a97; border-width: 0.5px; @@ -631,7 +631,6 @@ input.large-input { width: 50%; text-align: center; padding-bottom: 4px; - } .inactiveForm { @@ -653,7 +652,7 @@ input.large-input { color: #4D4D4D; } -.marketinfo{ +.marketinfo { font-family: 'Montserrat light'; color: #AEAEAE; font-size: 15px; @@ -670,25 +669,25 @@ input.large-input { overflow: scroll; } -.icon-control .fa-refresh{ +.icon-control .fa-refresh { visibility: hidden; } -.icon-control:hover .fa-refresh{ +.icon-control:hover .fa-refresh { visibility: visible; } -.icon-control:hover .fa-chevron-right{ +.icon-control:hover .fa-chevron-right { visibility: hidden; } .inactive { - color: #AEAEAE; + color: #AEAEAE; } -.inactive button{ - background: #AEAEAE; - color: white; +.inactive button { + background: #AEAEAE; + color: white; } .ellip-address { @@ -701,8 +700,8 @@ input.large-input { } .qr-header { - font-size: 25px; - margin-top: 40px; + font-size: 25px; + margin-top: 40px; } .qr-message { @@ -717,7 +716,7 @@ div.message-container > div:first-child { } .pop-hover:hover { - transform: scale(1.1); + transform: scale(1.1); } .new-ui-announcement { @@ -935,5 +934,5 @@ div.message-container > div:first-child { } .notification-modal__link { - color: #2f9ae0; + color: #954A97; } diff --git a/old-ui/app/css/lib.css b/old-ui/app/css/lib.css index c9c06a45..ba33bea6 100644 --- a/old-ui/app/css/lib.css +++ b/old-ui/app/css/lib.css @@ -280,7 +280,7 @@ i.fa.fa-question-circle.fa-lg.menu-icon { /* Hacky breakpoint fix for account + tab sections Resolves issue from @frankiebee in - https://github.com/MetaMask/metamask-extension/pull/1835 + https://github.com/DekuSan/metamask-extension/pull/1835 Please remove this when integrating new designs */ diff --git a/old-ui/app/first-time/init-menu.js b/old-ui/app/first-time/init-menu.js index 4f1d5d18..4a4778ae 100644 --- a/old-ui/app/first-time/init-menu.js +++ b/old-ui/app/first-time/init-menu.js @@ -55,7 +55,7 @@ InitializeMenuScreen.prototype.renderMenu = function (state) { color: '#7F8082', marginBottom: 10, }, - }, 'MetaMask'), + }, 'DekuSan'), h('div', [ @@ -68,7 +68,7 @@ InitializeMenuScreen.prototype.renderMenu = function (state) { }, 'Encrypt your new DEN'), h(Tooltip, { - title: 'Your DEN is your password-encrypted storage within MetaMask.', + title: 'Your DEN is your password-encrypted storage within DekuSan.', }, [ h('i.fa.fa-question-circle.pointer', { style: { diff --git a/old-ui/app/keychains/hd/create-vault-complete.js b/old-ui/app/keychains/hd/create-vault-complete.js index 736e922b..92269c1a 100644 --- a/old-ui/app/keychains/hd/create-vault-complete.js +++ b/old-ui/app/keychains/hd/create-vault-complete.js @@ -53,7 +53,7 @@ CreateVaultCompleteScreen.prototype.render = function () { textAlign: 'center', }, }, [ - h('span.error', 'These 12 words are the only way to restore your MetaMask accounts.\nSave them somewhere safe and secret.'), + h('span.error', 'These 12 words are the only way to restore your DekuSan accounts.\nSave them somewhere safe and secret.'), ]), h('textarea.twelve-word-phrase', { @@ -72,7 +72,7 @@ CreateVaultCompleteScreen.prototype.render = function () { }, 'I\'ve copied it somewhere safe'), h('button.primary', { - onClick: () => exportAsFile(`MetaMask Seed Words`, seed), + onClick: () => exportAsFile(`DekuSan Seed Words`, seed), style: { margin: '10px', fontSize: '0.9em', diff --git a/old-ui/app/new-ui-annoucement.js b/old-ui/app/new-ui-annoucement.js index 59b12627..06605b10 100644 --- a/old-ui/app/new-ui-annoucement.js +++ b/old-ui/app/new-ui-annoucement.js @@ -33,9 +33,9 @@ module.exports = class NewUiAnnouncement extends PureComponent { }, '×'), ]), h('section.new-ui-announcement__body', [ - h('h1', 'A New Version of MetaMask'), + h('h1', 'A New Version of DekuSan'), h('p', [ - "We're excited to announce a brand-new version of MetaMask with enhanced features and functionality.", + "We're excited to announce a brand-new version of DekuSan with enhanced features and functionality.", ]), h('div.updates-list', [ h('h2', 'Updates include'), @@ -50,7 +50,7 @@ module.exports = class NewUiAnnouncement extends PureComponent { ]), ]), h('p', [ - 'You can still use the current version of MetaMask. The new version is still in beta, ' + + 'You can still use the current version of DekuSan. The new version is still in beta, ' + 'however we encourage you to try it out as we transition into this exciting new update.', h('span', { dangerouslySetInnerHTML: { @@ -71,7 +71,7 @@ module.exports = class NewUiAnnouncement extends PureComponent { ]), ]), h('section.new-ui-announcement__footer', [ - h('h1', 'Ready to try the new MetaMask?'), + h('h1', 'Ready to try the new DekuSan?'), h('button.positive', { onClick: this.switchToNewUi, }, 'Try it now'), diff --git a/old-ui/app/unlock.js b/old-ui/app/unlock.js index 7bf4ad29..561f2c26 100644 --- a/old-ui/app/unlock.js +++ b/old-ui/app/unlock.js @@ -43,7 +43,7 @@ UnlockScreen.prototype.render = function () { textTransform: 'uppercase', color: '#7F8082', }, - }, 'MetaMask'), + }, 'DekuSan'), h('input.large-input', { type: 'password', diff --git a/old-ui/example.js b/old-ui/example.js index 4627c0e9..119a9ea7 100644 --- a/old-ui/example.js +++ b/old-ui/example.js @@ -1,6 +1,6 @@ const injectCss = require('inject-css') -const MetaMaskUi = require('./index.js') -const MetaMaskUiCss = require('./css.js') +const DekuSanUi = require('./index.js') +const DekuSanUiCss = require('./css.js') const EventEmitter = require('events').EventEmitter // account management @@ -103,10 +103,10 @@ accountManager._didUpdate = function () { var container = document.getElementById('app-content') -var css = MetaMaskUiCss() +var css = DekuSanUiCss() injectCss(css) -MetaMaskUi({ +DekuSanUi({ container: container, accountManager: accountManager, }) diff --git a/old-ui/lib/lost-accounts-notice.js b/old-ui/lib/lost-accounts-notice.js index 948b13db..fad08d4a 100644 --- a/old-ui/lib/lost-accounts-notice.js +++ b/old-ui/lib/lost-accounts-notice.js @@ -4,7 +4,7 @@ module.exports = function (lostAccounts) { return { date: new Date().toDateString(), title: 'Account Problem Caught', - body: `MetaMask has fixed a bug where some accounts were previously mis-generated. This was a rare issue, but you were affected! + body: `DekuSan has fixed a bug where some accounts were previously mis-generated. This was a rare issue, but you were affected! We have successfully imported the accounts that were mis-generated, but they will no longer be recovered with your normal seed phrase. diff --git a/package-lock.json b/package-lock.json index e145c424..433269c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9672,8 +9672,13 @@ } }, "eth-contract-metadata": { +<<<<<<< HEAD "version": "github:MetaMask/eth-contract-metadata#05e39ee1be2edaa53b04ff7e215cdd6db16d09c1", "from": "github:MetaMask/eth-contract-metadata#master" +======= + "version": "github:DekuSan/eth-contract-metadata#2da362052a312dc6c72a7eec116abf6284664f50", + "from": "github:DekuSan/eth-contract-metadata#master" +>>>>>>> Complete onboarding flow }, "eth-ens-namehash": { "version": "2.0.8", diff --git a/test/data/mock-state.json b/test/data/mock-state.json index 8deff553..cd538252 100644 --- a/test/data/mock-state.json +++ b/test/data/mock-state.json @@ -67,7 +67,7 @@ { "op": "add", "path": "/origin", - "value": "MetaMask", + "value": "DekuSan", "note": "#newUnapprovedTransaction - adding the origin", "timestamp": 1536268017686 } @@ -76,7 +76,7 @@ "gasPriceSpecified": true, "gasLimitSpecified": true, "estimatedGas": "0x5208", - "origin": "MetaMask" + "origin": "DekuSan" } }, "selectedAddress": "0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc", @@ -200,7 +200,7 @@ { "op": "add", "path": "/origin", - "value": "MetaMask", + "value": "DekuSan", "note": "#newUnapprovedTransaction - adding the origin", "timestamp": 1528133130667 } @@ -314,7 +314,7 @@ "gasPriceSpecified": true, "gasLimitSpecified": true, "estimatedGas": "0xcf08", - "origin": "MetaMask", + "origin": "DekuSan", "nonceDetails": { "params": { "highestLocallyConfirmed": 0, @@ -398,7 +398,7 @@ { "op": "add", "path": "/origin", - "value": "MetaMask", + "value": "DekuSan", "note": "#newUnapprovedTransaction - adding the origin", "timestamp": 1528133150013 } @@ -512,7 +512,7 @@ "gasPriceSpecified": true, "gasLimitSpecified": true, "estimatedGas": "0xcf08", - "origin": "MetaMask", + "origin": "DekuSan", "nonceDetails": { "params": { "highestLocallyConfirmed": 0, @@ -596,7 +596,7 @@ { "op": "add", "path": "/origin", - "value": "MetaMask", + "value": "DekuSan", "note": "#newUnapprovedTransaction - adding the origin", "timestamp": 1528133180722 } @@ -710,7 +710,7 @@ "gasPriceSpecified": true, "gasLimitSpecified": true, "estimatedGas": "0xcf08", - "origin": "MetaMask", + "origin": "DekuSan", "nonceDetails": { "params": { "highestLocallyConfirmed": 182, @@ -1005,7 +1005,7 @@ { "op": "add", "path": "/origin", - "value": "MetaMask", + "value": "DekuSan", "note": "#newUnapprovedTransaction - adding the origin", "timestamp": 1528133291486 } @@ -1119,7 +1119,7 @@ "gasPriceSpecified": true, "gasLimitSpecified": true, "estimatedGas": "0xd508", - "origin": "MetaMask", + "origin": "DekuSan", "nonceDetails": { "params": { "highestLocallyConfirmed": 185, diff --git a/test/e2e/beta/from-import-beta-ui.spec.js b/test/e2e/beta/from-import-beta-ui.spec.js index aa951a24..1f67b6e1 100644 --- a/test/e2e/beta/from-import-beta-ui.spec.js +++ b/test/e2e/beta/from-import-beta-ui.spec.js @@ -20,7 +20,7 @@ const { const fetchMockResponses = require('./fetch-mocks.js') -describe('Using MetaMask with an existing account', function () { +describe('Using DekuSan with an existing account', function () { let extensionId let driver @@ -242,8 +242,8 @@ describe('Using MetaMask with an existing account', function () { }) }) - describe('Send ETH from inside MetaMask', () => { - it('starts a send transaction', async function () { + describe('Send ETH from inside DekuSan', () => { + it('starts to send a transaction', async function () { const sendButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Send')]`)) await sendButton.click() await delay(regularDelayMs) diff --git a/test/e2e/beta/metamask-beta-ui.spec.js b/test/e2e/beta/metamask-beta-ui.spec.js index c5b7f40e..e5517c5f 100644 --- a/test/e2e/beta/metamask-beta-ui.spec.js +++ b/test/e2e/beta/metamask-beta-ui.spec.js @@ -24,7 +24,7 @@ const { } = require('./helpers') const fetchMockResponses = require('./fetch-mocks.js') -describe('MetaMask', function () { +describe('DekuSan', function () { let extensionId let driver let tokenAddress @@ -350,8 +350,8 @@ describe('MetaMask', function () { }) }) - describe('Send ETH from inside MetaMask', () => { - it('starts a send transaction', async function () { + describe('Send ETH from inside DekuSan', () => { + it('starts to send a transaction', async function () { const sendButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Send')]`)) await sendButton.click() await delay(regularDelayMs) @@ -819,7 +819,7 @@ describe('MetaMask', function () { }) }) - describe('Send token from inside MetaMask', () => { + describe('Send token from inside DekuSan', () => { let gasModal it('starts to send a transaction', async function () { const sendButton = await findElement(driver, By.xpath(`//button[contains(text(), 'Send')]`)) diff --git a/test/e2e/metamask.spec.js b/test/e2e/metamask.spec.js index 13af6cb2..c5faa11f 100644 --- a/test/e2e/metamask.spec.js +++ b/test/e2e/metamask.spec.js @@ -66,9 +66,9 @@ describe('Metamask popup page', function () { describe('Account Creation', () => { - it('matches MetaMask title', async () => { + it('matches DekuSan title', async () => { const title = await driver.getTitle() - assert.equal(title, 'MetaMask', 'title matches MetaMask') + assert.equal(title, 'DekuSan', 'title matches DekuSan') await delay(300) }) @@ -268,7 +268,7 @@ describe('Metamask popup page', function () { }) // There is an issue with blank confirmation window in Firefox, but the button is still there and the driver is able to clicked (?.?) - it('confirms transaction in MetaMask popup', async function () { + it('confirms transaction in DekuSan popup', async function () { const windowHandles = await driver.getAllWindowHandles() await driver.switchTo().window(windowHandles[windowHandles.length - 1]) const byMetamaskSubmit = By.css('#pending-tx-form > div.flex-row.flex-space-around.conf-buttons > input') @@ -285,7 +285,7 @@ describe('Metamask popup page', function () { await delay(500) }) - it('navigates back to MetaMask popup in the tab', async function () { + it('navigates back to DekuSan popup in the tab', async function () { await driver.get(extensionUri) await delay(700) }) diff --git a/test/integration/lib/first-time.js b/test/integration/lib/first-time.js new file mode 100644 index 00000000..a28e6cfd --- /dev/null +++ b/test/integration/lib/first-time.js @@ -0,0 +1,117 @@ +const reactTriggerChange = require('react-trigger-change') +const PASSWORD = 'password123' +const runMascaraFirstTimeTest = require('./mascara-first-time') +const { + timeout, + findAsync, +} = require('../../lib/util') + +QUnit.module('first time usage') + +QUnit.test('render init screen', (assert) => { + const done = assert.async() + runFirstTimeUsageTest(assert).then(done).catch((err) => { + assert.notOk(err, `Error was thrown: ${err.stack}`) + done() + }) +}) + +async function runFirstTimeUsageTest(assert, done) { + if (window.METAMASK_PLATFORM_TYPE === 'mascara') { + return runMascaraFirstTimeTest(assert, done) + } + + const selectState = $('select') + selectState.val('first time') + reactTriggerChange(selectState[0]) + + const app = $('#app-content') + + // Selects new ui + const tryNewUIButton = (await findAsync(app, 'button.negative'))[0] + tryNewUIButton.click() + await timeout() + + // recurse notices + while (true) { + const button = await findAsync(app, 'button') + if (button.html() === 'Accept') { + // still notices to accept + const termsPageRaw = await findAsync(app, '.markdown') + const termsPage = (await findAsync(app, '.markdown'))[0] + console.log('termsPageRaw', termsPageRaw) + termsPage.scrollTop = termsPage.scrollHeight + console.log('Clearing notice') + button.click() + } else { + // exit loop + console.log('No more notices...') + break + } + } + + // Scroll through terms + const title = (await findAsync(app, 'h1'))[0] + assert.equal(title.textContent, 'DekuSan', 'title screen') + + // enter password + const pwBox = (await findAsync(app, '#password-box'))[0] + const confBox = (await findAsync(app, '#password-box-confirm'))[0] + pwBox.value = PASSWORD + confBox.value = PASSWORD + + // create vault + const createButton = (await findAsync(app, 'button.primary'))[0] + createButton.click() + + await timeout() + const created = (await findAsync(app, 'h3'))[0] + assert.equal(created.textContent, 'Vault Created', 'Vault created screen') + + // Agree button + const button = (await findAsync(app, 'button'))[0] + assert.ok(button, 'button present') + button.click() + + const detail = (await findAsync(app, '.account-detail-section'))[0] + assert.ok(detail, 'Account detail section loaded.') + + const sandwich = (await findAsync(app, '.sandwich-expando'))[0] + sandwich.click() + + const menu = (await findAsync(app, '.menu-droppo'))[0] + const children = menu.children + const logout = children[2] + assert.ok(logout, 'Lock menu item found') + logout.click() + + const pwBox2 = (await findAsync(app, '#password-box'))[0] + pwBox2.value = PASSWORD + + const createButton2 = (await findAsync(app, 'button.primary'))[0] + createButton2.click() + + const detail2 = (await findAsync(app, '.account-detail-section'))[0] + assert.ok(detail2, 'Account detail section loaded again.') + + // open account settings dropdown + const qrButton = (await findAsync(app, '.fa.fa-ellipsis-h'))[0] + qrButton.click() + + // qr code item + const qrButton2 = (await findAsync(app, '.dropdown-menu-item'))[1] + qrButton2.click() + + const qrHeader = (await findAsync(app, '.qr-header'))[0] + const qrContainer = (await findAsync(app, '#qr-container'))[0] + assert.equal(qrHeader.textContent, 'Account 1', 'Should show account label.') + assert.ok(qrContainer, 'QR Container found') + + const networkMenu = (await findAsync(app, '.network-indicator'))[0] + networkMenu.click() + + const networkMenu2 = (await findAsync(app, '.network-indicator'))[0] + const children2 = networkMenu2.children + children2.length[3] + assert.ok(children2, 'All network options present') +} diff --git a/test/integration/mocks/badVault2.json b/test/integration/mocks/badVault2.json index e849ca62..74ac6dd2 100644 --- a/test/integration/mocks/badVault2.json +++ b/test/integration/mocks/badVault2.json @@ -1 +1 @@ -{"meta":{"version":4},"data":{"fiatCurrency":"USD","noticesList":[{"read":true,"date":"Fri Dec 16 2016","title":"Ending Morden Support","body":"Due to [recent events](https://blog.ethereum.org/2016/11/20/from-morden-to-ropsten/), MetaMask is now deprecating support for the Morden Test Network.\n\nUsers will still be able to access Morden through a locally hosted node, but we will no longer be providing hosted access to this network through [Infura](http://infura.io/).\n\nPlease use the new Ropsten Network as your new default test network.\n\nYou can fund your Ropsten account using the buy button on your account page.\n\nBest wishes!\nThe MetaMask Team\n\n","id":0}],"conversionRate":7.07341909,"conversionDate":1482539284,"wallet":"{\"encSeed\":{\"encStr\":\"LZsdN8lJzYkUe1UpmAalnERdgkBFt25gWDdK8kfQUwMAk/27XR+dc+8n5swgoF5qgwhc9LBgliEGNDs1Q/lnuld3aQLabkOeAW4BHS1vS7FxqKrzDS3iyzSuQO6wDQmGno/buuknVgDsKiyjW22hpt7vtVVWA+ZL1P3x6M0+AxGJjeGVrG+E8Q==\",\"nonce\":\"T6O9BmwmTj214XUK3KF0s3iCKo3OlrUD\"},\"ksData\":{\"m/44'/60'/0'/0\":{\"info\":{\"curve\":\"secp256k1\",\"purpose\":\"sign\"},\"encHdPathPriv\":{\"encStr\":\"GNNfZevCMlgMVh9y21y1UwrC9qcmH6XYq7v+9UoqbHnzPQJFlxidN5+x/Sldo72a6+5zJpQkkdZ+Q0lePrzvXfuSd3D/RO7WKFIKo9nAQI5+JWwz4INuCmVcmqCv2J4BTLGjrG8fp5pDJ62Bn0XHqkJo3gx3fpvs3cS66+ZKwg==\",\"nonce\":\"HRTlGj44khQs2veYHEF/GqTI1t0yYvyd\"},\"hdIndex\":3,\"encPrivKeys\":{\"e15d894becb0354c501ae69429b05143679f39e0\":{\"key\":\"ZAeZL9VcRUtiiO4VXOQKBFg787PR5R3iymjUeU5vpDRIqOXbjWN6N4ZNR8YpSXl+\",\"nonce\":\"xLsADagS8uqDYae6cImyhxF7o1kBDbPe\"},\"87658c15aefe7448008a28513a11b6b130ef4cd0\":{\"key\":\"ku0mm5s1agRJNAMYIJO0qeoDe+FqcbqdQI6azXF3GL1OLo6uMlt6I4qS+eeravFi\",\"nonce\":\"xdGfSUPKtkW8ge0SWIbbpahs/NyEMzn5\"},\"aa25854c0379e53c957ac9382e720c577fa31fd5\":{\"key\":\"NjpYC9FbiC95CTx/1kwgOHk5LSN9vl4RULEBbvwfVOjqSH8WixNoP3R6I/QyNIs2\",\"nonce\":\"M/HWpXXA9QvuZxEykkGQPJKKdz33ovQr\"}},\"addresses\":[\"e15d894becb0354c501ae69429b05143679f39e0\",\"87658c15aefe7448008a28513a11b6b130ef4cd0\",\"aa25854c0379e53c957ac9382e720c577fa31fd5\"]}},\"encHdRootPriv\":{\"encStr\":\"f+3prUOzl+95aNAV+ad6lZdsYZz120ZsL67ucjj3tiMXf/CC4X8XB9N2QguhoMy6fW+fATUsTdJe8+CbAAyb79V9HY0Pitzq9Yw/g1g0/Ii2JzsdGBriuMsPdwZSVqz+rvQFw/6Qms1xjW6cqa8S7kM2WA5l8RB1Ck6r5zaqbA==\",\"nonce\":\"oGahxNFekVxH9sg6PUCCHIByvo4WFSqm\"},\"salt\":\"N7xYoEA53yhSweOsEphku1UKkIEuZtX2MwLBhVM6RR8=\",\"version\":2}","config":{"provider":{"type":"testnet"},"selectedAccount":"0xe15d894becb0354c501ae69429b05143679f39e0"},"walletNicknames":{"0xac39b311dceb2a4b2f5d8461c1cdaf756f4f7ae9":"Account 1","0xd7c0cd9e7d2701c710d64fc492c7086679bdf7b4":"Account 2","0x1acfb961c5a8268eac8e09d6241a26cbeff42241":"Account 3"},"lostAccounts":["0xe15d894becb0354c501ae69429b05143679f39e0","0x87658c15aefe7448008a28513a11b6b130ef4cd0","0xaa25854c0379e53c957ac9382e720c577fa31fd5"]}} +{"meta":{"version":4},"data":{"fiatCurrency":"USD","noticesList":[{"read":true,"date":"Fri Dec 16 2016","title":"Ending Morden Support","body":"Due to [recent events](https://blog.ethereum.org/2016/11/20/from-morden-to-ropsten/), DekuSan is now deprecating support for the Morden Test Network.\n\nUsers will still be able to access Morden through a locally hosted node, but we will no longer be providing hosted access to this network through [Infura](http://infura.io/).\n\nPlease use the new Ropsten Network as your new default test network.\n\nYou can fund your Ropsten account using the buy button on your account page.\n\nBest wishes!\nThe DekuSan Team\n\n","id":0}],"conversionRate":7.07341909,"conversionDate":1482539284,"wallet":"{\"encSeed\":{\"encStr\":\"LZsdN8lJzYkUe1UpmAalnERdgkBFt25gWDdK8kfQUwMAk/27XR+dc+8n5swgoF5qgwhc9LBgliEGNDs1Q/lnuld3aQLabkOeAW4BHS1vS7FxqKrzDS3iyzSuQO6wDQmGno/buuknVgDsKiyjW22hpt7vtVVWA+ZL1P3x6M0+AxGJjeGVrG+E8Q==\",\"nonce\":\"T6O9BmwmTj214XUK3KF0s3iCKo3OlrUD\"},\"ksData\":{\"m/44'/60'/0'/0\":{\"info\":{\"curve\":\"secp256k1\",\"purpose\":\"sign\"},\"encHdPathPriv\":{\"encStr\":\"GNNfZevCMlgMVh9y21y1UwrC9qcmH6XYq7v+9UoqbHnzPQJFlxidN5+x/Sldo72a6+5zJpQkkdZ+Q0lePrzvXfuSd3D/RO7WKFIKo9nAQI5+JWwz4INuCmVcmqCv2J4BTLGjrG8fp5pDJ62Bn0XHqkJo3gx3fpvs3cS66+ZKwg==\",\"nonce\":\"HRTlGj44khQs2veYHEF/GqTI1t0yYvyd\"},\"hdIndex\":3,\"encPrivKeys\":{\"e15d894becb0354c501ae69429b05143679f39e0\":{\"key\":\"ZAeZL9VcRUtiiO4VXOQKBFg787PR5R3iymjUeU5vpDRIqOXbjWN6N4ZNR8YpSXl+\",\"nonce\":\"xLsADagS8uqDYae6cImyhxF7o1kBDbPe\"},\"87658c15aefe7448008a28513a11b6b130ef4cd0\":{\"key\":\"ku0mm5s1agRJNAMYIJO0qeoDe+FqcbqdQI6azXF3GL1OLo6uMlt6I4qS+eeravFi\",\"nonce\":\"xdGfSUPKtkW8ge0SWIbbpahs/NyEMzn5\"},\"aa25854c0379e53c957ac9382e720c577fa31fd5\":{\"key\":\"NjpYC9FbiC95CTx/1kwgOHk5LSN9vl4RULEBbvwfVOjqSH8WixNoP3R6I/QyNIs2\",\"nonce\":\"M/HWpXXA9QvuZxEykkGQPJKKdz33ovQr\"}},\"addresses\":[\"e15d894becb0354c501ae69429b05143679f39e0\",\"87658c15aefe7448008a28513a11b6b130ef4cd0\",\"aa25854c0379e53c957ac9382e720c577fa31fd5\"]}},\"encHdRootPriv\":{\"encStr\":\"f+3prUOzl+95aNAV+ad6lZdsYZz120ZsL67ucjj3tiMXf/CC4X8XB9N2QguhoMy6fW+fATUsTdJe8+CbAAyb79V9HY0Pitzq9Yw/g1g0/Ii2JzsdGBriuMsPdwZSVqz+rvQFw/6Qms1xjW6cqa8S7kM2WA5l8RB1Ck6r5zaqbA==\",\"nonce\":\"oGahxNFekVxH9sg6PUCCHIByvo4WFSqm\"},\"salt\":\"N7xYoEA53yhSweOsEphku1UKkIEuZtX2MwLBhVM6RR8=\",\"version\":2}","config":{"provider":{"type":"testnet"},"selectedAccount":"0xe15d894becb0354c501ae69429b05143679f39e0"},"walletNicknames":{"0xac39b311dceb2a4b2f5d8461c1cdaf756f4f7ae9":"Account 1","0xd7c0cd9e7d2701c710d64fc492c7086679bdf7b4":"Account 2","0x1acfb961c5a8268eac8e09d6241a26cbeff42241":"Account 3"},"lostAccounts":["0xe15d894becb0354c501ae69429b05143679f39e0","0x87658c15aefe7448008a28513a11b6b130ef4cd0","0xaa25854c0379e53c957ac9382e720c577fa31fd5"]}} diff --git a/test/lib/migrations/002.json b/test/lib/migrations/002.json index 15820ded..c15b4f30 100644 --- a/test/lib/migrations/002.json +++ b/test/lib/migrations/002.json @@ -1 +1 @@ -{"meta":{"version":20},"data":{"config":{},"NetworkController":{"provider":{"type":"mainnet","rpcTarget":"https://mainnet.infura.io/metamask"},"network":"1"},"firstTimeInfo":{"version":"3.12.1","date":1517351427287},"NoticeController":{"noticesList":[{"read":false,"date":"Thu Feb 09 2017","title":"Terms of Use","body":"# Terms of Use #\n\n**THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION AND A WAIVER OF CLASS ACTION RIGHTS AS DETAILED IN SECTION 13. PLEASE READ THE AGREEMENT CAREFULLY.**\n\n_Our Terms of Use have been updated as of September 5, 2016_\n\n## 1. Acceptance of Terms ##\n\nMetaMask provides a platform for managing Ethereum (or \"ETH\") accounts, and allowing ordinary websites to interact with the Ethereum blockchain, while keeping the user in control over what transactions they approve, through our website located at[ ](http://metamask.io)[https://metamask.io/](https://metamask.io/) and browser plugin (the \"Site\") — which includes text, images, audio, code and other materials (collectively, the “Content”) and all of the features, and services provided. The Site, and any other features, tools, materials, or other services offered from time to time by MetaMask are referred to here as the “Service.” Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully before using the Service. By using or otherwise accessing the Services, or clicking to accept or agree to these Terms where that option is made available, you (1) accept and agree to these Terms (2) consent to the collection, use, disclosure and other handling of information as described in our Privacy Policy and (3) any additional terms, rules and conditions of participation issued by MetaMask from time to time. If you do not agree to the Terms, then you may not access or use the Content or Services.\n\n## 2. Modification of Terms of Use ##\n\nExcept for Section 13, providing for binding arbitration and waiver of class action rights, MetaMask reserves the right, at its sole discretion, to modify or replace the Terms of Use at any time. The most current version of these Terms will be posted on our Site. You shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by you after any modification to the Terms constitutes your acceptance of the Terms of Use as modified.\n\n\n\n## 3. Eligibility ##\n\nYou hereby represent and warrant that you are fully able and competent to enter into the terms, conditions, obligations, affirmations, representations and warranties set forth in these Terms and to abide by and comply with these Terms.\n\nMetaMask is a global platform and by accessing the Content or Services, you are representing and warranting that, you are of the legal age of majority in your jurisdiction as is required to access such Services and Content and enter into arrangements as provided by the Service. You further represent that you are otherwise legally permitted to use the service in your jurisdiction including owning cryptographic tokens of value, and interacting with the Services or Content in any way. You further represent you are responsible for ensuring compliance with the laws of your jurisdiction and acknowledge that MetaMask is not liable for your compliance with such laws.\n\n## 4 Account Password and Security ##\n\nWhen setting up an account within MetaMask, you will be responsible for keeping your own account secrets, which may be a twelve-word seed phrase, an account file, or other locally stored secret information. MetaMask encrypts this information locally with a password you provide, that we never send to our servers. You agree to (a) never use the same password for MetaMask that you have ever used outside of this service; (b) keep your secret information and password confidential and do not share them with anyone else; (c) immediately notify MetaMask of any unauthorized use of your account or breach of security. MetaMask cannot and will not be liable for any loss or damage arising from your failure to comply with this section.\n\n## 5. Representations, Warranties, and Risks ##\n\n### 5.1. Warranty Disclaimer ###\n\nYou expressly understand and agree that your use of the Service is at your sole risk. The Service (including the Service and the Content) are provided on an \"AS IS\" and \"as available\" basis, without warranties of any kind, either express or implied, including, without limitation, implied warranties of merchantability, fitness for a particular purpose or non-infringement. You acknowledge that MetaMask has no control over, and no duty to take any action regarding: which users gain access to or use the Service; what effects the Content may have on you; how you may interpret or use the Content; or what actions you may take as a result of having been exposed to the Content. You release MetaMask from all liability for you having acquired or not acquired Content through the Service. MetaMask makes no representations concerning any Content contained in or accessed through the Service, and MetaMask will not be responsible or liable for the accuracy, copyright compliance, legality or decency of material contained in or accessed through the Service.\n\n### 5.2 Sophistication and Risk of Cryptographic Systems ###\n\nBy utilizing the Service or interacting with the Content or platform in any way, you represent that you understand the inherent risks associated with cryptographic systems; and warrant that you have an understanding of the usage and intricacies of native cryptographic tokens, like Ether (ETH) and Bitcoin (BTC), smart contract based tokens such as those that follow the Ethereum Token Standard (https://github.com/ethereum/EIPs/issues/20), and blockchain-based software systems.\n\n### 5.3 Risk of Regulatory Actions in One or More Jurisdictions ###\n\nMetaMask and ETH could be impacted by one or more regulatory inquiries or regulatory action, which could impede or limit the ability of MetaMask to continue to develop, or which could impede or limit your ability to access or use the Service or Ethereum blockchain.\n\n### 5.4 Risk of Weaknesses or Exploits in the Field of Cryptography ###\n\nYou acknowledge and understand that Cryptography is a progressing field. Advances in code cracking or technical advances such as the development of quantum computers may present risks to cryptocurrencies and Services of Content, which could result in the theft or loss of your cryptographic tokens or property. To the extent possible, MetaMask intends to update the protocol underlying Services to account for any advances in cryptography and to incorporate additional security measures, but does not guarantee or otherwise represent full security of the system. By using the Service or accessing Content, you acknowledge these inherent risks.\n\n### 5.5 Volatility of Crypto Currencies ###\n\nYou understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum blockchain. You acknowledge these risks and represent that MetaMask cannot be held liable for such fluctuations or increased costs.\n\n### 5.6 Application Security ###\n\nYou acknowledge that Ethereum applications are code subject to flaws and acknowledge that you are solely responsible for evaluating any code provided by the Services or Content and the trustworthiness of any third-party websites, products, smart-contracts, or Content you access or use through the Service. You further expressly acknowledge and represent that Ethereum applications can be written maliciously or negligently, that MetaMask cannot be held liable for your interaction with such applications and that such applications may cause the loss of property or even identity. This warning and others later provided by MetaMask in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Service or Content.\n\n## 6. Indemnity ##\n\nYou agree to release and to indemnify, defend and hold harmless MetaMask and its parents, subsidiaries, affiliates and agencies, as well as the officers, directors, employees, shareholders and representatives of any of the foregoing entities, from and against any and all losses, liabilities, expenses, damages, costs (including attorneys’ fees and court costs) claims or actions of any kind whatsoever arising or resulting from your use of the Service, your violation of these Terms of Use, and any of your acts or omissions that implicate publicity rights, defamation or invasion of privacy. MetaMask reserves the right, at its own expense, to assume exclusive defense and control of any matter otherwise subject to indemnification by you and, in such case, you agree to cooperate with MetaMask in the defense of such matter.\n\n## 7. Limitation on liability ##\n\nYOU ACKNOWLEDGE AND AGREE THAT YOU ASSUME FULL RESPONSIBILITY FOR YOUR USE OF THE SITE AND SERVICE. YOU ACKNOWLEDGE AND AGREE THAT ANY INFORMATION YOU SEND OR RECEIVE DURING YOUR USE OF THE SITE AND SERVICE MAY NOT BE SECURE AND MAY BE INTERCEPTED OR LATER ACQUIRED BY UNAUTHORIZED PARTIES. YOU ACKNOWLEDGE AND AGREE THAT YOUR USE OF THE SITE AND SERVICE IS AT YOUR OWN RISK. RECOGNIZING SUCH, YOU UNDERSTAND AND AGREE THAT, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER METAMASK NOR ITS SUPPLIERS OR LICENSORS WILL BE LIABLE TO YOU FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR OTHER DAMAGES OF ANY KIND, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER TANGIBLE OR INTANGIBLE LOSSES OR ANY OTHER DAMAGES BASED ON CONTRACT, TORT, STRICT LIABILITY OR ANY OTHER THEORY (EVEN IF METAMASK HAD BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), RESULTING FROM THE SITE OR SERVICE; THE USE OR THE INABILITY TO USE THE SITE OR SERVICE; UNAUTHORIZED ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; STATEMENTS OR CONDUCT OF ANY THIRD PARTY ON THE SITE OR SERVICE; ANY ACTIONS WE TAKE OR FAIL TO TAKE AS A RESULT OF COMMUNICATIONS YOU SEND TO US; HUMAN ERRORS; TECHNICAL MALFUNCTIONS; FAILURES, INCLUDING PUBLIC UTILITY OR TELEPHONE OUTAGES; OMISSIONS, INTERRUPTIONS, LATENCY, DELETIONS OR DEFECTS OF ANY DEVICE OR NETWORK, PROVIDERS, OR SOFTWARE (INCLUDING, BUT NOT LIMITED TO, THOSE THAT DO NOT PERMIT PARTICIPATION IN THE SERVICE); ANY INJURY OR DAMAGE TO COMPUTER EQUIPMENT; INABILITY TO FULLY ACCESS THE SITE OR SERVICE OR ANY OTHER WEBSITE; THEFT, TAMPERING, DESTRUCTION, OR UNAUTHORIZED ACCESS TO, IMAGES OR OTHER CONTENT OF ANY KIND; DATA THAT IS PROCESSED LATE OR INCORRECTLY OR IS INCOMPLETE OR LOST; TYPOGRAPHICAL, PRINTING OR OTHER ERRORS, OR ANY COMBINATION THEREOF; OR ANY OTHER MATTER RELATING TO THE SITE OR SERVICE.\n\nSOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. ACCORDINGLY, SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU.\n\n## 8. Our Proprietary Rights ##\n\nAll title, ownership and intellectual property rights in and to the Service are owned by MetaMask or its licensors. You acknowledge and agree that the Service contains proprietary and confidential information that is protected by applicable intellectual property and other laws. Except as expressly authorized by MetaMask, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, display or create derivative works based on the Service, in whole or in part. MetaMask issues a license for MetaMask, found [here](https://github.com/MetaMask/metamask-plugin/blob/master/LICENSE). For information on other licenses utilized in the development of MetaMask, please see our attribution page at: [https://metamask.io/attributions.html](https://metamask.io/attributions.html)\n\n## 9. Links ##\n\nThe Service provides, or third parties may provide, links to other World Wide Web or accessible sites, applications or resources. Because MetaMask has no control over such sites, applications and resources, you acknowledge and agree that MetaMask is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products or other materials on or available from such sites or resources. You further acknowledge and agree that MetaMask shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource.\n\n## 10. Termination and Suspension ##\n\nMetaMask may terminate or suspend all or part of the Service and your MetaMask access immediately, without prior notice or liability, if you breach any of the terms or conditions of the Terms. Upon termination of your access, your right to use the Service will immediately cease.\n\nThe following provisions of the Terms survive any termination of these Terms: INDEMNITY; WARRANTY DISCLAIMERS; LIMITATION ON LIABILITY; OUR PROPRIETARY RIGHTS; LINKS; TERMINATION; NO THIRD PARTY BENEFICIARIES; BINDING ARBITRATION AND CLASS ACTION WAIVER; GENERAL INFORMATION.\n\n## 11. No Third Party Beneficiaries ##\n\nYou agree that, except as otherwise expressly provided in these Terms, there shall be no third party beneficiaries to the Terms.\n\n## 12. Notice and Procedure For Making Claims of Copyright Infringement ##\n\nIf you believe that your copyright or the copyright of a person on whose behalf you are authorized to act has been infringed, please provide MetaMask’s Copyright Agent a written Notice containing the following information:\n\n· an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright or other intellectual property interest;\n\n· a description of the copyrighted work or other intellectual property that you claim has been infringed;\n\n· a description of where the material that you claim is infringing is located on the Service;\n\n· your address, telephone number, and email address;\n\n· a statement by you that you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law;\n\n· a statement by you, made under penalty of perjury, that the above information in your Notice is accurate and that you are the copyright or intellectual property owner or authorized to act on the copyright or intellectual property owner's behalf.\n\nMetaMask’s Copyright Agent can be reached at:\n\nEmail: copyright [at] metamask [dot] io\n\nMail:\n\nAttention:\n\nMetaMask Copyright ℅ ConsenSys\n\n49 Bogart Street\n\nBrooklyn, NY 11206\n\n## 13. Binding Arbitration and Class Action Waiver ##\n\nPLEASE READ THIS SECTION CAREFULLY – IT MAY SIGNIFICANTLY AFFECT YOUR LEGAL RIGHTS, INCLUDING YOUR RIGHT TO FILE A LAWSUIT IN COURT\n\n### 13.1 Initial Dispute Resolution ###\n\nThe parties shall use their best efforts to engage directly to settle any dispute, claim, question, or disagreement and engage in good faith negotiations which shall be a condition to either party initiating a lawsuit or arbitration.\n\n### 13.2 Binding Arbitration ###\n\nIf the parties do not reach an agreed upon solution within a period of 30 days from the time informal dispute resolution under the Initial Dispute Resolution provision begins, then either party may initiate binding arbitration as the sole means to resolve claims, subject to the terms set forth below. Specifically, all claims arising out of or relating to these Terms (including their formation, performance and breach), the parties’ relationship with each other and/or your use of the Service shall be finally settled by binding arbitration administered by the American Arbitration Association in accordance with the provisions of its Commercial Arbitration Rules and the supplementary procedures for consumer related disputes of the American Arbitration Association (the \"AAA\"), excluding any rules or procedures governing or permitting class actions.\n\nThe arbitrator, and not any federal, state or local court or agency, shall have exclusive authority to resolve all disputes arising out of or relating to the interpretation, applicability, enforceability or formation of these Terms, including, but not limited to any claim that all or any part of these Terms are void or voidable, or whether a claim is subject to arbitration. The arbitrator shall be empowered to grant whatever relief would be available in a court under law or in equity. The arbitrator’s award shall be written, and binding on the parties and may be entered as a judgment in any court of competent jurisdiction.\n\nThe parties understand that, absent this mandatory provision, they would have the right to sue in court and have a jury trial. They further understand that, in some instances, the costs of arbitration could exceed the costs of litigation and the right to discovery may be more limited in arbitration than in court.\n\n### 13.3 Location ###\n\nBinding arbitration shall take place in New York. You agree to submit to the personal jurisdiction of any federal or state court in New York County, New York, in order to compel arbitration, to stay proceedings pending arbitration, or to confirm, modify, vacate or enter judgment on the award entered by the arbitrator.\n\n### 13.4 Class Action Waiver ###\n\nThe parties further agree that any arbitration shall be conducted in their individual capacities only and not as a class action or other representative action, and the parties expressly waive their right to file a class action or seek relief on a class basis. YOU AND METAMASK AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY, AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING. If any court or arbitrator determines that the class action waiver set forth in this paragraph is void or unenforceable for any reason or that an arbitration can proceed on a class basis, then the arbitration provision set forth above shall be deemed null and void in its entirety and the parties shall be deemed to have not agreed to arbitrate disputes.\n\n### 13.5 Exception - Litigation of Intellectual Property and Small Claims Court Claims ###\n\nNotwithstanding the parties' decision to resolve all disputes through arbitration, either party may bring an action in state or federal court to protect its intellectual property rights (\"intellectual property rights\" means patents, copyrights, moral rights, trademarks, and trade secrets, but not privacy or publicity rights). Either party may also seek relief in a small claims court for disputes or claims within the scope of that court’s jurisdiction.\n\n### 13.6 30-Day Right to Opt Out ###\n\nYou have the right to opt-out and not be bound by the arbitration and class action waiver provisions set forth above by sending written notice of your decision to opt-out to the following address: MetaMask ℅ ConsenSys, 49 Bogart Street, Brooklyn NY 11206 and via email at support@metamask.io. The notice must be sent within 30 days of September 6, 2016 or your first use of the Service, whichever is later, otherwise you shall be bound to arbitrate disputes in accordance with the terms of those paragraphs. If you opt-out of these arbitration provisions, MetaMask also will not be bound by them.\n\n### 13.7 Changes to This Section ###\n\nMetaMask will provide 60-days’ notice of any changes to this section. Changes will become effective on the 60th day, and will apply prospectively only to any claims arising after the 60th day.\n\nFor any dispute not subject to arbitration you and MetaMask agree to submit to the personal and exclusive jurisdiction of and venue in the federal and state courts located in New York, New York. You further agree to accept service of process by mail, and hereby waive any and all jurisdictional and venue defenses otherwise available.\n\nThe Terms and the relationship between you and MetaMask shall be governed by the laws of the State of New York without regard to conflict of law provisions.\n\n## 14. General Information ##\n\n### 14.1 Entire Agreement ###\n\nThese Terms (and any additional terms, rules and conditions of participation that MetaMask may post on the Service) constitute the entire agreement between you and MetaMask with respect to the Service and supersedes any prior agreements, oral or written, between you and MetaMask. In the event of a conflict between these Terms and the additional terms, rules and conditions of participation, the latter will prevail over the Terms to the extent of the conflict.\n\n### 14.2 Waiver and Severability of Terms ###\n\nThe failure of MetaMask to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by an arbitrator or court of competent jurisdiction to be invalid, the parties nevertheless agree that the arbitrator or court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect.\n\n### 14.3 Statute of Limitations ###\n\nYou agree that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to the use of the Service or the Terms must be filed within one (1) year after such claim or cause of action arose or be forever barred.\n\n### 14.4 Section Titles ###\n\nThe section titles in the Terms are for convenience only and have no legal or contractual effect.\n\n### 14.5 Communications ###\n\nUsers with questions, complaints or claims with respect to the Service may contact us using the relevant contact information set forth above and at communications@metamask.io.\n\n## 15 Related Links ##\n\n**[Terms of Use](https://metamask.io/terms.html)**\n\n**[Privacy](https://metamask.io/privacy.html)**\n\n**[Attributions](https://metamask.io/attributions.html)**\n\n","id":0},{"read":false,"date":"Mon May 08 2017","title":"Privacy Notice","body":"MetaMask is beta software. \n\nWhen you log in to MetaMask, your current account is visible to every new site you visit.\n\nFor your privacy, for now, please sign out of MetaMask when you're done using a site.\n\nAlso, by default, you will be signed in to a test network. To use real Ether, you must connect to the main network manually in the top left network menu.\n\n","id":2}]},"BlacklistController":{"phishing":{"version":2,"tolerance":2,"fuzzylist":["metamask.io","myetherwallet.com","cryptokitties.co"],"whitelist":["metahash.io","metahash.net","metahash.org","cryptotitties.com","cryptocities.net","cryptoshitties.co","cryptotitties.fun","cryptokitties.forsale","cryptokitties.care","metamate.cc","metamesh.tech","ico.nexus.social","metamesh.org","metatask.io","metmask.com","metarasa.com","metapack.com","metacase.com","metafas.nl","metamako.com","metamast.com","metamax.ru","metadesk.io","metadisk.com","metallsk.ru","metamag.fr","metamaks.ru","metamap.ru","metamaps.cc","metamats.com","metamax.by","metamax.com","metamax.io","metamuse.net","metarank.com","metaxas.com","megamas2.ru","metamask.io","myetherwallet.com","myethlerwallet.com","ethereum.org","myetheroll.com","myetherapi.com","ledgerwallet.com","databrokerdao.com","etherscan.io","etherid.org","ether.cards","etheroll.com","ethnews.com","ethex.market","ethereumdev.io","ethereumdev.kr","dether.io","ethermine.org","slaask.com","etherbtc.io","ethereal.capital","etherisc.com","m.famalk.net","etherecho.com","ethereum.os.tc","theethereum.wiki","metajack.im","etherhub.io","ethereum.network","ethereum.link","ethereum.com","prethereum.org","ethereumj.io","etheraus.com","ethereum.dev","1ethereum.ru","ethereum.nz","nethereum.com","metabank.com","metamas.com","aventus.io","metabase.com","etherdelta.com","metabase.one","cryptokitties.co"],"blacklist":["myetherwallet.uk.com","kodakone.cc","nyeihitervvallet.com","xn--myeterwalet-cm8eoi.com","nucleus.foundation","beetoken-ico.com","data-token.com","tron-labs.com","ocoin.tech","aionfoundation.com","ico-telegram.org","nyeihitervvallat.com","telegramcoin.us","daddi.cloud","daditoken.com","blockarray.org","dadi-cloud.net","wanchainfunding.org","ico-telegram.io","iconfoundation.site","iost.co","beetoken-ico.eu","cindicator.network","wanchainetwork.org","wamchain.org","wanchainltd.org","wanchainalliance.org","nucleus-vision.net","ledgerwallet.by","nucleuss.vision","myenhterswailct.com","cobin-hood.com","wanchainfoundation.org","xn--polniex-ex4c.com","xn--polniex-s1a.com","xn--polonex-ieb.com","xn--polonex-sza.com","xn--polonex-zw4c.com","xn--polonix-ws4c.com","xn--polonix-y8a.com","xn--pooniex-ojb.com","gramico.info","dimnsions.network","www-gemini.com","login-kucoin.net","venchain.foundation","grampreico.com","tgram.cc","ton-gramico.com","wwwpaywithink.com","coniomi.com","paywithnk.com","paywithlnk.com","iluminatto.com.br","pundix.eu","xn--bttrx-esay.com","xn--bttrex-w8a.com","xn--bnance-bwa.com","xn--shpeshift-11a.com","xn--shapeshif-ts6d.com","xn--shapshift-yf7d.com","wwwbluzelle.com","bluzelie.com","nucleus-vision.org","omisegonetwork.site","etlherzero.com","etlherdelta.com","xn--condesk-0ya.com","xn--condesk-sfb.com","xn--coindsk-vs4c.com","iexecplatform.com","tongramico.com","nucleus-vision.eu","intchain.network","wanchain.cloud","bluzelle-ico.com","ethzero-wallet.com","xn--metherwalle-jb9et7d.com","xn--coinesk-jo3c.com","venchainfoundation.com","myenhtersvvailot.com","ether-zero.net","ins.foundation","nastoken.org","telcointoken.com","ether0.org","eterzero.org","bluzelle-ico.eu","bleuzelle.com","appcoinstoken.org","xn--quanstamp-8s6d.com","myehntersvvailct.com","myeherwalllet.com","ico-bluzelle.com","bluzelle.im","bluzelle.one","bluzele.sale","bluzele.co","sether.ws","xn--myetherwalet-6gf.com","xn--rnyethewaliet-om1g.com","rnyethervailet.com","mvetherwaliet.com","rnyetherwailet.com","myethervaliet.com","rnyethervaliet.com","mvetherwalilet.com","xn--myethewalie-3ic0947g.com","xn--mthrwallet-z6ac3y.com","xn--myeherwalie-vici.com","xn--myethervvalie-8vc.com","xn--mythrwallt-06acf.com","xn--mtherwallet-y9a6y.com","myetherwallet.applytoken.tk","ethereum-zero.com","quanstamptoken.tk","bluzelle.network","ether-wallet.org","tron-wallet.info","appcoinsproject.com","vechain.foundation","tronlab.site","tronlabs.network","bluzelle.cc","ethblender.com","ethpaperwallet.net","waltontoken.org","icoselfkey.org","etherzeroclaim.com","etherzero.promo","bluzelle.pro","token-selfkey.org","xn--etherdlta-0f7d.com","sether.in","xn--ttrex-ysa9423c.com","bluzelle.eu","bluzelle.site","gifto.tech","xn--os-g7s.com","selfkey.co","xn--myeherwalet-ns8exy.com","xn--coinelegraph-wk5f.com","dai-stablecoin.com","eos-token.org","venchain.org","gatcoins.io","deepbrainchain.co","myetherwalililet.info","myehvterwallet.com","myehterumswallet.com","nucleusico.com","tronlab.tech","0x-project.com","gift-token-events.mywebcommunity.org","funfairtoken.org","breadtokenapp.com","cloudpetstore.com","myethwalilet.com","selfkeys.org","wallet-ethereum.com","xn--methrwallt-26ar0z.com","xn--mytherwllet-r8a0c.com","bluzelle.promo","tokensale.bluzelle.promo","cedarlake.org","marketingleads4u.com","cashaa.co","xn--inance-hrb.com","wanchain.tech","zenprolocol.com","ethscan.io","etherscan.in","props-project.com","zilliaq.com","reqestnetwork.com","etherdelta.pw","ethereum-giveaway.org","mysimpletoken.org","binancc.com","blnance.org","elherdelta.io","xn--hapeshit-ez9c2y.com","tenxwallet.co","singularitynet.info","mytlherwaliet.info","iconmainnet.ml","tokenselfkey.org","xn--myetewallet-cm8e5y.com","envione.org","myetherwalletet.com","claimbcd.com","ripiocreditnetwork.in","xn--yeterwallet-ml8euo.com","ethclassicwallet.info","myltherwallet.ru.com","etherdella.com","xn--yeterwallet-bm8ewn.com","singularty.net","cloudkitties.co","iconfoundation.io","kittystat.com","gatscoin.io","singularitynet.in","sale.canay.io","canay.io","wabicoin.co","envion.top","sirinslabs.com","tronlab.co","paxful.com.ng","changellyli.com","ethereum-code.com","xn--plonex-6va6c.com","envion.co","envion.cc","envion.site","ethereumchain.info","xn--envon-1sa.org","xn--btstamp-rfb.net","envlon.org","envion-ico.org","spectivvr.org","sirinlbs.com","ethereumdoubler.life","xn--myetherwllet-fnb.com","sirin-labs.com","sirin-labs.org","envion.one","envion.live","propsproject.org","propsprojects.com","decentralland.org","xn--metherwalet-ns8ep4b.com","redpulsetoken.co","propsproject.tech","xn--myeterwalet-nl8emj.com","powrerledger.com","cryptokitties.com","sirinlabs.pro","sirinlabs.co","sirnlabs.com","superbitcoin-blockchain.info","hellobloom.me","mobus.network","powrrledger.com","xn--myeherwalet-ms8eyy.com","qlink-ico.com","gatcoin.in","tokensale.gamefllp.com","gamefllp.com","xn--myeherwalle-vici.com","xn--myetherwalet-39b.com","xn--polonex-ffb.com","xn--birex-leba.com","raiden-network.org","sirintabs.com","xn--metherwallt-79a30a.com","xn--myethrwllet-2kb3p.com","myethlerwallet.eu","xn--btrex-b4a.com","powerrledger.com","xn--cointeegraph-wz4f.com","myerherwalet.com","qauntstanp.com","myetherermwallet.com","xn--myethewalet-ns8eqq.com","xn--nvion-hza.org","nnyetherwallelt.ru.com","ico-wacoin.com","xn--myeterwalet-nl8enj.com","bitcoinsilver.io","t0zero.com","tokensale.gizer.in","gizer.in","wabitoken.com","gladius.ws","xn--metherwallt-8bb4w.com","quanttstamp.com","gladius.im","ethereumstorage.net","powerledgerr.com","xn--myeherwallet-4j5f.com","quamtstamp.com","quntstamp.com","xn--changely-j59c.com","shapeshlft.com","coinbasenews.co.uk","xn--metherwallet-hmb.com","envoin.org","powerledger.com","bitstannp.net","xn--myetherallet-4k5fwn.com","xn--coinbas-pya.com","requestt.network","oracls.network","sirinlabs.website","powrledger.io","slackconfirm.com","shape-shift.io","oracles-network.org","xn--myeherwalle-zb9eia.com","blockstack.one","urtust.io","bittrex.one","t0-ico.com","xn--cinbase-90a.com","xn--metherwalet-ns8ez1g.com","tzero-ico.com","tzero.su","tzero.website","blockstack.network","ico-tzero.com","spectre.site","tzero.pw","spectre-ai.net","xn--waxtokn-y8a.com","dmarket.pro","bittrex.com11648724328774.cf","bittrex.com1987465798.ga","autcus.org","t-zero.org","xn--zero-zxb.com","myetherwalletfork.com","blokclbain.info","datum.sale","spectre-ai.org","powerledgr.com","simpletoken.live","sale.simpletoken.live","qauntstamp.com","raiden-network.com","metalpayme.com","quantstamp-ico.com","myetherwailetclient.com","biockchain.biz","wallets-blockchain.com","golemairdrop.com","omisegoairdrop.net","blodkchainwallet.info","walton-chain.org","elite888-ico.com","bitflyerjp.com","chainlinksmartcontract.com","stormtoken.eu","omise-go.tech","saltending.com","stormltoken.com","xn--quanttamp-42b.com","stormtoken.co","storntoken.com","stromtoken.com","storm-token.com","stormtokens.io","ether-delta.com","ethconnect.live","ethconnect.trade","xn--bttrex-3va.net","quantstamp.com.co","wancha.in","augur-network.com","quantstamp.com.ua","myetherwalletmew.com","myetherumwalletts.com","xn--quanstamp-tmd.com","quantsstamps.com","changellyl.net","xn--myetherwalet-1fb.com","myethereumwallets.com","xn--myetherwalet-e9b.com","quantslamp.com","metelpay.com","xn--eterdelta-m75d.com","linksmartcontract.com","myetherwalletaccess.com","myetherwalletcheck.com","myetherwalletcheck.info","myetherwalletconf.com","myetherwalleteal.com","myetherwalletec.com","myetherwalletgeth.com","myetherwalletmetamask.com","myetherwalletmm.com","myetherwalletmy.com","myetherwalletnh.com","myetherwalletnod.com","myetherwalletrr.com","myetherwalletrty.com","myetherwalletsec.com","myetherwalletsecure.com","myetherwalletutc.com","myetherwalletver.info","myetherwalletview.com","myetherwalletview.info","myetherwalletvrf.com","myetherwalletmist.com","myetherwalletext.com","myetherwalletjson.com","mettalpay.com","bricklblock.io","bittrexy.com","utrust.so","myethierwallet.org","metallpay.com","kraken-wallet.com","dmarkt.io","etherdeltla.com","unlversa.io","universa.sale","mercuryprotocol.live","ripiocredlt.network","myetlherwa11et.com","dentacoin.in","rdrtg.com","myetherwallet.com.rdrgh.com","rdrgh.com","ripiocreditnetwork.co","riaden.network","hydrominer.biz","rdrblock.com","reqest.network","senstoken.com","myetherwallat.services","ripiocredit.net","xn--metherwallet-c06f.com","ico.ripiocredits.com","ripiocredits.com","raidens.network","artoken.co","myetherwalletlgn.com","etherblog.click","stormtoken.site","httpmyetherwallet.com","myetherwalletverify.com","byzantiumfork.com","myetherwallet.com.byzantiumfork.com","www-myethervvallet.com","ether24.info","block-v.io","bittrex.cash","shapishift.io","ripiocerdit.network","rnyetherwa11et.com","claimether.com","enigmatokensale.com","ethereum-org.com","mvetnerwallet.com","myctherwallet.com","myetherwaltet.com","myetherwatlet.com","privatix.me","myetherwalletcnf.com","myetherwalletver.com","privatix.top","privatix.pro","privatex.io","stormtoken.cc","raiden.online","stormstoken.com","myetereumwallet.com","stormtokens.net","myetherwalletconf.info","storrntoken.com","worldofbattles.io","ico.worldofbattles.io","privatix.live","riden.network","raidan.network","ralden.network","mymyetherwallet.com","myetherwallets.net","myetherwalletverify.info","stormxtoken.com","myethereum-wallet.com","myetherwallet-forkprep.pagedemo.co","myetnerwailet.com","www-mvetherwallet.com","etheirdelta.com","myetherwalletiu.com","myetherwaiiett.com","xn--mytherwalet-cbb87i.com","xn--myethrwallet-ivb.co","xn--myeterwallet-f1b.com","myehterwaliet.com","omegaone.co","myetherwaiietw.com","slack.com.ru","polkodot.network","request-network.net","requestnetwork.live","binancie.com","first-eth.info","myewerthwalliet.com","enjincoin.pw","xn--bitrex-k17b.com","alrswap.io","www-request.network","myetnenwallet.com","www-enigma.co","cryptoinsidenews.com","air-swap.tech","launch.airswap.cc","airswap.cc","airswaptoken.com","launch.airswap.in","airswap.in","security-steemit.com.mx","blockchalnwallet.com","blodkchainwallet.com","blodkchaln.com","myethereumwaiiet.com","myethereumwaliet.com","myethereumwalilet.com","myetherswailet.com","myetherswaliet.com","myetherswalilet.com","myetherwalilett.com","myetherwalletl.com","myetherwalletww.com","myethereunwallet.com","myethereumwallct.com","myetherwaiieti.com","myetherwaiiete.com","upfirng.com","paypie.net","paypie.tech","soam.co","myetherwaiict.com","numerai-token.com","www-bankera.com","vvanchain.org","omisegoairdrop.com","xn--enjncoin-41a.io","suncontract.su","myetherwaiietr.com","shapeshiff.io","warchain.org","myethwallett.com","myethervvaliet.com","wanchains.org","etherparty.in","enjincoin.me","etiam.io","invest.smartlands.tech","smartlands.tech","enijncoin.io","wanchain.network","nimiq.su","enjincoin.sale","tenxwallet.io","golem-network.net","myyethwallet.ml","mywetherwailiet.com","omg-omise.com","district0x.tech","centra-token.com","etherdetla.com","etnerparty.io","etherdelta.su","myetherwallett.neocities.org","myetherwallet-secure.com","myethereumwalletntw.info","real-markets.io","wallet-ethereum.org","request-network.com","shapeshifth.io","shiapeshift.in","coin.red-puise.com","ibittreix.com","coinkbase.com","cindicator.pro","myetherwallet.com.ailogin.me","eventchain.co","kinkik.in","myetherumwalletview.com","protostokenhub.com","coinrbase.com","myetherwalletlogin.com","omisegotoken.com","myethereumwalletntw.com","reall.markets","cobinhood.org","cobinhood.io","happy-coin.org","bitfinex.com.co","bitfienex.com","iconn.foundation","centra.vip","smartcontract.live","icon.community","air-token.com","centra.credit","myetherwallet-singin.com","smartcontractlink.com","shapesshift.io","0xtoken.io","augurproject.co","ethereumus.one","myetherumwalet.com","myetherwalletsignin.com","change-bank.org","charge-bank.com","myetherwalletsingin.com","myetherwalletcontract.com","change-bank.io","chainlink.tech","myetherwallet-confirm.com","tokensale.kybernet.network","kybernet.network","kyberr.network","kybernetwork.io","myetherwalletconfirm.com","kvnuke.github.io","kin.kikpro.co","myethereumwallet.co.uk","tokensale-kyber.network","kyber-network.co","tokensale.kyber-network.co","pyro0.github.io","tokensale.kyber.digital","kyber.digital","omise-go.me","my.etherwallet.com.de","bepartof.change-bank.co","change-bank.co","enigma-tokens.co","coinbase.com.eslogin.co","xn--bittrx-mva.com","ethrdelta.github.io","etherdellta.com","ico-nexus.social","red-pulse.tech","bitj0b.io","xn--bttrex-bwa.com","kin-klk.com","kin-crowdsale.com","ethedelta.com","coindash.su","myethwallet.co.uk","swarm.credit","myethereumwallet.uk","iconexu.social","wanchain.co","enigrna.co","linknetwork.co","qtum-token.com","omisego.com.co","rivetzintl.org","etherdelta.one","the-ether.pro","etherdelta.gitnub.io","kirkik.com","monetha.ltd","vlberate.io","ethereumwallet-kr.info","omise-go.org","iconexus.social","bittirrex.com","aventus.pro","atlant.solutions","aventus.group","metamak.io","omise.com.co","herotokens.io","starbase.pro","etherdelta.githulb.io","herotoken.co","kinico.net","dmarket.ltd","etherdelta.gilthub.io","golem-network.com","etnerscan.io","bllttriex.com","monetha.me","monetha.co","monetha-crowdsale.com","starbase.tech","aventus-crowdsale.com","shapeshift.pro","bllttrex.com","kickico.co","statustoken.im","bilttrex.com","tenxpay.io","bittrex.ltd","metalpay.im","aragon.im","coindash.tech","decentraland.tech","decentraland.pro","status-token.com","bittrex.cam","enigmatoken.com","unocoin.company","unocoin.fund","0xproject.io","0xtoken.com","numerai.tech","decentraiand.org","blockcrein.info","blockchealn.info","bllookchain.info","blockcbhain.info","myetherwallet.com.ethpromonodes.com","mettamask.io","tokenswap.org","netherum.com","etherexx.org","etherume.io","ethereum.plus","ehtereum.org","etereurm.org","etheream.com","ethererum.org","ethereum.io","etherdelta-glthub.com","cryptoalliance.herokuapp.com","bitspark2.com","indorsetoken.com","iconexus.tk","iconexus.ml","iconexus.ga","iconexus.cf","etherwallet.online","wallet-ethereum.net","bitsdigit.com","etherswap.org","eos.ac","uasfwallet.com","ziber.io","multiply-ethereum.info","bittrex.comze.com","karbon.vacau.com","etherdelta.gitlhub.io","etherdelta.glthub.io","digitaldevelopersfund.vacau.com","district-0x.io","coin-dash.com","coindash.ru","district0x.net","aragonproject.io","coin-wallet.info","coinswallet.info","contribute-status.im","ether-api.com","ether-wall.com","mycoinwallet.net","ethereumchamber.com","ethereumchamber.net","ethereumchest.com","ethewallet.com","myetherwallet.com.vc","myetherwallet.com.pe","myetherwallet.us.com","myetherwallet.com.u0387831.cp.regruhosting.ru","myethereumwallet.su","myetherweb.com.de","myetherieumwallet.com","myetehrwallet.com","myeterwalet.com","myetherwaiiet.com","myetherwallet.info","myetherwallet.ch","myetherwallet.om","myethervallet.com","myetherwallet.com.cm","myetherwallet.com.co","myetherwallet.com.de","myetherwallet.com.gl","myetherwallet.com.im","myetherwallet.com.ua","secure-myetherwallet.com","update-myetherwallet.com","wwwmyetherwallet.com","myeatherwallet.com","myetharwallet.com","myelherwallel.com","myetherwaillet.com","myetherwaliet.com","myetherwallel.com","myetherwallet.cam","myetherwallet.cc","myetherwallet.co","myetherwallet.cm","myetherwallet.cz","myetherwallet.org","myetherwallet.tech","myetherwallet.top","myetherwallet.net","myetherwallet.ru.com","myetherwallet.com.ru","metherwallet.com","myetrerwallet.com","myetlerwallet.com","myethterwallet.com","myethwallet.io","myethterwallet.co","myehterwallet.co","myaetherwallet.com","myetthterwallet.com","myetherwallet.one","myelterwallet.com","myetherwallet.gdn","myetherwallt.com","myeterwallet.com","myeteherwallet.com","myethearwailet.com","myetherwallelt.com","myetherwallett.com","etherwallet.org","myetherewallet.com","myeherwallet.com","myethcrwallet.com","myetherwallet.link","myetherwallets.com","myethearwaillet.com","myethearwallet.com","myetherawllet.com","myethereallet.com","myetherswallet.com","myetherwalet.com","myetherwaller.com","myetherwalliet.com","myetherwllet.com","etherwallet.io","myetherwallet.ca","myetherwallet.me","myetherwallet.ru","myetherwallet.xyz","myetherwallte.com","myethirwallet.com","myethrewallet.com","etherwallet.net","maetherwallet.com","meyetherwallet.com","my.ether-wallet.pw","myehterwallet.com","myeitherwallet.com","myelherwallet.com","myeltherwallet.com","myerherwallet.com","myethearwalet.com","myetherewalle.com","myethervvallet.com","myetherwallent.com","myetherwallet.fm","myetherwalllet.com","myetherwalltet.com","myetherwollet.com","myetlherwalet.com","myetlherwallet.com","rnyetherwallet.com","etherclassicwallet.com","omg-omise.co","omise-go.com","omise-go.net","omise-omg.com","omise-go.io","tenx-tech.com","bitclaive.com","tokensale-tenx.tech","ubiqcoin.org","metamask.com","ethtrade.io","myetcwallet.com","account-kigo.net","bitcoin-wallet.net","blocklichan.info","bloclkicihan.info","coindash.ml","eos-bonus.com","eos-io.info","ether-wallet.net","ethereum-wallet.info","ethereum-wallet.net","ethereumchest.net","reservations-kigo.net","reservations-lodgix.com","secure-liverez.com","secure-onerooftop.com","settings-liverez.com","software-liverez.com","software-lodgix.com","unhackableetherwallets.com","www-myetherwallet.com","etherwallet.co.za","etherwalletchain.com","etherwallets.net","etherwallets.nl","my-ethwallet.com","my.ether-wallet.co","myetherwallet.com.am","myetherwallet.com.ht","myetherwalletcom.com","myehterwailet.com","xn--myetherwalle-xoc.com","xn--myetherwalle-44i.com","xn--myetherwalle-xhk.com","xn--myetherwallt-cfb.com","xn--myetherwallt-6tb.com","xn--myetherwallt-xub.com","xn--myetherwallt-ovb.com","xn--myetherwallt-fwb.com","xn--myetherwallt-5wb.com","xn--myetherwallt-jzi.com","xn--myetherwallt-2ck.com","xn--myetherwallt-lok.com","xn--myetherwallt-lsl.com","xn--myetherwallt-ce6f.com","xn--myetherwalet-mcc.com","xn--myetherwalet-xhf.com","xn--myetherwalet-lcc.com","xn--myetherwaet-15ba.com","xn--myetherwalet-whf.com","xn--myetherwaet-v2ea.com","xn--myetherwllet-59a.com","xn--myetherwllet-jbb.com","xn--myetherwllet-wbb.com","xn--myetherwllet-9bb.com","xn--myetherwllet-ncb.com","xn--myetherwllet-0cb.com","xn--myetherwllet-5nb.com","xn--myetherwllet-ktd.com","xn--myetherwllet-mre.com","xn--myetherwllet-76e.com","xn--myetherwllet-o0l.com","xn--myetherwllet-c45f.com","xn--myetherallet-ejn.com","xn--myethewallet-4nf.com","xn--myethewallet-iof.com","xn--myethewallet-mpf.com","xn--myethewallet-6bk.com","xn--myethewallet-i31f.com","xn--myethrwallet-feb.com","xn--myethrwallt-fbbf.com","xn--myethrwallet-seb.com","xn--myethrwallt-rbbf.com","xn--myethrwallet-5eb.com","xn--myethrwallt-3bbf.com","xn--myethrwallet-0tb.com","xn--myethrwallt-tpbf.com","xn--myethrwallet-rub.com","xn--myethrwallt-iqbf.com","xn--myethrwallet-ivb.com","xn--myethrwallt-6qbf.com","xn--myethrwallet-8vb.com","xn--myethrwallt-vrbf.com","xn--myethrwallet-zwb.com","xn--myethrwallt-ksbf.com","xn--myethrwallet-dzi.com","xn--myethrwallt-wbif.com","xn--myethrwallet-wck.com","xn--myethrwallt-skjf.com","xn--myethrwallet-fok.com","xn--myethrwallt-fvjf.com","xn--myethrwallet-fsl.com","xn--myethrwallt-fwkf.com","xn--myethrwallet-5d6f.com","xn--myethrwallt-319ef.com","xn--myeterwallet-ufk.com","xn--myeterwallet-nrl.com","xn--myeterwallet-von.com","xn--myeterwallet-jl6c.com","xn--myeherwallet-ooc.com","xn--myeherwalle-6hci.com","xn--myeherwallet-v4i.com","xn--myeherwalle-zgii.com","xn--myeherwallet-ohk.com","xn--myeherwalle-6oji.com","xn--mytherwallet-ceb.com","xn--mythrwallet-cbbc.com","xn--mythrwallt-c7acf.com","xn--mytherwallet-peb.com","xn--mythrwallet-obbc.com","xn--mythrwallt-n7acf.com","xn--mytherwallet-2eb.com","xn--mythrwallet-0bbc.com","xn--mythrwallt-y7acf.com","xn--mytherwallet-xtb.com","xn--mythrwallet-qpbc.com","xn--mythrwallt-jlbcf.com","xn--mytherwallet-oub.com","xn--mythrwallet-fqbc.com","xn--mythrwallt-5lbcf.com","xn--mythrwallet-3qbc.com","xn--mythrwallt-smbcf.com","xn--mytherwallet-5vb.com","xn--mythrwallet-srbc.com","xn--mythrwallt-fnbcf.com","xn--mytherwallet-wwb.com","xn--mythrwallet-hsbc.com","xn--mythrwallt-1nbcf.com","xn--mytherwallet-9yi.com","xn--mythrwallet-tbic.com","xn--mythrwallt-dnhcf.com","xn--mytherwallet-tck.com","xn--mythrwallet-pkjc.com","xn--mythrwallt-lsicf.com","xn--mytherwallet-cok.com","xn--mythrwallet-cvjc.com","xn--mythrwallt-c2icf.com","xn--mytherwallet-csl.com","xn--mythrwallet-cwkc.com","xn--mythrwallt-c0jcf.com","xn--mytherwallet-2d6f.com","xn--mythrwallet-019ec.com","xn--mythrwallt-yq3ecf.com","xn--metherwallet-qlb.com","xn--metherwallet-1uf.com","xn--metherwallet-iyi.com","xn--metherwallet-zhk.com","xn--metherwallet-3ml.com","xn--mytherwallet-fvb.com","xn--myetherwallt-7db.com","xn--myetherwallt-leb.com","xn--myetherwallt-yeb.com","xn--yetherwallet-vjf.com","xn--yetherwallet-dfk.com","xn--yetherwallet-1t1f.com","xn--yetherwallet-634f.com","xn--myeherwallet-fpc.com","xn--myethewallt-crb.com","xn--metherwallet-1vc.com","xn--myeherwallt-kbb8039g.com","xn--myeherwallet-vk5f.com","xn--yethewallet-iw8ejl.com","xn--bittrx-th8b.com","xn--polniex-n0a.com","thekey.vin","thekey-vip.com","digitexftures.com","ethzero-wallet.org","zeepln.io","wepowers.network","wepower.vision"]}},"CurrencyController":{"currentCurrency":"usd","conversionRate":1112,"conversionDate":1517351401}}} +{"meta":{"version":20},"data":{"config":{},"NetworkController":{"provider":{"type":"mainnet","rpcTarget":"https://mainnet.infura.io/metamask"},"network":"1"},"firstTimeInfo":{"version":"3.12.1","date":1517351427287},"NoticeController":{"noticesList":[{"read":false,"date":"Thu Feb 09 2017","title":"Terms of Use","body":"# Terms of Use #\n\n**THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION AND A WAIVER OF CLASS ACTION RIGHTS AS DETAILED IN SECTION 13. PLEASE READ THE AGREEMENT CAREFULLY.**\n\n_Our Terms of Use have been updated as of September 5, 2016_\n\n## 1. Acceptance of Terms ##\n\nDekuSan provides a platform for managing Ethereum (or \"ETH\") accounts, and allowing ordinary websites to interact with the Ethereum blockchain, while keeping the user in control over what transactions they approve, through our website located at[ ](http://metamask.io)[https://metamask.io/](https://metamask.io/) and browser plugin (the \"Site\") — which includes text, images, audio, code and other materials (collectively, the “Content”) and all of the features, and services provided. The Site, and any other features, tools, materials, or other services offered from time to time by DekuSan are referred to here as the “Service.” Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully before using the Service. By using or otherwise accessing the Services, or clicking to accept or agree to these Terms where that option is made available, you (1) accept and agree to these Terms (2) consent to the collection, use, disclosure and other handling of information as described in our Privacy Policy and (3) any additional terms, rules and conditions of participation issued by DekuSan from time to time. If you do not agree to the Terms, then you may not access or use the Content or Services.\n\n## 2. Modification of Terms of Use ##\n\nExcept for Section 13, providing for binding arbitration and waiver of class action rights, DekuSan reserves the right, at its sole discretion, to modify or replace the Terms of Use at any time. The most current version of these Terms will be posted on our Site. You shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by you after any modification to the Terms constitutes your acceptance of the Terms of Use as modified.\n\n\n\n## 3. Eligibility ##\n\nYou hereby represent and warrant that you are fully able and competent to enter into the terms, conditions, obligations, affirmations, representations and warranties set forth in these Terms and to abide by and comply with these Terms.\n\nDekuSan is a global platform and by accessing the Content or Services, you are representing and warranting that, you are of the legal age of majority in your jurisdiction as is required to access such Services and Content and enter into arrangements as provided by the Service. You further represent that you are otherwise legally permitted to use the service in your jurisdiction including owning cryptographic tokens of value, and interacting with the Services or Content in any way. You further represent you are responsible for ensuring compliance with the laws of your jurisdiction and acknowledge that DekuSan is not liable for your compliance with such laws.\n\n## 4 Account Password and Security ##\n\nWhen setting up an account within DekuSan, you will be responsible for keeping your own account secrets, which may be a twelve-word seed phrase, an account file, or other locally stored secret information. DekuSan encrypts this information locally with a password you provide, that we never send to our servers. You agree to (a) never use the same password for DekuSan that you have ever used outside of this service; (b) keep your secret information and password confidential and do not share them with anyone else; (c) immediately notify DekuSan of any unauthorized use of your account or breach of security. DekuSan cannot and will not be liable for any loss or damage arising from your failure to comply with this section.\n\n## 5. Representations, Warranties, and Risks ##\n\n### 5.1. Warranty Disclaimer ###\n\nYou expressly understand and agree that your use of the Service is at your sole risk. The Service (including the Service and the Content) are provided on an \"AS IS\" and \"as available\" basis, without warranties of any kind, either express or implied, including, without limitation, implied warranties of merchantability, fitness for a particular purpose or non-infringement. You acknowledge that DekuSan has no control over, and no duty to take any action regarding: which users gain access to or use the Service; what effects the Content may have on you; how you may interpret or use the Content; or what actions you may take as a result of having been exposed to the Content. You release DekuSan from all liability for you having acquired or not acquired Content through the Service. DekuSan makes no representations concerning any Content contained in or accessed through the Service, and DekuSan will not be responsible or liable for the accuracy, copyright compliance, legality or decency of material contained in or accessed through the Service.\n\n### 5.2 Sophistication and Risk of Cryptographic Systems ###\n\nBy utilizing the Service or interacting with the Content or platform in any way, you represent that you understand the inherent risks associated with cryptographic systems; and warrant that you have an understanding of the usage and intricacies of native cryptographic tokens, like Ether (ETH) and Bitcoin (BTC), smart contract based tokens such as those that follow the Ethereum Token Standard (https://github.com/ethereum/EIPs/issues/20), and blockchain-based software systems.\n\n### 5.3 Risk of Regulatory Actions in One or More Jurisdictions ###\n\nDekuSan and ETH could be impacted by one or more regulatory inquiries or regulatory action, which could impede or limit the ability of DekuSan to continue to develop, or which could impede or limit your ability to access or use the Service or Ethereum blockchain.\n\n### 5.4 Risk of Weaknesses or Exploits in the Field of Cryptography ###\n\nYou acknowledge and understand that Cryptography is a progressing field. Advances in code cracking or technical advances such as the development of quantum computers may present risks to cryptocurrencies and Services of Content, which could result in the theft or loss of your cryptographic tokens or property. To the extent possible, DekuSan intends to update the protocol underlying Services to account for any advances in cryptography and to incorporate additional security measures, but does not guarantee or otherwise represent full security of the system. By using the Service or accessing Content, you acknowledge these inherent risks.\n\n### 5.5 Volatility of Crypto Currencies ###\n\nYou understand that Ethereum and other blockchain technologies and associated currencies or tokens are highly volatile due to many factors including but not limited to adoption, speculation, technology and security risks. You also acknowledge that the cost of transacting on such technologies is variable and may increase at any time causing impact to any activities taking place on the Ethereum blockchain. You acknowledge these risks and represent that DekuSan cannot be held liable for such fluctuations or increased costs.\n\n### 5.6 Application Security ###\n\nYou acknowledge that Ethereum applications are code subject to flaws and acknowledge that you are solely responsible for evaluating any code provided by the Services or Content and the trustworthiness of any third-party websites, products, smart-contracts, or Content you access or use through the Service. You further expressly acknowledge and represent that Ethereum applications can be written maliciously or negligently, that DekuSan cannot be held liable for your interaction with such applications and that such applications may cause the loss of property or even identity. This warning and others later provided by DekuSan in no way evidence or represent an on-going duty to alert you to all of the potential risks of utilizing the Service or Content.\n\n## 6. Indemnity ##\n\nYou agree to release and to indemnify, defend and hold harmless DekuSan and its parents, subsidiaries, affiliates and agencies, as well as the officers, directors, employees, shareholders and representatives of any of the foregoing entities, from and against any and all losses, liabilities, expenses, damages, costs (including attorneys’ fees and court costs) claims or actions of any kind whatsoever arising or resulting from your use of the Service, your violation of these Terms of Use, and any of your acts or omissions that implicate publicity rights, defamation or invasion of privacy. DekuSan reserves the right, at its own expense, to assume exclusive defense and control of any matter otherwise subject to indemnification by you and, in such case, you agree to cooperate with DekuSan in the defense of such matter.\n\n## 7. Limitation on liability ##\n\nYOU ACKNOWLEDGE AND AGREE THAT YOU ASSUME FULL RESPONSIBILITY FOR YOUR USE OF THE SITE AND SERVICE. YOU ACKNOWLEDGE AND AGREE THAT ANY INFORMATION YOU SEND OR RECEIVE DURING YOUR USE OF THE SITE AND SERVICE MAY NOT BE SECURE AND MAY BE INTERCEPTED OR LATER ACQUIRED BY UNAUTHORIZED PARTIES. YOU ACKNOWLEDGE AND AGREE THAT YOUR USE OF THE SITE AND SERVICE IS AT YOUR OWN RISK. RECOGNIZING SUCH, YOU UNDERSTAND AND AGREE THAT, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER METAMASK NOR ITS SUPPLIERS OR LICENSORS WILL BE LIABLE TO YOU FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR OTHER DAMAGES OF ANY KIND, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER TANGIBLE OR INTANGIBLE LOSSES OR ANY OTHER DAMAGES BASED ON CONTRACT, TORT, STRICT LIABILITY OR ANY OTHER THEORY (EVEN IF METAMASK HAD BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), RESULTING FROM THE SITE OR SERVICE; THE USE OR THE INABILITY TO USE THE SITE OR SERVICE; UNAUTHORIZED ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; STATEMENTS OR CONDUCT OF ANY THIRD PARTY ON THE SITE OR SERVICE; ANY ACTIONS WE TAKE OR FAIL TO TAKE AS A RESULT OF COMMUNICATIONS YOU SEND TO US; HUMAN ERRORS; TECHNICAL MALFUNCTIONS; FAILURES, INCLUDING PUBLIC UTILITY OR TELEPHONE OUTAGES; OMISSIONS, INTERRUPTIONS, LATENCY, DELETIONS OR DEFECTS OF ANY DEVICE OR NETWORK, PROVIDERS, OR SOFTWARE (INCLUDING, BUT NOT LIMITED TO, THOSE THAT DO NOT PERMIT PARTICIPATION IN THE SERVICE); ANY INJURY OR DAMAGE TO COMPUTER EQUIPMENT; INABILITY TO FULLY ACCESS THE SITE OR SERVICE OR ANY OTHER WEBSITE; THEFT, TAMPERING, DESTRUCTION, OR UNAUTHORIZED ACCESS TO, IMAGES OR OTHER CONTENT OF ANY KIND; DATA THAT IS PROCESSED LATE OR INCORRECTLY OR IS INCOMPLETE OR LOST; TYPOGRAPHICAL, PRINTING OR OTHER ERRORS, OR ANY COMBINATION THEREOF; OR ANY OTHER MATTER RELATING TO THE SITE OR SERVICE.\n\nSOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. ACCORDINGLY, SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU.\n\n## 8. Our Proprietary Rights ##\n\nAll title, ownership and intellectual property rights in and to the Service are owned by DekuSan or its licensors. You acknowledge and agree that the Service contains proprietary and confidential information that is protected by applicable intellectual property and other laws. Except as expressly authorized by DekuSan, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, display or create derivative works based on the Service, in whole or in part. DekuSan issues a license for DekuSan, found [here](https://github.com/DekuSan/metamask-plugin/blob/master/LICENSE). For information on other licenses utilized in the development of DekuSan, please see our attribution page at: [https://metamask.io/attributions.html](https://metamask.io/attributions.html)\n\n## 9. Links ##\n\nThe Service provides, or third parties may provide, links to other World Wide Web or accessible sites, applications or resources. Because DekuSan has no control over such sites, applications and resources, you acknowledge and agree that DekuSan is not responsible for the availability of such external sites, applications or resources, and does not endorse and is not responsible or liable for any content, advertising, products or other materials on or available from such sites or resources. You further acknowledge and agree that DekuSan shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource.\n\n## 10. Termination and Suspension ##\n\nDekuSan may terminate or suspend all or part of the Service and your DekuSan access immediately, without prior notice or liability, if you breach any of the terms or conditions of the Terms. Upon termination of your access, your right to use the Service will immediately cease.\n\nThe following provisions of the Terms survive any termination of these Terms: INDEMNITY; WARRANTY DISCLAIMERS; LIMITATION ON LIABILITY; OUR PROPRIETARY RIGHTS; LINKS; TERMINATION; NO THIRD PARTY BENEFICIARIES; BINDING ARBITRATION AND CLASS ACTION WAIVER; GENERAL INFORMATION.\n\n## 11. No Third Party Beneficiaries ##\n\nYou agree that, except as otherwise expressly provided in these Terms, there shall be no third party beneficiaries to the Terms.\n\n## 12. Notice and Procedure For Making Claims of Copyright Infringement ##\n\nIf you believe that your copyright or the copyright of a person on whose behalf you are authorized to act has been infringed, please provide DekuSan’s Copyright Agent a written Notice containing the following information:\n\n· an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright or other intellectual property interest;\n\n· a description of the copyrighted work or other intellectual property that you claim has been infringed;\n\n· a description of where the material that you claim is infringing is located on the Service;\n\n· your address, telephone number, and email address;\n\n· a statement by you that you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law;\n\n· a statement by you, made under penalty of perjury, that the above information in your Notice is accurate and that you are the copyright or intellectual property owner or authorized to act on the copyright or intellectual property owner's behalf.\n\nDekuSan’s Copyright Agent can be reached at:\n\nEmail: copyright [at] metamask [dot] io\n\nMail:\n\nAttention:\n\nDekuSan Copyright ℅ ConsenSys\n\n49 Bogart Street\n\nBrooklyn, NY 11206\n\n## 13. Binding Arbitration and Class Action Waiver ##\n\nPLEASE READ THIS SECTION CAREFULLY – IT MAY SIGNIFICANTLY AFFECT YOUR LEGAL RIGHTS, INCLUDING YOUR RIGHT TO FILE A LAWSUIT IN COURT\n\n### 13.1 Initial Dispute Resolution ###\n\nThe parties shall use their best efforts to engage directly to settle any dispute, claim, question, or disagreement and engage in good faith negotiations which shall be a condition to either party initiating a lawsuit or arbitration.\n\n### 13.2 Binding Arbitration ###\n\nIf the parties do not reach an agreed upon solution within a period of 30 days from the time informal dispute resolution under the Initial Dispute Resolution provision begins, then either party may initiate binding arbitration as the sole means to resolve claims, subject to the terms set forth below. Specifically, all claims arising out of or relating to these Terms (including their formation, performance and breach), the parties’ relationship with each other and/or your use of the Service shall be finally settled by binding arbitration administered by the American Arbitration Association in accordance with the provisions of its Commercial Arbitration Rules and the supplementary procedures for consumer related disputes of the American Arbitration Association (the \"AAA\"), excluding any rules or procedures governing or permitting class actions.\n\nThe arbitrator, and not any federal, state or local court or agency, shall have exclusive authority to resolve all disputes arising out of or relating to the interpretation, applicability, enforceability or formation of these Terms, including, but not limited to any claim that all or any part of these Terms are void or voidable, or whether a claim is subject to arbitration. The arbitrator shall be empowered to grant whatever relief would be available in a court under law or in equity. The arbitrator’s award shall be written, and binding on the parties and may be entered as a judgment in any court of competent jurisdiction.\n\nThe parties understand that, absent this mandatory provision, they would have the right to sue in court and have a jury trial. They further understand that, in some instances, the costs of arbitration could exceed the costs of litigation and the right to discovery may be more limited in arbitration than in court.\n\n### 13.3 Location ###\n\nBinding arbitration shall take place in New York. You agree to submit to the personal jurisdiction of any federal or state court in New York County, New York, in order to compel arbitration, to stay proceedings pending arbitration, or to confirm, modify, vacate or enter judgment on the award entered by the arbitrator.\n\n### 13.4 Class Action Waiver ###\n\nThe parties further agree that any arbitration shall be conducted in their individual capacities only and not as a class action or other representative action, and the parties expressly waive their right to file a class action or seek relief on a class basis. YOU AND METAMASK AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR ITS INDIVIDUAL CAPACITY, AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING. If any court or arbitrator determines that the class action waiver set forth in this paragraph is void or unenforceable for any reason or that an arbitration can proceed on a class basis, then the arbitration provision set forth above shall be deemed null and void in its entirety and the parties shall be deemed to have not agreed to arbitrate disputes.\n\n### 13.5 Exception - Litigation of Intellectual Property and Small Claims Court Claims ###\n\nNotwithstanding the parties' decision to resolve all disputes through arbitration, either party may bring an action in state or federal court to protect its intellectual property rights (\"intellectual property rights\" means patents, copyrights, moral rights, trademarks, and trade secrets, but not privacy or publicity rights). Either party may also seek relief in a small claims court for disputes or claims within the scope of that court’s jurisdiction.\n\n### 13.6 30-Day Right to Opt Out ###\n\nYou have the right to opt-out and not be bound by the arbitration and class action waiver provisions set forth above by sending written notice of your decision to opt-out to the following address: DekuSan ℅ ConsenSys, 49 Bogart Street, Brooklyn NY 11206 and via email at support@metamask.io. The notice must be sent within 30 days of September 6, 2016 or your first use of the Service, whichever is later, otherwise you shall be bound to arbitrate disputes in accordance with the terms of those paragraphs. If you opt-out of these arbitration provisions, DekuSan also will not be bound by them.\n\n### 13.7 Changes to This Section ###\n\nDekuSan will provide 60-days’ notice of any changes to this section. Changes will become effective on the 60th day, and will apply prospectively only to any claims arising after the 60th day.\n\nFor any dispute not subject to arbitration you and DekuSan agree to submit to the personal and exclusive jurisdiction of and venue in the federal and state courts located in New York, New York. You further agree to accept service of process by mail, and hereby waive any and all jurisdictional and venue defenses otherwise available.\n\nThe Terms and the relationship between you and DekuSan shall be governed by the laws of the State of New York without regard to conflict of law provisions.\n\n## 14. General Information ##\n\n### 14.1 Entire Agreement ###\n\nThese Terms (and any additional terms, rules and conditions of participation that DekuSan may post on the Service) constitute the entire agreement between you and DekuSan with respect to the Service and supersedes any prior agreements, oral or written, between you and DekuSan. In the event of a conflict between these Terms and the additional terms, rules and conditions of participation, the latter will prevail over the Terms to the extent of the conflict.\n\n### 14.2 Waiver and Severability of Terms ###\n\nThe failure of DekuSan to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by an arbitrator or court of competent jurisdiction to be invalid, the parties nevertheless agree that the arbitrator or court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect.\n\n### 14.3 Statute of Limitations ###\n\nYou agree that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to the use of the Service or the Terms must be filed within one (1) year after such claim or cause of action arose or be forever barred.\n\n### 14.4 Section Titles ###\n\nThe section titles in the Terms are for convenience only and have no legal or contractual effect.\n\n### 14.5 Communications ###\n\nUsers with questions, complaints or claims with respect to the Service may contact us using the relevant contact information set forth above and at communications@metamask.io.\n\n## 15 Related Links ##\n\n**[Terms of Use](https://metamask.io/terms.html)**\n\n**[Privacy](https://metamask.io/privacy.html)**\n\n**[Attributions](https://metamask.io/attributions.html)**\n\n","id":0},{"read":false,"date":"Mon May 08 2017","title":"Privacy Notice","body":"DekuSan is beta software. \n\nWhen you log in to DekuSan, your current account is visible to every new site you visit.\n\nFor your privacy, for now, please sign out of DekuSan when you're done using a site.\n\nAlso, by default, you will be signed in to a test network. To use real Ether, you must connect to the main network manually in the top left network menu.\n\n","id":2}]},"BlacklistController":{"phishing":{"version":2,"tolerance":2,"fuzzylist":["metamask.io","myetherwallet.com","cryptokitties.co"],"whitelist":["metahash.io","metahash.net","metahash.org","cryptotitties.com","cryptocities.net","cryptoshitties.co","cryptotitties.fun","cryptokitties.forsale","cryptokitties.care","metamate.cc","metamesh.tech","ico.nexus.social","metamesh.org","metatask.io","metmask.com","metarasa.com","metapack.com","metacase.com","metafas.nl","metamako.com","metamast.com","metamax.ru","metadesk.io","metadisk.com","metallsk.ru","metamag.fr","metamaks.ru","metamap.ru","metamaps.cc","metamats.com","metamax.by","metamax.com","metamax.io","metamuse.net","metarank.com","metaxas.com","megamas2.ru","metamask.io","myetherwallet.com","myethlerwallet.com","ethereum.org","myetheroll.com","myetherapi.com","ledgerwallet.com","databrokerdao.com","etherscan.io","etherid.org","ether.cards","etheroll.com","ethnews.com","ethex.market","ethereumdev.io","ethereumdev.kr","dether.io","ethermine.org","slaask.com","etherbtc.io","ethereal.capital","etherisc.com","m.famalk.net","etherecho.com","ethereum.os.tc","theethereum.wiki","metajack.im","etherhub.io","ethereum.network","ethereum.link","ethereum.com","prethereum.org","ethereumj.io","etheraus.com","ethereum.dev","1ethereum.ru","ethereum.nz","nethereum.com","metabank.com","metamas.com","aventus.io","metabase.com","etherdelta.com","metabase.one","cryptokitties.co"],"blacklist":["myetherwallet.uk.com","kodakone.cc","nyeihitervvallet.com","xn--myeterwalet-cm8eoi.com","nucleus.foundation","beetoken-ico.com","data-token.com","tron-labs.com","ocoin.tech","aionfoundation.com","ico-telegram.org","nyeihitervvallat.com","telegramcoin.us","daddi.cloud","daditoken.com","blockarray.org","dadi-cloud.net","wanchainfunding.org","ico-telegram.io","iconfoundation.site","iost.co","beetoken-ico.eu","cindicator.network","wanchainetwork.org","wamchain.org","wanchainltd.org","wanchainalliance.org","nucleus-vision.net","ledgerwallet.by","nucleuss.vision","myenhterswailct.com","cobin-hood.com","wanchainfoundation.org","xn--polniex-ex4c.com","xn--polniex-s1a.com","xn--polonex-ieb.com","xn--polonex-sza.com","xn--polonex-zw4c.com","xn--polonix-ws4c.com","xn--polonix-y8a.com","xn--pooniex-ojb.com","gramico.info","dimnsions.network","www-gemini.com","login-kucoin.net","venchain.foundation","grampreico.com","tgram.cc","ton-gramico.com","wwwpaywithink.com","coniomi.com","paywithnk.com","paywithlnk.com","iluminatto.com.br","pundix.eu","xn--bttrx-esay.com","xn--bttrex-w8a.com","xn--bnance-bwa.com","xn--shpeshift-11a.com","xn--shapeshif-ts6d.com","xn--shapshift-yf7d.com","wwwbluzelle.com","bluzelie.com","nucleus-vision.org","omisegonetwork.site","etlherzero.com","etlherdelta.com","xn--condesk-0ya.com","xn--condesk-sfb.com","xn--coindsk-vs4c.com","iexecplatform.com","tongramico.com","nucleus-vision.eu","intchain.network","wanchain.cloud","bluzelle-ico.com","ethzero-wallet.com","xn--metherwalle-jb9et7d.com","xn--coinesk-jo3c.com","venchainfoundation.com","myenhtersvvailot.com","ether-zero.net","ins.foundation","nastoken.org","telcointoken.com","ether0.org","eterzero.org","bluzelle-ico.eu","bleuzelle.com","appcoinstoken.org","xn--quanstamp-8s6d.com","myehntersvvailct.com","myeherwalllet.com","ico-bluzelle.com","bluzelle.im","bluzelle.one","bluzele.sale","bluzele.co","sether.ws","xn--myetherwalet-6gf.com","xn--rnyethewaliet-om1g.com","rnyethervailet.com","mvetherwaliet.com","rnyetherwailet.com","myethervaliet.com","rnyethervaliet.com","mvetherwalilet.com","xn--myethewalie-3ic0947g.com","xn--mthrwallet-z6ac3y.com","xn--myeherwalie-vici.com","xn--myethervvalie-8vc.com","xn--mythrwallt-06acf.com","xn--mtherwallet-y9a6y.com","myetherwallet.applytoken.tk","ethereum-zero.com","quanstamptoken.tk","bluzelle.network","ether-wallet.org","tron-wallet.info","appcoinsproject.com","vechain.foundation","tronlab.site","tronlabs.network","bluzelle.cc","ethblender.com","ethpaperwallet.net","waltontoken.org","icoselfkey.org","etherzeroclaim.com","etherzero.promo","bluzelle.pro","token-selfkey.org","xn--etherdlta-0f7d.com","sether.in","xn--ttrex-ysa9423c.com","bluzelle.eu","bluzelle.site","gifto.tech","xn--os-g7s.com","selfkey.co","xn--myeherwalet-ns8exy.com","xn--coinelegraph-wk5f.com","dai-stablecoin.com","eos-token.org","venchain.org","gatcoins.io","deepbrainchain.co","myetherwalililet.info","myehvterwallet.com","myehterumswallet.com","nucleusico.com","tronlab.tech","0x-project.com","gift-token-events.mywebcommunity.org","funfairtoken.org","breadtokenapp.com","cloudpetstore.com","myethwalilet.com","selfkeys.org","wallet-ethereum.com","xn--methrwallt-26ar0z.com","xn--mytherwllet-r8a0c.com","bluzelle.promo","tokensale.bluzelle.promo","cedarlake.org","marketingleads4u.com","cashaa.co","xn--inance-hrb.com","wanchain.tech","zenprolocol.com","ethscan.io","etherscan.in","props-project.com","zilliaq.com","reqestnetwork.com","etherdelta.pw","ethereum-giveaway.org","mysimpletoken.org","binancc.com","blnance.org","elherdelta.io","xn--hapeshit-ez9c2y.com","tenxwallet.co","singularitynet.info","mytlherwaliet.info","iconmainnet.ml","tokenselfkey.org","xn--myetewallet-cm8e5y.com","envione.org","myetherwalletet.com","claimbcd.com","ripiocreditnetwork.in","xn--yeterwallet-ml8euo.com","ethclassicwallet.info","myltherwallet.ru.com","etherdella.com","xn--yeterwallet-bm8ewn.com","singularty.net","cloudkitties.co","iconfoundation.io","kittystat.com","gatscoin.io","singularitynet.in","sale.canay.io","canay.io","wabicoin.co","envion.top","sirinslabs.com","tronlab.co","paxful.com.ng","changellyli.com","ethereum-code.com","xn--plonex-6va6c.com","envion.co","envion.cc","envion.site","ethereumchain.info","xn--envon-1sa.org","xn--btstamp-rfb.net","envlon.org","envion-ico.org","spectivvr.org","sirinlbs.com","ethereumdoubler.life","xn--myetherwllet-fnb.com","sirin-labs.com","sirin-labs.org","envion.one","envion.live","propsproject.org","propsprojects.com","decentralland.org","xn--metherwalet-ns8ep4b.com","redpulsetoken.co","propsproject.tech","xn--myeterwalet-nl8emj.com","powrerledger.com","cryptokitties.com","sirinlabs.pro","sirinlabs.co","sirnlabs.com","superbitcoin-blockchain.info","hellobloom.me","mobus.network","powrrledger.com","xn--myeherwalet-ms8eyy.com","qlink-ico.com","gatcoin.in","tokensale.gamefllp.com","gamefllp.com","xn--myeherwalle-vici.com","xn--myetherwalet-39b.com","xn--polonex-ffb.com","xn--birex-leba.com","raiden-network.org","sirintabs.com","xn--metherwallt-79a30a.com","xn--myethrwllet-2kb3p.com","myethlerwallet.eu","xn--btrex-b4a.com","powerrledger.com","xn--cointeegraph-wz4f.com","myerherwalet.com","qauntstanp.com","myetherermwallet.com","xn--myethewalet-ns8eqq.com","xn--nvion-hza.org","nnyetherwallelt.ru.com","ico-wacoin.com","xn--myeterwalet-nl8enj.com","bitcoinsilver.io","t0zero.com","tokensale.gizer.in","gizer.in","wabitoken.com","gladius.ws","xn--metherwallt-8bb4w.com","quanttstamp.com","gladius.im","ethereumstorage.net","powerledgerr.com","xn--myeherwallet-4j5f.com","quamtstamp.com","quntstamp.com","xn--changely-j59c.com","shapeshlft.com","coinbasenews.co.uk","xn--metherwallet-hmb.com","envoin.org","powerledger.com","bitstannp.net","xn--myetherallet-4k5fwn.com","xn--coinbas-pya.com","requestt.network","oracls.network","sirinlabs.website","powrledger.io","slackconfirm.com","shape-shift.io","oracles-network.org","xn--myeherwalle-zb9eia.com","blockstack.one","urtust.io","bittrex.one","t0-ico.com","xn--cinbase-90a.com","xn--metherwalet-ns8ez1g.com","tzero-ico.com","tzero.su","tzero.website","blockstack.network","ico-tzero.com","spectre.site","tzero.pw","spectre-ai.net","xn--waxtokn-y8a.com","dmarket.pro","bittrex.com11648724328774.cf","bittrex.com1987465798.ga","autcus.org","t-zero.org","xn--zero-zxb.com","myetherwalletfork.com","blokclbain.info","datum.sale","spectre-ai.org","powerledgr.com","simpletoken.live","sale.simpletoken.live","qauntstamp.com","raiden-network.com","metalpayme.com","quantstamp-ico.com","myetherwailetclient.com","biockchain.biz","wallets-blockchain.com","golemairdrop.com","omisegoairdrop.net","blodkchainwallet.info","walton-chain.org","elite888-ico.com","bitflyerjp.com","chainlinksmartcontract.com","stormtoken.eu","omise-go.tech","saltending.com","stormltoken.com","xn--quanttamp-42b.com","stormtoken.co","storntoken.com","stromtoken.com","storm-token.com","stormtokens.io","ether-delta.com","ethconnect.live","ethconnect.trade","xn--bttrex-3va.net","quantstamp.com.co","wancha.in","augur-network.com","quantstamp.com.ua","myetherwalletmew.com","myetherumwalletts.com","xn--quanstamp-tmd.com","quantsstamps.com","changellyl.net","xn--myetherwalet-1fb.com","myethereumwallets.com","xn--myetherwalet-e9b.com","quantslamp.com","metelpay.com","xn--eterdelta-m75d.com","linksmartcontract.com","myetherwalletaccess.com","myetherwalletcheck.com","myetherwalletcheck.info","myetherwalletconf.com","myetherwalleteal.com","myetherwalletec.com","myetherwalletgeth.com","myetherwalletmetamask.com","myetherwalletmm.com","myetherwalletmy.com","myetherwalletnh.com","myetherwalletnod.com","myetherwalletrr.com","myetherwalletrty.com","myetherwalletsec.com","myetherwalletsecure.com","myetherwalletutc.com","myetherwalletver.info","myetherwalletview.com","myetherwalletview.info","myetherwalletvrf.com","myetherwalletmist.com","myetherwalletext.com","myetherwalletjson.com","mettalpay.com","bricklblock.io","bittrexy.com","utrust.so","myethierwallet.org","metallpay.com","kraken-wallet.com","dmarkt.io","etherdeltla.com","unlversa.io","universa.sale","mercuryprotocol.live","ripiocredlt.network","myetlherwa11et.com","dentacoin.in","rdrtg.com","myetherwallet.com.rdrgh.com","rdrgh.com","ripiocreditnetwork.co","riaden.network","hydrominer.biz","rdrblock.com","reqest.network","senstoken.com","myetherwallat.services","ripiocredit.net","xn--metherwallet-c06f.com","ico.ripiocredits.com","ripiocredits.com","raidens.network","artoken.co","myetherwalletlgn.com","etherblog.click","stormtoken.site","httpmyetherwallet.com","myetherwalletverify.com","byzantiumfork.com","myetherwallet.com.byzantiumfork.com","www-myethervvallet.com","ether24.info","block-v.io","bittrex.cash","shapishift.io","ripiocerdit.network","rnyetherwa11et.com","claimether.com","enigmatokensale.com","ethereum-org.com","mvetnerwallet.com","myctherwallet.com","myetherwaltet.com","myetherwatlet.com","privatix.me","myetherwalletcnf.com","myetherwalletver.com","privatix.top","privatix.pro","privatex.io","stormtoken.cc","raiden.online","stormstoken.com","myetereumwallet.com","stormtokens.net","myetherwalletconf.info","storrntoken.com","worldofbattles.io","ico.worldofbattles.io","privatix.live","riden.network","raidan.network","ralden.network","mymyetherwallet.com","myetherwallets.net","myetherwalletverify.info","stormxtoken.com","myethereum-wallet.com","myetherwallet-forkprep.pagedemo.co","myetnerwailet.com","www-mvetherwallet.com","etheirdelta.com","myetherwalletiu.com","myetherwaiiett.com","xn--mytherwalet-cbb87i.com","xn--myethrwallet-ivb.co","xn--myeterwallet-f1b.com","myehterwaliet.com","omegaone.co","myetherwaiietw.com","slack.com.ru","polkodot.network","request-network.net","requestnetwork.live","binancie.com","first-eth.info","myewerthwalliet.com","enjincoin.pw","xn--bitrex-k17b.com","alrswap.io","www-request.network","myetnenwallet.com","www-enigma.co","cryptoinsidenews.com","air-swap.tech","launch.airswap.cc","airswap.cc","airswaptoken.com","launch.airswap.in","airswap.in","security-steemit.com.mx","blockchalnwallet.com","blodkchainwallet.com","blodkchaln.com","myethereumwaiiet.com","myethereumwaliet.com","myethereumwalilet.com","myetherswailet.com","myetherswaliet.com","myetherswalilet.com","myetherwalilett.com","myetherwalletl.com","myetherwalletww.com","myethereunwallet.com","myethereumwallct.com","myetherwaiieti.com","myetherwaiiete.com","upfirng.com","paypie.net","paypie.tech","soam.co","myetherwaiict.com","numerai-token.com","www-bankera.com","vvanchain.org","omisegoairdrop.com","xn--enjncoin-41a.io","suncontract.su","myetherwaiietr.com","shapeshiff.io","warchain.org","myethwallett.com","myethervvaliet.com","wanchains.org","etherparty.in","enjincoin.me","etiam.io","invest.smartlands.tech","smartlands.tech","enijncoin.io","wanchain.network","nimiq.su","enjincoin.sale","tenxwallet.io","golem-network.net","myyethwallet.ml","mywetherwailiet.com","omg-omise.com","district0x.tech","centra-token.com","etherdetla.com","etnerparty.io","etherdelta.su","myetherwallett.neocities.org","myetherwallet-secure.com","myethereumwalletntw.info","real-markets.io","wallet-ethereum.org","request-network.com","shapeshifth.io","shiapeshift.in","coin.red-puise.com","ibittreix.com","coinkbase.com","cindicator.pro","myetherwallet.com.ailogin.me","eventchain.co","kinkik.in","myetherumwalletview.com","protostokenhub.com","coinrbase.com","myetherwalletlogin.com","omisegotoken.com","myethereumwalletntw.com","reall.markets","cobinhood.org","cobinhood.io","happy-coin.org","bitfinex.com.co","bitfienex.com","iconn.foundation","centra.vip","smartcontract.live","icon.community","air-token.com","centra.credit","myetherwallet-singin.com","smartcontractlink.com","shapesshift.io","0xtoken.io","augurproject.co","ethereumus.one","myetherumwalet.com","myetherwalletsignin.com","change-bank.org","charge-bank.com","myetherwalletsingin.com","myetherwalletcontract.com","change-bank.io","chainlink.tech","myetherwallet-confirm.com","tokensale.kybernet.network","kybernet.network","kyberr.network","kybernetwork.io","myetherwalletconfirm.com","kvnuke.github.io","kin.kikpro.co","myethereumwallet.co.uk","tokensale-kyber.network","kyber-network.co","tokensale.kyber-network.co","pyro0.github.io","tokensale.kyber.digital","kyber.digital","omise-go.me","my.etherwallet.com.de","bepartof.change-bank.co","change-bank.co","enigma-tokens.co","coinbase.com.eslogin.co","xn--bittrx-mva.com","ethrdelta.github.io","etherdellta.com","ico-nexus.social","red-pulse.tech","bitj0b.io","xn--bttrex-bwa.com","kin-klk.com","kin-crowdsale.com","ethedelta.com","coindash.su","myethwallet.co.uk","swarm.credit","myethereumwallet.uk","iconexu.social","wanchain.co","enigrna.co","linknetwork.co","qtum-token.com","omisego.com.co","rivetzintl.org","etherdelta.one","the-ether.pro","etherdelta.gitnub.io","kirkik.com","monetha.ltd","vlberate.io","ethereumwallet-kr.info","omise-go.org","iconexus.social","bittirrex.com","aventus.pro","atlant.solutions","aventus.group","metamak.io","omise.com.co","herotokens.io","starbase.pro","etherdelta.githulb.io","herotoken.co","kinico.net","dmarket.ltd","etherdelta.gilthub.io","golem-network.com","etnerscan.io","bllttriex.com","monetha.me","monetha.co","monetha-crowdsale.com","starbase.tech","aventus-crowdsale.com","shapeshift.pro","bllttrex.com","kickico.co","statustoken.im","bilttrex.com","tenxpay.io","bittrex.ltd","metalpay.im","aragon.im","coindash.tech","decentraland.tech","decentraland.pro","status-token.com","bittrex.cam","enigmatoken.com","unocoin.company","unocoin.fund","0xproject.io","0xtoken.com","numerai.tech","decentraiand.org","blockcrein.info","blockchealn.info","bllookchain.info","blockcbhain.info","myetherwallet.com.ethpromonodes.com","mettamask.io","tokenswap.org","netherum.com","etherexx.org","etherume.io","ethereum.plus","ehtereum.org","etereurm.org","etheream.com","ethererum.org","ethereum.io","etherdelta-glthub.com","cryptoalliance.herokuapp.com","bitspark2.com","indorsetoken.com","iconexus.tk","iconexus.ml","iconexus.ga","iconexus.cf","etherwallet.online","wallet-ethereum.net","bitsdigit.com","etherswap.org","eos.ac","uasfwallet.com","ziber.io","multiply-ethereum.info","bittrex.comze.com","karbon.vacau.com","etherdelta.gitlhub.io","etherdelta.glthub.io","digitaldevelopersfund.vacau.com","district-0x.io","coin-dash.com","coindash.ru","district0x.net","aragonproject.io","coin-wallet.info","coinswallet.info","contribute-status.im","ether-api.com","ether-wall.com","mycoinwallet.net","ethereumchamber.com","ethereumchamber.net","ethereumchest.com","ethewallet.com","myetherwallet.com.vc","myetherwallet.com.pe","myetherwallet.us.com","myetherwallet.com.u0387831.cp.regruhosting.ru","myethereumwallet.su","myetherweb.com.de","myetherieumwallet.com","myetehrwallet.com","myeterwalet.com","myetherwaiiet.com","myetherwallet.info","myetherwallet.ch","myetherwallet.om","myethervallet.com","myetherwallet.com.cm","myetherwallet.com.co","myetherwallet.com.de","myetherwallet.com.gl","myetherwallet.com.im","myetherwallet.com.ua","secure-myetherwallet.com","update-myetherwallet.com","wwwmyetherwallet.com","myeatherwallet.com","myetharwallet.com","myelherwallel.com","myetherwaillet.com","myetherwaliet.com","myetherwallel.com","myetherwallet.cam","myetherwallet.cc","myetherwallet.co","myetherwallet.cm","myetherwallet.cz","myetherwallet.org","myetherwallet.tech","myetherwallet.top","myetherwallet.net","myetherwallet.ru.com","myetherwallet.com.ru","metherwallet.com","myetrerwallet.com","myetlerwallet.com","myethterwallet.com","myethwallet.io","myethterwallet.co","myehterwallet.co","myaetherwallet.com","myetthterwallet.com","myetherwallet.one","myelterwallet.com","myetherwallet.gdn","myetherwallt.com","myeterwallet.com","myeteherwallet.com","myethearwailet.com","myetherwallelt.com","myetherwallett.com","etherwallet.org","myetherewallet.com","myeherwallet.com","myethcrwallet.com","myetherwallet.link","myetherwallets.com","myethearwaillet.com","myethearwallet.com","myetherawllet.com","myethereallet.com","myetherswallet.com","myetherwalet.com","myetherwaller.com","myetherwalliet.com","myetherwllet.com","etherwallet.io","myetherwallet.ca","myetherwallet.me","myetherwallet.ru","myetherwallet.xyz","myetherwallte.com","myethirwallet.com","myethrewallet.com","etherwallet.net","maetherwallet.com","meyetherwallet.com","my.ether-wallet.pw","myehterwallet.com","myeitherwallet.com","myelherwallet.com","myeltherwallet.com","myerherwallet.com","myethearwalet.com","myetherewalle.com","myethervvallet.com","myetherwallent.com","myetherwallet.fm","myetherwalllet.com","myetherwalltet.com","myetherwollet.com","myetlherwalet.com","myetlherwallet.com","rnyetherwallet.com","etherclassicwallet.com","omg-omise.co","omise-go.com","omise-go.net","omise-omg.com","omise-go.io","tenx-tech.com","bitclaive.com","tokensale-tenx.tech","ubiqcoin.org","metamask.com","ethtrade.io","myetcwallet.com","account-kigo.net","bitcoin-wallet.net","blocklichan.info","bloclkicihan.info","coindash.ml","eos-bonus.com","eos-io.info","ether-wallet.net","ethereum-wallet.info","ethereum-wallet.net","ethereumchest.net","reservations-kigo.net","reservations-lodgix.com","secure-liverez.com","secure-onerooftop.com","settings-liverez.com","software-liverez.com","software-lodgix.com","unhackableetherwallets.com","www-myetherwallet.com","etherwallet.co.za","etherwalletchain.com","etherwallets.net","etherwallets.nl","my-ethwallet.com","my.ether-wallet.co","myetherwallet.com.am","myetherwallet.com.ht","myetherwalletcom.com","myehterwailet.com","xn--myetherwalle-xoc.com","xn--myetherwalle-44i.com","xn--myetherwalle-xhk.com","xn--myetherwallt-cfb.com","xn--myetherwallt-6tb.com","xn--myetherwallt-xub.com","xn--myetherwallt-ovb.com","xn--myetherwallt-fwb.com","xn--myetherwallt-5wb.com","xn--myetherwallt-jzi.com","xn--myetherwallt-2ck.com","xn--myetherwallt-lok.com","xn--myetherwallt-lsl.com","xn--myetherwallt-ce6f.com","xn--myetherwalet-mcc.com","xn--myetherwalet-xhf.com","xn--myetherwalet-lcc.com","xn--myetherwaet-15ba.com","xn--myetherwalet-whf.com","xn--myetherwaet-v2ea.com","xn--myetherwllet-59a.com","xn--myetherwllet-jbb.com","xn--myetherwllet-wbb.com","xn--myetherwllet-9bb.com","xn--myetherwllet-ncb.com","xn--myetherwllet-0cb.com","xn--myetherwllet-5nb.com","xn--myetherwllet-ktd.com","xn--myetherwllet-mre.com","xn--myetherwllet-76e.com","xn--myetherwllet-o0l.com","xn--myetherwllet-c45f.com","xn--myetherallet-ejn.com","xn--myethewallet-4nf.com","xn--myethewallet-iof.com","xn--myethewallet-mpf.com","xn--myethewallet-6bk.com","xn--myethewallet-i31f.com","xn--myethrwallet-feb.com","xn--myethrwallt-fbbf.com","xn--myethrwallet-seb.com","xn--myethrwallt-rbbf.com","xn--myethrwallet-5eb.com","xn--myethrwallt-3bbf.com","xn--myethrwallet-0tb.com","xn--myethrwallt-tpbf.com","xn--myethrwallet-rub.com","xn--myethrwallt-iqbf.com","xn--myethrwallet-ivb.com","xn--myethrwallt-6qbf.com","xn--myethrwallet-8vb.com","xn--myethrwallt-vrbf.com","xn--myethrwallet-zwb.com","xn--myethrwallt-ksbf.com","xn--myethrwallet-dzi.com","xn--myethrwallt-wbif.com","xn--myethrwallet-wck.com","xn--myethrwallt-skjf.com","xn--myethrwallet-fok.com","xn--myethrwallt-fvjf.com","xn--myethrwallet-fsl.com","xn--myethrwallt-fwkf.com","xn--myethrwallet-5d6f.com","xn--myethrwallt-319ef.com","xn--myeterwallet-ufk.com","xn--myeterwallet-nrl.com","xn--myeterwallet-von.com","xn--myeterwallet-jl6c.com","xn--myeherwallet-ooc.com","xn--myeherwalle-6hci.com","xn--myeherwallet-v4i.com","xn--myeherwalle-zgii.com","xn--myeherwallet-ohk.com","xn--myeherwalle-6oji.com","xn--mytherwallet-ceb.com","xn--mythrwallet-cbbc.com","xn--mythrwallt-c7acf.com","xn--mytherwallet-peb.com","xn--mythrwallet-obbc.com","xn--mythrwallt-n7acf.com","xn--mytherwallet-2eb.com","xn--mythrwallet-0bbc.com","xn--mythrwallt-y7acf.com","xn--mytherwallet-xtb.com","xn--mythrwallet-qpbc.com","xn--mythrwallt-jlbcf.com","xn--mytherwallet-oub.com","xn--mythrwallet-fqbc.com","xn--mythrwallt-5lbcf.com","xn--mythrwallet-3qbc.com","xn--mythrwallt-smbcf.com","xn--mytherwallet-5vb.com","xn--mythrwallet-srbc.com","xn--mythrwallt-fnbcf.com","xn--mytherwallet-wwb.com","xn--mythrwallet-hsbc.com","xn--mythrwallt-1nbcf.com","xn--mytherwallet-9yi.com","xn--mythrwallet-tbic.com","xn--mythrwallt-dnhcf.com","xn--mytherwallet-tck.com","xn--mythrwallet-pkjc.com","xn--mythrwallt-lsicf.com","xn--mytherwallet-cok.com","xn--mythrwallet-cvjc.com","xn--mythrwallt-c2icf.com","xn--mytherwallet-csl.com","xn--mythrwallet-cwkc.com","xn--mythrwallt-c0jcf.com","xn--mytherwallet-2d6f.com","xn--mythrwallet-019ec.com","xn--mythrwallt-yq3ecf.com","xn--metherwallet-qlb.com","xn--metherwallet-1uf.com","xn--metherwallet-iyi.com","xn--metherwallet-zhk.com","xn--metherwallet-3ml.com","xn--mytherwallet-fvb.com","xn--myetherwallt-7db.com","xn--myetherwallt-leb.com","xn--myetherwallt-yeb.com","xn--yetherwallet-vjf.com","xn--yetherwallet-dfk.com","xn--yetherwallet-1t1f.com","xn--yetherwallet-634f.com","xn--myeherwallet-fpc.com","xn--myethewallt-crb.com","xn--metherwallet-1vc.com","xn--myeherwallt-kbb8039g.com","xn--myeherwallet-vk5f.com","xn--yethewallet-iw8ejl.com","xn--bittrx-th8b.com","xn--polniex-n0a.com","thekey.vin","thekey-vip.com","digitexftures.com","ethzero-wallet.org","zeepln.io","wepowers.network","wepower.vision"]}},"CurrencyController":{"currentCurrency":"usd","conversionRate":1112,"conversionDate":1517351401}}} diff --git a/test/lib/migrations/004.json b/test/lib/migrations/004.json index a6487c1e..b1866909 100644 --- a/test/lib/migrations/004.json +++ b/test/lib/migrations/004.json @@ -46,7 +46,7 @@ "read":true, "date":"Fri Dec 16 2016", "title":"Ending Morden Support", - "body":"Due to [recent events](https://blog.ethereum.org/2016/11/20/from-morden-to-ropsten/), MetaMask is now deprecating support for the Morden Test Network.\n\nUsers will still be able to access Morden through a locally hosted node, but we will no longer be providing hosted access to this network through [Infura](http://infura.io/).\n\nPlease use the new Ropsten Network as your new default test network.\n\nYou can fund your Ropsten account using the buy button on your account page.\n\nBest wishes!\nThe MetaMask Team\n\n", + "body":"Due to [recent events](https://blog.ethereum.org/2016/11/20/from-morden-to-ropsten/), DekuSan is now deprecating support for the Morden Test Network.\n\nUsers will still be able to access Morden through a locally hosted node, but we will no longer be providing hosted access to this network through [Infura](http://infura.io/).\n\nPlease use the new Ropsten Network as your new default test network.\n\nYou can fund your Ropsten account using the buy button on your account page.\n\nBest wishes!\nThe DekuSan Team\n\n", "id":0 }, { diff --git a/test/unit/app/controllers/infura-controller-test.js b/test/unit/app/controllers/infura-controller-test.js index 7bd95dd4..7fa82148 100644 --- a/test/unit/app/controllers/infura-controller-test.js +++ b/test/unit/app/controllers/infura-controller-test.js @@ -49,12 +49,12 @@ describe('infura-controller', function () { }) }) - describe('Rinkeby', function () { - it('should have Rinkeby', function () { + describe('DEXON', function () { + it('should have DEXON', function () { assert.equal(Object.keys(networkStatus)[3], 'rinkeby') }) - it('should have a value for Rinkeby status', function () { + it('should have a value for DEXON status', function () { assert.equal(networkStatus.rinkeby, 'down') }) }) diff --git a/test/unit/app/controllers/metamask-controller-test.js b/test/unit/app/controllers/metamask-controller-test.js index 1ed6a95f..7532abdb 100644 --- a/test/unit/app/controllers/metamask-controller-test.js +++ b/test/unit/app/controllers/metamask-controller-test.js @@ -4,7 +4,7 @@ const clone = require('clone') const nock = require('nock') const createThoughStream = require('through2').obj const blacklistJSON = require('eth-phishing-detect/src/config') -const MetaMaskController = require('../../../../app/scripts/metamask-controller') +const DekuSanController = require('../../../../app/scripts/metamask-controller') const firstTimeState = require('../../../unit/localhostState') const createTxMeta = require('../../../lib/createTxMeta') const EthQuery = require('eth-query') @@ -20,7 +20,7 @@ const TEST_SEED_ALT = 'setup olympic issue mobile velvet surge alcohol burger ho const TEST_ADDRESS_ALT = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' const CUSTOM_RPC_URL = 'http://localhost:8545' -describe('MetaMaskController', function () { +describe('DekuSanController', function () { let metamaskController const sandbox = sinon.createSandbox() const noop = () => {} @@ -45,7 +45,7 @@ describe('MetaMaskController', function () { .get(/.*/) .reply(200) - metamaskController = new MetaMaskController({ + metamaskController = new DekuSanController({ showUnapprovedTx: noop, showUnconfirmedMessage: noop, encryptor: { @@ -438,14 +438,14 @@ describe('MetaMaskController', function () { }) describe('#setCurrentCurrency', function () { - let defaultMetaMaskCurrency + let defaultDekuSanCurrency beforeEach(function () { - defaultMetaMaskCurrency = metamaskController.currencyController.getCurrentCurrency() + defaultDekuSanCurrency = metamaskController.currencyController.getCurrentCurrency() }) it('defaults to usd', function () { - assert.equal(defaultMetaMaskCurrency, 'usd') + assert.equal(defaultDekuSanCurrency, 'usd') }) it('sets currency to JPY', function () { @@ -683,7 +683,7 @@ describe('MetaMaskController', function () { await metamaskController.newUnsignedPersonalMessage(msgParams) assert.fail('should have thrown') } catch (error) { - assert.equal(error.message, 'MetaMask Message Signature: from field is required.') + assert.equal(error.message, 'DekuSan Message Signature: from field is required.') } }) diff --git a/test/unit/app/controllers/network-contoller-test.js b/test/unit/app/controllers/network-contoller-test.js index 7959e6cc..02813f44 100644 --- a/test/unit/app/controllers/network-contoller-test.js +++ b/test/unit/app/controllers/network-contoller-test.js @@ -76,7 +76,7 @@ describe('Network utils', () => { expected: 'Ropsten', }, { input: 4, - expected: 'Rinkeby', + expected: 'DEXON', }, { input: 42, expected: 'Kovan', @@ -85,7 +85,7 @@ describe('Network utils', () => { expected: 'Ropsten', }, { input: 'rinkeby', - expected: 'Rinkeby', + expected: 'DEXON', }, { input: 'kovan', expected: 'Kovan', diff --git a/test/unit/app/controllers/transactions/tx-controller-test.js b/test/unit/app/controllers/transactions/tx-controller-test.js index 74161e26..2cf0a26c 100644 --- a/test/unit/app/controllers/transactions/tx-controller-test.js +++ b/test/unit/app/controllers/transactions/tx-controller-test.js @@ -155,7 +155,7 @@ describe('Transaction Controller', function () { txController.newUnapprovedTransaction(txParams) .catch((err) => { - if (err.message === 'MetaMask Tx Signature: User denied transaction signature.') done() + if (err.message === 'DekuSan Tx Signature: User denied transaction signature.') done() else done(err) }) }) diff --git a/test/unit/development/sample-changelog.md b/test/unit/development/sample-changelog.md index 69f6513e..0e49b0cd 100644 --- a/test/unit/development/sample-changelog.md +++ b/test/unit/development/sample-changelog.md @@ -4,7 +4,7 @@ ## 4.1.3 2018-2-28 -- Ensure MetaMask's inpage provider is named MetamaskInpageProvider to keep some sites from breaking. +- Ensure DekuSan's inpage provider is named MetamaskInpageProvider to keep some sites from breaking. - Add retry transaction button back into classic ui. ## 4.1.2 2018-2-28 @@ -27,13 +27,13 @@ ## 4.0.0 2018-2-22 -- Introduce new MetaMask user interface. +- Introduce new DekuSan user interface. ## 3.14.2 2018-2-15 - Fix bug where log subscriptions would break when switching network. - Fix bug where storage values were cached across blocks. -- Add MetaMask light client [testing container](https://github.com/MetaMask/mesh-testing) +- Add DekuSan light client [testing container](https://github.com/DekuSan/mesh-testing) ## 3.14.1 2018-2-1 @@ -114,7 +114,7 @@ ## 3.11.2 2017-10-21 - Fix bug where reject button would sometimes not work. -- Fixed bug where sometimes MetaMask's connection to a page would be unreliable. +- Fixed bug where sometimes DekuSan's connection to a page would be unreliable. ## 3.11.1 2017-10-20 @@ -200,7 +200,7 @@ rollback to 3.10.0 due to bug - Make eth_sign deprecation warning less noisy - Add useful link to eth_sign deprecation warning. - Fix bug with network version serialization over synchronous RPC -- Add MetaMask version to state logs. +- Add DekuSan version to state logs. - Add the total amount of tokens when multiple tokens are added under the token list - Use HTTPS links for Etherscan. - Update Support center link to new one with HTTPS. @@ -387,7 +387,7 @@ rollback to 3.10.0 due to bug ## 3.6.3 2017-5-8 -- Fix bug that could stop newer versions of Geth from working with MetaMask. +- Fix bug that could stop newer versions of Geth from working with DekuSan. ## 3.6.2 2017-5-8 @@ -404,7 +404,7 @@ rollback to 3.10.0 due to bug ## 3.6.0 2017-4-26 -- Add Rinkeby Test Network to our network list. +- Add DEXON Test Network to our network list. ## 3.5.4 2017-4-25 @@ -542,7 +542,7 @@ rollback to 3.10.0 due to bug ## 2.13.9 2016-11-21 - Add support for the new, default Ropsten Test Network. -- Fix bug that would cause MetaMask to occasionally lose its StreamProvider connection and drop requests. +- Fix bug that would cause DekuSan to occasionally lose its StreamProvider connection and drop requests. - Fix bug that would cause the Custom RPC menu item to not appear when Localhost 8545 was selected. - Point ropsten faucet button to actual faucet. - Phase out ethereumjs-util from our encryptor module. @@ -593,8 +593,8 @@ rollback to 3.10.0 due to bug ## 2.13.2 2016-10-4 - Fix bug where chosen FIAT exchange rate does no persist when switching networks -- Fix additional parameters that made MetaMask sometimes receive errors from Parity. -- Fix bug where invalid transactions would still open the MetaMask popup. +- Fix additional parameters that made DekuSan sometimes receive errors from Parity. +- Fix bug where invalid transactions would still open the DekuSan popup. - Removed hex prefix from private key export, to increase compatibility with Geth, MyEtherWallet, and Jaxx. ## 2.13.1 2016-09-23 @@ -611,14 +611,14 @@ too help visualize transactions and to where they are going. ## 2.12.1 2016-09-14 -- Fixed bug where if you send a transaction from within MetaMask extension the +- Fixed bug where if you send a transaction from within DekuSan extension the popup notification opens up. - Fixed bug where some tx errors would block subsequent txs until the plugin was refreshed. ## 2.12.0 2016-09-14 - Add a QR button to the Account detail screen -- Fixed bug where opening MetaMask could close a non-metamask popup. +- Fixed bug where opening DekuSan could close a non-metamask popup. - Fixed memory leak that caused occasional crashes. ## 2.11.1 2016-09-12 @@ -629,10 +629,10 @@ popup notification opens up. - Fix bug where pending transactions from Test net (or other networks) show up In Main net. - Add fiat conversion values to more views. -- On fresh install, open a new tab with the MetaMask Introduction video. Does not open on update. +- On fresh install, open a new tab with the DekuSan Introduction video. Does not open on update. - Block negative values from transactions. - Fixed a memory leak. -- MetaMask logo now renders as super lightweight SVG, improving compatibility and performance. +- DekuSan logo now renders as super lightweight SVG, improving compatibility and performance. - Now showing loading indication during vault unlocking, to clarify behavior for users who are experiencing slow unlocks. - Now only initially creates one wallet when restoring a vault, to reduce some users' confusion. @@ -643,7 +643,7 @@ popup notification opens up. ## 2.10.1 2016-09-02 - Fix bug where provider menu did not allow switching to custom network from a custom network. -- Sending a transaction from within MetaMask no longer triggers a popup. +- Sending a transaction from within DekuSan no longer triggers a popup. - The ability to build without livereload features (such as for production) can be enabled with the gulp --disableLiveReload flag. - Fix Ethereum JSON RPC Filters bug. @@ -664,7 +664,7 @@ popup notification opens up. - Transaction history now has a hard limit. - Added info link on account screen that visits Etherscan. - Fixed bug where a message signing request would be lost if the vault was locked. -- Added shortcut to open MetaMask (Ctrl+Alt+M or Cmd+Opt/Alt+M) +- Added shortcut to open DekuSan (Ctrl+Alt+M or Cmd+Opt/Alt+M) - Prevent API calls in tests. - Fixed bug where sign message confirmation would sometimes render blank. @@ -703,7 +703,7 @@ popup notification opens up. - Added a Warning screen about storing ETH - Add buy Button! -- MetaMask now throws descriptive errors when apps try to use synchronous web3 methods. +- DekuSan now throws descriptive errors when apps try to use synchronous web3 methods. - Removed firefox-specific line in manifest. ## 2.6.2 2016-07-20 @@ -743,7 +743,7 @@ popup notification opens up. ## 2.4.5 2016-06-29 -- Fixed bug where MetaMask interfered with PDF loading. +- Fixed bug where DekuSan interfered with PDF loading. - Moved switch account icon into menu bar. - Changed status shapes to be a yellow warning sign for failure and ellipsis for pending transactions. - Now enforce 20 character limit on wallet names. diff --git a/test/unit/development/sample-manifest.json b/test/unit/development/sample-manifest.json index 2b3acf1b..c9316e5a 100644 --- a/test/unit/development/sample-manifest.json +++ b/test/unit/development/sample-manifest.json @@ -1,5 +1,5 @@ { - "name": "MetaMask", + "name": "DekuSan", "short_name": "Metamask", "version": "4.1.3", "manifest_version": 2, @@ -37,7 +37,7 @@ "19": "images/icon-19.png", "38": "images/icon-38.png" }, - "default_title": "MetaMask", + "default_title": "DekuSan", "default_popup": "popup.html" }, "content_scripts": [ diff --git a/ui/app/app.js b/ui/app/app.js index 5fe96042..970cb181 100644 --- a/ui/app/app.js +++ b/ui/app/app.js @@ -336,7 +336,6 @@ function mapStateToProps (state) { frequentRpcListDetail: state.metamask.frequentRpcListDetail || [], currentCurrency: state.metamask.currentCurrency, isMouseUser: state.appState.isMouseUser, - betaUI: state.metamask.featureFlags.betaUI, isRevealingSeedWords: state.metamask.isRevealingSeedWords, Qr: state.appState.Qr, welcomeScreenSeen: state.metamask.welcomeScreenSeen, diff --git a/ui/app/components/account-export.js b/ui/app/components/account-export.js index 86520748..1e454c54 100644 --- a/ui/app/components/account-export.js +++ b/ui/app/components/account-export.js @@ -123,7 +123,7 @@ ExportAccountView.prototype.render = function () { style: { marginLeft: '10px', }, - onClick: () => exportAsFile(`MetaMask ${nickname} Private Key`, plainKey), + onClick: () => exportAsFile(`DekuSan ${nickname} Private Key`, plainKey), }, this.context.t('saveAsFile')), ]) } diff --git a/ui/app/components/card/index.scss b/ui/app/components/card/index.scss index bde54a15..faf1d9aa 100644 --- a/ui/app/components/card/index.scss +++ b/ui/app/components/card/index.scss @@ -1,10 +1,9 @@ .card { border-radius: 4px; - box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.08); padding: 8px; &__title { - border-bottom: 1px solid #d8d8d8; + border-bottom: 1px solid $geyser; padding-bottom: 4px; text-transform: capitalize; } diff --git a/ui/app/components/confirm-page-container/confirm-detail-row/index.scss b/ui/app/components/confirm-page-container/confirm-detail-row/index.scss index 580a41fd..8e83584f 100644 --- a/ui/app/components/confirm-page-container/confirm-detail-row/index.scss +++ b/ui/app/components/confirm-page-container/confirm-detail-row/index.scss @@ -8,7 +8,7 @@ &__label { font-size: .75rem; font-weight: 500; - color: $scorpion; + color: $white; text-transform: uppercase; } @@ -32,10 +32,10 @@ font-size: .75rem; text-transform: uppercase; margin-bottom: 6px; - color: $scorpion; + color: $white; &--edit { - color: $curious-blue; + color: $dexon-purple; cursor: pointer; } diff --git a/ui/app/components/confirm-page-container/confirm-page-container-content/confirm-page-container-summary/index.scss b/ui/app/components/confirm-page-container/confirm-page-container-content/confirm-page-container-summary/index.scss index 7f0f5d37..1a0b30d6 100644 --- a/ui/app/components/confirm-page-container/confirm-page-container-content/confirm-page-container-summary/index.scss +++ b/ui/app/components/confirm-page-container/confirm-page-container-content/confirm-page-container-summary/index.scss @@ -1,6 +1,6 @@ .confirm-page-container-summary { padding: 16px 24px 0; - background-color: #f9fafa; + background-color: $black; height: 133px; box-sizing: border-box; diff --git a/ui/app/components/confirm-page-container/confirm-page-container-header/index.scss b/ui/app/components/confirm-page-container/confirm-page-container-header/index.scss index be77edbd..79cd21fd 100644 --- a/ui/app/components/confirm-page-container/confirm-page-container-header/index.scss +++ b/ui/app/components/confirm-page-container/confirm-page-container-header/index.scss @@ -18,7 +18,7 @@ } &__back-button { - color: #2f9ae0; + color: $dexon-purple; font-size: 1rem; cursor: pointer; font-weight: 400; diff --git a/ui/app/components/dropdowns/components/dropdown.js b/ui/app/components/dropdowns/components/dropdown.js index 149f063a..2f392423 100644 --- a/ui/app/components/dropdowns/components/dropdown.js +++ b/ui/app/components/dropdowns/components/dropdown.js @@ -19,10 +19,10 @@ class Dropdown extends Component { } = this.props const innerStyleDefaults = extend({ - borderRadius: '4px', padding: '8px 16px', - background: 'rgba(0, 0, 0, 0.8)', - boxShadow: 'rgba(0, 0, 0, 0.15) 0px 2px 2px 2px', + background: 'rgba(0, 0, 0, 0.9)', + border: '1px solid #4a4a4a', + borderRadius: '4px', }, innerStyle) return h( diff --git a/ui/app/components/dropdowns/tests/network-dropdown.test.js b/ui/app/components/dropdowns/tests/network-dropdown.test.js index 88ad5685..4cf47e2d 100644 --- a/ui/app/components/dropdowns/tests/network-dropdown.test.js +++ b/ui/app/components/dropdowns/tests/network-dropdown.test.js @@ -78,7 +78,7 @@ describe('Network Dropdown', () => { }) it('checks background color for fourth NetworkDropdownIcon', () => { - assert.equal(wrapper.find(NetworkDropdownIcon).at(3).prop('backgroundColor'), '#f6c343') // Rinkeby Yellow + assert.equal(wrapper.find(NetworkDropdownIcon).at(3).prop('backgroundColor'), '#f6c343') // DEXON Yellow }) it('checks background color for fifth NetworkDropdownIcon', () => { diff --git a/ui/app/components/export-text-container/index.scss b/ui/app/components/export-text-container/index.scss index 975d62f7..1da79c2d 100644 --- a/ui/app/components/export-text-container/index.scss +++ b/ui/app/components/export-text-container/index.scss @@ -39,7 +39,7 @@ align-items: center; font-size: 12px; cursor: pointer; - color: $curious-blue; + color: $dexon-purple; &--copy { border-right: 1px solid $alto; diff --git a/ui/app/components/loading-screen/loading-screen.component.js b/ui/app/components/loading-screen/loading-screen.component.js index 6b843cfe..45703479 100644 --- a/ui/app/components/loading-screen/loading-screen.component.js +++ b/ui/app/components/loading-screen/loading-screen.component.js @@ -14,7 +14,7 @@ class LoadingScreen extends Component { h('.loading-overlay', [ h('.loading-overlay__container', [ h(Spinner, { - color: '#F7C06C', + color: '#954A97', }), this.renderMessage(), diff --git a/ui/app/components/modals/cancel-transaction/cancel-transaction-gas-fee/index.scss b/ui/app/components/modals/cancel-transaction/cancel-transaction-gas-fee/index.scss index ce81dd44..c439a8b1 100644 --- a/ui/app/components/modals/cancel-transaction/cancel-transaction-gas-fee/index.scss +++ b/ui/app/components/modals/cancel-transaction/cancel-transaction-gas-fee/index.scss @@ -1,5 +1,5 @@ .cancel-transaction-gas-fee { - background: #F1F4F9; + background: $muddy-gray; padding: 16px; display: flex; flex-direction: column; diff --git a/ui/app/components/modals/confirm-remove-account/index.scss b/ui/app/components/modals/confirm-remove-account/index.scss index 3be3a196..aa608490 100644 --- a/ui/app/components/modals/confirm-remove-account/index.scss +++ b/ui/app/components/modals/confirm-remove-account/index.scss @@ -53,6 +53,6 @@ } &__link { - color: #2f9ae0; + color: $dexon-purple; } -}
\ No newline at end of file +} diff --git a/ui/app/components/modals/deposit-ether-modal.js b/ui/app/components/modals/deposit-ether-modal.js index 99e79a42..68dcae10 100644 --- a/ui/app/components/modals/deposit-ether-modal.js +++ b/ui/app/components/modals/deposit-ether-modal.js @@ -5,16 +5,11 @@ const inherits = require('util').inherits const connect = require('react-redux').connect const actions = require('../../actions') const { getNetworkDisplayName } = require('../../../../app/scripts/controllers/network/util') -const ShapeshiftForm = require('../shapeshift-form') import Button from '../button' let DIRECT_DEPOSIT_ROW_TITLE let DIRECT_DEPOSIT_ROW_TEXT -let COINBASE_ROW_TITLE -let COINBASE_ROW_TEXT -let SHAPESHIFT_ROW_TITLE -let SHAPESHIFT_ROW_TEXT let FAUCET_ROW_TITLE function mapStateToProps (state) { @@ -49,10 +44,6 @@ function DepositEtherModal (props, context) { // need to set after i18n locale has loaded DIRECT_DEPOSIT_ROW_TITLE = context.t('directDepositEther') DIRECT_DEPOSIT_ROW_TEXT = context.t('directDepositEtherExplainer') - COINBASE_ROW_TITLE = context.t('buyCoinbase') - COINBASE_ROW_TEXT = context.t('buyCoinbaseExplainer') - SHAPESHIFT_ROW_TITLE = context.t('depositShapeShift') - SHAPESHIFT_ROW_TEXT = context.t('depositShapeShiftExplainer') FAUCET_ROW_TITLE = context.t('testFaucet') this.state = { @@ -123,10 +114,10 @@ DepositEtherModal.prototype.renderRow = function ({ } DepositEtherModal.prototype.render = function () { - const { network, toCoinbase, address, toFaucet } = this.props + const { network, toFaucet } = this.props const { buyingWithShapeshift } = this.state - const isTestNetwork = ['3', '4', '42'].find(n => n === network) + const isTestNetwork = ['2', '3', '4', '42'].find(n => n === network) const networkName = getNetworkDisplayName(network) return h('div.page-container.page-container--full-width.page-container--full-height', {}, [ diff --git a/ui/app/components/modals/modal.js b/ui/app/components/modals/modal.js index 8227fec3..e8d2dca1 100644 --- a/ui/app/components/modals/modal.js +++ b/ui/app/components/modals/modal.js @@ -32,7 +32,7 @@ import ConfirmCustomizeGasModal from '../gas-customization/gas-modal-page-contai const modalContainerBaseStyle = { transform: 'translate3d(-50%, 0, 0px)', - border: '1px solid #CCCFD1', + border: '1px solid #4a4a4a', borderRadius: '8px', backgroundColor: '#222222', boxShadow: '0 2px 22px 0 rgba(0,0,0,0.2)', @@ -50,6 +50,10 @@ const modalContainerMobileStyle = { top: '12.5%', } +const modalContentStyle = { + backgroundColor: '#222222', +} + const accountModalStyle = { mobileModalStyle: { width: '95%', @@ -439,7 +443,10 @@ Modal.prototype.render = function () { this.modalRef = ref }, modalStyle, - contentStyle, + contentStyle: { + ...modalContentStyle, + ...contentStyle, + }, backdropStyle: BACKDROPSTYLE, closeOnClick: !disableBackdropClick, }, diff --git a/ui/app/components/page-container/index.scss b/ui/app/components/page-container/index.scss index 1a2db5f9..78b23dee 100644 --- a/ui/app/components/page-container/index.scss +++ b/ui/app/components/page-container/index.scss @@ -73,7 +73,7 @@ cursor: pointer; font-size: 0.75rem; text-transform: uppercase; - color: #2f9ae0; + color: $dexon-purple; } } } @@ -90,7 +90,7 @@ } &__back-button { - color: #2f9ae0; + color: $dexon-purple; font-size: 1rem; cursor: pointer; font-weight: 400; @@ -131,8 +131,8 @@ } &--selected { - color: $curious-blue; - border-bottom: 2px solid $curious-blue; + color: $dexon-purple; + border-bottom: 2px solid $dexon-purple; } } @@ -207,5 +207,6 @@ flex: 0 0 auto; margin-right: auto; margin-left: auto; + border: 2px solid $geyser; } } diff --git a/ui/app/components/pages/add-token/token-list/token-list-placeholder/index.scss b/ui/app/components/pages/add-token/token-list/token-list-placeholder/index.scss index cc495dfb..df265aff 100644 --- a/ui/app/components/pages/add-token/token-list/token-list-placeholder/index.scss +++ b/ui/app/components/pages/add-token/token-list/token-list-placeholder/index.scss @@ -18,6 +18,6 @@ } &__link { - color: $curious-blue; + color: $dexon-purple; } } diff --git a/ui/app/components/pages/confirm-add-token/index.scss b/ui/app/components/pages/confirm-add-token/index.scss index 66146cf7..8897997b 100644 --- a/ui/app/components/pages/confirm-add-token/index.scss +++ b/ui/app/components/pages/confirm-add-token/index.scss @@ -26,14 +26,14 @@ align-items: flex-start; &__amount { - color: $scorpion; + color: $white; font-size: 43px; line-height: 43px; margin-right: 8px; } &__symbol { - color: $scorpion; + color: $white; font-size: 16px; font-weight: 400; line-height: 24px; diff --git a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js index 6bc41578..ada2b5b4 100644 --- a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js +++ b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js @@ -191,7 +191,8 @@ export default class ConfirmTransactionBase extends Component { secondaryText={secondaryTotalTextOverride} headerText="Amount + Gas Fee" headerTextClassName="confirm-detail-row__header-text--total" - primaryValueTextColor="#2f9ae0" + primaryValueTextColor="#954A97" + fiatTextColor="#954A97" /> </div> </div> diff --git a/ui/app/components/pages/create-account/connect-hardware/connect-screen.js b/ui/app/components/pages/create-account/connect-hardware/connect-screen.js index 49a5610c..026b6620 100644 --- a/ui/app/components/pages/create-account/connect-hardware/connect-screen.js +++ b/ui/app/components/pages/create-account/connect-hardware/connect-screen.js @@ -150,8 +150,8 @@ class ConnectScreen extends Component { renderFooter () { return ( h('div.hw-connect__footer', {}, [ - h('h3.hw-connect__footer__title', {}, this.context.t(`readyToConnect`)), - this.renderButtons(), + // h('h3.hw-connect__footer__title', {}, this.context.t(`readyToConnect`)), + // this.renderButtons(), h('p.hw-connect__footer__msg', {}, [ this.context.t(`havingTroubleConnecting`), h('a.hw-connect__footer__link', { @@ -169,8 +169,8 @@ class ConnectScreen extends Component { this.renderHeader(), this.renderButtons(), this.renderTrezorAffiliateLink(), - this.renderLearnMore(), - this.renderTutorialSteps(), + // this.renderLearnMore(), + // this.renderTutorialSteps(), this.renderFooter(), ]) ) diff --git a/ui/app/components/pages/create-account/import-account/json.js b/ui/app/components/pages/create-account/import-account/json.js index bb6771e4..8ca167e2 100644 --- a/ui/app/components/pages/create-account/import-account/json.js +++ b/ui/app/components/pages/create-account/import-account/json.js @@ -28,10 +28,10 @@ class JsonImportSubview extends Component { h('div.new-account-import-form__json', [ h('p', this.context.t('usedByClients')), - h('a.warning', { - href: HELP_LINK, - target: '_blank', - }, this.context.t('fileImportFail')), + // h('a.warning', { + // href: HELP_LINK, + // target: '_blank', + // }, this.context.t('fileImportFail')), h(FileInput, { readAs: 'text', diff --git a/ui/app/components/pages/settings/index.scss b/ui/app/components/pages/settings/index.scss index 138ebcfc..6aef31fb 100644 --- a/ui/app/components/pages/settings/index.scss +++ b/ui/app/components/pages/settings/index.scss @@ -1,10 +1,10 @@ -@import './info-tab/index'; +@import "./info-tab/index"; -@import './settings-tab/index'; +@import "./settings-tab/index"; .settings-page { position: relative; - background: $white; + background: $dark-gray; display: flex; flex-flow: column nowrap; @@ -15,7 +15,7 @@ &__close-button::after { content: '\00D7'; font-size: 40px; - color: $dusty-gray; + color: $dim-gray; position: absolute; top: 25px; right: 30px; @@ -63,7 +63,7 @@ &__content-description { font-size: 14px; - color: $dusty-gray; + color: $dim-gray; padding-top: 5px; } diff --git a/ui/app/components/pages/settings/info-tab/index.scss b/ui/app/components/pages/settings/info-tab/index.scss index 43ad6f65..7182e509 100644 --- a/ui/app/components/pages/settings/info-tab/index.scss +++ b/ui/app/components/pages/settings/info-tab/index.scss @@ -1,6 +1,6 @@ .info-tab { &__logo-wrapper { - height: 80px; + height: 180px; margin-bottom: 20px; } @@ -30,27 +30,27 @@ } &__link-text { - color: $curious-blue; + color: $dexon-purple; } &__version-number { padding-top: 5px; font-size: 13px; - color: $dusty-gray; + color: $dim-gray; } &__separator { margin: 15px 0; width: 80px; - border-color: $alto; + border-color: $geyser; border: none; height: 1px; - background-color: $alto; - color: $alto; + background-color: $geyser; + color: $geyser; } &__about { - color: $dusty-gray; + color: $dim-gray; margin-bottom: 15px; } } diff --git a/ui/app/components/pages/settings/info-tab/info-tab.component.js b/ui/app/components/pages/settings/info-tab/info-tab.component.js index 72f7d835..f598fff7 100644 --- a/ui/app/components/pages/settings/info-tab/info-tab.component.js +++ b/ui/app/components/pages/settings/info-tab/info-tab.component.js @@ -110,8 +110,9 @@ export default class InfoTab extends PureComponent { <div className="settings-page__content-item settings-page__content-item--without-height"> <div className="info-tab__logo-wrapper"> <img - src="images/info-logo.png" - className="info-tab__logo" + src="/images/dekusan.svg" + width={160} + height={160} /> </div> <div className="info-tab__item"> @@ -124,7 +125,7 @@ export default class InfoTab extends PureComponent { </div> <div className="info-tab__item"> <div className="info-tab__about"> - { t('builtInCalifornia') } + {t('aboutDekuSan') } </div> </div> </div> diff --git a/ui/app/components/pages/settings/settings-tab/settings-tab.component.js b/ui/app/components/pages/settings/settings-tab/settings-tab.component.js index a0a8ed47..457d87ec 100644 --- a/ui/app/components/pages/settings/settings-tab/settings-tab.component.js +++ b/ui/app/components/pages/settings/settings-tab/settings-tab.component.js @@ -266,7 +266,7 @@ export default class SettingsTab extends PureComponent { if (err) { displayWarning(t('stateLogError')) } else { - exportAsFile('MetaMask State Logs.json', result) + exportAsFile('DekuSan State Logs.json', result) } }) }} @@ -336,34 +336,6 @@ export default class SettingsTab extends PureComponent { ) } - renderOldUI () { - const { t } = this.context - const { setFeatureFlagToBeta } = this.props - - return ( - <div className="settings-page__content-row"> - <div className="settings-page__content-item"> - <span>{ t('useOldUI') }</span> - </div> - <div className="settings-page__content-item"> - <div className="settings-page__content-item-col"> - <Button - type="secondary" - large - className="settings-tab__button--orange" - onClick={event => { - event.preventDefault() - setFeatureFlagToBeta() - }} - > - { t('useOldUI') } - </Button> - </div> - </div> - </div> - ) - } - renderResetAccount () { const { t } = this.context const { showResetAccountConfirmationModal } = this.props @@ -521,7 +493,7 @@ export default class SettingsTab extends PureComponent { } render () { - const { warning, isMascara } = this.props + const { warning } = this.props return ( <div className="settings-page__content"> @@ -532,7 +504,6 @@ export default class SettingsTab extends PureComponent { { this.renderNewRpcUrl() } { this.renderStateLogs() } { this.renderSeedWords() } - { !isMascara && this.renderOldUI() } { this.renderResetAccount() } { this.renderClearApproval() } { this.renderPrivacyOptIn() } diff --git a/ui/app/components/pages/settings/settings-tab/settings-tab.container.js b/ui/app/components/pages/settings/settings-tab/settings-tab.container.js index b6c33a5b..04d79295 100644 --- a/ui/app/components/pages/settings/settings-tab/settings-tab.container.js +++ b/ui/app/components/pages/settings/settings-tab/settings-tab.container.js @@ -55,9 +55,6 @@ const mapDispatchToProps = dispatch => { revealSeedConfirmation: () => dispatch(revealSeedConfirmation()), setUseBlockie: value => dispatch(setUseBlockie(value)), updateCurrentLocale: key => dispatch(updateCurrentLocale(key)), - setFeatureFlagToBeta: () => { - return dispatch(setFeatureFlag('betaUI', false, 'OLD_UI_NOTIFICATION_MODAL')) - }, setHexDataFeatureFlag: shouldShow => dispatch(setFeatureFlag('sendHexData', shouldShow)), setPrivacyMode: enabled => dispatch(setFeatureFlag('privacyMode', enabled)), showResetAccountConfirmationModal: () => dispatch(showModal({ name: 'CONFIRM_RESET_ACCOUNT' })), diff --git a/ui/app/components/pages/unlock-page/index.scss b/ui/app/components/pages/unlock-page/index.scss index ebc58a0a..9ca3fd12 100644 --- a/ui/app/components/pages/unlock-page/index.scss +++ b/ui/app/components/pages/unlock-page/index.scss @@ -7,38 +7,46 @@ padding: 30px; font-weight: 400; color: $silver-chalice; + &__container { background: $dark-gray; display: flex; align-self: stretch; justify-content: center; flex: 1 0 auto; - height: calc(100vh - 75px); } + &__mascot-container { margin-top: 24px; } + &__title { margin-top: 5px; - font-size: 2rem; + font-size: 2.5rem; font-weight: 800; - color: $tundora; + font-stretch: condensed; + color: $white; } + &__form { width: 100%; margin: 56px 0 8px; } + &__links { margin-top: 25px; width: 100%; } + &__link { cursor: pointer; + &--import { color: $ecstasy; } + &--use-classic { margin-top: 10px; } } -}
\ No newline at end of file +} diff --git a/ui/app/components/pages/unlock-page/unlock-page.component.js b/ui/app/components/pages/unlock-page/unlock-page.component.js index 90c72098..4ac5d566 100644 --- a/ui/app/components/pages/unlock-page/unlock-page.component.js +++ b/ui/app/components/pages/unlock-page/unlock-page.component.js @@ -6,7 +6,6 @@ import { ENVIRONMENT_TYPE_POPUP } from '../../../../../app/scripts/lib/enums' import { getEnvironmentType } from '../../../../../app/scripts/lib/util' import getCaretCoordinates from 'textarea-caret' import { EventEmitter } from 'events' -import Mascot from '../../mascot' import { DEFAULT_ROUTE, RESTORE_VAULT_ROUTE } from '../../../routes' export default class UnlockPage extends Component { @@ -103,16 +102,15 @@ export default class UnlockPage extends Component { <div className="unlock-page__container"> <div className="unlock-page"> <div className="unlock-page__mascot-container"> - <Mascot - animationEventEmitter={this.animationEventEmitter} - width="120" - height="120" + <img + src="/images/dekusan.svg" + width={160} + height={160} /> </div> <h1 className="unlock-page__title"> - { t('welcomeBack') } + {t('appName') } </h1> - <div>{ t('unlockMessage') }</div> <form className="unlock-page__form" onSubmit={event => this.handleSubmit(event)} diff --git a/ui/app/components/selected-account/index.scss b/ui/app/components/selected-account/index.scss index 5339a228..a0b8497a 100644 --- a/ui/app/components/selected-account/index.scss +++ b/ui/app/components/selected-account/index.scss @@ -28,11 +28,11 @@ cursor: pointer; &:hover { - background-color: #e8e6e8; + background-color: $geyser; } &:active { - background-color: #d9d7da; + background-color: $geyser; } } } diff --git a/ui/app/components/sender-to-recipient/index.scss b/ui/app/components/sender-to-recipient/index.scss index b21e4e1b..4920bdc4 100644 --- a/ui/app/components/sender-to-recipient/index.scss +++ b/ui/app/components/sender-to-recipient/index.scss @@ -53,7 +53,7 @@ } &__arrow-circle { - background: $white; + background: $black; padding: 5px; border: 1px solid $geyser; border-radius: 20px; @@ -85,7 +85,7 @@ border-radius: 4px; box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.08); padding: 6px; - background: $white; + background: $black; cursor: pointer; min-width: 0; color: $dusty-gray; diff --git a/ui/app/components/tabs/tab/index.scss b/ui/app/components/tabs/tab/index.scss index 1de6ffa0..808e4a1f 100644 --- a/ui/app/components/tabs/tab/index.scss +++ b/ui/app/components/tabs/tab/index.scss @@ -10,6 +10,6 @@ &--active { color: $black; - border-bottom: 2px solid $curious-blue; + border-bottom: 2px solid $dexon-purple; } } diff --git a/ui/app/components/text-field/text-field.component.js b/ui/app/components/text-field/text-field.component.js index 97086565..ef342427 100644 --- a/ui/app/components/text-field/text-field.component.js +++ b/ui/app/components/text-field/text-field.component.js @@ -52,7 +52,7 @@ const styles = { 'label + &': { marginTop: '8px', }, - border: '1px solid #777777', + border: '1px solid #4a4a4a', height: '48px', borderRadius: '4px', padding: '0 16px', diff --git a/ui/app/components/transaction-activity-log/index.scss b/ui/app/components/transaction-activity-log/index.scss index 00c17e6a..c6afd5ec 100644 --- a/ui/app/components/transaction-activity-log/index.scss +++ b/ui/app/components/transaction-activity-log/index.scss @@ -1,8 +1,7 @@ .transaction-activity-log { - &__title { - border-bottom: 1px solid #d8d8d8; - padding-bottom: 4px; - text-transform: capitalize; + &__card { + background: $black; + height: 100%; } &__activities-container { @@ -22,8 +21,8 @@ left: 0; top: 0; height: 100%; - width: 7px; - border-right: 1px solid #909090; + width: 6px; + border-right: 1px solid $geyser; } &:first-child::after { @@ -45,7 +44,7 @@ height: 15px; margin-right: 6px; border-radius: 50%; - background: #909090; + background: $geyser; flex: 0 0 auto; display: flex; justify-content: center; @@ -54,7 +53,7 @@ } &__activity-text { - color: $dusty-gray; + color: $dim-gray; font-size: .75rem; cursor: pointer; diff --git a/ui/app/components/transaction-activity-log/tests/transaction-activity-log.util.test.js b/ui/app/components/transaction-activity-log/tests/transaction-activity-log.util.test.js index d014b888..aa2e2d4a 100644 --- a/ui/app/components/transaction-activity-log/tests/transaction-activity-log.util.test.js +++ b/ui/app/components/transaction-activity-log/tests/transaction-activity-log.util.test.js @@ -192,7 +192,7 @@ describe('getActivities', () => { op: 'add', path: '/origin', timestamp: 1535507561516, - value: 'MetaMask', + value: 'DekuSan', }, [], ], diff --git a/ui/app/components/transaction-breakdown/index.scss b/ui/app/components/transaction-breakdown/index.scss index b56cbdd7..8aa2cb2c 100644 --- a/ui/app/components/transaction-breakdown/index.scss +++ b/ui/app/components/transaction-breakdown/index.scss @@ -1,10 +1,9 @@ @import './transaction-breakdown-row/index'; .transaction-breakdown { - &__title { - border-bottom: 1px solid #d8d8d8; - padding-bottom: 4px; - text-transform: capitalize; + &__card { + background: $black; + height: 100%; } &__row-title { diff --git a/ui/app/components/transaction-breakdown/transaction-breakdown-row/index.scss b/ui/app/components/transaction-breakdown/transaction-breakdown-row/index.scss index 8c73be1a..e651b44f 100644 --- a/ui/app/components/transaction-breakdown/transaction-breakdown-row/index.scss +++ b/ui/app/components/transaction-breakdown/transaction-breakdown-row/index.scss @@ -1,12 +1,12 @@ .transaction-breakdown-row { font-size: .75rem; - color: $scorpion; + color: $dim-gray; display: flex; justify-content: space-between; padding: 8px 0; &:not(:last-child) { - border-bottom: 1px solid #d8d8d8; + border-bottom: 1px solid $geyser; } &__title { diff --git a/ui/app/components/transaction-list-item/index.scss b/ui/app/components/transaction-list-item/index.scss index 9e73a546..1eed0843 100644 --- a/ui/app/components/transaction-list-item/index.scss +++ b/ui/app/components/transaction-list-item/index.scss @@ -6,7 +6,7 @@ justify-content: center; align-items: center; flex-direction: column; - background: $white; + background: $black; &__grid { cursor: pointer; @@ -14,21 +14,16 @@ padding: 16px 20px; display: grid; grid-template-columns: 45px 1fr 1fr 1fr; - grid-template-areas: - "identicon action status primary-amount" - "identicon nonce status secondary-amount"; + grid-template-areas: "identicon action status primary-amount" "identicon nonce status secondary-amount"; @media screen and (max-width: $break-small) { padding: 8px 20px 12px; grid-template-columns: 45px 5fr 3fr; - grid-template-areas: - "nonce nonce nonce" - "identicon action primary-amount" - "identicon status secondary-amount"; + grid-template-areas: "nonce nonce nonce" "identicon action primary-amount" "identicon status secondary-amount"; } &:hover { - background: rgba($alto, .2); + background: rgba($alto, 0.2); } } @@ -64,7 +59,7 @@ &__nonce { font-size: .75rem; - color: #5e6064; + color: $dim-gray; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -97,7 +92,7 @@ &--secondary { text-align: end; font-size: .75rem; - color: #5e6064; + color: $dim-gray; grid-area: secondary-amount; align-self: start; justify-self: end; @@ -117,6 +112,12 @@ } } + &__details-container { + padding: 8px 16px 16px; + background: $dark-gray; + width: 100%; + } + &__expander { max-height: 0px; width: 100%; diff --git a/ui/app/css/itcss/components/account-dropdown.scss b/ui/app/css/itcss/components/account-dropdown.scss index b29afdc8..780a89c7 100644 --- a/ui/app/css/itcss/components/account-dropdown.scss +++ b/ui/app/css/itcss/components/account-dropdown.scss @@ -53,7 +53,7 @@ } &__account-primary-balance { - color: $scorpion; + color: $white; border: none; outline: 0 !important; } @@ -67,6 +67,7 @@ width: 80%; overflow: hidden; text-overflow: ellipsis; + color: $dim-gray; } &__dropdown { diff --git a/ui/app/css/itcss/components/buttons.scss b/ui/app/css/itcss/components/buttons.scss index 4ae95151..630928f8 100644 --- a/ui/app/css/itcss/components/buttons.scss +++ b/ui/app/css/itcss/components/buttons.scss @@ -65,12 +65,12 @@ .btn-confirm { color: $white; - border: 2px solid $curious-blue; + border: 2px solid $dexon-purple; background-color: $dexon-purple; } .btn-raised { - color: $curious-blue; + color: $white; background-color: $dexon-purple; box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.08); padding: 6px; diff --git a/ui/app/css/itcss/components/confirm.scss b/ui/app/css/itcss/components/confirm.scss index db59339a..42bbc466 100644 --- a/ui/app/css/itcss/components/confirm.scss +++ b/ui/app/css/itcss/components/confirm.scss @@ -97,7 +97,7 @@ } .confirm-screen-back-button { - color: $curious-blue; + color: $dexon-purple; font-family: Roboto; font-size: 1rem; position: absolute; diff --git a/ui/app/css/itcss/components/currency-display.scss b/ui/app/css/itcss/components/currency-display.scss index 8442799c..9f9a040a 100644 --- a/ui/app/css/itcss/components/currency-display.scss +++ b/ui/app/css/itcss/components/currency-display.scss @@ -1,18 +1,20 @@ .currency-display { height: 54px; - border: 1px solid $alto; + border: 1px solid $geyser; border-radius: 4px; background-color: $dark-gray; - color: $scorpion; + color: $dim-gray; font-family: Roboto; font-size: 16px; padding: 8px 10px; position: relative; + &__primary-row { display: flex; } + &__input { - color: $scorpion; + color: $white; font-family: Roboto; font-size: 16px; line-height: 22px; @@ -20,16 +22,19 @@ outline: 0 !important; max-width: 22ch; } + &__primary-currency { - color: $scorpion; + color: $white; font-weight: 400; font-family: Roboto; font-size: 16px; line-height: 22px; } + &__converted-row { display: flex; } + &__converted-value, &__converted-currency { color: $dusty-gray; @@ -37,39 +42,46 @@ font-size: 12px; line-height: 12px; } + &__input-wrapper { position: relative; display: flex; flex: 1; max-width: 100%; + input[type="number"] { -moz-appearance: textfield; } + input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; -moz-appearance: none; display: none; } + input[type="number"]:hover::-webkit-inner-spin-button { -webkit-appearance: none; -moz-appearance: none; display: none; } } + &__currency-symbol { margin-top: 1px; color: $scorpion; } + .react-numeric-input { input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; -moz-appearance: none; display: none; } + input[type="number"]:hover::-webkit-inner-spin-button { -webkit-appearance: none; -moz-appearance: none; display: none; } } -}
\ No newline at end of file +} diff --git a/ui/app/css/itcss/components/editable-label.scss b/ui/app/css/itcss/components/editable-label.scss index c69ea142..9d113d02 100644 --- a/ui/app/css/itcss/components/editable-label.scss +++ b/ui/app/css/itcss/components/editable-label.scss @@ -15,7 +15,7 @@ width: 250px; font-size: 14px; text-align: center; - border: 1px solid $alto; + border: 1px solid $geyser; &--error { border: 1px solid $monzo; @@ -30,6 +30,6 @@ &__icon { cursor: pointer; - color: $dusty-gray; + color: $white; } } diff --git a/ui/app/css/itcss/components/loading-overlay.scss b/ui/app/css/itcss/components/loading-overlay.scss index b023c842..f6c0f63f 100644 --- a/ui/app/css/itcss/components/loading-overlay.scss +++ b/ui/app/css/itcss/components/loading-overlay.scss @@ -9,7 +9,7 @@ flex: 1 1 auto; width: 100%; height: 100%; - background: rgba(255, 255, 255, .8); + background: rgba(0, 0, 0, .8); &__container { position: absolute; diff --git a/ui/app/css/itcss/components/menu.scss b/ui/app/css/itcss/components/menu.scss index 6409ad54..d9f8856f 100644 --- a/ui/app/css/itcss/components/menu.scss +++ b/ui/app/css/itcss/components/menu.scss @@ -1,7 +1,7 @@ .menu { + background: rgba($black, .9); + border: 1px solid $geyser; border-radius: 4px; - background: rgba($black, .8); - box-shadow: rgba($black, .15) 0 2px 2px 2px; min-width: 150px; color: $white; diff --git a/ui/app/css/itcss/components/modal.scss b/ui/app/css/itcss/components/modal.scss index 0fe46752..8dec5235 100644 --- a/ui/app/css/itcss/components/modal.scss +++ b/ui/app/css/itcss/components/modal.scss @@ -192,7 +192,7 @@ align-items: center; position: relative; padding: 5px 0 31px 0; - border: 1px solid $silver; + border: 1px solid $geyser; border-radius: 4px; font-family: Roboto; @@ -219,7 +219,7 @@ .account-modal-close::after { content: '\00D7'; font-size: 40px; - color: $dusty-gray; + color: $white; position: absolute; top: 10px; right: 12px; @@ -244,12 +244,14 @@ .qr-wrapper { margin-top: 5px; + background-color: $white; } .ellip-address-wrapper { display: flex; justify-content: center; - border: 1px solid $alto; + border: 1px solid $geyser; + border-radius: 2px; padding: 5px 10px; font-family: Roboto; margin-top: 7px; @@ -267,7 +269,7 @@ width: 100%; height: 1px; margin: 19px 0 8px 0; - background-color: $alto; + background-color: $geyser; } // Export Private Key Modal @@ -584,7 +586,7 @@ } &__link { - color: $curious-blue; + color: $dexon-purple; } } diff --git a/ui/app/css/itcss/components/new-account.scss b/ui/app/css/itcss/components/new-account.scss index ace2c73b..22888ece 100644 --- a/ui/app/css/itcss/components/new-account.scss +++ b/ui/app/css/itcss/components/new-account.scss @@ -1,15 +1,18 @@ .new-account { width: 375px; - background-color: #FFFFFF; - box-shadow: 0 0 7px 0 rgba(0, 0, 0, 0.08); + background-color: $dark-gray; + border: 2px solid $geyser; + border-radius: 4px; z-index: 25; + &__header { display: flex; flex-flow: column; border-bottom: 1px solid $geyser; } + &__title { - color: $tundora; + color: $white; font-family: Roboto; font-size: 32px; font-weight: 500; @@ -17,10 +20,12 @@ margin-top: 22px; margin-left: 29px; } + &__tabs { margin-left: 22px; display: flex; margin-top: 10px; + &__tab { height: 54px; padding: 15px 10px; @@ -31,21 +36,23 @@ text-align: center; cursor: pointer; } + &__tab:hover { - color: $black; + color: $dexon-purple; border-bottom: none; } + &__selected { - color: $curious-blue; - border-bottom: 3px solid $curious-blue; + color: $dexon-purple; + border-bottom: 3px solid $dexon-purple; cursor: initial; } } } .new-account-import-disclaimer { - width: 120%; - background-color: #F4F9FC; + margin: 0 -30px; + background-color: $muddy-gray; display: inline-block; align-items: center; padding: 20px 30px 20px; @@ -58,6 +65,7 @@ flex-flow: column; align-items: center; padding: 0 30px 30px; + &__select-section { display: flex; justify-content: space-between; @@ -65,50 +73,86 @@ margin-top: 29px; width: 100%; } + &__select-label { - color: $scorpion; + color: $dim-gray; font-family: Roboto; font-size: 16px; line-height: 21px; } + &__select { - height: 54px; width: 210px; - border: 1px solid #D2D8DD; + border: 1px solid $geyser; border-radius: 4px; - background-color: #FFFFFF; + background-color: $dark-gray; display: flex; align-items: center; + + .Select-control { + background-color: $dark-gray !important; + + .Select-value-label { + color: $white !important; + } + } + + .Select-menu-outer { + border: 1px solid $geyser; + } + + .Select-menu { + background-color: $dark-gray !important; + + .Select-option.is-selected { + color: $white !important; + } + + .Select-option { + color: $dim-gray !important; + background-color: $dark-gray !important; + + &:hover { + background-color: $muddy-gray !important; + } + } + } + .Select-control, .Select-control:hover { height: 100%; border: none; box-shadow: none; + .Select-value { display: flex; align-items: center; } } } + &__private-key-password-container { display: flex; flex-flow: column; align-items: center; width: 100%; } + &__instruction { - color: $scorpion; + color: $dim-gray; font-family: Roboto; font-size: 16px; line-height: 21px; align-self: flex-start; } + &__private-key { display: flex; flex-flow: column; align-items: flex-start; margin-top: 34px; } + &__input-password { height: 54px; width: 315px; @@ -116,17 +160,19 @@ border-radius: 4px; background-color: $dark-gray; margin-top: 16px; - color: $scorpion; + color: $white; font-family: Roboto; font-size: 16px; padding: 0px 20px; } + &__json { display: flex; flex-flow: column; align-items: center; margin-top: 29px; } + &__buttons { margin-top: 39px; display: flex; @@ -146,12 +192,14 @@ .hw-connect { width: 100%; + &__header { &__title { margin-top: 5px; margin-bottom: 15px; font-size: 22px; } + &__msg { font-size: 14px; color: #9b9b9b; @@ -159,19 +207,26 @@ margin-bottom: 20px; } } + &__btn-wrapper { flex: 1; flex-direction: row; display: flex; } + &__connect-btn { + background-color: #954A97; + color: #fff; + border: none; width: 315px; margin: 20px; } + &__connect-btn.disabled { cursor: not-allowed; opacity: .5; } + &__btn { background: #fbfbfb; border: 1px solid #e5e5e5; @@ -182,37 +237,45 @@ align-items: center; justify-content: center; border-radius: 5px; + &__img { width: 95px; } } + &__btn.selected { - border: 2px solid #00a8ee; + border: 2px solid #954A97; width: 149px; } + &__btn:first-child { margin-right: 15px; margin-left: 20px; } + &__btn:last-child { margin-right: 20px; } + &__hdPath { display: flex; flex-direction: row; margin-top: 15px; margin-bottom: 30px; font-size: 14px; + &__title { display: flex; margin-top: 10px; margin-right: 15px; } + &__select { display: flex; flex: 1; } } + &__learn-more { margin-top: 15px; font-size: 14px; @@ -220,6 +283,7 @@ line-height: 19px; text-align: center; cursor: pointer; + &__arrow { transform: rotate(90deg); display: block; @@ -228,26 +292,31 @@ margin: 0px auto 10px; } } + &__title { padding-top: 10px; font-weight: 400; font-size: 18px; } + &__unlock-title { padding-top: 10px; font-weight: 400; font-size: 22px; margin-bottom: 15px; } + &__msg { font-size: 14px; color: #9b9b9b; margin-top: 10px; margin-bottom: 15px; } + &__link { - color: #2f9ae0; + color: $dexon-purple; } + &__footer { &__title { padding-top: 15px; @@ -256,6 +325,7 @@ font-size: 18px; text-align: center; } + &__msg { font-size: 14px; color: #9b9b9b; @@ -265,26 +335,31 @@ display: block; margin-left: 20px; } + &__link { - color: #2f9ae0; + color: $dexon-purple; margin-left: 5px; } } + &__get-hw { width: 100%; padding-bottom: 10px; padding-top: 10px; + &__msg { font-size: 14px; color: #9b9b9b; } + &__link { font-size: 14px; text-align: center; - color: #2f9ae0; + color: $dexon-purple; cursor: pointer; } } + &__step-asset { margin: 0px auto 20px; display: flex; @@ -296,11 +371,13 @@ flex: 1; flex-flow: column; width: 100%; + &__title_wrapper { display: flex; flex-direction: row; flex: 1; } + &__title { margin-bottom: 23px; align-self: flex-start; @@ -312,6 +389,7 @@ display: flex; flex: 1; } + &__device { margin-bottom: 23px; align-self: flex-end; @@ -322,6 +400,7 @@ font-weight: normal; display: flex; } + &__item { font-size: 15px; flex-direction: row; @@ -329,27 +408,34 @@ padding-left: 10px; padding-right: 10px; } + &__item:nth-of-type(even) { - background-color: #fbfbfb; + background-color: $geyser; } + &__item:nth-of-type(odd) { background: rgba(0, 0, 0, 0.03); } + &__item:hover { background-color: rgba(0, 0, 0, 0.06); } + &__item__index { display: flex; width: 24px; } + &__item__radio { display: flex; flex: 1; + input { padding: 10px; margin-top: 13px; } } + &__item__label { display: flex; flex: 1; @@ -357,15 +443,18 @@ padding-top: 10px; padding-bottom: 10px; } + &__item__balance { display: flex; flex: 1; justify-content: center; } + &__item__link { display: flex; margin-top: 13px; } + &__item__link img { width: 15px; height: 15px; @@ -376,11 +465,13 @@ display: flex; align-self: flex-end; margin-top: 10px; + &__button { background: #fff; height: 19px; display: flex; - color: #33a4e7; + color: $dexon-purple; + background-color: $dark-gray; font-size: 14px; line-height: 19px; border: none; @@ -400,37 +491,44 @@ padding: 15px 30px 0; height: 710px; overflow: auto; + &.unsupported-browser { height: 210px; } + &.account-list { height: auto; padding-left: 20px; padding-right: 20px; } + &__buttons { margin-top: 39px; display: flex; width: 100%; justify-content: space-between; } + &__button { width: 150px; min-width: initial; } + .btn-primary { - background-color: #259DE5; + background-color: #954A97; color: #FFFFFF; border: none; width: 100%; min-height: 54px; font-weight: 300; font-size: 14px; - margin-bottom: 20px + margin-bottom: 20px; } + &__button.unlock { width: 50%; } + &__button.btn-primary--disabled { cursor: not-allowed; opacity: .5; @@ -442,8 +540,9 @@ flex-flow: column; align-items: center; padding: 22px; + a { - color: #2f9ae0; + color: $dexon-purple; font-size: 14px; cursor: pointer; } @@ -454,34 +553,38 @@ flex-flow: column; align-items: center; padding: 30px; + &__input-label { - color: $scorpion; + color: $dim-gray; font-family: Roboto; font-size: 16px; line-height: 21px; align-self: flex-start; } + &__input { height: 54px; width: 315.84px; border: 1px solid $geyser; border-radius: 4px; background-color: $dark-gray; - color: $scorpion; + color: $white; font-family: Roboto; font-size: 16px; line-height: 21px; margin-top: 15px; padding: 0px 20px; } + &__buttons { margin-top: 39px; display: flex; width: 100%; justify-content: space-between; } + &__button { width: 150px; min-width: initial; } -}
\ No newline at end of file +} diff --git a/ui/app/css/itcss/components/newui-sections.scss b/ui/app/css/itcss/components/newui-sections.scss index 9dc11042..db9dfd04 100644 --- a/ui/app/css/itcss/components/newui-sections.scss +++ b/ui/app/css/itcss/components/newui-sections.scss @@ -92,8 +92,8 @@ $wallet-view-bg: $muddy-gray; &__address { border-radius: 3px; - background-color: $alto; - color: $scorpion; + background-color: $dark-gray; + color: $dim-gray; font-size: 14px; line-height: 12px; padding: 4px 12px; @@ -101,7 +101,7 @@ $wallet-view-bg: $muddy-gray; flex: 0 0 auto; &__pressed { - background-color: ($manatee,); + background-color: $black; } } @@ -303,6 +303,5 @@ $wallet-view-bg: $muddy-gray; width: 100%; height: 100%; justify-content: center; - padding: 0 10px; - background: white; + background: $dark-gray; } diff --git a/ui/app/css/itcss/components/request-signature.scss b/ui/app/css/itcss/components/request-signature.scss index 45a4a812..0677cad1 100644 --- a/ui/app/css/itcss/components/request-signature.scss +++ b/ui/app/css/itcss/components/request-signature.scss @@ -177,7 +177,7 @@ &__help-link { cursor: pointer; text-decoration: underline; - color: $curious-blue; + color: $dexon-purple; } &__footer { width: 100%; diff --git a/ui/app/css/itcss/components/sections.scss b/ui/app/css/itcss/components/sections.scss index 9cb0dceb..00a776c5 100644 --- a/ui/app/css/itcss/components/sections.scss +++ b/ui/app/css/itcss/components/sections.scss @@ -45,8 +45,7 @@ textarea.twelve-word-phrase { /* unlock */ .error { - // color: #e20202; - color: #954a97; + color: #e20202; margin-bottom: 9px; } diff --git a/ui/app/css/itcss/components/send.scss b/ui/app/css/itcss/components/send.scss index 9feef1b3..f3f90f0c 100644 --- a/ui/app/css/itcss/components/send.scss +++ b/ui/app/css/itcss/components/send.scss @@ -3,10 +3,12 @@ flex-flow: column nowrap; z-index: 25; font-family: Roboto; + @media screen and (max-width: $break-small) { width: 100%; overflow-y: auto; } + section { flex: 0 0 auto; } @@ -14,7 +16,7 @@ .send-screen-card { background-color: #fff; - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .08); + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.08); padding: 46px 40.5px 26px; position: relative; // top: -26px; align-items: center; @@ -22,6 +24,7 @@ flex-flow: column nowrap; width: 498px; flex: 1 0 auto; + @media screen and (max-width: $break-small) { top: 0; width: 100%; @@ -46,12 +49,13 @@ width: 70px; height: 70px; border: 1px solid $alto; - box-shadow: 0 0 4px 0 rgba(0, 0, 0, .2); + box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.2); position: absolute; top: -35px; z-index: 25; padding: 4px; background-color: $white; + @media screen and (max-width: $break-small) { position: relative; top: 0; @@ -61,9 +65,11 @@ .send-screen-input-wrapper { width: 95%; position: relative; + .fa-bolt { padding-right: 4px; } + .large-input { border: 1px solid $dusty-gray; border-radius: 4px; @@ -72,17 +78,21 @@ line-height: 22.4px; font-family: Roboto; } + .send-screen-gas-input { border: 1px solid transparent; } + &__error-message { display: none; } + &--error { input, .send-screen-gas-input { border-color: $red !important; } + .send-screen-input-wrapper__error-message { display: block; position: absolute; @@ -93,6 +103,7 @@ color: $red; } } + .send-screen-input-wrapper__error-message { display: block; position: absolute; @@ -138,8 +149,9 @@ .currency-toggle { &__item { - color: $curious-blue; + color: $dexon-purple; cursor: pointer; + &--selected { color: $black; cursor: default; @@ -148,7 +160,7 @@ } .send-screen-gas-input-customize { - color: $curious-blue; + color: $dexon-purple; font-size: 12px; cursor: pointer; } @@ -269,6 +281,7 @@ display: inline-block; margin-right: 4px; } + &__symbol { display: inline-block; } @@ -280,16 +293,19 @@ font-size: 18px; line-height: 29px; } + &__subtitle { margin: 10px 0 20px; font-size: 14px; line-height: 24px; } + &__send-button, &__cancel-button { width: 163px; text-align: center; } + &__send-button__disabled { opacity: .5; cursor: auto; @@ -301,17 +317,19 @@ flex-flow: column nowrap; z-index: 25; font-family: Roboto; + &__content { width: 498px; height: 605px; background-color: #fff; - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .08); + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.08); padding: 46px 40.5px 26px; position: relative; // top: -26px; align-items: center; display: flex; flex-flow: column nowrap; flex: 1 0 auto; + @media screen and (max-width: $break-small) { top: 0; width: 100%; @@ -319,21 +337,25 @@ padding: 12px; } } + .identicon { position: absolute; top: -35px; z-index: 25; + @media screen and (max-width: $break-small) { position: relative; top: 0; flex: 0 0 auto; } } + &__title { color: $scorpion; font-size: 18px; line-height: 29px; } + &__description, &__balance-text, &__token-symbol { @@ -342,22 +364,27 @@ line-height: 24px; text-align: center; } + &__token-balance { font-size: 40px; line-height: 40px; margin-top: 13px; + .token-balance__amount { padding-right: 12px; } } + &__button-group { display: flex; flex-flow: column nowrap; align-items: center; flex: 0 0 auto; + @media screen and (max-width: $break-small) { margin-top: 24px; } + button { width: 163px; } @@ -376,13 +403,14 @@ width: 380px; border-radius: 8px; background-color: $dark-gray; - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .08); + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.08); display: flex; flex-flow: column nowrap; z-index: 25; align-items: center; font-family: Roboto; position: relative; + @media screen and (max-width: $break-small) { width: 100%; top: 0; @@ -390,13 +418,16 @@ flex: 1 1 auto; } } + &__send-header-icon-container { z-index: 25; + @media screen and (max-width: $break-small) { position: relative; top: 0; } } + &__send-header-icon { border-radius: 50%; width: 48px; @@ -406,14 +437,16 @@ padding: 4px; background-color: $white; } + &__send-arrow-icon { - color: #f28930; + color: #954A97; transform: rotate(-45deg); position: absolute; top: -2px; left: 0; font-size: 1.12em; } + &__arrow-background { background-color: $white; height: 14px; @@ -423,10 +456,12 @@ left: 199px; border-radius: 50%; z-index: 100; + @media screen and (max-width: $break-small) { top: 36px; } } + &__header { height: 88px; width: 380px; @@ -435,11 +470,13 @@ display: flex; justify-content: center; align-items: center; + @media screen and (max-width: $break-small) { height: 59px; width: 100vw; } } + &__header-tip { height: 25px; width: 25px; @@ -448,6 +485,7 @@ transform: rotate(45deg); left: 178px; top: 75px; + @media screen and (max-width: $break-small) { top: 46px; left: 0; @@ -455,6 +493,7 @@ margin: 0 auto; } } + &__title { color: $scorpion; font-size: 22px; @@ -462,6 +501,7 @@ text-align: center; margin-top: 25px; } + &__copy { color: $gray; font-size: 14px; @@ -470,22 +510,27 @@ margin-top: 10px; width: 287px; } + &__error { font-size: 12px; line-height: 12px; left: 8px; color: $red; } + &__error-border { color: $red; } + &__form { padding: 10px 0 25px; + @media screen and (max-width: $break-small) { margin: 0; flex: 1 1 auto; } } + &__form-header, &__form-header-copy { width: 100%; @@ -493,6 +538,7 @@ flex-flow: column; align-items: center; } + &__form-row { margin: 14.5px 18px 0px; position: relative; @@ -501,26 +547,32 @@ flex: 1 0 auto; justify-content: space-between; } + &__form-field { flex: 1 1 auto; + .currency-display { - color: $tundora; + color: $dim-gray; + &__currency-symbol { - color: $tundora; + color: $dim-gray; } + &__converted-value, &__converted-currency { - color: $tundora; + color: $dim-gray; } } + .account-list-item { &__account-secondary-balance { - color: $tundora; + color: $dim-gray; } } } + &__form-label { - color: $scorpion; + color: $white; font-family: Roboto; font-size: 16px; line-height: 22px; @@ -528,17 +580,19 @@ font-weight: 400; flex: 0 0 auto; } + &__from-dropdown { height: 73px; width: 100%; - border: 1px solid $alto; + border: 1px solid $geyser; border-radius: 4px; background-color: $dark-gray; font-family: Roboto; line-height: 16px; font-size: 12px; - color: $tundora; + color: $white; position: relative; + &__close-area { position: fixed; top: 0; @@ -547,6 +601,7 @@ width: 100%; height: 100%; } + &__list { z-index: 1050; position: absolute; @@ -554,21 +609,24 @@ width: 100%; border: 1px solid $geyser; border-radius: 4px; - background-color: $white; - box-shadow: 0 3px 6px 0 rgba(0, 0, 0, .11); + background-color: $dark-gray; + box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.11); margin-top: 11px; margin-left: -1px; overflow-y: scroll; } } + &__to-autocomplete { position: relative; + &__down-caret { z-index: 1026; position: absolute; top: 18px; right: 12px; } + &__qr-code { z-index: 1026; position: absolute; @@ -578,13 +636,16 @@ padding: 8px 5px 5px; border-radius: 4px; } + &__qr-code:hover { - background: #f1f1f1; + background: $geyser; } + &__input.with-qr { padding-right: 65px; } } + &__to-autocomplete, &__memo-text-area, &__hex-data { @@ -593,27 +654,30 @@ position: relative; height: 54px; width: 100%; - border: 1px solid $alto; + border: 1px solid $geyser; border-radius: 4px; - background-color: $white; - color: $tundora; + background-color: $dark-gray; + color: $white; padding: 10px; font-family: Roboto; font-size: 16px; line-height: 21px; } } + &__amount-max { - color: $curious-blue; + color: $dexon-purple; font-family: Roboto; font-size: 12px; left: 8px; border: none; cursor: pointer; } + &__gas-fee-display { width: 100%; position: relative; + .currency-display--message { padding: 8px 38px 8px 10px; display: flex; @@ -621,57 +685,65 @@ } } + &__sliders-icon-container { display: flex; align-items: center; justify-content: center; height: 24px; width: 24px; - border: 1px solid $curious-blue; + border: 1px solid $dexon-purple; border-radius: 4px; - background-color: $white; + background-color: $dark-gray; position: absolute; right: 15px; top: 14px; cursor: pointer; font-size: 1em; } + &__sliders-icon { - color: $curious-blue; + color: $dexon-purple; } + &__memo-text-area { &__input { padding: 6px 10px; } } + &__footer { height: 92px; width: 100%; display: flex; justify-content: space-evenly; align-items: center; - border-top: 1px solid $alto; + border-top: 1px solid $geyser; background: $white; padding: 0 12px; flex-shrink: 0; } + &__next-btn, &__cancel-btn { width: 163px; margin: 0 4px; } + &__customize-gas { - border: 1px solid #D8D8D8; + border: 1px solid $geyser; border-radius: 4px; - background-color: #FFFFFF; + background-color: $dark-gray; box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.14); font-family: Roboto; display: flex; flex-flow: column; + @media screen and (max-width: $break-small) { width: 100vw; height: 100vh; } + &__header { height: 52px; border-bottom: 1px solid $alto; @@ -679,13 +751,16 @@ align-items: center; justify-content: space-between; font-size: 22px; + @media screen and (max-width: $break-small) { flex: 0 0 auto; } } + &__title { margin-left: 19.25px; } + &__close::after { content: '\00D7'; font-size: 1.8em; @@ -694,19 +769,23 @@ cursor: pointer; margin-right: 19.25px; } + &__content { display: flex; flex-flow: column nowrap; height: 100%; } + &__body { display: flex; margin-bottom: 24px; + @media screen and (max-width: $break-small) { flex-flow: column; flex: 1 1 auto; } } + &__footer { height: 75px; border-top: 1px solid $alto; @@ -715,15 +794,18 @@ justify-content: space-between; font-size: 22px; position: relative; + @media screen and (max-width: $break-small) { flex: 0 0 auto; } } + &__buttons { display: flex; justify-content: space-between; margin-right: 21.25px; } + &__revert, &__cancel, &__save, @@ -734,21 +816,25 @@ padding: 0 3px; cursor: pointer; } + &__revert { color: $silver-chalice; font-size: 16px; margin-left: 21.25px; } + &__cancel, &__save, &__save__error { width: 85.74px; min-width: initial; } + &__save__error { opacity: 0.5; cursor: auto; } + &__error-message { display: block; position: absolute; @@ -760,16 +846,19 @@ width: 100%; text-align: center; } + &__cancel { margin-right: 10px; } } + &__gas-modal-card { width: 360px; display: flex; flex-flow: column; align-items: flex-start; padding-left: 20px; + &__title { height: 26px; color: $tundora; @@ -778,6 +867,7 @@ line-height: 26px; margin-top: 17px; } + &__copy { height: 38px; width: 314px; @@ -787,9 +877,11 @@ line-height: 19px; margin-top: 17px; } + .customize-gas-input-wrapper { margin-top: 17px; } + .customize-gas-input { height: 54px; width: 315px; @@ -797,6 +889,7 @@ background-color: $white; padding-left: 15px; } + .gas-tooltip-input-arrows { width: 32px; height: 54px; @@ -809,6 +902,7 @@ justify-content: space-around; align-items: center; } + .gas-tooltip-input-arrow-wrapper { align-items: center; align-self: stretch; @@ -817,10 +911,12 @@ flex-grow: 1; justify-content: center; } + input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; display: none; } + input[type="number"]:hover::-webkit-inner-spin-button { -webkit-appearance: none; display: none; @@ -843,7 +939,7 @@ justify-content: center; height: 24px; width: 24px; - border: 1px solid $curious-blue; + border: 1px solid $dexon-purple; border-radius: 4px; background-color: $dark-gray; position: absolute; @@ -871,5 +967,5 @@ } .sliders-icon { - color: $curious-blue; -}
\ No newline at end of file + color: $dexon-purple; +} diff --git a/ui/app/css/itcss/components/simple-dropdown.scss b/ui/app/css/itcss/components/simple-dropdown.scss index 1a7b2ca2..210071d3 100644 --- a/ui/app/css/itcss/components/simple-dropdown.scss +++ b/ui/app/css/itcss/components/simple-dropdown.scss @@ -3,11 +3,11 @@ display: flex; justify-content: flex-start; align-items: center; - border: 1px solid $alto; + border: 1px solid $geyser; border-radius: 4px; background-color: $dark-gray; font-size: 16px; - color: $geyser; + color: $dim-gray; cursor: pointer; position: relative; } @@ -30,8 +30,8 @@ border: 1px solid $geyser; border-radius: 4px; background-color: $dark-gray; - -webkit-box-shadow: 0 3px 6px 0 rgba(0, 0, 0, .11); - box-shadow: 0 3px 6px 0 rgba(0, 0, 0, .11); + -webkit-box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.11); + box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.11); margin-top: 10px; overflow-y: scroll; left: 0; @@ -40,15 +40,17 @@ .simple-dropdown__option { padding: 10px; + &:hover { background-color: $gallery; } } .simple-dropdown__option--selected { - background-color: $alto; + background-color: $white; + &:hover { - background-color: $alto; + background-color: $white; cursor: default; } } @@ -60,4 +62,4 @@ z-index: 1000; width: 100%; height: 100%; -}
\ No newline at end of file +} diff --git a/ui/app/css/itcss/components/tab-bar.scss b/ui/app/css/itcss/components/tab-bar.scss index 4f307797..e55e404c 100644 --- a/ui/app/css/itcss/components/tab-bar.scss +++ b/ui/app/css/itcss/components/tab-bar.scss @@ -9,13 +9,13 @@ min-width: 0; flex: 0 0 auto; padding: 15px 25px; - border-bottom: 1px solid $alto; + border-bottom: 1px solid $geyser; box-sizing: border-box; font-size: 18px; } .tab-bar__tab--active { - border-color: $black; + border-color: $white; } .tab-bar__grow-tab { diff --git a/ui/app/css/itcss/components/tooltip.scss b/ui/app/css/itcss/components/tooltip.scss index 78325865..484c03cb 100644 --- a/ui/app/css/itcss/components/tooltip.scss +++ b/ui/app/css/itcss/components/tooltip.scss @@ -1,7 +1,659 @@ .metamask-tooltip { - padding: 5px !important; + padding: 5px !important; } // needed for react-tippy // copied from node_modules/react-tippy/dist/tippy.css -.tippy-touch{cursor:pointer!important}.tippy-notransition{transition:none!important}.tippy-popper{max-width:400px;-webkit-perspective:800px;perspective:800px;z-index:9999;outline:0;transition-timing-function:cubic-bezier(.165,.84,.44,1);pointer-events:none}.tippy-popper.html-template{max-width:96%;max-width:calc(100% - 20px)}.tippy-popper[x-placement^=top] [x-arrow]{border-top:7px solid #333;border-right:7px solid transparent;border-left:7px solid transparent;bottom:-7px;margin:0 9px}.tippy-popper[x-placement^=top] [x-arrow].arrow-small{border-top:5px solid #333;border-right:5px solid transparent;border-left:5px solid transparent;bottom:-5px}.tippy-popper[x-placement^=top] [x-arrow].arrow-big{border-top:10px solid #333;border-right:10px solid transparent;border-left:10px solid transparent;bottom:-10px}.tippy-popper[x-placement^=top] [x-circle]{-webkit-transform-origin:0 33%;transform-origin:0 33%}.tippy-popper[x-placement^=top] [x-circle].enter{-webkit-transform:scale(1) translate(-50%,-55%);transform:scale(1) translate(-50%,-55%);opacity:1}.tippy-popper[x-placement^=top] [x-circle].leave{-webkit-transform:scale(.15) translate(-50%,-50%);transform:scale(.15) translate(-50%,-50%);opacity:0}.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-circle]{background-color:#fff}.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-arrow]{border-top:7px solid #fff;border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-arrow].arrow-small{border-top:5px solid #fff;border-right:5px solid transparent;border-left:5px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-arrow].arrow-big{border-top:10px solid #fff;border-right:10px solid transparent;border-left:10px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-circle]{background-color:rgba(0,0,0,.7)}.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-arrow]{border-top:7px solid rgba(0,0,0,.7);border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-arrow].arrow-small{border-top:5px solid rgba(0,0,0,.7);border-right:5px solid transparent;border-left:5px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-arrow].arrow-big{border-top:10px solid rgba(0,0,0,.7);border-right:10px solid transparent;border-left:10px solid transparent}.tippy-popper[x-placement^=top] [data-animation=perspective]{-webkit-transform-origin:bottom;transform-origin:bottom}.tippy-popper[x-placement^=top] [data-animation=perspective].enter{opacity:1;-webkit-transform:translateY(-10px) rotateX(0);transform:translateY(-10px) rotateX(0)}.tippy-popper[x-placement^=top] [data-animation=perspective].leave{opacity:0;-webkit-transform:translateY(0) rotateX(90deg);transform:translateY(0) rotateX(90deg)}.tippy-popper[x-placement^=top] [data-animation=fade].enter{opacity:1;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=fade].leave{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift].enter{opacity:1;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift].leave{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}.tippy-popper[x-placement^=top] [data-animation=scale].enter{opacity:1;-webkit-transform:translateY(-10px) scale(1);transform:translateY(-10px) scale(1)}.tippy-popper[x-placement^=top] [data-animation=scale].leave{opacity:0;-webkit-transform:translateY(0) scale(0);transform:translateY(0) scale(0)}.tippy-popper[x-placement^=bottom] [x-arrow]{border-bottom:7px solid #333;border-right:7px solid transparent;border-left:7px solid transparent;top:-7px;margin:0 9px}.tippy-popper[x-placement^=bottom] [x-arrow].arrow-small{border-bottom:5px solid #333;border-right:5px solid transparent;border-left:5px solid transparent;top:-5px}.tippy-popper[x-placement^=bottom] [x-arrow].arrow-big{border-bottom:10px solid #333;border-right:10px solid transparent;border-left:10px solid transparent;top:-10px}.tippy-popper[x-placement^=bottom] [x-circle]{-webkit-transform-origin:0 -50%;transform-origin:0 -50%}.tippy-popper[x-placement^=bottom] [x-circle].enter{-webkit-transform:scale(1) translate(-50%,-45%);transform:scale(1) translate(-50%,-45%);opacity:1}.tippy-popper[x-placement^=bottom] [x-circle].leave{-webkit-transform:scale(.15) translate(-50%,-5%);transform:scale(.15) translate(-50%,-5%);opacity:0}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-circle]{background-color:#fff}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-arrow]{border-bottom:7px solid #fff;border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-arrow].arrow-small{border-bottom:5px solid #fff;border-right:5px solid transparent;border-left:5px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-arrow].arrow-big{border-bottom:10px solid #fff;border-right:10px solid transparent;border-left:10px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-circle]{background-color:rgba(0,0,0,.7)}.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-arrow]{border-bottom:7px solid rgba(0,0,0,.7);border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-arrow].arrow-small{border-bottom:5px solid rgba(0,0,0,.7);border-right:5px solid transparent;border-left:5px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-arrow].arrow-big{border-bottom:10px solid rgba(0,0,0,.7);border-right:10px solid transparent;border-left:10px solid transparent}.tippy-popper[x-placement^=bottom] [data-animation=perspective]{-webkit-transform-origin:top;transform-origin:top}.tippy-popper[x-placement^=bottom] [data-animation=perspective].enter{opacity:1;-webkit-transform:translateY(10px) rotateX(0);transform:translateY(10px) rotateX(0)}.tippy-popper[x-placement^=bottom] [data-animation=perspective].leave{opacity:0;-webkit-transform:translateY(0) rotateX(-90deg);transform:translateY(0) rotateX(-90deg)}.tippy-popper[x-placement^=bottom] [data-animation=fade].enter{opacity:1;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=fade].leave{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift].enter{opacity:1;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift].leave{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}.tippy-popper[x-placement^=bottom] [data-animation=scale].enter{opacity:1;-webkit-transform:translateY(10px) scale(1);transform:translateY(10px) scale(1)}.tippy-popper[x-placement^=bottom] [data-animation=scale].leave{opacity:0;-webkit-transform:translateY(0) scale(0);transform:translateY(0) scale(0)}.tippy-popper[x-placement^=left] [x-arrow]{border-left:7px solid #333;border-top:7px solid transparent;border-bottom:7px solid transparent;right:-7px;margin:6px 0}.tippy-popper[x-placement^=left] [x-arrow].arrow-small{border-left:5px solid #333;border-top:5px solid transparent;border-bottom:5px solid transparent;right:-5px}.tippy-popper[x-placement^=left] [x-arrow].arrow-big{border-left:10px solid #333;border-top:10px solid transparent;border-bottom:10px solid transparent;right:-10px}.tippy-popper[x-placement^=left] [x-circle]{-webkit-transform-origin:50% 0;transform-origin:50% 0}.tippy-popper[x-placement^=left] [x-circle].enter{-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%);opacity:1}.tippy-popper[x-placement^=left] [x-circle].leave{-webkit-transform:scale(.15) translate(-50%,-50%);transform:scale(.15) translate(-50%,-50%);opacity:0}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-circle]{background-color:#fff}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-arrow]{border-left:7px solid #fff;border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-arrow].arrow-small{border-left:5px solid #fff;border-top:5px solid transparent;border-bottom:5px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-arrow].arrow-big{border-left:10px solid #fff;border-top:10px solid transparent;border-bottom:10px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-circle]{background-color:rgba(0,0,0,.7)}.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-arrow]{border-left:7px solid rgba(0,0,0,.7);border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-arrow].arrow-small{border-left:5px solid rgba(0,0,0,.7);border-top:5px solid transparent;border-bottom:5px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-arrow].arrow-big{border-left:10px solid rgba(0,0,0,.7);border-top:10px solid transparent;border-bottom:10px solid transparent}.tippy-popper[x-placement^=left] [data-animation=perspective]{-webkit-transform-origin:right;transform-origin:right}.tippy-popper[x-placement^=left] [data-animation=perspective].enter{opacity:1;-webkit-transform:translateX(-10px) rotateY(0);transform:translateX(-10px) rotateY(0)}.tippy-popper[x-placement^=left] [data-animation=perspective].leave{opacity:0;-webkit-transform:translateX(0) rotateY(-90deg);transform:translateX(0) rotateY(-90deg)}.tippy-popper[x-placement^=left] [data-animation=fade].enter{opacity:1;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=fade].leave{opacity:0;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift].enter{opacity:1;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift].leave{opacity:0;-webkit-transform:translateX(0);transform:translateX(0)}.tippy-popper[x-placement^=left] [data-animation=scale].enter{opacity:1;-webkit-transform:translateX(-10px) scale(1);transform:translateX(-10px) scale(1)}.tippy-popper[x-placement^=left] [data-animation=scale].leave{opacity:0;-webkit-transform:translateX(0) scale(0);transform:translateX(0) scale(0)}.tippy-popper[x-placement^=right] [x-arrow]{border-right:7px solid #333;border-top:7px solid transparent;border-bottom:7px solid transparent;left:-7px;margin:6px 0}.tippy-popper[x-placement^=right] [x-arrow].arrow-small{border-right:5px solid #333;border-top:5px solid transparent;border-bottom:5px solid transparent;left:-5px}.tippy-popper[x-placement^=right] [x-arrow].arrow-big{border-right:10px solid #333;border-top:10px solid transparent;border-bottom:10px solid transparent;left:-10px}.tippy-popper[x-placement^=right] [x-circle]{-webkit-transform-origin:-50% 0;transform-origin:-50% 0}.tippy-popper[x-placement^=right] [x-circle].enter{-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%);opacity:1}.tippy-popper[x-placement^=right] [x-circle].leave{-webkit-transform:scale(.15) translate(-50%,-50%);transform:scale(.15) translate(-50%,-50%);opacity:0}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-circle]{background-color:#fff}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-arrow]{border-right:7px solid #fff;border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-arrow].arrow-small{border-right:5px solid #fff;border-top:5px solid transparent;border-bottom:5px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-arrow].arrow-big{border-right:10px solid #fff;border-top:10px solid transparent;border-bottom:10px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-circle]{background-color:rgba(0,0,0,.7)}.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-arrow]{border-right:7px solid rgba(0,0,0,.7);border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-arrow].arrow-small{border-right:5px solid rgba(0,0,0,.7);border-top:5px solid transparent;border-bottom:5px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-arrow].arrow-big{border-right:10px solid rgba(0,0,0,.7);border-top:10px solid transparent;border-bottom:10px solid transparent}.tippy-popper[x-placement^=right] [data-animation=perspective]{-webkit-transform-origin:left;transform-origin:left}.tippy-popper[x-placement^=right] [data-animation=perspective].enter{opacity:1;-webkit-transform:translateX(10px) rotateY(0);transform:translateX(10px) rotateY(0)}.tippy-popper[x-placement^=right] [data-animation=perspective].leave{opacity:0;-webkit-transform:translateX(0) rotateY(90deg);transform:translateX(0) rotateY(90deg)}.tippy-popper[x-placement^=right] [data-animation=fade].enter{opacity:1;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=fade].leave{opacity:0;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift].enter{opacity:1;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift].leave{opacity:0;-webkit-transform:translateX(0);transform:translateX(0)}.tippy-popper[x-placement^=right] [data-animation=scale].enter{opacity:1;-webkit-transform:translateX(10px) scale(1);transform:translateX(10px) scale(1)}.tippy-popper[x-placement^=right] [data-animation=scale].leave{opacity:0;-webkit-transform:translateX(0) scale(0);transform:translateX(0) scale(0)}.tippy-popper .tippy-tooltip.transparent-theme{background-color:rgba(0,0,0,.7)}.tippy-popper .tippy-tooltip.transparent-theme[data-animatefill]{background-color:transparent}.tippy-popper .tippy-tooltip.light-theme{color:#26323d;box-shadow:0 4px 20px 4px rgba(0,20,60,.1),0 4px 80px -8px rgba(0,20,60,.2);background-color:#fff}.tippy-popper .tippy-tooltip.light-theme[data-animatefill]{background-color:transparent}.tippy-tooltip{position:relative;color:#fff;border-radius:4px;font-size:.95rem;padding:.4rem .8rem;text-align:center;will-change:transform;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#333}.tippy-tooltip--small{padding:.25rem .5rem;font-size:.8rem}.tippy-tooltip--big{padding:.6rem 1.2rem;font-size:1.2rem}.tippy-tooltip[data-animatefill]{overflow:hidden;background-color:transparent}.tippy-tooltip[data-interactive]{pointer-events:auto}.tippy-tooltip[data-inertia]{transition-timing-function:cubic-bezier(.53,2,.36,.85)}.tippy-tooltip [x-arrow]{position:absolute;width:0;height:0}.tippy-tooltip [x-circle]{position:absolute;will-change:transform;background-color:#333;border-radius:50%;width:130%;width:calc(110% + 2rem);left:50%;top:50%;z-index:-1;overflow:hidden;transition:all ease}.tippy-tooltip [x-circle]:before{content:"";padding-top:90%;float:left}@media (max-width:450px){.tippy-popper{max-width:96%;max-width:calc(100% - 20px)}} +.tippy-touch { + cursor: pointer !important; +} + +.tippy-notransition { + transition: none !important; +} + +.tippy-popper { + max-width: 400px; + -webkit-perspective: 800px; + perspective: 800px; + z-index: 9999; + outline: 0; + transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1); + pointer-events: none; +} + +.tippy-popper.html-template { + max-width: 96%; + max-width: calc(100% - 20px); +} + +.tippy-popper[x-placement^=top] [x-arrow] { + border-top: 7px solid #ccc; + border-right: 7px solid transparent; + border-left: 7px solid transparent; + bottom: -7px; + margin: 0 9px; +} + +.tippy-popper[x-placement^=top] [x-arrow].arrow-small { + border-top: 5px solid #ccc; + border-right: 5px solid transparent; + border-left: 5px solid transparent; + bottom: -5px; +} + +.tippy-popper[x-placement^=top] [x-arrow].arrow-big { + border-top: 10px solid #ccc; + border-right: 10px solid transparent; + border-left: 10px solid transparent; + bottom: -10px; +} + +.tippy-popper[x-placement^=top] [x-circle] { + -webkit-transform-origin: 0 33%; + transform-origin: 0 33%; +} + +.tippy-popper[x-placement^=top] [x-circle].enter { + -webkit-transform: scale(1) translate(-50%, -55%); + transform: scale(1) translate(-50%, -55%); + opacity: 1; +} + +.tippy-popper[x-placement^=top] [x-circle].leave { + -webkit-transform: scale(0.15) translate(-50%, -50%); + transform: scale(0.15) translate(-50%, -50%); + opacity: 0; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-circle] { + background-color: #000; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-arrow] { + border-top: 7px solid #000; + border-right: 7px solid transparent; + border-left: 7px solid transparent; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-arrow].arrow-small { + border-top: 5px solid #000; + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-arrow].arrow-big { + border-top: 10px solid #000; + border-right: 10px solid transparent; + border-left: 10px solid transparent; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-circle] { + background-color: rgba(0, 0, 0, 0.7); +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-arrow] { + border-top: 7px solid rgba(0, 0, 0, 0.7); + border-right: 7px solid transparent; + border-left: 7px solid transparent; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-arrow].arrow-small { + border-top: 5px solid rgba(0, 0, 0, 0.7); + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-arrow].arrow-big { + border-top: 10px solid rgba(0, 0, 0, 0.7); + border-right: 10px solid transparent; + border-left: 10px solid transparent; +} + +.tippy-popper[x-placement^=top] [data-animation=perspective] { + -webkit-transform-origin: bottom; + transform-origin: bottom; +} + +.tippy-popper[x-placement^=top] [data-animation=perspective].enter { + opacity: 1; + -webkit-transform: translateY(-10px) rotateX(0); + transform: translateY(-10px) rotateX(0); +} + +.tippy-popper[x-placement^=top] [data-animation=perspective].leave { + opacity: 0; + -webkit-transform: translateY(0) rotateX(90deg); + transform: translateY(0) rotateX(90deg); +} + +.tippy-popper[x-placement^=top] [data-animation=fade].enter { + opacity: 1; + -webkit-transform: translateY(-10px); + transform: translateY(-10px); +} + +.tippy-popper[x-placement^=top] [data-animation=fade].leave { + opacity: 0; + -webkit-transform: translateY(-10px); + transform: translateY(-10px); +} + +.tippy-popper[x-placement^=top] [data-animation=shift].enter { + opacity: 1; + -webkit-transform: translateY(-10px); + transform: translateY(-10px); +} + +.tippy-popper[x-placement^=top] [data-animation=shift].leave { + opacity: 0; + -webkit-transform: translateY(0); + transform: translateY(0); +} + +.tippy-popper[x-placement^=top] [data-animation=scale].enter { + opacity: 1; + -webkit-transform: translateY(-10px) scale(1); + transform: translateY(-10px) scale(1); +} + +.tippy-popper[x-placement^=top] [data-animation=scale].leave { + opacity: 0; + -webkit-transform: translateY(0) scale(0); + transform: translateY(0) scale(0); +} + +.tippy-popper[x-placement^=bottom] [x-arrow] { + border-bottom: 7px solid #ccc; + border-right: 7px solid transparent; + border-left: 7px solid transparent; + top: -7px; + margin: 0 9px; +} + +.tippy-popper[x-placement^=bottom] [x-arrow].arrow-small { + border-bottom: 5px solid #ccc; + border-right: 5px solid transparent; + border-left: 5px solid transparent; + top: -5px; +} + +.tippy-popper[x-placement^=bottom] [x-arrow].arrow-big { + border-bottom: 10px solid #ccc; + border-right: 10px solid transparent; + border-left: 10px solid transparent; + top: -10px; +} + +.tippy-popper[x-placement^=bottom] [x-circle] { + -webkit-transform-origin: 0 -50%; + transform-origin: 0 -50%; +} + +.tippy-popper[x-placement^=bottom] [x-circle].enter { + -webkit-transform: scale(1) translate(-50%, -45%); + transform: scale(1) translate(-50%, -45%); + opacity: 1; +} + +.tippy-popper[x-placement^=bottom] [x-circle].leave { + -webkit-transform: scale(0.15) translate(-50%, -5%); + transform: scale(0.15) translate(-50%, -5%); + opacity: 0; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-circle] { + background-color: #000; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-arrow] { + border-bottom: 7px solid #000; + border-right: 7px solid transparent; + border-left: 7px solid transparent; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-arrow].arrow-small { + border-bottom: 5px solid #000; + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-arrow].arrow-big { + border-bottom: 10px solid #000; + border-right: 10px solid transparent; + border-left: 10px solid transparent; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-circle] { + background-color: rgba(0, 0, 0, 0.7); +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-arrow] { + border-bottom: 7px solid rgba(0, 0, 0, 0.7); + border-right: 7px solid transparent; + border-left: 7px solid transparent; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-arrow].arrow-small { + border-bottom: 5px solid rgba(0, 0, 0, 0.7); + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-arrow].arrow-big { + border-bottom: 10px solid rgba(0, 0, 0, 0.7); + border-right: 10px solid transparent; + border-left: 10px solid transparent; +} + +.tippy-popper[x-placement^=bottom] [data-animation=perspective] { + -webkit-transform-origin: top; + transform-origin: top; +} + +.tippy-popper[x-placement^=bottom] [data-animation=perspective].enter { + opacity: 1; + -webkit-transform: translateY(10px) rotateX(0); + transform: translateY(10px) rotateX(0); +} + +.tippy-popper[x-placement^=bottom] [data-animation=perspective].leave { + opacity: 0; + -webkit-transform: translateY(0) rotateX(-90deg); + transform: translateY(0) rotateX(-90deg); +} + +.tippy-popper[x-placement^=bottom] [data-animation=fade].enter { + opacity: 1; + -webkit-transform: translateY(10px); + transform: translateY(10px); +} + +.tippy-popper[x-placement^=bottom] [data-animation=fade].leave { + opacity: 0; + -webkit-transform: translateY(10px); + transform: translateY(10px); +} + +.tippy-popper[x-placement^=bottom] [data-animation=shift].enter { + opacity: 1; + -webkit-transform: translateY(10px); + transform: translateY(10px); +} + +.tippy-popper[x-placement^=bottom] [data-animation=shift].leave { + opacity: 0; + -webkit-transform: translateY(0); + transform: translateY(0); +} + +.tippy-popper[x-placement^=bottom] [data-animation=scale].enter { + opacity: 1; + -webkit-transform: translateY(10px) scale(1); + transform: translateY(10px) scale(1); +} + +.tippy-popper[x-placement^=bottom] [data-animation=scale].leave { + opacity: 0; + -webkit-transform: translateY(0) scale(0); + transform: translateY(0) scale(0); +} + +.tippy-popper[x-placement^=left] [x-arrow] { + border-left: 7px solid #ccc; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + right: -7px; + margin: 6px 0; +} + +.tippy-popper[x-placement^=left] [x-arrow].arrow-small { + border-left: 5px solid #ccc; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + right: -5px; +} + +.tippy-popper[x-placement^=left] [x-arrow].arrow-big { + border-left: 10px solid #ccc; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + right: -10px; +} + +.tippy-popper[x-placement^=left] [x-circle] { + -webkit-transform-origin: 50% 0; + transform-origin: 50% 0; +} + +.tippy-popper[x-placement^=left] [x-circle].enter { + -webkit-transform: scale(1) translate(-50%, -50%); + transform: scale(1) translate(-50%, -50%); + opacity: 1; +} + +.tippy-popper[x-placement^=left] [x-circle].leave { + -webkit-transform: scale(0.15) translate(-50%, -50%); + transform: scale(0.15) translate(-50%, -50%); + opacity: 0; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-circle] { + background-color: #000; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-arrow] { + border-left: 7px solid #000; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-arrow].arrow-small { + border-left: 5px solid #000; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-arrow].arrow-big { + border-left: 10px solid #000; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-circle] { + background-color: rgba(0, 0, 0, 0.7); +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-arrow] { + border-left: 7px solid rgba(0, 0, 0, 0.7); + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-arrow].arrow-small { + border-left: 5px solid rgba(0, 0, 0, 0.7); + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-arrow].arrow-big { + border-left: 10px solid rgba(0, 0, 0, 0.7); + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; +} + +.tippy-popper[x-placement^=left] [data-animation=perspective] { + -webkit-transform-origin: right; + transform-origin: right; +} + +.tippy-popper[x-placement^=left] [data-animation=perspective].enter { + opacity: 1; + -webkit-transform: translateX(-10px) rotateY(0); + transform: translateX(-10px) rotateY(0); +} + +.tippy-popper[x-placement^=left] [data-animation=perspective].leave { + opacity: 0; + -webkit-transform: translateX(0) rotateY(-90deg); + transform: translateX(0) rotateY(-90deg); +} + +.tippy-popper[x-placement^=left] [data-animation=fade].enter { + opacity: 1; + -webkit-transform: translateX(-10px); + transform: translateX(-10px); +} + +.tippy-popper[x-placement^=left] [data-animation=fade].leave { + opacity: 0; + -webkit-transform: translateX(-10px); + transform: translateX(-10px); +} + +.tippy-popper[x-placement^=left] [data-animation=shift].enter { + opacity: 1; + -webkit-transform: translateX(-10px); + transform: translateX(-10px); +} + +.tippy-popper[x-placement^=left] [data-animation=shift].leave { + opacity: 0; + -webkit-transform: translateX(0); + transform: translateX(0); +} + +.tippy-popper[x-placement^=left] [data-animation=scale].enter { + opacity: 1; + -webkit-transform: translateX(-10px) scale(1); + transform: translateX(-10px) scale(1); +} + +.tippy-popper[x-placement^=left] [data-animation=scale].leave { + opacity: 0; + -webkit-transform: translateX(0) scale(0); + transform: translateX(0) scale(0); +} + +.tippy-popper[x-placement^=right] [x-arrow] { + border-right: 7px solid #ccc; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + left: -7px; + margin: 6px 0; +} + +.tippy-popper[x-placement^=right] [x-arrow].arrow-small { + border-right: 5px solid #ccc; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + left: -5px; +} + +.tippy-popper[x-placement^=right] [x-arrow].arrow-big { + border-right: 10px solid #ccc; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + left: -10px; +} + +.tippy-popper[x-placement^=right] [x-circle] { + -webkit-transform-origin: -50% 0; + transform-origin: -50% 0; +} + +.tippy-popper[x-placement^=right] [x-circle].enter { + -webkit-transform: scale(1) translate(-50%, -50%); + transform: scale(1) translate(-50%, -50%); + opacity: 1; +} + +.tippy-popper[x-placement^=right] [x-circle].leave { + -webkit-transform: scale(0.15) translate(-50%, -50%); + transform: scale(0.15) translate(-50%, -50%); + opacity: 0; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-circle] { + background-color: #000; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-arrow] { + border-right: 7px solid #000; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-arrow].arrow-small { + border-right: 5px solid #000; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-arrow].arrow-big { + border-right: 10px solid #000; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-circle] { + background-color: rgba(0, 0, 0, 0.7); +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-arrow] { + border-right: 7px solid rgba(0, 0, 0, 0.7); + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-arrow].arrow-small { + border-right: 5px solid rgba(0, 0, 0, 0.7); + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-arrow].arrow-big { + border-right: 10px solid rgba(0, 0, 0, 0.7); + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; +} + +.tippy-popper[x-placement^=right] [data-animation=perspective] { + -webkit-transform-origin: left; + transform-origin: left; +} + +.tippy-popper[x-placement^=right] [data-animation=perspective].enter { + opacity: 1; + -webkit-transform: translateX(10px) rotateY(0); + transform: translateX(10px) rotateY(0); +} + +.tippy-popper[x-placement^=right] [data-animation=perspective].leave { + opacity: 0; + -webkit-transform: translateX(0) rotateY(90deg); + transform: translateX(0) rotateY(90deg); +} + +.tippy-popper[x-placement^=right] [data-animation=fade].enter { + opacity: 1; + -webkit-transform: translateX(10px); + transform: translateX(10px); +} + +.tippy-popper[x-placement^=right] [data-animation=fade].leave { + opacity: 0; + -webkit-transform: translateX(10px); + transform: translateX(10px); +} + +.tippy-popper[x-placement^=right] [data-animation=shift].enter { + opacity: 1; + -webkit-transform: translateX(10px); + transform: translateX(10px); +} + +.tippy-popper[x-placement^=right] [data-animation=shift].leave { + opacity: 0; + -webkit-transform: translateX(0); + transform: translateX(0); +} + +.tippy-popper[x-placement^=right] [data-animation=scale].enter { + opacity: 1; + -webkit-transform: translateX(10px) scale(1); + transform: translateX(10px) scale(1); +} + +.tippy-popper[x-placement^=right] [data-animation=scale].leave { + opacity: 0; + -webkit-transform: translateX(0) scale(0); + transform: translateX(0) scale(0); +} + +.tippy-popper .tippy-tooltip.transparent-theme { + background-color: rgba(0, 0, 0, 0.7); +} + +.tippy-popper .tippy-tooltip.transparent-theme[data-animatefill] { + background-color: transparent; +} + +.tippy-popper .tippy-tooltip.light-theme { + color: #26323d; + box-shadow: 0 4px 20px 4px rgba(0, 20, 60, 0.1), 0 4px 80px -8px rgba(0, 20, 60, 0.2); + background-color: #000; +} + +.tippy-popper .tippy-tooltip.light-theme[data-animatefill] { + background-color: transparent; +} + +.tippy-tooltip { + position: relative; + color: #000; + border-radius: 4px; + font-size: .95rem; + padding: .4rem .8rem; + text-align: center; + will-change: transform; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-color: #ccc; +} + +.tippy-tooltip--small { + padding: .25rem .5rem; + font-size: .8rem; +} + +.tippy-tooltip--big { + padding: .6rem 1.2rem; + font-size: 1.2rem; +} + +.tippy-tooltip[data-animatefill] { + overflow: hidden; + background-color: transparent; +} + +.tippy-tooltip[data-interactive] { + pointer-events: auto; +} + +.tippy-tooltip[data-inertia] { + transition-timing-function: cubic-bezier(0.53, 2, 0.36, 0.85); +} + +.tippy-tooltip [x-arrow] { + position: absolute; + width: 0; + height: 0; +} + +.tippy-tooltip [x-circle] { + position: absolute; + will-change: transform; + background-color: #ccc; + border-radius: 50%; + width: 130%; + width: calc(110% + 2rem); + left: 50%; + top: 50%; + z-index: -1; + overflow: hidden; + transition: all ease; +} + +.tippy-tooltip [x-circle]:before { + content: ""; + padding-top: 90%; + float: left; +} + +@media (max-width: 450px) { + .tippy-popper { + max-width: 96%; + max-width: calc(100% - 20px); + } +} diff --git a/ui/app/css/itcss/components/welcome-screen.scss b/ui/app/css/itcss/components/welcome-screen.scss index af1d6739..59f5308f 100644 --- a/ui/app/css/itcss/components/welcome-screen.scss +++ b/ui/app/css/itcss/components/welcome-screen.scss @@ -8,7 +8,7 @@ width: 100%; flex: 1 0 auto; padding: 70px 0; - background: $white; + background: $dark-gray; @media screen and (max-width: 575px) { padding: 0; @@ -31,6 +31,10 @@ } } + &__logo { + margin-bottom: 20px; + } + &__copy { font-size: 1em; width: 400px; @@ -46,7 +50,7 @@ &__button { height: 54px; width: 198px; - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .14); + border-radius: 4px; color: #fff; font-size: 20px; font-weight: 500; @@ -55,6 +59,6 @@ text-transform: uppercase; margin: 35px 0 14px; transition: 200ms ease-in-out; - background-color: rgba(247, 134, 28, .9); + background-color: rgba(149,74,151, .9); } } diff --git a/ui/app/css/itcss/generic/index.scss b/ui/app/css/itcss/generic/index.scss index a1b02b55..edc1157b 100644 --- a/ui/app/css/itcss/generic/index.scss +++ b/ui/app/css/itcss/generic/index.scss @@ -2,7 +2,8 @@ Generic */ -@import './reset.scss'; +@import "./reset.scss"; + * { box-sizing: border-box; } @@ -48,6 +49,7 @@ textarea:focus { height: 100%; display: flex; flex-direction: column; + @media screen and (max-width: $break-small) { background-color: $dark-gray; } @@ -61,7 +63,12 @@ a { } a:hover { - color: #df6b0e; + color: #954A97; +} + +input { + color: $white; + background-color: $dark-gray; } input.large-input, @@ -90,22 +97,27 @@ input.form-control { border: 1px solid $alto; border-radius: 3px; width: 100%; + &::-webkit-input-placeholder { font-weight: 100; color: $dusty-gray; } + &::-moz-placeholder { font-weight: 100; color: $dusty-gray; } + &:-ms-input-placeholder { font-weight: 100; color: $dusty-gray; } + &:-moz-placeholder { font-weight: 100; color: $dusty-gray; } + &--error { border: 1px solid $monzo; } @@ -115,4 +127,4 @@ input.form-control { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; -}
\ No newline at end of file +} diff --git a/ui/app/css/itcss/settings/variables.scss b/ui/app/css/itcss/settings/variables.scss index 3b5e2411..bb4af1e8 100644 --- a/ui/app/css/itcss/settings/variables.scss +++ b/ui/app/css/itcss/settings/variables.scss @@ -28,7 +28,7 @@ $dusty-gray: #777777; $alto: #dedede; $alabaster: #fafafa; $silver-chalice: #aeaeae; -$curious-blue: #2f9ae0; +$dexon-purple: #2f9ae0; $concrete: #f3f3f3; $tundora: #4d4d4d; $nile-blue: #1b344d; @@ -64,6 +64,7 @@ $mischka: #dddee9; $dexon-purple: #954A97; $dark-gray: #222222; $muddy-gray: #303030; +$dim-gray: #9b9b9b; /* Z-Indicies diff --git a/ui/app/keychains/hd/create-vault-complete.js b/ui/app/keychains/hd/create-vault-complete.js index 5ab5d4c3..d4481d9f 100644 --- a/ui/app/keychains/hd/create-vault-complete.js +++ b/ui/app/keychains/hd/create-vault-complete.js @@ -53,7 +53,7 @@ CreateVaultCompleteScreen.prototype.render = function () { textAlign: 'center', }, }, [ - h('span.error', 'These 12 words are the only way to restore your MetaMask accounts.\nSave them somewhere safe and secret.'), + h('span.error', 'These 12 words are the only way to restore your DekuSan accounts.\nSave them somewhere safe and secret.'), ]), h('textarea.twelve-word-phrase', { @@ -72,7 +72,7 @@ CreateVaultCompleteScreen.prototype.render = function () { }, 'I\'ve copied it somewhere safe'), h('button.primary', { - onClick: () => exportAsFile(`MetaMask Seed Words`, seed), + onClick: () => exportAsFile(`DekuSan Seed Words`, seed), style: { margin: '10px', fontSize: '0.9em', diff --git a/ui/app/reducers.js b/ui/app/reducers.js index 786af853..ea5b3e97 100644 --- a/ui/app/reducers.js +++ b/ui/app/reducers.js @@ -25,7 +25,7 @@ function rootReducer (state, action) { } // - // MetaMask + // DekuSan // state.metamask = reduceMetamask(state, action) diff --git a/ui/app/reducers/metamask.js b/ui/app/reducers/metamask.js index 302d1627..3dc60e64 100644 --- a/ui/app/reducers/metamask.js +++ b/ui/app/reducers/metamask.js @@ -3,7 +3,7 @@ const actions = require('../actions') const MetamascaraPlatform = require('../../../app/scripts/platforms/window') const { getEnvironmentType } = require('../../../app/scripts/lib/util') const { ENVIRONMENT_TYPE_POPUP } = require('../../../app/scripts/lib/enums') -const { OLD_UI_NETWORK_TYPE } = require('../../../app/scripts/controllers/network/enums') +const { MAINNET } = require('../../../app/scripts/controllers/network/enums') module.exports = reduceMetamask @@ -47,7 +47,7 @@ function reduceMetamask (state, action) { coinOptions: {}, useBlockie: false, featureFlags: {}, - networkEndpointType: OLD_UI_NETWORK_TYPE, + networkEndpointType: MAINNET, isRevealingSeedWords: false, welcomeScreenSeen: false, currentLocale: '', diff --git a/ui/app/select-app.js b/ui/app/select-app.js index f5f9e33a..ed705811 100644 --- a/ui/app/select-app.js +++ b/ui/app/select-app.js @@ -4,15 +4,16 @@ const connect = require('react-redux').connect const h = require('react-hyperscript') const { HashRouter } = require('react-router-dom') const App = require('./app') -const OldApp = require('../../old-ui/app/app') -const { getShouldUseNewUi } = require('./selectors') +const { autoAddToBetaUI } = require('./selectors') const { setFeatureFlag } = require('./actions') const I18nProvider = require('./i18n-provider') function mapStateToProps (state) { return { + autoAdd: autoAddToBetaUI(state), + isUnlocked: state.metamask.isUnlocked, isMascara: state.metamask.isMascara, - shouldUseNewUi: getShouldUseNewUi(state), + shouldUseNewUi: true, } } @@ -53,13 +54,13 @@ SelectedApp.prototype.componentWillReceiveProps = function (nextProps) { } SelectedApp.prototype.render = function () { - const { shouldUseNewUi } = this.props - const newUi = h(HashRouter, { + // Code commented out until we begin auto adding users to NewUI + // const { betaUI, isMascara, firstTime } = this.props + // const Selected = betaUI || isMascara || firstTime ? App : OldApp + + return h(HashRouter, { hashType: 'noslash', }, [ - h(I18nProvider, [ - h(App), - ]), + h(I18nProvider, [h(App)]), ]) - return shouldUseNewUi ? newUi : h(OldApp) } diff --git a/ui/app/welcome-screen.js b/ui/app/welcome-screen.js index 146661eb..ecd50ae7 100644 --- a/ui/app/welcome-screen.js +++ b/ui/app/welcome-screen.js @@ -44,10 +44,10 @@ class WelcomeScreen extends Component { h('div.welcome-screen__info', [ - h(Mascot, { - animationEventEmitter: this.animationEventEmitter, - width: '225', - height: '225', + h('img.welcome-screen__info__logo', { + src: '/images/dekusan.svg', + width: 160, + height: 160, }), h('div.welcome-screen__info__header', this.context.t('welcome')), diff --git a/ui/example.js b/ui/example.js index 4627c0e9..119a9ea7 100644 --- a/ui/example.js +++ b/ui/example.js @@ -1,6 +1,6 @@ const injectCss = require('inject-css') -const MetaMaskUi = require('./index.js') -const MetaMaskUiCss = require('./css.js') +const DekuSanUi = require('./index.js') +const DekuSanUiCss = require('./css.js') const EventEmitter = require('events').EventEmitter // account management @@ -103,10 +103,10 @@ accountManager._didUpdate = function () { var container = document.getElementById('app-content') -var css = MetaMaskUiCss() +var css = DekuSanUiCss() injectCss(css) -MetaMaskUi({ +DekuSanUi({ container: container, accountManager: accountManager, }) diff --git a/ui/index.html b/ui/index.html index 8c8db1d8..53c594b3 100644 --- a/ui/index.html +++ b/ui/index.html @@ -2,7 +2,7 @@ <html> <head> <meta charset="utf-8"> - <title>Dex San</title> + <title>DekuSan</title> </head> <body> diff --git a/ui/lib/lost-accounts-notice.js b/ui/lib/lost-accounts-notice.js index 948b13db..fad08d4a 100644 --- a/ui/lib/lost-accounts-notice.js +++ b/ui/lib/lost-accounts-notice.js @@ -4,7 +4,7 @@ module.exports = function (lostAccounts) { return { date: new Date().toDateString(), title: 'Account Problem Caught', - body: `MetaMask has fixed a bug where some accounts were previously mis-generated. This was a rare issue, but you were affected! + body: `DekuSan has fixed a bug where some accounts were previously mis-generated. This was a rare issue, but you were affected! We have successfully imported the accounts that were mis-generated, but they will no longer be recovered with your normal seed phrase. |