-
- Terms of Service
-
-
-
- The following is a summary of the Terms of Service provided solely
- for your convenience and informational purposes. You must read the
- complete Terms of Service below for the legally binding terms.
-
-
-
- Summary of Terms of Service
-
-
- This summary provides an overview of our Terms of Service that apply
- to your use of our website and other services. This summary
- isn't legally binding and is purely for informational purposes.
- While we hope this summary section is helpful, please read the
- complete Terms of Service below for the legally binding terms.
-
-
-
- Eligibility. The Terms of Service sets forth certain
- criteria for your eligibility to use our services.
-
-
- Ink, Our Services, and Third Party Services. Below,
- you'll find more information about our services, Ink, and
- Third Party Services. For clarity, Ink and Third Party Services
- are not part of our services, and as such we have no obligations
- or liability to you in connection with your use of Ink or Third
- Party Services. In addition, we explain that there are a number of
- ways in which you are prohibited from using our services, some of
- which are covered below.
-
-
- Availability of Services. Certain services may not be
- available or may only be available in certain jurisdictions. We
- also may stop providing certain services.
-
-
- Content and Feedback. You give us the right to use any
- content you provide, and we will own any feedback, suggestions, or
- ideas you provide related to our website or services.
-
-
- Restrictions. There are also a number of ways in which you
- are prohibited from using our website or services, some of which
- are covered below.
-
-
- Changes. The Terms of Service discuss changes we can make
- to our website, services, or the terms themselves, including how
- we can suspend or terminate the website or services. Changes to
- the Terms of Service, our services, or website may be made at any
- time, with or without notice. Continued use of our services and
- website is your consent to the Terms of Service and any changes to
- them.
-
-
- Risks and Liability. There are risks associated with using
- our services, Ink, or Third Party Services. The Terms of Service
- also cover your responsibility for taking on risk, limit our
- liability to you, and limit the remedies you may have against us
- and how you may seek those remedies.
-
-
- Dispute Resolution. We hope to avoid disputes, but if there
- is a dispute, you are required to arbitrate disputes with us and
- the manner in which you can seek relief may be limited.
-
-
-
-
- The following is the binding and enforceable Terms of Service.
-
-
-
- Terms of Service
-
-
- Last Updated: December 16, 2024
-
-
- Please read these Terms of Service (“
Terms ”) carefully, as
- they are binding and govern your use of our website,{" "}
-
- https://inkonchain.com/
- {" "}
- (the “
Website ”), Interface, Testnet, Kraken Sequencer and any
- content, tools, documentation, features and functionality offered on
- or through our Website (collectively, the “
Services ”). They
- also govern your use of the Kraken Sequencer. By accessing or using
- our Services, or by submitting any content, you agree to these
- Terms.
-
-
- These Terms may change at any time and without notice, including
- updates to (1) reflect changes to our Services; (2) reflect the
- addition of new services, features, technologies, or offers; (3)
- address legal, regulatory, or security developments; or (4) prevent
- harm to our Services or to those using our Services. These Terms can
- only be modified in writing, and any change will be effective as of
- the Last Updated date set forth above. You should frequently check
- these Terms for updates. If you continue to access or use our
- Services, after we change these Terms, you agree to all our changes.
-
-
- These Terms are a legally binding agreement between “you” (an
- individual, or an entity acting through an authorized individual)
- and Ink Foundation, C/O CO Services Cayman Limited, PO Box 10008
- Willow House Cricket Square, Grand Cayman, Cayman Islands KY1-1001
- (“we ”, “us ”, or “our
- ”).
-
-
- ARBITRATION NOTICE: THESE TERMS CONTAIN AN ARBITRATION AGREEMENT AND
- A CLASS ACTION WAIVER. BY AGREEING TO THESE TERMS, YOU AGREE (A) TO
- RESOLVE ALL DISPUTES (WITH LIMITED EXCEPTION) RELATED TO OUR
- SERVICES AND/OR PRODUCTS OR THE KRAKEN SEQUENCER THROUGH BINDING
- INDIVIDUAL ARBITRATION, WHICH MEANS THAT YOU WAIVE ANY RIGHT TO HAVE
- THOSE DISPUTES DECIDED BY A JUDGE OR JURY, AND (B) TO WAIVE YOUR
- RIGHT TO PARTICIPATE IN CLASS ACTIONS, CLASS ARBITRATIONS, OR
- REPRESENTATIVE ACTIONS, AS SET FORTH BELOW. YOU HAVE THE RIGHT TO
- OPT-OUT OF THE ARBITRATION AGREEMENT AND THE CLASS ACTION WAIVER AS
- EXPLAINED BELOW.
-
-
- To make these Terms easier to read, we have organized them as
- follows:
-
-
-
- Terms of Service
-
- Eligibility
- Ink
- Our Services
- Third Party Services
- Content; Feedback
- Restrictions
- Risks
- Disclaimer of Warranties
- Limitations on Liability
- Indemnification
-
- Dispute Resolution by Binding Arbitration; Class Action Waiver
-
- Governing Law
- Suspension; Termination; Discontinuance
- Personal Data
- Notices
- General
-
-
-
-
1. Eligibility
-
- To use any of our Services or the Kraken Sequencer, you must meet at
- least the following conditions (“Conditions ”):
-
-
-
- if you are an individual, be old enough to legally form a binding
- contract in your jurisdiction (in the USA, that's 18 years
- old, but it may be different where you live),
-
-
- if you are an entity, be duly organized and validly existing under
- the applicable laws of the jurisdiction of your organization,
-
-
- have full power and authority to enter into these Terms without
- violating any other agreement you have made,
-
- not have been restricted from using our services,
-
- if you are an individual, not be located in, under the control of,
- or resident in—or, if you are an entity, not be directly or
- indirectly owned or controlled by any person located in, under the
- control of, or organized or resident in—any sanctioned or
- embargoed jurisdiction (including Crimea, Cuba, Donetsk, Iran,
- Luhansk, North Korea, Russia, Belarus, and Syria), or any
- jurisdiction where we may have restricted use of any services, and
-
-
- if you are an individual, not be listed on—or, if you are an
- entity, not listed on or be directly or indirectly owned or
- controlled by any person listed on—the Office of Foreign Assets
- Control of the U.S. Department of Treas.ury's Specially
- Designated Nationals and Blocked Persons List (“SDN ”), the
- U.S. Department of Commerce's Denied Persons List,
- Consolidated Non-SDN Lists available{" "}
-
- here
-
- , the United Nations (UN) Security Council Consolidated List
- available{" "}
-
- here
-
- , or regional or foreign government watchlists.
-
-
-
2. Ink
-
- Ink is a layer 2 optimistic rollup protocol for the Ethereum
- blockchain (“Ink”) built on open source software that we do not
- control. Ink includes functionality whereby certain open source
- smart contracts can receive and hold certain digital currency or
- other digital assets (“Digital Assets ”) from certain
- supported blockchain networks such as Ethereum (“
- Supported Networks ”), which are then represented on Ink (“
- Bridge Smart Contracts ”). The Bridge Smart Contract can also
- be used to withdraw your Digital Assets from Ink back to Supported
- Networks. We do not take possession, custody, or control of any
- Digital Assets on Ink or sent to its Bridge Smart Contracts. There
- is a risk that the open source software, including any upgrades,
- that Ink is built on may introduce bugs, viruses, Trojan horses, or
- other vulnerabilities or changes to Ink that could result in a
- partial or complete disruption of Ink or loss, damage, or
- destruction of your Digital Assets. The Supported Networks, and the
- types of Digital Assets, that are capable of functionating with Ink
- and the Bridge Smart Contracts may also be subject to change at any
- time. We do not control third party applications, including their
- development or deployment, on Ink, or any activity or transactions
- occurring on Ink.{" "}
-
- Therefore, you acknowledge and agree that Ink, including its
- Bridge Smart Contracts, are not part of our Services, and we have
- no obligations or liability to you in relation to your use of Ink
- or its Bridge Smart Contracts, and you use Ink and its Bridge
- Smart Contracts at your own risk.
-
-
-
3. Our Services
-
- Interface
-
-
- Our Website includes a user interface (the “Interface ”) that
- is intended to allow you to more easily interact with certain
- functionalities of Ink, such as the Bridge Smart Contracts. Other
- third parties may deploy their own applications or interfaces to
- interface with Bridge Smart Contracts, and those other applications
- or interfaces are not part of our Services.
-
-
- Testnet
-
-
- We operate the Ink testnet (the “Testnet ”) as a testing
- environment that is intended to reproduce the functionality and
- experience of Ink. The Testnet is intended to allow you to develop
- applications for Ink and otherwise improve the stability, security,
- and design of Ink and applications built for Ink. Any Testnet tokens
- are for testing purposes on the Testnet, have no value, and are not
- redeemable or convertible for any other token or item of value. We
- may change, upgrade, discontinue, suspend, or terminate the Testnet
- at any time and without notice.
-
-
4. Third Party Services
-
- When using our Services or Ink (including Bridge Smart Contracts),
- you may have the opportunity to use or interact with third party
- services. We do not verify, approve, monitor, control or endorse any
- third-party services and are not liable to you for third-party
- services or third-party content displayed or otherwise made
- available on the Services. We are not responsible for, and make no
- representation as to, any third-party content or services. Your use
- of third-party content or services may be subject to additional
- terms and conditions with third-parties, and we are not part of
- those terms or conditions. You may also incur third-party fees, such
- as fees associated with third-party services, or other fees, such as
- gas fees. You're solely responsible for paying all such fees.
- If any third-party terms and conditions conflict with these Terms,
- you agree that these Terms control. Under no circumstances shall we
- incur any liability, of any kind, to you arising from or relating to
- fees charged to you by third-party content or services linked to or
- accessed through our Services or Ink (including Bridge Smart
- Contracts). Your interactions with third-party services, including
- digital wallets, are governed by their respective privacy policies.
- We are not responsible for their data practices.
-
-
- Kraken Continuance (“Kraken ”) operates a node that receives,
- records, and combines multiple transaction records from Ink into
- batches, which are then settled to the Ethereum blockchain in a
- specified format (the “Kraken Sequencer ”). You are not
- required to use the Kraken Sequencer. If you use the Kraken
- Sequencer, you agree to pay any applicable gas fees, which may be
- modified at any time. Kraken will attempt to provide accurate gas
- fee information in connection with your use of the Kraken Sequencer,
- but such information reflects its estimate of gas fees, which may
- vary from the fees you actually pay to use the Kraken Sequencer and
- interact with Ink. The Kraken Sequencer does not store, take
- possession, custody, or control of your Digital Assets at any time,
- except for receiving applicable gas fees. It also does not have the
- ability to modify, reverse, or otherwise modify any transactions
- submitted to the Ethereum blockchain. Applicable gas fees received
- in connection with your use of the Kraken Sequencer may be modified
- at any time.
-
-
- To use certain of the Services or the Kraken Sequencer, you may need
- to connect a compatible third-party digital wallet (“Wallet ”)
- with the Services or the Kraken Sequencer. By using a Wallet in
- connection with the Services or the Kraken Sequencer, you agree that
- you are using the Wallet under the terms and conditions of the
- applicable third-party provider of such Wallet. Wallets are not
- associated with, maintained by, or affiliated with us. We accept no
- responsibility or liability to you in connection with your use of a
- Wallet, and we make no representations or warranties regarding how
- the Services, the Kraken Sequencer or Ink will operate or be
- compatible with any specific Wallet. The private keys necessary to
- access the assets held in a Wallet are not held by us. You are
- solely responsible for maintaining the confidentiality of your
- private keys and you are responsible for any transactions signed
- with your private keys. We reserve the right, in our sole
- discretion, to prohibit certain Wallet addresses from being able to
- use or engage in transactions using the Services or the Kraken
- Sequencer.
-
-
5. Content; Feedback
-
- Our Content . We or our licensors
- own (1) our Services, (2) all content, materials, software, and
- trademarks found on them, (3) the selection and arrangement of them,
- and (4) all intellectual property rights in them (collectively, “
- Our Content ”). So long as you comply with these Terms,
- you're permitted to use our Services, and Our Content made
- available to you as part of our Services, but only for your own
- benefit. We can take away this permission at any time for any
- reason. You don't have or acquire any rights to Our Content
- beyond the limited, revocable permission in the previous sentence.
-
-
- Your Content . You may have the
- opportunity to transmit content or materials in or through our
- Services (“Your Content ”), excluding Personal Data as defined
- in our{" "}
-
- Privacy Notice
-
- ). You grant us a perpetual, irrevocable, royalty-free, worldwide,
- fully sublicensable, non-exclusive right and license to use and
- exploit Your Content in any manner and for any purpose.
-
-
- Feedback . You may provide us
- feedback, suggestions, or ideas relating to our Services (“
- Feedback ”). You represent and warrant that you have the right
- to provide us any Feedback that you provide. You agree that
- we'll own all Feedback, and you hereby irrevocably assign all
- right, title, and interest in and to all Feedback to us.
-
-
6. Restrictions
-
You won't:
-
-
- use Our Content to engage in, pay for, or support any illegal,
- fraudulent, deceptive, or manipulative conduct, including illegal
- gambling activities, money-laundering, or terrorist activities,
-
-
- use Our Content in any way or for any purpose that infringes,
- misappropriates, or otherwise violates any intellectual property
- rights or other rights of us or any third party, or applicable
- local, state, or federal law or regulation, or that is prohibited
- by these Terms,
-
-
- remove, delete, alter, or obscure any trademarks, specifications,
- warranties, or disclaimers, or any intellectual property or
- proprietary rights notices from Our Content,
-
-
- use, export, reexport or transfer any of Our Content for any
- purpose prohibited by U.S. or local export or import control laws
- and regulations,
-
-
- copy, modify, disassemble, decompile, or reverse engineer Our
- Content (except to the extent such restrictions are prohibited by
- applicable law),
-
-
- use (except as expressly permitted in these Terms), license,
- sublicense, sell, resell, transfer, assign, distribute or
- otherwise commercially exploit or make available to any third
- party Our Content in any way,
-
-
- take any action or use Our Content in any manner that could
- damage, destroy, disrupt, disable, impair, overburden, or
- otherwise impede or harm in any manner Our Content, or interfere
- with any other party's use of Our Content,
-
-
- disrupt, interfere with, violate the security of, or attempt to
- gain unauthorized access to Our Content or any computer network,
-
-
- bypass, breach, avoid, remove, deactivate, impair, descramble, or
- otherwise circumvent any security device, protection, or
- technological measure implemented by us or any of our service
- providers to protect Our Content,
-
-
- use any device, software, or routine that interferes with the
- function of Our Content or transmit in or through Our Content, or
- use in connection with Our Content, any virus, trojan horse, worm,
- backdoor, time bomb, malware, or other software or hardware
- devices designed to permit unauthorized access to, or disable,
- erase, or otherwise harm, any computer, systems, or software,
-
-
- access or use Our Content to build or support products or services
- competitive to our products or Services,
-
-
- use any web scraping, web harvesting, or data extraction methods
- to extract any data from Our Content,
-
-
- create, use, operate, or employ any bots, robots, parsers,
- spiders, scripts, programs, routines, or any other forms of
- automation to engage in any activity on Our Content,
-
-
- develop any third-party applications that interact with Our
- Content without our prior written consent,
-
-
- use or attempt to use Our Content for any person other than
- yourself,
-
-
- provide false, inaccurate, or misleading information in connection
- with your use of or access to Our Content,
-
-
- violate any applicable law or regulation in connection with your
- use of or access to Our Content; or
-
-
- encourage, permit, or enable any other person or entity to do any
- of the foregoing.
-
-
-
7. Risks
-
- There are substantial risks associated with using our Services, Ink
- (including the Bridge Smart Contracts) and any third party service
- available on Ink, and you should carefully consider whether using
- them is suitable for you in light of your circumstances, knowledge,
- and financial resources. You may be subject to legal and regulatory
- compliance obligations in connection with your use of our Services,
- Ink (including Bridge Smart Contracts), and third party services
- available on Ink, and you agree that you are solely responsible for
- your compliance with all laws and regulations. You acknowledge and
- agree that our Services, Ink (including the Bridge Smart Contracts)
- and third party services available on Ink may incorporate
- experimental and novel technology and that the use of such
- technology involves a high degree of risk, could unexpectedly fail
- or not perform as intended, and may experience cyber-attacks,
- botting or other malicious activity, or other operational or
- technical difficulties or vulnerabilities related to your use of our
- Services, Ink (including Bridge Smart Contracts), and third party
- services available on Ink. You acknowledge and agree that smart
- contracts execute automatically when certain conditions are met, and
- we do not have the ability to reverse a transaction recorded on a
- public blockchain. You are responsible for ensuring that any details
- you enter in connection with a transaction using any smart contracts
- are accurate and complete. You acknowledge and agree that we cannot
- control how third-party exchange platforms quote or value Digital
- Assets, and we are not responsible for any losses you may incur as a
- result of fluctuations in the value of Digital Assets. As such, you
- acknowledge and agree that your use of our Services, Ink (including
- the Bridge Smart Contracts) and any third party service available on
- Ink, is at your own risk, and that we aren't liable to you for
- any losses you incur arising from such risks.
-
-
8. Disclaimer of Warranties
-
- TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, OUR SERVICES, THE
- KRAKEN SEQUENCER, AND INK ARE PROVIDED ON AN “AS IS” AND “AS
- AVAILABLE” BASIS. WE (AND AS APPLICABLE KRAKEN) EXPRESSLY DISCLAIM
- ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING
- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE, TITLE, AND NON-INFRINGEMENT RELATING TO OUR SERVICES, THE
- KRAKEN SEQUENCER, AND INK. WITHOUT LIMITING THE FOREGOING, WE (AND
- AS APPLICABLE KRAKEN) DISCLAIM THAT (i) OUR SERVICES OR THE KRAKEN
- SEQUENCER WILL BE AVAILABLE, ACCURATE, SECURE, USEFUL, UNINTERRUPTED
- OR ERROR-FREE; (ii) DEFECTS WITH OUR SERVICES OR THE KRAKEN
- SEQUENCER CAN OR WILL BE CORRECTED; (iii) THE SERVERS THAT MAKE OUR
- SERVICES OR THE KRAKEN SEQUENCER AVAILABLE ARE FREE FROM VIRUSES OR
- OTHER HARMFUL COMPONENTS; (iv) THE SERVICES, THE KRAKEN SEQUENCER,
- OR INK WILL BE COMPATIBLE WITH ANY OTHER APPLICATION, SYSTEM, DEVICE
- OR WALLET; AND (v) THAT THE SERVICES, THE KRAKEN SEQUENCER, OR INK
- WILL PROTECT YOUR ASSETS FROM THEFT, HACKING, CYBER ATTACK OR OTHER
- FORM OF LOSS CAUSED BY THIRD PARTY CONDUCT. WE DON'T PROVIDE
- ANY UPTIME GUARANTEES, AND WE MAY DISCONTINUE MAKING OUR SERVICES OR
- THE KRAKEN SEQUENCER AVAILABLE TO YOU AT ANY TIME AT OUR SOLE
- DISCRETION.
-
-
9. Limitations on Liability
-
- TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, NEITHER WE,
- KRAKEN, OR OUR RESPECTIVE DIRECTORS, MEMBERS, EMPLOYEES OR AGENTS
- WILL BE LIABLE WITH RESPECT TO ANY CLAIM, WHETHER IN CONTRACT, TORT
- (INCLUDING NEGLIGENCE), OR OTHERWISE, RELATED IN ANY WAY TO THESE
- TERMS, OUR SERVICES, THE KRAKEN SEQUENCER, OR INK FOR (1) ANY
- INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR EXEMPLARY DAMAGES,
- INCLUDING DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, OR DATA AND
- (2) TO THE EXTENT NOT ALREADY EXCLUDED, ANY AMOUNTS EXCEEDING $100
- UNITED STATES DOLLARS.
-
-
10. Indemnification
-
- You agree to defend, indemnify, and hold harmless us, Kraken, and
- our respective officers, directors, members, employees, and agents,
- from any claim, demand, action, damage, loss, cost, or expense
- (including reasonable attorneys' fees) relating to (1) your use
- of our Services and the Kraken Sequencer, (2) your violation of
- these Terms, (3) your infringement, misappropriation, or violation
- of the rights of any other person or entity, (4) any content,
- materials, or information (in any form or medium) that you submit,
- post, upload, provide, contribute, or make available (or authorize
- or instruct us to do so) through the Services and the Kraken
- Sequencer, and (5) any Feedback. If you're obligated to
- indemnify us or Kraken, we respectively have the right to control
- any action if we want and you cannot settle any action without our
- consent, unless the settlement is only for money damages which you
- entirely pay.
-
-
- 11. Dispute Resolution By Binding Arbitration; Class Action Waiver
-
-
- This Dispute Resolution by Binding Arbitration section is referred
- to in the Terms as the "Arbitration Agreement ".{" "}
-
-
-
- PLEASE READ THIS ARBITRATION AGREEMENT CAREFULLY BECAUSE IT
- REQUIRES YOU TO ARBITRATE DISPUTES WITH US OR KRAKEN AND IT LIMITS
- THE MANNER IN WHICH YOU CAN SEEK RELIEF.
-
-
-
Informal Process First
-
- We are always interested in resolving disputes amicably and
- efficiently, and most concerns can be resolved quickly and to your
- satisfaction by emailing user support at legal@inkonchain.com.
- However, if such efforts prove unsuccessful, you may send to us, by
- email, a written Notice of Dispute (“Notice ”). The Notice
- should be sent to legal@inkonchain.com and must (a) describe the
- nature and basis of the claim or dispute and (b) set forth the
- specific relief sought. If we and you do not resolve the claim or
- dispute set out in the Notice within sixty (60) calendar days from
- the date of receipt, we or you may commence an arbitration
- proceeding. It is agreed that this dispute resolution procedure is a
- condition precedent which must be satisfied before initiating
- arbitration.
-
-
Arbitration and its Terms
-
- Subject to the informal process outlined in the preceding paragraph,
- you and us agree to arbitrate any dispute arising in connection with
- these Terms (including questions related to their validity,
- existence, or termination) or your use of the Services and the
- Kraken Sequencer, except for disputes in which either party seeks
- equitable and other relief for the alleged unlawful use of
- copyrights, trademarks, trade names, logos, trade secrets or
- patents.{" "}
-
-
- The arbitration will be administered in accordance with the Rules of
- the London Court of International Arbitration then in effect (the “
- LCIA Rules ”). It will be conducted in English and the parties
- will keep the arbitration proceedings confidential and not disclose
- any information regarding the arbitration (or any underlying claim
- or dispute) to any third party except as required by law.
-
-
- Other than class procedures and remedies expressly prohibited by
- this Arbitration Agreement, the arbitrator(s) will have the
- authority to provide any remedy or relief that a court of competent
- jurisdiction could award, including injunctive relief. Any decision
- or award rendered by the arbitrator will be final and binding, and
- may be overturned by a court only for very limited reasons. Any
- judgment may be entered in any court of competent jurisdiction.{" "}
-
-
- If there is any inconsistency between any term of the LCIA Rules and
- any term of this Arbitration Agreement, the applicable terms of this
- Arbitration Agreement will control unless the arbitrator determines
- that the application of the inconsistent Arbitration Agreement terms
- would not result in a fundamentally fair arbitration. The arbitrator
- must also follow the provisions of these Terms as a court would.
-
-
-
- It is expressly agreed that any arbitration under these Terms will
- take place on an individual basis – class arbitrations and class
- action are not permitted. You understand that by agreeing to these
- Terms, you and us are each waiving the right to trial by jury or
- to participate in a class action or class arbitration.
-
-
-
Costs of Arbitration
-
- Payment of all filing, administration and arbitrator costs and
- expenses will be governed by the LCIA Rules then in effect, except
- that if you demonstrate that any such costs and expenses owed by you
- under those rules would be prohibitively more expensive than a court
- proceeding, then we will pay the amount of any such costs and
- expenses that the arbitrator determines are necessary to prevent the
- arbitration from being prohibitively more expensive than a court
- proceeding.
-
-
- Fees and costs may be awarded as provided pursuant to applicable
- law. The arbitrator may make rulings and resolve disputes as to the
- payment and reimbursement of fees or expenses at any time during the
- proceeding and upon request from either party made within 14 days of
- the arbitrator’s ruling on the merits.
-
-
Batch Arbitration
-
- To increase the efficiency of administration and resolution of
- arbitrations, you and us agree that in the event that there are
- one-hundred (100) or more individual claims of a substantially
- similar nature filed against us by or with the assistance of the
- same law firm, group of law firms, or organizations, then within a
- thirty (30) day period (or as soon as possible thereafter), the LCIA
- shall (a) administer the arbitration demands in batches of
- one-hundred (100) claims per batch (plus, to the extent there are
- less than one-hundred (100) claims left over after the batching
- described above, a final batch consisting of the remaining claims);
- (b) appoint one arbitrator for each batch; and (c) provide for the
- resolution of each batch as a single consolidated arbitration with
- one set of filing and administrative fees due per side per batch,
- one procedural calendar, one hearing (if any) in a place to be
- determined by the arbitrator, and one final award (“
- Batch Arbitration ”). All parties agree that claims are of a
- “substantially similar nature” if they arise out of or relate to the
- same event or factual scenario and raise the same or similar legal
- issues and seek the same or similar relief. To the extent the
- parties disagree on the application of the Batch Arbitration
- process, the disagreeing party shall advise the LCIA, and the LCIA
- shall appoint a sole standing arbitrator to determine the
- applicability of the Batch Arbitration process (“
- Administrative Arbitrator ”). In an effort to expedite
- resolution of any such dispute by the Administrative Arbitrator, the
- parties agree the Administrative Arbitrator may set forth such
- procedures as are necessary to resolve any disputes promptly. The
- Administrative Arbitrator’s fees shall be paid by us. You and us
- agree to cooperate in good faith with the LCIA to implement the
- Batch Arbitration process including the payment of single filing and
- administrative fees for batches of claims, as well as any steps to
- minimize the time and costs of arbitration, which may include: (i)
- the appointment of a discovery special master to assist the
- arbitrator in the resolution of discovery disputes; and (ii) the
- adoption of an expedited calendar of the arbitration proceedings.
- This Batch Arbitration provision shall in no way be interpreted as
- authorizing a class, collective and/or mass arbitration or action of
- any kind, or arbitration involving joint or consolidated claims
- under any circumstances, except as expressly set forth in this
- provision.
-
-
-
- Waiver of Right to Bring Class Action and Representative Claims;
- Jury Trial Waiver.{" "}
-
-
-
- WE AND YOU EACH AGREE TO WAIVE ANY RIGHT TO A TRIAL BY JURY. ANY
- CLAIM OR DISPUTE WILL BE DETERMINED BY A NEUTRAL ARBITRATOR AS
- STIPULATED IN THIS ARBITRATION AGREEMENT, NOT A JUDGE OR JURY.
-
-
- TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AND US EACH
- AGREE THAT ANY PROCEEDING TO RESOLVE ANY DISPUTE, CLAIM, OR
- CONTROVERSY WILL BE BROUGHT AND CONDUCTED ONLY IN THE RESPECTIVE
- PARTY’S INDIVIDUAL CAPACITY AND NOT AS PART OF ANY CLASS (OR
- PURPORTED CLASS), CONSOLIDATED, MULTIPLE-PLAINTIFF, OR
- REPRESENTATIVE ACTION OR PROCEEDING (“CLASS ACTION ”).{" "}
-
-
- YOU AND US AGREE TO WAIVE THE RIGHT TO PARTICIPATE AS A PLAINTIFF OR
- CLASS MEMBER IN ANY CLASS ACTION. YOU AND US EXPRESSLY WAIVE ANY
- ABILITY TO MAINTAIN A CLASS ACTION IN ANY FORUM.{" "}
-
-
- IF THE DISPUTE IS SUBJECT TO ARBITRATION, THE ARBITRATOR WILL NOT
- HAVE THE AUTHORITY TO COMBINE OR AGGREGATE CLAIMS, CONDUCT A CLASS
- ACTION, OR MAKE AN AWARD TO ANY PERSON OR ENTITY NOT A PARTY TO THE
- ARBITRATION . FURTHER, YOU AND US AGREE THAT THE ARBITRATOR MAY NOT
- CONSOLIDATE PROCEEDINGS FOR MORE THAN ONE PERSON’S CLAIMS, AND IT
- MAY NOT OTHERWISE PRESIDE OVER ANY FORM OF A CLASS ACTION (OTHER
- THAN THE BATCH ARBITRATION SPECIFIED ABOVE). FOR THE AVOIDANCE OF
- DOUBT, HOWEVER, YOU CAN SEEK PUBLIC INJUNCTIVE RELIEF TO THE EXTENT
- AUTHORIZED BY LAW AND CONSISTENT WITH THE EXCEPTIONS DESCRIBED
- ABOVE.
-
-
- IF THIS CLASS ACTION WAIVER IS LIMITED, VOIDED, OR FOUND
- UNENFORCEABLE, THEN, UNLESS THE PARTIES MUTUALLY AGREE OTHERWISE,
- THE PARTIES’ AGREEMENT TO ARBITRATE SHALL BE NULL AND VOID WITH
- RESPECT TO SUCH PROCEEDING SO LONG AS THE PROCEEDING IS PERMITTED TO
- PROCEED AS A CLASS ACTION. If a court decides that the limitations
- of this paragraph are deemed invalid or unenforceable, any putative
- class, private attorney general, or consolidated or representative
- action must be brought in a court of proper jurisdiction and not in
- arbitration. You acknowledge and agree that this Arbitration
- Agreement applies equally to any claims or disputes between you and
- Kraken in connection with any dispute that arises in relation to
- your use of the Kraken Sequencer, and notices to Kraken may be
- provided to legal@kraken.com.
-
-
- Opt-Out
-
-
- You have the right to opt-out and not be bound by the Arbitration
- Agreement contained in these Terms by sending written notice of your
- decision to opt-out to legal@inkonchain.com. The notice must be sent
- to us within thirty (30) days of your first registering to use the
- Services or agreeing to these Terms; otherwise you shall be bound to
- arbitrate disputes on a non-class basis in accordance with these
- Terms. If you opt out of only the arbitration provisions, and not
- also the class action waiver, the class action waiver still applies.
- You may not opt out of only the class action waiver and not also the
- arbitration provisions. If you opt-out of these arbitration
- provisions, we also will not be bound by them.
-
+
+ Terms of Service
+
+
+
+ The following is a summary of the Terms of Service provided solely for
+ your convenience and informational purposes. You must read the
+ complete Terms of Service below for the legally binding terms.
+
+
+
+ Summary of Terms of Service
+
+
+ This summary provides an overview of our Terms of Service that apply to
+ your use of our website and other services. This summary isn't
+ legally binding and is purely for informational purposes. While we hope
+ this summary section is helpful, please read the complete Terms of
+ Service below for the legally binding terms.
+
+
+
+ Eligibility. The Terms of Service sets forth certain criteria
+ for your eligibility to use our services.
+
+
+ Ink, Our Services, and Third Party Services. Below, you'll
+ find more information about our services, Ink, and Third Party
+ Services. For clarity, Ink and Third Party Services are not part of
+ our services, and as such we have no obligations or liability to you
+ in connection with your use of Ink or Third Party Services. In
+ addition, we explain that there are a number of ways in which you are
+ prohibited from using our services, some of which are covered below.
+
+
+ Availability of Services. Certain services may not be available
+ or may only be available in certain jurisdictions. We also may stop
+ providing certain services.
+
+
+ Content and Feedback. You give us the right to use any content
+ you provide, and we will own any feedback, suggestions, or ideas you
+ provide related to our website or services.
+
+
+ Restrictions. There are also a number of ways in which you are
+ prohibited from using our website or services, some of which are
+ covered below.
+
+
+ Changes. The Terms of Service discuss changes we can make to
+ our website, services, or the terms themselves, including how we can
+ suspend or terminate the website or services. Changes to the Terms of
+ Service, our services, or website may be made at any time, with or
+ without notice. Continued use of our services and website is your
+ consent to the Terms of Service and any changes to them.
+
+
+ Risks and Liability. There are risks associated with using our
+ services, Ink, or Third Party Services. The Terms of Service also
+ cover your responsibility for taking on risk, limit our liability to
+ you, and limit the remedies you may have against us and how you may
+ seek those remedies.
+
+
+ Dispute Resolution. We hope to avoid disputes, but if there is
+ a dispute, you are required to arbitrate disputes with us and the
+ manner in which you can seek relief may be limited.
+
+
+
+ The following is the binding and enforceable Terms of Service.
+
+
+ Terms of Service
+
+
+ Last Updated: December 16, 2024
+
+
+ Please read these Terms of Service (“
Terms ”) carefully, as they
+ are binding and govern your use of our website,{" "}
+
+ https://inkonchain.com/
+ {" "}
+ (the “
Website ”), Interface, Testnet, Kraken Sequencer and any
+ content, tools, documentation, features and functionality offered on or
+ through our Website (collectively, the “
Services ”). They also
+ govern your use of the Kraken Sequencer. By accessing or using our
+ Services, or by submitting any content, you agree to these Terms.
+
+
+ These Terms may change at any time and without notice, including updates
+ to (1) reflect changes to our Services; (2) reflect the addition of new
+ services, features, technologies, or offers; (3) address legal,
+ regulatory, or security developments; or (4) prevent harm to our
+ Services or to those using our Services. These Terms can only be
+ modified in writing, and any change will be effective as of the Last
+ Updated date set forth above. You should frequently check these Terms
+ for updates. If you continue to access or use our Services, after we
+ change these Terms, you agree to all our changes.
+
+
+ These Terms are a legally binding agreement between “you” (an
+ individual, or an entity acting through an authorized individual) and
+ Ink Foundation, C/O CO Services Cayman Limited, PO Box 10008 Willow
+ House Cricket Square, Grand Cayman, Cayman Islands KY1-1001 (“we
+ ”, “us ”, or “our
+ ”).
+
+
+ ARBITRATION NOTICE: THESE TERMS CONTAIN AN ARBITRATION AGREEMENT AND A
+ CLASS ACTION WAIVER. BY AGREEING TO THESE TERMS, YOU AGREE (A) TO
+ RESOLVE ALL DISPUTES (WITH LIMITED EXCEPTION) RELATED TO OUR SERVICES
+ AND/OR PRODUCTS OR THE KRAKEN SEQUENCER THROUGH BINDING INDIVIDUAL
+ ARBITRATION, WHICH MEANS THAT YOU WAIVE ANY RIGHT TO HAVE THOSE DISPUTES
+ DECIDED BY A JUDGE OR JURY, AND (B) TO WAIVE YOUR RIGHT TO PARTICIPATE
+ IN CLASS ACTIONS, CLASS ARBITRATIONS, OR REPRESENTATIVE ACTIONS, AS SET
+ FORTH BELOW. YOU HAVE THE RIGHT TO OPT-OUT OF THE ARBITRATION AGREEMENT
+ AND THE CLASS ACTION WAIVER AS EXPLAINED BELOW.
+
+
+ To make these Terms easier to read, we have organized them as follows:
+
+
+
+ Terms of Service
+
+ Eligibility
+ Ink
+ Our Services
+ Third Party Services
+ Content; Feedback
+ Restrictions
+ Risks
+ Disclaimer of Warranties
+ Limitations on Liability
+ Indemnification
+
+ Dispute Resolution by Binding Arbitration; Class Action Waiver
+
+ Governing Law
+ Suspension; Termination; Discontinuance
+ Personal Data
+ Notices
+ General
+
+
+
+
1. Eligibility
+
+ To use any of our Services or the Kraken Sequencer, you must meet at
+ least the following conditions (“Conditions ”):
+
+
+
+ if you are an individual, be old enough to legally form a binding
+ contract in your jurisdiction (in the USA, that's 18 years old,
+ but it may be different where you live),
+
+
+ if you are an entity, be duly organized and validly existing under the
+ applicable laws of the jurisdiction of your organization,
+
+
+ have full power and authority to enter into these Terms without
+ violating any other agreement you have made,
+
+ not have been restricted from using our services,
+
+ if you are an individual, not be located in, under the control of, or
+ resident in—or, if you are an entity, not be directly or indirectly
+ owned or controlled by any person located in, under the control of, or
+ organized or resident in—any sanctioned or embargoed jurisdiction
+ (including Crimea, Cuba, Donetsk, Iran, Luhansk, North Korea, Russia,
+ Belarus, and Syria), or any jurisdiction where we may have restricted
+ use of any services, and
+
+
+ if you are an individual, not be listed on—or, if you are an entity,
+ not listed on or be directly or indirectly owned or controlled by any
+ person listed on—the Office of Foreign Assets Control of the U.S.
+ Department of Treas.ury's Specially Designated Nationals and
+ Blocked Persons List (“SDN ”), the U.S. Department of
+ Commerce's Denied Persons List, Consolidated Non-SDN Lists
+ available{" "}
+
+ here
+
+ , the United Nations (UN) Security Council Consolidated List available{" "}
+
+ here
+
+ , or regional or foreign government watchlists.
+
+
+
2. Ink
+
+ Ink is a layer 2 optimistic rollup protocol for the Ethereum blockchain
+ (“Ink”) built on open source software that we do not control. Ink
+ includes functionality whereby certain open source smart contracts can
+ receive and hold certain digital currency or other digital assets (“
+ Digital Assets ”) from certain supported blockchain networks such
+ as Ethereum (“
+ Supported Networks ”), which are then represented on Ink (“
+ Bridge Smart Contracts ”). The Bridge Smart Contract can also be
+ used to withdraw your Digital Assets from Ink back to Supported
+ Networks. We do not take possession, custody, or control of any Digital
+ Assets on Ink or sent to its Bridge Smart Contracts. There is a risk
+ that the open source software, including any upgrades, that Ink is built
+ on may introduce bugs, viruses, Trojan horses, or other vulnerabilities
+ or changes to Ink that could result in a partial or complete disruption
+ of Ink or loss, damage, or destruction of your Digital Assets. The
+ Supported Networks, and the types of Digital Assets, that are capable of
+ functionating with Ink and the Bridge Smart Contracts may also be
+ subject to change at any time. We do not control third party
+ applications, including their development or deployment, on Ink, or any
+ activity or transactions occurring on Ink.{" "}
+
+ Therefore, you acknowledge and agree that Ink, including its Bridge
+ Smart Contracts, are not part of our Services, and we have no
+ obligations or liability to you in relation to your use of Ink or its
+ Bridge Smart Contracts, and you use Ink and its Bridge Smart Contracts
+ at your own risk.
+
+
+
3. Our Services
+
+ Interface
+
+
+ Our Website includes a user interface (the “Interface ”) that is
+ intended to allow you to more easily interact with certain
+ functionalities of Ink, such as the Bridge Smart Contracts. Other third
+ parties may deploy their own applications or interfaces to interface
+ with Bridge Smart Contracts, and those other applications or interfaces
+ are not part of our Services.
+
+
+ Testnet
+
+
+ We operate the Ink testnet (the “Testnet ”) as a testing
+ environment that is intended to reproduce the functionality and
+ experience of Ink. The Testnet is intended to allow you to develop
+ applications for Ink and otherwise improve the stability, security, and
+ design of Ink and applications built for Ink. Any Testnet tokens are for
+ testing purposes on the Testnet, have no value, and are not redeemable
+ or convertible for any other token or item of value. We may change,
+ upgrade, discontinue, suspend, or terminate the Testnet at any time and
+ without notice.
+
+
4. Third Party Services
+
+ When using our Services or Ink (including Bridge Smart Contracts), you
+ may have the opportunity to use or interact with third party services.
+ We do not verify, approve, monitor, control or endorse any third-party
+ services and are not liable to you for third-party services or
+ third-party content displayed or otherwise made available on the
+ Services. We are not responsible for, and make no representation as to,
+ any third-party content or services. Your use of third-party content or
+ services may be subject to additional terms and conditions with
+ third-parties, and we are not part of those terms or conditions. You may
+ also incur third-party fees, such as fees associated with third-party
+ services, or other fees, such as gas fees. You're solely
+ responsible for paying all such fees. If any third-party terms and
+ conditions conflict with these Terms, you agree that these Terms
+ control. Under no circumstances shall we incur any liability, of any
+ kind, to you arising from or relating to fees charged to you by
+ third-party content or services linked to or accessed through our
+ Services or Ink (including Bridge Smart Contracts). Your interactions
+ with third-party services, including digital wallets, are governed by
+ their respective privacy policies. We are not responsible for their data
+ practices.
+
+
+ Kraken Continuance (“Kraken ”) operates a node that receives,
+ records, and combines multiple transaction records from Ink into
+ batches, which are then settled to the Ethereum blockchain in a
+ specified format (the “Kraken Sequencer ”). You are not required
+ to use the Kraken Sequencer. If you use the Kraken Sequencer, you agree
+ to pay any applicable gas fees, which may be modified at any time.
+ Kraken will attempt to provide accurate gas fee information in
+ connection with your use of the Kraken Sequencer, but such information
+ reflects its estimate of gas fees, which may vary from the fees you
+ actually pay to use the Kraken Sequencer and interact with Ink. The
+ Kraken Sequencer does not store, take possession, custody, or control of
+ your Digital Assets at any time, except for receiving applicable gas
+ fees. It also does not have the ability to modify, reverse, or otherwise
+ modify any transactions submitted to the Ethereum blockchain. Applicable
+ gas fees received in connection with your use of the Kraken Sequencer
+ may be modified at any time.
+
+
+ To use certain of the Services or the Kraken Sequencer, you may need to
+ connect a compatible third-party digital wallet (“Wallet ”) with
+ the Services or the Kraken Sequencer. By using a Wallet in connection
+ with the Services or the Kraken Sequencer, you agree that you are using
+ the Wallet under the terms and conditions of the applicable third-party
+ provider of such Wallet. Wallets are not associated with, maintained by,
+ or affiliated with us. We accept no responsibility or liability to you
+ in connection with your use of a Wallet, and we make no representations
+ or warranties regarding how the Services, the Kraken Sequencer or Ink
+ will operate or be compatible with any specific Wallet. The private keys
+ necessary to access the assets held in a Wallet are not held by us. You
+ are solely responsible for maintaining the confidentiality of your
+ private keys and you are responsible for any transactions signed with
+ your private keys. We reserve the right, in our sole discretion, to
+ prohibit certain Wallet addresses from being able to use or engage in
+ transactions using the Services or the Kraken Sequencer.
+
+
5. Content; Feedback
+
+ Our Content . We or our licensors own
+ (1) our Services, (2) all content, materials, software, and trademarks
+ found on them, (3) the selection and arrangement of them, and (4) all
+ intellectual property rights in them (collectively, “Our Content
+ ”). So long as you comply with these Terms, you're permitted to use
+ our Services, and Our Content made available to you as part of our
+ Services, but only for your own benefit. We can take away this
+ permission at any time for any reason. You don't have or acquire
+ any rights to Our Content beyond the limited, revocable permission in
+ the previous sentence.
+
+
+ Your Content . You may have the
+ opportunity to transmit content or materials in or through our Services
+ (“Your Content ”), excluding Personal Data as defined in our{" "}
+
+ Privacy Notice
+
+ ). You grant us a perpetual, irrevocable, royalty-free, worldwide, fully
+ sublicensable, non-exclusive right and license to use and exploit Your
+ Content in any manner and for any purpose.
+
+
+ Feedback . You may provide us
+ feedback, suggestions, or ideas relating to our Services (“
+ Feedback ”). You represent and warrant that you have the right to
+ provide us any Feedback that you provide. You agree that we'll own
+ all Feedback, and you hereby irrevocably assign all right, title, and
+ interest in and to all Feedback to us.
+
+
6. Restrictions
+
You won't:
+
+
+ use Our Content to engage in, pay for, or support any illegal,
+ fraudulent, deceptive, or manipulative conduct, including illegal
+ gambling activities, money-laundering, or terrorist activities,
+
+
+ use Our Content in any way or for any purpose that infringes,
+ misappropriates, or otherwise violates any intellectual property
+ rights or other rights of us or any third party, or applicable local,
+ state, or federal law or regulation, or that is prohibited by these
+ Terms,
+
+
+ remove, delete, alter, or obscure any trademarks, specifications,
+ warranties, or disclaimers, or any intellectual property or
+ proprietary rights notices from Our Content,
+
+
+ use, export, reexport or transfer any of Our Content for any purpose
+ prohibited by U.S. or local export or import control laws and
+ regulations,
+
+
+ copy, modify, disassemble, decompile, or reverse engineer Our Content
+ (except to the extent such restrictions are prohibited by applicable
+ law),
+
+
+ use (except as expressly permitted in these Terms), license,
+ sublicense, sell, resell, transfer, assign, distribute or otherwise
+ commercially exploit or make available to any third party Our Content
+ in any way,
+
+
+ take any action or use Our Content in any manner that could damage,
+ destroy, disrupt, disable, impair, overburden, or otherwise impede or
+ harm in any manner Our Content, or interfere with any other
+ party's use of Our Content,
+
+
+ disrupt, interfere with, violate the security of, or attempt to gain
+ unauthorized access to Our Content or any computer network,
+
+
+ bypass, breach, avoid, remove, deactivate, impair, descramble, or
+ otherwise circumvent any security device, protection, or technological
+ measure implemented by us or any of our service providers to protect
+ Our Content,
+
+
+ use any device, software, or routine that interferes with the function
+ of Our Content or transmit in or through Our Content, or use in
+ connection with Our Content, any virus, trojan horse, worm, backdoor,
+ time bomb, malware, or other software or hardware devices designed to
+ permit unauthorized access to, or disable, erase, or otherwise harm,
+ any computer, systems, or software,
+
+
+ access or use Our Content to build or support products or services
+ competitive to our products or Services,
+
+
+ use any web scraping, web harvesting, or data extraction methods to
+ extract any data from Our Content,
+
+
+ create, use, operate, or employ any bots, robots, parsers, spiders,
+ scripts, programs, routines, or any other forms of automation to
+ engage in any activity on Our Content,
+
+
+ develop any third-party applications that interact with Our Content
+ without our prior written consent,
+
+
+ use or attempt to use Our Content for any person other than yourself,
+
+
+ provide false, inaccurate, or misleading information in connection
+ with your use of or access to Our Content,
+
+
+ violate any applicable law or regulation in connection with your use
+ of or access to Our Content; or
+
+
+ encourage, permit, or enable any other person or entity to do any of
+ the foregoing.
+
+
+
7. Risks
+
+ There are substantial risks associated with using our Services, Ink
+ (including the Bridge Smart Contracts) and any third party service
+ available on Ink, and you should carefully consider whether using them
+ is suitable for you in light of your circumstances, knowledge, and
+ financial resources. You may be subject to legal and regulatory
+ compliance obligations in connection with your use of our Services, Ink
+ (including Bridge Smart Contracts), and third party services available
+ on Ink, and you agree that you are solely responsible for your
+ compliance with all laws and regulations. You acknowledge and agree that
+ our Services, Ink (including the Bridge Smart Contracts) and third party
+ services available on Ink may incorporate experimental and novel
+ technology and that the use of such technology involves a high degree of
+ risk, could unexpectedly fail or not perform as intended, and may
+ experience cyber-attacks, botting or other malicious activity, or other
+ operational or technical difficulties or vulnerabilities related to your
+ use of our Services, Ink (including Bridge Smart Contracts), and third
+ party services available on Ink. You acknowledge and agree that smart
+ contracts execute automatically when certain conditions are met, and we
+ do not have the ability to reverse a transaction recorded on a public
+ blockchain. You are responsible for ensuring that any details you enter
+ in connection with a transaction using any smart contracts are accurate
+ and complete. You acknowledge and agree that we cannot control how
+ third-party exchange platforms quote or value Digital Assets, and we are
+ not responsible for any losses you may incur as a result of fluctuations
+ in the value of Digital Assets. As such, you acknowledge and agree that
+ your use of our Services, Ink (including the Bridge Smart Contracts) and
+ any third party service available on Ink, is at your own risk, and that
+ we aren't liable to you for any losses you incur arising from such
+ risks.
+
+
8. Disclaimer of Warranties
+
+ TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, OUR SERVICES, THE
+ KRAKEN SEQUENCER, AND INK ARE PROVIDED ON AN “AS IS” AND “AS AVAILABLE”
+ BASIS. WE (AND AS APPLICABLE KRAKEN) EXPRESSLY DISCLAIM ALL WARRANTIES
+ OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND
+ NON-INFRINGEMENT RELATING TO OUR SERVICES, THE KRAKEN SEQUENCER, AND
+ INK. WITHOUT LIMITING THE FOREGOING, WE (AND AS APPLICABLE KRAKEN)
+ DISCLAIM THAT (i) OUR SERVICES OR THE KRAKEN SEQUENCER WILL BE
+ AVAILABLE, ACCURATE, SECURE, USEFUL, UNINTERRUPTED OR ERROR-FREE; (ii)
+ DEFECTS WITH OUR SERVICES OR THE KRAKEN SEQUENCER CAN OR WILL BE
+ CORRECTED; (iii) THE SERVERS THAT MAKE OUR SERVICES OR THE KRAKEN
+ SEQUENCER AVAILABLE ARE FREE FROM VIRUSES OR OTHER HARMFUL COMPONENTS;
+ (iv) THE SERVICES, THE KRAKEN SEQUENCER, OR INK WILL BE COMPATIBLE WITH
+ ANY OTHER APPLICATION, SYSTEM, DEVICE OR WALLET; AND (v) THAT THE
+ SERVICES, THE KRAKEN SEQUENCER, OR INK WILL PROTECT YOUR ASSETS FROM
+ THEFT, HACKING, CYBER ATTACK OR OTHER FORM OF LOSS CAUSED BY THIRD PARTY
+ CONDUCT. WE DON'T PROVIDE ANY UPTIME GUARANTEES, AND WE MAY
+ DISCONTINUE MAKING OUR SERVICES OR THE KRAKEN SEQUENCER AVAILABLE TO YOU
+ AT ANY TIME AT OUR SOLE DISCRETION.
+
+
9. Limitations on Liability
+
+ TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, NEITHER WE, KRAKEN,
+ OR OUR RESPECTIVE DIRECTORS, MEMBERS, EMPLOYEES OR AGENTS WILL BE LIABLE
+ WITH RESPECT TO ANY CLAIM, WHETHER IN CONTRACT, TORT (INCLUDING
+ NEGLIGENCE), OR OTHERWISE, RELATED IN ANY WAY TO THESE TERMS, OUR
+ SERVICES, THE KRAKEN SEQUENCER, OR INK FOR (1) ANY INDIRECT, INCIDENTAL,
+ SPECIAL, CONSEQUENTIAL, OR EXEMPLARY DAMAGES, INCLUDING DAMAGES FOR LOSS
+ OF PROFITS, GOODWILL, USE, OR DATA AND (2) TO THE EXTENT NOT ALREADY
+ EXCLUDED, ANY AMOUNTS EXCEEDING $100 UNITED STATES DOLLARS.
+
+
10. Indemnification
+
+ You agree to defend, indemnify, and hold harmless us, Kraken, and our
+ respective officers, directors, members, employees, and agents, from any
+ claim, demand, action, damage, loss, cost, or expense (including
+ reasonable attorneys' fees) relating to (1) your use of our
+ Services and the Kraken Sequencer, (2) your violation of these Terms,
+ (3) your infringement, misappropriation, or violation of the rights of
+ any other person or entity, (4) any content, materials, or information
+ (in any form or medium) that you submit, post, upload, provide,
+ contribute, or make available (or authorize or instruct us to do so)
+ through the Services and the Kraken Sequencer, and (5) any Feedback. If
+ you're obligated to indemnify us or Kraken, we respectively have
+ the right to control any action if we want and you cannot settle any
+ action without our consent, unless the settlement is only for money
+ damages which you entirely pay.
+
+
11. Dispute Resolution By Binding Arbitration; Class Action Waiver
+
+ This Dispute Resolution by Binding Arbitration section is referred to in
+ the Terms as the "Arbitration Agreement ".{" "}
+
+
+
+ PLEASE READ THIS ARBITRATION AGREEMENT CAREFULLY BECAUSE IT REQUIRES
+ YOU TO ARBITRATE DISPUTES WITH US OR KRAKEN AND IT LIMITS THE MANNER
+ IN WHICH YOU CAN SEEK RELIEF.
+
+
+
Informal Process First
+
+ We are always interested in resolving disputes amicably and efficiently,
+ and most concerns can be resolved quickly and to your satisfaction by
+ emailing user support at legal@inkonchain.com. However, if such efforts
+ prove unsuccessful, you may send to us, by email, a written Notice of
+ Dispute (“Notice ”). The Notice should be sent to
+ legal@inkonchain.com and must (a) describe the nature and basis of the
+ claim or dispute and (b) set forth the specific relief sought. If we and
+ you do not resolve the claim or dispute set out in the Notice within
+ sixty (60) calendar days from the date of receipt, we or you may
+ commence an arbitration proceeding. It is agreed that this dispute
+ resolution procedure is a condition precedent which must be satisfied
+ before initiating arbitration.
+
+
Arbitration and its Terms
+
+ Subject to the informal process outlined in the preceding paragraph, you
+ and us agree to arbitrate any dispute arising in connection with these
+ Terms (including questions related to their validity, existence, or
+ termination) or your use of the Services and the Kraken Sequencer,
+ except for disputes in which either party seeks equitable and other
+ relief for the alleged unlawful use of copyrights, trademarks, trade
+ names, logos, trade secrets or patents.{" "}
+
+
+ The arbitration will be administered in accordance with the Rules of the
+ London Court of International Arbitration then in effect (the “
+ LCIA Rules ”). It will be conducted in English and the parties
+ will keep the arbitration proceedings confidential and not disclose any
+ information regarding the arbitration (or any underlying claim or
+ dispute) to any third party except as required by law.
+
+
+ Other than class procedures and remedies expressly prohibited by this
+ Arbitration Agreement, the arbitrator(s) will have the authority to
+ provide any remedy or relief that a court of competent jurisdiction
+ could award, including injunctive relief. Any decision or award rendered
+ by the arbitrator will be final and binding, and may be overturned by a
+ court only for very limited reasons. Any judgment may be entered in any
+ court of competent jurisdiction.{" "}
+
+
+ If there is any inconsistency between any term of the LCIA Rules and any
+ term of this Arbitration Agreement, the applicable terms of this
+ Arbitration Agreement will control unless the arbitrator determines that
+ the application of the inconsistent Arbitration Agreement terms would
+ not result in a fundamentally fair arbitration. The arbitrator must also
+ follow the provisions of these Terms as a court would.
+
+
+
+ It is expressly agreed that any arbitration under these Terms will
+ take place on an individual basis – class arbitrations and class
+ action are not permitted. You understand that by agreeing to these
+ Terms, you and us are each waiving the right to trial by jury or to
+ participate in a class action or class arbitration.
+
+
+
Costs of Arbitration
+
+ Payment of all filing, administration and arbitrator costs and expenses
+ will be governed by the LCIA Rules then in effect, except that if you
+ demonstrate that any such costs and expenses owed by you under those
+ rules would be prohibitively more expensive than a court proceeding,
+ then we will pay the amount of any such costs and expenses that the
+ arbitrator determines are necessary to prevent the arbitration from
+ being prohibitively more expensive than a court proceeding.
+
+
+ Fees and costs may be awarded as provided pursuant to applicable law.
+ The arbitrator may make rulings and resolve disputes as to the payment
+ and reimbursement of fees or expenses at any time during the proceeding
+ and upon request from either party made within 14 days of the
+ arbitrator’s ruling on the merits.
+
+
Batch Arbitration
+
+ To increase the efficiency of administration and resolution of
+ arbitrations, you and us agree that in the event that there are
+ one-hundred (100) or more individual claims of a substantially similar
+ nature filed against us by or with the assistance of the same law firm,
+ group of law firms, or organizations, then within a thirty (30) day
+ period (or as soon as possible thereafter), the LCIA shall (a)
+ administer the arbitration demands in batches of one-hundred (100)
+ claims per batch (plus, to the extent there are less than one-hundred
+ (100) claims left over after the batching described above, a final batch
+ consisting of the remaining claims); (b) appoint one arbitrator for each
+ batch; and (c) provide for the resolution of each batch as a single
+ consolidated arbitration with one set of filing and administrative fees
+ due per side per batch, one procedural calendar, one hearing (if any) in
+ a place to be determined by the arbitrator, and one final award (“
+ Batch Arbitration ”). All parties agree that claims are of a
+ “substantially similar nature” if they arise out of or relate to the
+ same event or factual scenario and raise the same or similar legal
+ issues and seek the same or similar relief. To the extent the parties
+ disagree on the application of the Batch Arbitration process, the
+ disagreeing party shall advise the LCIA, and the LCIA shall appoint a
+ sole standing arbitrator to determine the applicability of the Batch
+ Arbitration process (“
+ Administrative Arbitrator ”). In an effort to expedite resolution
+ of any such dispute by the Administrative Arbitrator, the parties agree
+ the Administrative Arbitrator may set forth such procedures as are
+ necessary to resolve any disputes promptly. The Administrative
+ Arbitrator’s fees shall be paid by us. You and us agree to cooperate in
+ good faith with the LCIA to implement the Batch Arbitration process
+ including the payment of single filing and administrative fees for
+ batches of claims, as well as any steps to minimize the time and costs
+ of arbitration, which may include: (i) the appointment of a discovery
+ special master to assist the arbitrator in the resolution of discovery
+ disputes; and (ii) the adoption of an expedited calendar of the
+ arbitration proceedings. This Batch Arbitration provision shall in no
+ way be interpreted as authorizing a class, collective and/or mass
+ arbitration or action of any kind, or arbitration involving joint or
+ consolidated claims under any circumstances, except as expressly set
+ forth in this provision.
+
+
+
+ Waiver of Right to Bring Class Action and Representative Claims; Jury
+ Trial Waiver.{" "}
+
+
+
+ WE AND YOU EACH AGREE TO WAIVE ANY RIGHT TO A TRIAL BY JURY. ANY CLAIM
+ OR DISPUTE WILL BE DETERMINED BY A NEUTRAL ARBITRATOR AS STIPULATED IN
+ THIS ARBITRATION AGREEMENT, NOT A JUDGE OR JURY.
+
+
+ TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AND US EACH AGREE
+ THAT ANY PROCEEDING TO RESOLVE ANY DISPUTE, CLAIM, OR CONTROVERSY WILL
+ BE BROUGHT AND CONDUCTED ONLY IN THE RESPECTIVE PARTY’S INDIVIDUAL
+ CAPACITY AND NOT AS PART OF ANY CLASS (OR PURPORTED CLASS),
+ CONSOLIDATED, MULTIPLE-PLAINTIFF, OR REPRESENTATIVE ACTION OR PROCEEDING
+ (“CLASS ACTION ”).{" "}
+
+
+ YOU AND US AGREE TO WAIVE THE RIGHT TO PARTICIPATE AS A PLAINTIFF OR
+ CLASS MEMBER IN ANY CLASS ACTION. YOU AND US EXPRESSLY WAIVE ANY ABILITY
+ TO MAINTAIN A CLASS ACTION IN ANY FORUM.{" "}
+
+
+ IF THE DISPUTE IS SUBJECT TO ARBITRATION, THE ARBITRATOR WILL NOT HAVE
+ THE AUTHORITY TO COMBINE OR AGGREGATE CLAIMS, CONDUCT A CLASS ACTION, OR
+ MAKE AN AWARD TO ANY PERSON OR ENTITY NOT A PARTY TO THE ARBITRATION .
+ FURTHER, YOU AND US AGREE THAT THE ARBITRATOR MAY NOT CONSOLIDATE
+ PROCEEDINGS FOR MORE THAN ONE PERSON’S CLAIMS, AND IT MAY NOT OTHERWISE
+ PRESIDE OVER ANY FORM OF A CLASS ACTION (OTHER THAN THE BATCH
+ ARBITRATION SPECIFIED ABOVE). FOR THE AVOIDANCE OF DOUBT, HOWEVER, YOU
+ CAN SEEK PUBLIC INJUNCTIVE RELIEF TO THE EXTENT AUTHORIZED BY LAW AND
+ CONSISTENT WITH THE EXCEPTIONS DESCRIBED ABOVE.
+
+
+ IF THIS CLASS ACTION WAIVER IS LIMITED, VOIDED, OR FOUND UNENFORCEABLE,
+ THEN, UNLESS THE PARTIES MUTUALLY AGREE OTHERWISE, THE PARTIES’
+ AGREEMENT TO ARBITRATE SHALL BE NULL AND VOID WITH RESPECT TO SUCH
+ PROCEEDING SO LONG AS THE PROCEEDING IS PERMITTED TO PROCEED AS A CLASS
+ ACTION. If a court decides that the limitations of this paragraph are
+ deemed invalid or unenforceable, any putative class, private attorney
+ general, or consolidated or representative action must be brought in a
+ court of proper jurisdiction and not in arbitration. You acknowledge and
+ agree that this Arbitration Agreement applies equally to any claims or
+ disputes between you and Kraken in connection with any dispute that
+ arises in relation to your use of the Kraken Sequencer, and notices to
+ Kraken may be provided to legal@kraken.com.
+
+
+ Opt-Out
+
+
+ You have the right to opt-out and not be bound by the Arbitration
+ Agreement contained in these Terms by sending written notice of your
+ decision to opt-out to legal@inkonchain.com. The notice must be sent to
+ us within thirty (30) days of your first registering to use the Services
+ or agreeing to these Terms; otherwise you shall be bound to arbitrate
+ disputes on a non-class basis in accordance with these Terms. If you opt
+ out of only the arbitration provisions, and not also the class action
+ waiver, the class action waiver still applies. You may not opt out of
+ only the class action waiver and not also the arbitration provisions. If
+ you opt-out of these arbitration provisions, we also will not be bound
+ by them.
+
-
12. Governing Law
-
- These Terms, your use of the Services, the Kraken Sequencer and any
- disputes arising out of or related thereto is governed by the laws
- of the Cayman Islands, without regard to its conflict of law
- provisions or principles.
-
+
12. Governing Law
+
+ These Terms, your use of the Services, the Kraken Sequencer and any
+ disputes arising out of or related thereto is governed by the laws of
+ the Cayman Islands, without regard to its conflict of law provisions or
+ principles.
+
-
13. Suspension; Termination; Discontinuance
-
- We can, at any time and without liability or prior notice to you:
-
-
-
- modify or discontinue our Services (or any parts of them) or the
- Kraken Sequencer,
-
-
- suspend, restrict, or terminate your access to our Services or the
- Kraken Sequencer, or
-
- suspend, restrict, or delete Your Content.
-
-
- You may terminate your use of our Services or the Kraken Sequencer
- at any time by ceasing to access or use our Services or the Kraken
- Sequencer.
-
+
13. Suspension; Termination; Discontinuance
+
+ We can, at any time and without liability or prior notice to you:
+
+
+
+ modify or discontinue our Services (or any parts of them) or the
+ Kraken Sequencer,
+
+
+ suspend, restrict, or terminate your access to our Services or the
+ Kraken Sequencer, or
+
+ suspend, restrict, or delete Your Content.
+
+
+ You may terminate your use of our Services or the Kraken Sequencer at
+ any time by ceasing to access or use our Services or the Kraken
+ Sequencer.
+
-
14. Personal Data
-
- Please read both our{" "}
-
- Privacy Notice
-
- , and the{" "}
-
- Kraken Privacy Notice
-
- , for information about how your personal data may be collected,
- used, and shared. Both Privacy Notices are incorporated into these
- Terms by reference.
-
+
14. Personal Data
+
+ Please read both our{" "}
+
+ Privacy Notice
+
+ , and the{" "}
+
+ Kraken Privacy Notice
+
+ , for information about how your personal data may be collected, used,
+ and shared. Both Privacy Notices are incorporated into these Terms by
+ reference.
+
-
15. Notices
-
- You agree that we may electronically provide you all communications,
- agreements, documents, notices, and disclosures (“
- Communications ”) in connection with your access or use of our
- Services or the Kraken Sequencer. You agree that we may provide
- Communications to you by posting them on our Services, by emailing
- them to you at the email address you provide, or by sending an SMS
- or text message to a mobile phone number that you provide. Your
- carrier's normal messaging, data, and other rates and fees may
- apply to any mobile Communications you should retain copies of all
- Communications for your records.
-
-
- You may withdraw your consent to receive electronic Communications
- by sending a withdrawal notice via the contact form on our website.
- If you do, we may suspend or terminate your use of our Services or
- the Kraken Sequencer.
-
+
15. Notices
+
+ You agree that we may electronically provide you all communications,
+ agreements, documents, notices, and disclosures (“
+ Communications ”) in connection with your access or use of our
+ Services or the Kraken Sequencer. You agree that we may provide
+ Communications to you by posting them on our Services, by emailing them
+ to you at the email address you provide, or by sending an SMS or text
+ message to a mobile phone number that you provide. Your carrier's
+ normal messaging, data, and other rates and fees may apply to any mobile
+ Communications you should retain copies of all Communications for your
+ records.
+
+
+ You may withdraw your consent to receive electronic Communications by
+ sending a withdrawal notice via the contact form on our website. If you
+ do, we may suspend or terminate your use of our Services or the Kraken
+ Sequencer.
+
-
16. General
-
Force Majeure.
-
- We are not responsible or liable for any error, delay, loss, or
- damage arising from any event beyond our reasonable control (each, a
- “Force Majeure Event ”). Force Majeure Events include flood,
- extraordinary weather conditions, earthquake, or other act of God,
- fire, war, insurrection, riot, labor dispute, accident, action of
- government, communications, power failure, or equipment or software
- malfunction.
-
-
Injunctive Relief.
-
- You agree that a breach of these Terms will cause irreparable injury
- to us for which monetary damages would not be an adequate remedy and
- we are entitled to equitable relief in addition to any remedies we
- may have hereunder or at law without a bond, other security or proof
- of damages.
-
-
Taxes
-
- You alone are responsible for determining what taxes apply to your
- use of our Services, Ink (including the Bridge Smart Contracts) and
- any third party service available on Ink, and for reporting and
- remitting the correct taxes to the appropriate tax authorities. You
- agree that we have no responsibility or liability for determining
- what taxes apply or for collecting, reporting, withholding, or
- remitting any taxes arising from any trades or transactions, unless
- otherwise required by law.
-
-
Waiver.
-
- If we don't exercise a right under these Terms, we are not
- waiving such right.
-
-
Enforceability.
-
- If any provision of these Terms is invalid or unenforceable, such
- provision will be deemed severed from these Terms, but such
- invalidity or unenforceability won't affect any other part of
- these Terms and the rest of these Terms will remain in full force
- and effect; provided, however, that if any such invalid or
- unenforceable provision can be modified so as to be valid and
- enforceable as a matter of law, then such provision is not deemed
- severed from these Terms and instead is deemed to have been modified
- so as to be valid and enforceable to the maximum extent permitted by
- law.
-
-
Assignment.
-
- You cannot assign or transfer any right or obligation under these
- Terms without our prior written consent. We can assign or transfer
- any right or obligation under these Terms, in whole or in part,
- without your consent, subject to compliance with applicable laws. In
- addition, if we are acquired by or merged with a third-party entity,
- we reserve the right to transfer or assign the information we have
- collected from you as part of such merger, acquisition, sale, or
- other change of control.
-
-
Interpretation.
-
- In these Terms, (1) “or” is inclusive, (2) “including” or “such as”
- aren't words of limitation, (3) headings are only for your
- convenience, and (4) the “Summary of Terms of Service” and any
- definitions provided only for informational purposes are provided
- only for your convenience, is not legally binding, and does not
- affect the interpretation of these Terms.
-
-
Relationship.
-
- We don't provide investment or tax advice, including in
- connection with your use of our Services. You agree not to rely upon
- any statement or content on our Services, or that is otherwise
- attributed to us, as a recommendation, advice, or guidance regarding
- trades, investments, tax, or any other similar issues. We also are
- not acting as your bank, broker, intermediary, agent, advisor, or as
- your fiduciary in any capacity, including with respect to the
- services.
-
-
- Nothing in these Terms will be deemed to or is intended to be deemed
- to, nor will it, cause you and us to be treated as partners, joint
- venturers, or otherwise as joint associates for profit.
-
-
California Residents.
-
- If you are a California resident, in accordance with Cal. Civ. Code
- § 1789.3, you may report complaints to the Complaint Assistance Unit
- of the Division of Consumer Services of the California Department of
- Consumer Affairs by contacting them in writing at 1625 North Market
- Blvd., Suite N 112 Sacramento, CA 95834, or by telephone at (800)
- 952-5210.
-
+
16. General
+
Force Majeure.
+
+ We are not responsible or liable for any error, delay, loss, or damage
+ arising from any event beyond our reasonable control (each, a “
+ Force Majeure Event ”). Force Majeure Events include flood,
+ extraordinary weather conditions, earthquake, or other act of God, fire,
+ war, insurrection, riot, labor dispute, accident, action of government,
+ communications, power failure, or equipment or software malfunction.
+
+
Injunctive Relief.
+
+ You agree that a breach of these Terms will cause irreparable injury to
+ us for which monetary damages would not be an adequate remedy and we are
+ entitled to equitable relief in addition to any remedies we may have
+ hereunder or at law without a bond, other security or proof of damages.
+
+
Taxes
+
+ You alone are responsible for determining what taxes apply to your use
+ of our Services, Ink (including the Bridge Smart Contracts) and any
+ third party service available on Ink, and for reporting and remitting
+ the correct taxes to the appropriate tax authorities. You agree that we
+ have no responsibility or liability for determining what taxes apply or
+ for collecting, reporting, withholding, or remitting any taxes arising
+ from any trades or transactions, unless otherwise required by law.
+
+
Waiver.
+
+ If we don't exercise a right under these Terms, we are not waiving
+ such right.
+
+
Enforceability.
+
+ If any provision of these Terms is invalid or unenforceable, such
+ provision will be deemed severed from these Terms, but such invalidity
+ or unenforceability won't affect any other part of these Terms and
+ the rest of these Terms will remain in full force and effect; provided,
+ however, that if any such invalid or unenforceable provision can be
+ modified so as to be valid and enforceable as a matter of law, then such
+ provision is not deemed severed from these Terms and instead is deemed
+ to have been modified so as to be valid and enforceable to the maximum
+ extent permitted by law.
+
+
Assignment.
+
+ You cannot assign or transfer any right or obligation under these Terms
+ without our prior written consent. We can assign or transfer any right
+ or obligation under these Terms, in whole or in part, without your
+ consent, subject to compliance with applicable laws. In addition, if we
+ are acquired by or merged with a third-party entity, we reserve the
+ right to transfer or assign the information we have collected from you
+ as part of such merger, acquisition, sale, or other change of control.
+
+
Interpretation.
+
+ In these Terms, (1) “or” is inclusive, (2) “including” or “such as”
+ aren't words of limitation, (3) headings are only for your
+ convenience, and (4) the “Summary of Terms of Service” and any
+ definitions provided only for informational purposes are provided only
+ for your convenience, is not legally binding, and does not affect the
+ interpretation of these Terms.
+
+
Relationship.
+
+ We don't provide investment or tax advice, including in connection
+ with your use of our Services. You agree not to rely upon any statement
+ or content on our Services, or that is otherwise attributed to us, as a
+ recommendation, advice, or guidance regarding trades, investments, tax,
+ or any other similar issues. We also are not acting as your bank,
+ broker, intermediary, agent, advisor, or as your fiduciary in any
+ capacity, including with respect to the services.
+
+
+ Nothing in these Terms will be deemed to or is intended to be deemed to,
+ nor will it, cause you and us to be treated as partners, joint
+ venturers, or otherwise as joint associates for profit.
+
+
California Residents.
+
+ If you are a California resident, in accordance with Cal. Civ. Code §
+ 1789.3, you may report complaints to the Complaint Assistance Unit of
+ the Division of Consumer Services of the California Department of
+ Consumer Affairs by contacting them in writing at 1625 North Market
+ Blvd., Suite N 112 Sacramento, CA 95834, or by telephone at (800)
+ 952-5210.
+
-
Severability.
-
- You agree and understand that if any provision of these Terms, or
- application thereof, shall be determined to be invalid or
- unenforceable under any rule, law, or regulation or by any
- governmental judicial, legislative or administrative body, such
- provision will be changed and interpreted to accomplish the
- objectives of the provision to the greatest extent possible under
- any applicable law. You further agree and understand that the
- validity of or enforceability of any other provision of these Terms
- unaffected by such invalidity or unenforceability (or of such
- provision, to the extent its application is not invalid or
- unenforceable) shall remain in full force and effect.
-
-
Survival.
-
- All sections which by their nature should survive the termination of
- these Terms shall continue in full force and effect subsequent to
- and notwithstanding any termination of these Terms by you or us.
- Termination won't limit any of our rights or remedies at law or
- equity.
-
-
Entire Agreement.
-
- These Terms are the entire agreement between you and us, and
- supersede all prior and contemporaneous understandings between you
- and us about our Services and the Kraken Sequencer. These Terms
- include all applicable Annexes hereto.
-
-
How to Contact Us.
-
- You may contact us regarding the Services, the Kraken Sequencer or
- these Terms
- .
-
-
Severability.
+ You agree and understand that if any provision of these Terms, or
+ application thereof, shall be determined to be invalid or unenforceable
+ under any rule, law, or regulation or by any governmental judicial,
+ legislative or administrative body, such provision will be changed and
+ interpreted to accomplish the objectives of the provision to the
+ greatest extent possible under any applicable law. You further agree and
+ understand that the validity of or enforceability of any other provision
+ of these Terms unaffected by such invalidity or unenforceability (or of
+ such provision, to the extent its application is not invalid or
+ unenforceable) shall remain in full force and effect.
+
Survival.
+ All sections which by their nature should survive the termination of
+ these Terms shall continue in full force and effect subsequent to and
+ notwithstanding any termination of these Terms by you or us. Termination
+ won't limit any of our rights or remedies at law or equity.
+
Entire Agreement.
+ These Terms are the entire agreement between you and us, and supersede
+ all prior and contemporaneous understandings between you and us about
+ our Services and the Kraken Sequencer. These Terms include all
+ applicable Annexes hereto.
+
How to Contact Us.
+ You may contact us regarding the Services, the Kraken Sequencer or these
+ Terms
+ .
>
);
diff --git a/src/app/[locale]/(info)/terms/terms-before-mainnet.tsx b/src/app/[locale]/(info)/terms/terms-before-mainnet.tsx
index 072d7ed..101c50b 100644
--- a/src/app/[locale]/(info)/terms/terms-before-mainnet.tsx
+++ b/src/app/[locale]/(info)/terms/terms-before-mainnet.tsx
@@ -1,690 +1,659 @@
import { ColoredText } from "@/components/ColoredText";
-import { containerClasses } from "@/components/styles/container";
import { EXTERNAL_LINKS, Link } from "@/routing";
export default function TermsBeforeMainnet() {
return (
<>
-
-
-
- Terms of Service
-
-
-
- The following is a summary of the Ink Limited Terms of Service
- provided solely for your convenience and informational purposes.
- You must read the complete Terms of Service below for the legally
- binding terms.
-
-
-
- Summary of Ink Limited Terms of Service
-
-
- This summary provides an overview of our Terms of Service that apply
- to your use of our website and other services. This summary
- isn't legally binding and is purely for informational purposes.
- While we hope this summary section is helpful, please read the
- complete Terms of Service below for the legally binding terms.
-
-
-
- Eligibility. The Terms of Service sets forth certain
- criteria for your eligibility to use our services.
-
-
- Ink, Our Services, and Third Party Services. Below,
- you'll find more information about our services, Ink, and
- Third Party Services. For clarity, Ink and Third Party Services
- are not part of our services, and as such we have no obligations
- or liability to you in connection with your use of Ink or Third
- Party Services. In addition, we explain that there are a number of
- ways in which you are prohibited from using our services, some of
- which are covered below.{" "}
-
-
- Availability of Services. Certain services may not be
- available or may only be available in certain jurisdictions. We
- also may stop providing certain services.{" "}
-
-
- Content and Feedback. You give us the right to use any
- content you provide, and we will own any feedback, suggestions, or
- ideas you provide related to our website or services.
-
-
- Restrictions. There are also a number of ways in which you
- are prohibited from using our website or services, some of which
- are covered below.
-
-
- Changes. The Terms of Service discuss changes we can make
- to our website, services, or the terms themselves, including how
- we can suspend or terminate the website or services. Changes to
- the Terms of Service, our services, or website may be made at any
- time, with or without notice. Continued use of our services and
- website is your consent to the Terms of Service and any changes to
- them.
-
-
- Risks and Liability. There are risks associated with using
- our services, Ink, or Third Party Services. The Terms of Service
- also cover your responsibility for taking on risk, limit our
- liability to you, and limit the remedies you may have against us
- and how you may seek those remedies.
-
-
- Dispute Resolution. We hope to avoid disputes, but if there
- is a dispute, you are required to arbitrate disputes with us and
- the manner in which you can seek relief may be limited.
-
-
-
-
-
- The following is the binding and enforceable Terms of Service.
-
-
-
- Ink Limited Terms of Service
-
-
- Last Updated: November 1, 2024
-
-
-
- Please read these Terms of Service (“Terms ”) carefully, as
- they are binding and govern your use of our website and services,
- including as more fully addressed below (“Services ”). By
- accessing or using our Services, or by submitting any content, you
- agree to these Terms.{" "}
-
-
-
- These Terms may change at any time and without notice, including
- updates to (1) reflect changes to our Services; (2) reflect the
- addition of new services, features, technologies, or offers; (3)
- address legal, regulatory, or security developments; or (4) prevent
- harm to our Services or to those using our Services. These Terms can
- only be modified in writing, and any change will be effective as of
- the Last Updated date set forth above. You should frequently check
- these Terms for updates. If you continue to access or use our
- Services, after we change these Terms, you agree to all our changes.
-
-
-
- These Terms are a legally binding agreement between “you” (an
- individual, or an entity acting through an authorized individual)
- and Ink Limited, C/O CO Services Cayman Limited, PO Box 10008 Willow
- House Cricket Square, Grand Cayman, Cayman Islands KY1-1001
- (including its affiliates, “we ”, “us ”, or “our
- ”).
-
-
-
- To make these Terms easier to read, we have organized them as
- follows:
-
-
-
-
- Terms of Service
-
- Eligibility
- Ink
- Our Services
- Third Party Services
- Content; Feedback
- Restrictions
- Risks
- Disclaimer of Warranties
- Limitations on Liability
- Indemnification
- Dispute Resolution; Arbitration; Applicable Law
- Suspension; Termination; Discontinuance
- Personal Data
- Notices
- General
-
-
-
-
-
1. Eligibility
-
-
- To use any of our Services, you must meet at least the following
- conditions (“Conditions ”):
-
-
-
- if you are an individual, be old enough to legally form a binding
- contract in your jurisdiction (in the USA, that's 18 years
- old, but it may be different where you live),
-
-
- if you are an entity, be duly organized and validly existing under
- the applicable laws of the jurisdiction of your organization,
-
-
- have full power and authority to enter into these Terms without
- violating any other agreement you have made,
-
- not have been restricted from using our services,
-
- if you are an individual, not be located in, under the control of,
- or resident in—or, if you are an entity, not be directly or
- indirectly owned or controlled by any person located in, under the
- control of, or organized or resident in—any sanctioned or
- embargoed jurisdiction (including Crimea, Cuba, Donetsk, Iran,
- Luhansk, North Korea, Russia, Belarus, and Syria), or any
- jurisdiction where we may have restricted use of any services, and
-
-
- if you are an individual, not be listed on—or, if you are an
- entity, not listed on or be directly or indirectly owned or
- controlled by any person listed on—the Office of Foreign Assets
- Control of the U.S. Department of Treasury's Specially
- Designated Nationals and Blocked Persons List (“SDN ”), the
- U.S. Department of Commerce's Denied Persons List,
- Consolidated Non-SDN Lists available{" "}
-
- here
-
- , the United Nations (UN) Security Council Consolidated List
- available{" "}
-
- here
-
- , or regional or foreign government watchlists.
-
-
-
-
2. Ink
-
-
- Ink is a layer 2 optimistic rollup for the Ethereum blockchain (“
- Ink ”) built on open source software that we do not control.
- Ink includes certain open source smart contracts that can receive
- and hold certain digital currency or other digital assets (“
- Digital Assets ”), which are then represented on Ink (“
- Bridge Smart Contracts ”). You may also use the Bridge Smart
- Contract to withdraw your Digital Assets from Ink. We do not take
- possession, custody, or control of any Digital Assets on Ink or sent
- to its Bridge Smart Contracts. There is a risk that the open source
- software, including any upgrades, that the Ink is built on may
- introduce bugs, viruses, Trojan horses, or other vulnerabilities or
- changes to Ink that could result in a partial or complete disruption
- of Ink or loss, damage, or destruction of your Digital Assets. IWe
- do not control third party applications, including their development
- or deployment, on Ink, or any activity or transactions occurring on
- Ink. Therefore, you acknowledge and agree that Ink, including its
- Bridge Smart Contracts, are not part of our Services, and we have no
- obligations or liability to you in relation to your use of Ink or
- its Bridge Smart Contracts, and you use Ink and its Bridge Smart
- Contracts at your own risk.
-
-
-
3. Our Services
-
-
- Testnet
-
-
-
- The Ink testnet (the “Testnet ”) provides a testing
- environment intended to reproduce the functionality and experience
- of Ink to allow you to develop applications for Ink and otherwise
- improve the stability, security, and design of Ink and applications
- built for Ink. Any Testnet tokens are for testing purposes on the
- Testnet, have no value, and are not redeemable or convertible for
- any other token or item of value. Ink may change, upgrade,
- discontinue, or terminate the Testnet at any time and without
- notice.
-
-
-
- Ink Sequencer
-
-
-
- Ink operates a node that receives, records, and combines multiple
- transaction records from Ink into batches, which are then settled to
- the Ethereum blockchain in a specified format (the “
- Ink Sequencer ”). You are not required to use the Ink
- Sequencer. If you use the Ink Sequencer, you agree to pay any
- applicable gas fees, which may be modified at any time. The Ink
- Sequencer does not store, take possession, custody, or control of
- your Digital Assets at any time, except for receiving applicable gas
- fees. It also does not have the ability to modify, reverse, or
- otherwise modify any transactions submitted to the Ethereum
- blockchain.Applicable gas fees received in connection with your use
- of the Ink Sequencer may be modified at any time.
-
-
-
4. Third Party Services
-
-
- When using our Services or Ink (including Bridge Smart Contracts),
- you may have the opportunity to use third party services. We do not
- verify, approve, monitor, control or endorse any third-party
- services and are not liable to you for third-party content or
- services in any way. Your use of third-party content or services may
- be subject to additional terms and conditions with third-parties,
- and we are not part of those terms or conditions. You may also incur
- third-party fees, such as fees associated with third-party services,
- or other fees, such as gas fees. You're solely responsible for
- paying all such fees. If any third-party terms and conditions
- conflict with these Terms, you agree that these Terms control. Under
- no circumstances shall Ink incur any liability, of any kind, to you
- arising from or relating to fees charged to you by third-party
- services linked to or accessed through our Services or Ink
- (including Bridge Smart Contracts).
-
-
-
5. Content; Feedback
-
-
- Our Content . We or our licensors
- own (1) our Services, (2) all content, materials, software, and
- trademarks found on them, (3) the selection and arrangement of them,
- and (4) all intellectual property rights in them (collectively, “
- Our Content ”). So long as you comply with these Terms,
- you're permitted to use our Services, and Our Content made
- available to you as part of our Services, but only for your own
- benefit. We can take away this permission at any time for any
- reason. You don't have or acquire any rights to Our Content
- beyond the limited, revocable permission in the previous sentence.
-
-
-
- Your Content . You may have the
- opportunity to transmit content or materials in or through our
- Services (“Your Content ”), excluding Personal Data as defined
- in our{" "}
-
- Privacy Notice
-
- ). You grant us a perpetual, irrevocable, royalty-free, worldwide,
- fully sublicensable, non-exclusive right and license to use and
- exploit your Content in any manner and for any purpose.
-
-
-
- Feedback . You may provide us
- feedback, suggestions, or ideas relating to our Services (“
- Feedback ”). You represent and warrant that you have the right
- to provide us any feedback that you provide. You agree that
- we'll own all feedback, and you hereby irrevocably assign all
- right, title, and interest in and to all feedback to us.
-
-
-
6. Restrictions
-
You won't:
-
-
- use Our Content to engage in, pay for, or support any illegal,
- fraudulent, deceptive, or manipulative conduct, including illegal
- gambling activities, money-laundering, or terrorist activities,
-
-
- use Our Content in any way or for any purpose that infringes,
- misappropriates, or otherwise violates any intellectual property
- rights or other rights of us or any third party, or applicable
- local, state, or federal law or regulation, or that is prohibited
- by these Terms,
-
-
- remove, delete, alter, or obscure any trademarks, specifications,
- warranties, or disclaimers, or any intellectual property or
- proprietary rights notices from Our Content,
-
-
- use, export, reexport or transfer any of Our Content for any
- purpose prohibited by U.S. or local export or import control laws
- and regulations,
-
-
- copy, modify, disassemble, decompile, or reverse engineer Our
- Content (except to the extent such restrictions are prohibited by
- applicable law),
-
-
- use (except as expressly permitted in these Terms), license,
- sublicense, sell, resell, transfer, assign, distribute or
- otherwise commercially exploit or make available to any third
- party Our Content in any way,
-
-
- take any action or use Our Content in any manner that could
- damage, destroy, disrupt, disable, impair, overburden, or
- otherwise impede or harm in any manner Our Content, or interfere
- with any other party's use of Our Content,
-
-
- disrupt, interfere with, violate the security of, or attempt to
- gain unauthorized access to Our Content or any computer network,
-
-
- bypass, breach, avoid, remove, deactivate, impair, descramble, or
- otherwise circumvent any security device, protection, or
- technological measure implemented by us or any of our service
- providers to protect Our Content,
-
-
- use any device, software, or routine that interferes with the
- function of Our Content or transmit in or through Our Content, or
- use in connection with Our Content, any virus, trojan horse, worm,
- backdoor, time bomb, malware, or other software or hardware
- devices designed to permit unauthorized access to, or disable,
- erase, or otherwise harm, any computer, systems, or software,
-
-
- access or use Our Content to build or support products or services
- competitive to our products or Services,
-
-
- use any web scraping, web harvesting, or data extraction methods
- to extract any data from Our Content,
-
-
- create, use, operate, or employ any bots, robots, parsers,
- spiders, scripts, programs, routines, or any other forms of
- automation to engage in any activity on Our Content,
-
-
- develop any third-party applications that interact with Our
- Content without our prior written consent,
-
-
- use or attempt to use Our Content for any person other than
- yourself,
-
-
- provide false, inaccurate, or misleading information in connection
- with your use of or access to Our Content, or
-
-
- encourage, permit, or enable any other person or entity to do any
- of the foregoing.
-
-
-
-
7. Risks
-
-
- There are substantial risks associated with using our Services, Ink
- (including the Bridge Smart Contracts) and any third party service
- available on Ink, and you should carefully consider whether using
- them is suitable for you in light of your circumstances, knowledge,
- and financial resources. You may be subject to legal and regulatory
- compliance obligations in connection with your use of our Services,
- Ink (including Bridge Smart Contracts), and third party services
- available on Ink, and you agree that you are solely responsible for
- your compliance with all laws and regulations. You acknowledge and
- agree that our Services, Ink (including Bridge Smart Contracts), and
- third party services available on Ink may incorporate experimental
- and novel technology and that the use of such technology involves a
- high degree of risk, could unexpectedly fail or not perform as
- intended, and may experience cyber-attacks, botting or other
- malicious activity, or other operational or technical difficulties
- or vulnerabilities related to your use of our Services, Ink
- (including Bridge Smart Contracts), and third party services
- available on Ink. As such, you acknowledge and agree that your use
- of our Services, Ink (including the Bridge Smart Contracts) and any
- third party service available on Ink, is at your own risk, and that
- we aren't liable to you for any losses you incur arising from
- such risks.
-
-
-
8. Disclaimer of Warranties
-
- TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, OUR SERVICES ARE
- PROVIDED ON AN “AS IS” AND “AS AVAILABLE” BASIS. WE EXPRESSLY
- DISCLAIM ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED,
- INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT RELATING TO OUR
- SERVICES. WITHOUT LIMITING THE FOREGOING, WE DISCLAIM THAT OUR
- SERVICES WILL BE AVAILABLE, ACCURATE, SECURE, USEFUL, UNINTERRUPTED
- OR ERROR-FREE; THAT DEFECTS WITH OUR SERVICES CAN OR WILL BE
- CORRECTED, OR THAT THE SERVERS THAT MAKE THEM AVAILABLE ARE FREE
- FROM VIRUSES OR OTHER HARMFUL COMPONENTS. WE DON'T PROVIDE ANY
- UPTIME GUARANTEES, AND WE MAY DISCONTINUE MAKING OUR SERVICES
- AVAILABLE TO YOU AT ANY TIME AT OUR SOLE DISCRETION.
-
-
-
9. Limitations on Liability
-
- TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, NEITHER WE NOR
- OUR DIRECTORS, MEMBERS, EMPLOYEES OR AGENTS WILL BE LIABLE WITH
- RESPECT TO ANY CLAIM, WHETHER IN CONTRACT, TORT (INCLUDING
- NEGLIGENCE), OR OTHERWISE, RELATED IN ANY WAY TO THESE TERMS OR OUR
- SERVICES FOR (1) ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL,
- OR EXEMPLARY DAMAGES, INCLUDING DAMAGES FOR LOSS OF PROFITS,
- GOODWILL, USE, OR DATA AND (2) TO THE EXTENT NOT ALREADY EXCLUDED,
- ANY AMOUNTS EXCEEDING $100 UNITED STATES DOLLARS.
-
-
-
10. Indemnification
-
- You agree to defend, indemnify, and hold harmless us and our
- officers, directors, members, employees, and agents, from any claim,
- demand, action, damage, loss, cost, or expense (including reasonable
- attorneys' fees) relating to (1) your use of our Services, (2)
- your violation of these Terms, (3) your infringement,
- misappropriation, or violation of the rights of any other person or
- entity, (4) any content, materials, or information (in any form or
- medium) that you submit, post, upload, provide, contribute, or make
- available (or authorize or instruct us to do so) through the
- Services, and (5) any Feedback. If you're obligated to
- indemnify us, we have the right to control any action if we want and
- you cannot settle any action without our consent, unless the
- settlement is only for money damages which you entirely pay.
-
-
-
11. Dispute Resolution; Arbitration; Applicable Law
-
-
- PLEASE READ THE FOLLOWING PARAGRAPH CAREFULLY BECAUSE IT REQUIRES
- YOU TO ARBITRATE DISPUTES WITH US AND IT LIMITS THE MANNER IN
- WHICH YOU CAN SEEK RELIEF.
-
-
-
- You and us agree to arbitrate any dispute arising from these Terms
- or your use of the Services, except for disputes in which either
- party seeks equitable and other relief for the alleged unlawful use
- of copyrights, trademarks, trade names, logos, trade secrets or
- patents. ARBITRATION PREVENTS YOU FROM SUING IN COURT OR FROM HAVING
- A JURY TRIAL. You and us agree to notify each other in writing of
- any dispute within 30 days of when it arises. Notice to us must be
- sent to legal@inkonchain.com. You and us further agree: (a) to
- attempt informal resolution prior to any demand for arbitration; (b)
- that any arbitration will occur in San Francisco, California; (c)
- that arbitration will be conducted confidentially by a single
- arbitrator in accordance with the rules of JAMS; and (d) that the
- state or federal courts in San Francisco, California have exclusive
- jurisdiction over any appeals of an arbitration award and over any
- suit between the parties not subject to arbitration. Other than
- class procedures and remedies discussed below, the arbitrator has
- the authority to grant any remedy that would otherwise be available
- in court. Any dispute between the parties will be governed by these
- Terms and the laws of the State of California and applicable United
- States law, without giving effect to any conflict of laws principles
- that may provide for the application of the law of another
- jurisdiction. Whether the dispute is heard in arbitration or in
- court, you and us won't commence against the other a class
- action, class arbitration or representative action or proceeding.
-
-
-
12. Suspension; Termination; Discontinuance
-
- We can, at any time and without liability or prior notice to you:
-
-
- modify or discontinue our Services (or any parts of them),
-
- suspend, restrict, or terminate your access to our Services, or
-
- suspend, restrict, or delete Your Content.
-
-
-
- You may terminate your use of our Services at any time by ceasing to
- access or use our Services.
-
-
-
13. Personal Data
-
- Please read our{" "}
-
- Privacy Notice
- {" "}
- for information about how we collect, use, and share your personal
- information. Our Privacy Notice is incorporated into these Terms by
- reference.
-
-
-
14. Notices
-
- You agree that we may electronically provide you all communications,
- agreements, documents, notices, and disclosures (“
- Communications ”) in connection with your access or use of our
- Services. You agree that we may provide Communications to you by
- posting them on our Services, by emailing them to you at the email
- address you provide, or by sending an SMS or text message to a
- mobile phone number that you provide. Your carrier's normal
- messaging, data, and other rates and fees may apply to any mobile
- Communications you should retain copies of all Communications for
- your records.
-
-
-
- You may withdraw your consent to receive electronic Communications
- by sending a withdrawal notice via the contact form on our website.
- If you do, we may suspend or terminate your use of our Services.
-
-
-
15. General
-
Force Majeure.
-
- We are not responsible or liable for any error, delay, loss, or
- damage arising from any event beyond our reasonable control (each, a
- “Force Majeure Event ”). Force Majeure Events include flood,
- extraordinary weather conditions, earthquake, or other act of God,
- fire, war, insurrection, riot, labor dispute, accident, action of
- government, communications, power failure, or equipment or software
- malfunction.
-
-
-
Taxes
-
- You alone are responsible for determining what taxes apply to your
- use of our Services, Ink (including the Bridge Smart Contracts) and
- any third party service available on Ink, and for reporting and
- remitting the correct taxes to the appropriate tax authorities. You
- agree that we have no responsibility or liability for determining
- what taxes apply or for collecting, reporting, withholding, or
- remitting any taxes arising from any trades or transactions, unless
- otherwise required by law.
-
-
-
Waiver.
-
- If we don't exercise a right under these Terms, we are not
- waiving such right.
-
-
-
Enforceability.
-
- If any provision of these Terms is invalid or unenforceable, such
- provision will be deemed severed from these Terms, but such
- invalidity or unenforceability won't affect any other part of
- these Terms and the rest of these Terms will remain in full force
- and effect; provided, however, that if any such invalid or
- unenforceable provision can be modified so as to be valid and
- enforceable as a matter of law, then such provision is not deemed
- severed from these Terms and instead is deemed to have been modified
- so as to be valid and enforceable to the maximum extent permitted by
- law.
-
-
-
Assignment.
-
- You cannot assign or transfer any right or obligation under these
- Terms without our prior written consent. We can assign or transfer
- any right or obligation under these Terms, in whole or in part,
- without your consent, subject to compliance with applicable laws. In
- addition, if we are acquired by or merged with a third-party entity,
- we reserve the right to transfer or assign the information we have
- collected from you as part of such merger, acquisition, sale, or
- other change of control.
-
-
-
Interpretation.
-
- In these Terms, (1) “or” is inclusive, (2) “including” or “such as”
- aren't words of limitation, (3) headings are only for your
- convenience, and (4) the “Summary of Ink Limited Terms of Service”
- and any definitions provided only for informational purposes are
- provided only for your convenience, isn't legally binding, and
- does not affect the interpretation of these Terms.
-
-
-
Relationship.
-
- We don't provide investment or tax advice, including in
- connection with your use of our Services. You agree not to rely upon
- any statement or content on our Services, or that is otherwise
- attributed to us, as a recommendation, advice, or guidance regarding
- trades, investments, tax, or any other similar issues. We also are
- not acting as your bank, broker, intermediary, agent, advisor, or as
- your fiduciary in any capacity, including with respect to the
- services.
-
-
-
- Nothing in these Terms will be deemed to or is intended to be deemed
- to, nor will it, cause you and us to be treated as partners, joint
- venturers, or otherwise as joint associates for profit.
-
-
-
Survival.
-
- If these Terms expire or terminate, the following Sections will
- remain fully binding upon you and us: 1, 2, 2, 3, 4, 5, 6, 8, 9, 10,
- and 11. Termination won't limit any of our rights or remedies
- at law or equity.
-
-
-
Entire Agreement.
-
- These Terms are the entire agreement between you and us, and
- supersede all prior and contemporaneous understandings between you
- and us about our Services. These Terms include all applicable
- Annexes hereto.
-
-
+
+ Terms of Service
+
+
+
+ The following is a summary of the Ink Limited Terms of Service
+ provided solely for your convenience and informational purposes. You
+ must read the complete Terms of Service below for the legally binding
+ terms.
+
+
+
+ Summary of Ink Limited Terms of Service
+
+
+ This summary provides an overview of our Terms of Service that apply to
+ your use of our website and other services. This summary isn't
+ legally binding and is purely for informational purposes. While we hope
+ this summary section is helpful, please read the complete Terms of
+ Service below for the legally binding terms.
+
+
+
+ Eligibility. The Terms of Service sets forth certain criteria
+ for your eligibility to use our services.
+
+
+ Ink, Our Services, and Third Party Services. Below, you'll
+ find more information about our services, Ink, and Third Party
+ Services. For clarity, Ink and Third Party Services are not part of
+ our services, and as such we have no obligations or liability to you
+ in connection with your use of Ink or Third Party Services. In
+ addition, we explain that there are a number of ways in which you are
+ prohibited from using our services, some of which are covered below.{" "}
+
+
+ Availability of Services. Certain services may not be available
+ or may only be available in certain jurisdictions. We also may stop
+ providing certain services.{" "}
+
+
+ Content and Feedback. You give us the right to use any content
+ you provide, and we will own any feedback, suggestions, or ideas you
+ provide related to our website or services.
+
+
+ Restrictions. There are also a number of ways in which you are
+ prohibited from using our website or services, some of which are
+ covered below.
+
+
+ Changes. The Terms of Service discuss changes we can make to
+ our website, services, or the terms themselves, including how we can
+ suspend or terminate the website or services. Changes to the Terms of
+ Service, our services, or website may be made at any time, with or
+ without notice. Continued use of our services and website is your
+ consent to the Terms of Service and any changes to them.
+
+
+ Risks and Liability. There are risks associated with using our
+ services, Ink, or Third Party Services. The Terms of Service also
+ cover your responsibility for taking on risk, limit our liability to
+ you, and limit the remedies you may have against us and how you may
+ seek those remedies.
+
+
+ Dispute Resolution. We hope to avoid disputes, but if there is
+ a dispute, you are required to arbitrate disputes with us and the
+ manner in which you can seek relief may be limited.
+
+
+
+
+ The following is the binding and enforceable Terms of Service.
+
+
+ Ink Limited Terms of Service
+
+
+ Last Updated: November 1, 2024
+
+
+
+ Please read these Terms of Service (“Terms ”) carefully, as they
+ are binding and govern your use of our website and services, including
+ as more fully addressed below (“Services ”). By accessing or using
+ our Services, or by submitting any content, you agree to these Terms.{" "}
+
+
+
+ These Terms may change at any time and without notice, including updates
+ to (1) reflect changes to our Services; (2) reflect the addition of new
+ services, features, technologies, or offers; (3) address legal,
+ regulatory, or security developments; or (4) prevent harm to our
+ Services or to those using our Services. These Terms can only be
+ modified in writing, and any change will be effective as of the Last
+ Updated date set forth above. You should frequently check these Terms
+ for updates. If you continue to access or use our Services, after we
+ change these Terms, you agree to all our changes.
+
+
+
+ These Terms are a legally binding agreement between “you” (an
+ individual, or an entity acting through an authorized individual) and
+ Ink Limited, C/O CO Services Cayman Limited, PO Box 10008 Willow House
+ Cricket Square, Grand Cayman, Cayman Islands KY1-1001 (including its
+ affiliates, “we ”, “us ”, or “our
+ ”).
+
+
+
+ To make these Terms easier to read, we have organized them as follows:
+
+
+
+
+ Terms of Service
+
+ Eligibility
+ Ink
+ Our Services
+ Third Party Services
+ Content; Feedback
+ Restrictions
+ Risks
+ Disclaimer of Warranties
+ Limitations on Liability
+ Indemnification
+ Dispute Resolution; Arbitration; Applicable Law
+ Suspension; Termination; Discontinuance
+ Personal Data
+ Notices
+ General
+
+
+
+
+
1. Eligibility
+
+
+ To use any of our Services, you must meet at least the following
+ conditions (“Conditions ”):
+
+
+
+ if you are an individual, be old enough to legally form a binding
+ contract in your jurisdiction (in the USA, that's 18 years old,
+ but it may be different where you live),
+
+
+ if you are an entity, be duly organized and validly existing under the
+ applicable laws of the jurisdiction of your organization,
+
+
+ have full power and authority to enter into these Terms without
+ violating any other agreement you have made,
+
+ not have been restricted from using our services,
+
+ if you are an individual, not be located in, under the control of, or
+ resident in—or, if you are an entity, not be directly or indirectly
+ owned or controlled by any person located in, under the control of, or
+ organized or resident in—any sanctioned or embargoed jurisdiction
+ (including Crimea, Cuba, Donetsk, Iran, Luhansk, North Korea, Russia,
+ Belarus, and Syria), or any jurisdiction where we may have restricted
+ use of any services, and
+
+
+ if you are an individual, not be listed on—or, if you are an entity,
+ not listed on or be directly or indirectly owned or controlled by any
+ person listed on—the Office of Foreign Assets Control of the U.S.
+ Department of Treasury's Specially Designated Nationals and
+ Blocked Persons List (“SDN ”), the U.S. Department of
+ Commerce's Denied Persons List, Consolidated Non-SDN Lists
+ available{" "}
+
+ here
+
+ , the United Nations (UN) Security Council Consolidated List available{" "}
+
+ here
+
+ , or regional or foreign government watchlists.
+
+
+
+
2. Ink
+
+
+ Ink is a layer 2 optimistic rollup for the Ethereum blockchain (“
+ Ink ”) built on open source software that we do not control. Ink
+ includes certain open source smart contracts that can receive and hold
+ certain digital currency or other digital assets (“
+ Digital Assets ”), which are then represented on Ink (“
+ Bridge Smart Contracts ”). You may also use the Bridge Smart
+ Contract to withdraw your Digital Assets from Ink. We do not take
+ possession, custody, or control of any Digital Assets on Ink or sent to
+ its Bridge Smart Contracts. There is a risk that the open source
+ software, including any upgrades, that the Ink is built on may introduce
+ bugs, viruses, Trojan horses, or other vulnerabilities or changes to Ink
+ that could result in a partial or complete disruption of Ink or loss,
+ damage, or destruction of your Digital Assets. IWe do not control third
+ party applications, including their development or deployment, on Ink,
+ or any activity or transactions occurring on Ink. Therefore, you
+ acknowledge and agree that Ink, including its Bridge Smart Contracts,
+ are not part of our Services, and we have no obligations or liability to
+ you in relation to your use of Ink or its Bridge Smart Contracts, and
+ you use Ink and its Bridge Smart Contracts at your own risk.
+
+
+
3. Our Services
+
+
+ Testnet
+
+
+
+ The Ink testnet (the “Testnet ”) provides a testing environment
+ intended to reproduce the functionality and experience of Ink to allow
+ you to develop applications for Ink and otherwise improve the stability,
+ security, and design of Ink and applications built for Ink. Any Testnet
+ tokens are for testing purposes on the Testnet, have no value, and are
+ not redeemable or convertible for any other token or item of value. Ink
+ may change, upgrade, discontinue, or terminate the Testnet at any time
+ and without notice.
+
+
+
+ Ink Sequencer
+
+
+
+ Ink operates a node that receives, records, and combines multiple
+ transaction records from Ink into batches, which are then settled to the
+ Ethereum blockchain in a specified format (the “Ink Sequencer ”).
+ You are not required to use the Ink Sequencer. If you use the Ink
+ Sequencer, you agree to pay any applicable gas fees, which may be
+ modified at any time. The Ink Sequencer does not store, take possession,
+ custody, or control of your Digital Assets at any time, except for
+ receiving applicable gas fees. It also does not have the ability to
+ modify, reverse, or otherwise modify any transactions submitted to the
+ Ethereum blockchain.Applicable gas fees received in connection with your
+ use of the Ink Sequencer may be modified at any time.
+
+
+
4. Third Party Services
+
+
+ When using our Services or Ink (including Bridge Smart Contracts), you
+ may have the opportunity to use third party services. We do not verify,
+ approve, monitor, control or endorse any third-party services and are
+ not liable to you for third-party content or services in any way. Your
+ use of third-party content or services may be subject to additional
+ terms and conditions with third-parties, and we are not part of those
+ terms or conditions. You may also incur third-party fees, such as fees
+ associated with third-party services, or other fees, such as gas fees.
+ You're solely responsible for paying all such fees. If any
+ third-party terms and conditions conflict with these Terms, you agree
+ that these Terms control. Under no circumstances shall Ink incur any
+ liability, of any kind, to you arising from or relating to fees charged
+ to you by third-party services linked to or accessed through our
+ Services or Ink (including Bridge Smart Contracts).
+
+
+
5. Content; Feedback
+
+
+ Our Content . We or our licensors own
+ (1) our Services, (2) all content, materials, software, and trademarks
+ found on them, (3) the selection and arrangement of them, and (4) all
+ intellectual property rights in them (collectively, “Our Content
+ ”). So long as you comply with these Terms, you're permitted to use
+ our Services, and Our Content made available to you as part of our
+ Services, but only for your own benefit. We can take away this
+ permission at any time for any reason. You don't have or acquire
+ any rights to Our Content beyond the limited, revocable permission in
+ the previous sentence.
+
+
+
+ Your Content . You may have the
+ opportunity to transmit content or materials in or through our Services
+ (“Your Content ”), excluding Personal Data as defined in our{" "}
+
+ Privacy Notice
+
+ ). You grant us a perpetual, irrevocable, royalty-free, worldwide, fully
+ sublicensable, non-exclusive right and license to use and exploit your
+ Content in any manner and for any purpose.
+
+
+
+ Feedback . You may provide us
+ feedback, suggestions, or ideas relating to our Services (“
+ Feedback ”). You represent and warrant that you have the right to
+ provide us any feedback that you provide. You agree that we'll own
+ all feedback, and you hereby irrevocably assign all right, title, and
+ interest in and to all feedback to us.
+
+
+
6. Restrictions
+
You won't:
+
+
+ use Our Content to engage in, pay for, or support any illegal,
+ fraudulent, deceptive, or manipulative conduct, including illegal
+ gambling activities, money-laundering, or terrorist activities,
+
+
+ use Our Content in any way or for any purpose that infringes,
+ misappropriates, or otherwise violates any intellectual property
+ rights or other rights of us or any third party, or applicable local,
+ state, or federal law or regulation, or that is prohibited by these
+ Terms,
+
+
+ remove, delete, alter, or obscure any trademarks, specifications,
+ warranties, or disclaimers, or any intellectual property or
+ proprietary rights notices from Our Content,
+
+
+ use, export, reexport or transfer any of Our Content for any purpose
+ prohibited by U.S. or local export or import control laws and
+ regulations,
+
+
+ copy, modify, disassemble, decompile, or reverse engineer Our Content
+ (except to the extent such restrictions are prohibited by applicable
+ law),
+
+
+ use (except as expressly permitted in these Terms), license,
+ sublicense, sell, resell, transfer, assign, distribute or otherwise
+ commercially exploit or make available to any third party Our Content
+ in any way,
+
+
+ take any action or use Our Content in any manner that could damage,
+ destroy, disrupt, disable, impair, overburden, or otherwise impede or
+ harm in any manner Our Content, or interfere with any other
+ party's use of Our Content,
+
+
+ disrupt, interfere with, violate the security of, or attempt to gain
+ unauthorized access to Our Content or any computer network,
+
+
+ bypass, breach, avoid, remove, deactivate, impair, descramble, or
+ otherwise circumvent any security device, protection, or technological
+ measure implemented by us or any of our service providers to protect
+ Our Content,
+
+
+ use any device, software, or routine that interferes with the function
+ of Our Content or transmit in or through Our Content, or use in
+ connection with Our Content, any virus, trojan horse, worm, backdoor,
+ time bomb, malware, or other software or hardware devices designed to
+ permit unauthorized access to, or disable, erase, or otherwise harm,
+ any computer, systems, or software,
+
+
+ access or use Our Content to build or support products or services
+ competitive to our products or Services,
+
+
+ use any web scraping, web harvesting, or data extraction methods to
+ extract any data from Our Content,
+
+
+ create, use, operate, or employ any bots, robots, parsers, spiders,
+ scripts, programs, routines, or any other forms of automation to
+ engage in any activity on Our Content,
+
+
+ develop any third-party applications that interact with Our Content
+ without our prior written consent,
+
+
+ use or attempt to use Our Content for any person other than yourself,
+
+
+ provide false, inaccurate, or misleading information in connection
+ with your use of or access to Our Content, or
+
+
+ encourage, permit, or enable any other person or entity to do any of
+ the foregoing.
+
+
+
+
7. Risks
+
+
+ There are substantial risks associated with using our Services, Ink
+ (including the Bridge Smart Contracts) and any third party service
+ available on Ink, and you should carefully consider whether using them
+ is suitable for you in light of your circumstances, knowledge, and
+ financial resources. You may be subject to legal and regulatory
+ compliance obligations in connection with your use of our Services, Ink
+ (including Bridge Smart Contracts), and third party services available
+ on Ink, and you agree that you are solely responsible for your
+ compliance with all laws and regulations. You acknowledge and agree that
+ our Services, Ink (including Bridge Smart Contracts), and third party
+ services available on Ink may incorporate experimental and novel
+ technology and that the use of such technology involves a high degree of
+ risk, could unexpectedly fail or not perform as intended, and may
+ experience cyber-attacks, botting or other malicious activity, or other
+ operational or technical difficulties or vulnerabilities related to your
+ use of our Services, Ink (including Bridge Smart Contracts), and third
+ party services available on Ink. As such, you acknowledge and agree that
+ your use of our Services, Ink (including the Bridge Smart Contracts) and
+ any third party service available on Ink, is at your own risk, and that
+ we aren't liable to you for any losses you incur arising from such
+ risks.
+
+
+
8. Disclaimer of Warranties
+
+ TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, OUR SERVICES ARE
+ PROVIDED ON AN “AS IS” AND “AS AVAILABLE” BASIS. WE EXPRESSLY DISCLAIM
+ ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING
+ IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
+ TITLE, AND NON-INFRINGEMENT RELATING TO OUR SERVICES. WITHOUT LIMITING
+ THE FOREGOING, WE DISCLAIM THAT OUR SERVICES WILL BE AVAILABLE,
+ ACCURATE, SECURE, USEFUL, UNINTERRUPTED OR ERROR-FREE; THAT DEFECTS WITH
+ OUR SERVICES CAN OR WILL BE CORRECTED, OR THAT THE SERVERS THAT MAKE
+ THEM AVAILABLE ARE FREE FROM VIRUSES OR OTHER HARMFUL COMPONENTS. WE
+ DON'T PROVIDE ANY UPTIME GUARANTEES, AND WE MAY DISCONTINUE MAKING
+ OUR SERVICES AVAILABLE TO YOU AT ANY TIME AT OUR SOLE DISCRETION.
+
+
+
9. Limitations on Liability
+
+ TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, NEITHER WE NOR OUR
+ DIRECTORS, MEMBERS, EMPLOYEES OR AGENTS WILL BE LIABLE WITH RESPECT TO
+ ANY CLAIM, WHETHER IN CONTRACT, TORT (INCLUDING NEGLIGENCE), OR
+ OTHERWISE, RELATED IN ANY WAY TO THESE TERMS OR OUR SERVICES FOR (1) ANY
+ INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR EXEMPLARY DAMAGES,
+ INCLUDING DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, OR DATA AND (2) TO
+ THE EXTENT NOT ALREADY EXCLUDED, ANY AMOUNTS EXCEEDING $100 UNITED
+ STATES DOLLARS.
+
+
+
10. Indemnification
+
+ You agree to defend, indemnify, and hold harmless us and our officers,
+ directors, members, employees, and agents, from any claim, demand,
+ action, damage, loss, cost, or expense (including reasonable
+ attorneys' fees) relating to (1) your use of our Services, (2) your
+ violation of these Terms, (3) your infringement, misappropriation, or
+ violation of the rights of any other person or entity, (4) any content,
+ materials, or information (in any form or medium) that you submit, post,
+ upload, provide, contribute, or make available (or authorize or instruct
+ us to do so) through the Services, and (5) any Feedback. If you're
+ obligated to indemnify us, we have the right to control any action if we
+ want and you cannot settle any action without our consent, unless the
+ settlement is only for money damages which you entirely pay.
+
+
+
11. Dispute Resolution; Arbitration; Applicable Law
+
+
+ PLEASE READ THE FOLLOWING PARAGRAPH CAREFULLY BECAUSE IT REQUIRES YOU
+ TO ARBITRATE DISPUTES WITH US AND IT LIMITS THE MANNER IN WHICH YOU
+ CAN SEEK RELIEF.
+
+
+
+ You and us agree to arbitrate any dispute arising from these Terms or
+ your use of the Services, except for disputes in which either party
+ seeks equitable and other relief for the alleged unlawful use of
+ copyrights, trademarks, trade names, logos, trade secrets or patents.
+ ARBITRATION PREVENTS YOU FROM SUING IN COURT OR FROM HAVING A JURY
+ TRIAL. You and us agree to notify each other in writing of any dispute
+ within 30 days of when it arises. Notice to us must be sent to
+ legal@inkonchain.com. You and us further agree: (a) to attempt informal
+ resolution prior to any demand for arbitration; (b) that any arbitration
+ will occur in San Francisco, California; (c) that arbitration will be
+ conducted confidentially by a single arbitrator in accordance with the
+ rules of JAMS; and (d) that the state or federal courts in San
+ Francisco, California have exclusive jurisdiction over any appeals of an
+ arbitration award and over any suit between the parties not subject to
+ arbitration. Other than class procedures and remedies discussed below,
+ the arbitrator has the authority to grant any remedy that would
+ otherwise be available in court. Any dispute between the parties will be
+ governed by these Terms and the laws of the State of California and
+ applicable United States law, without giving effect to any conflict of
+ laws principles that may provide for the application of the law of
+ another jurisdiction. Whether the dispute is heard in arbitration or in
+ court, you and us won't commence against the other a class action,
+ class arbitration or representative action or proceeding.
+
+
+
12. Suspension; Termination; Discontinuance
+
+ We can, at any time and without liability or prior notice to you:
+
+
+ modify or discontinue our Services (or any parts of them),
+ suspend, restrict, or terminate your access to our Services, or
+ suspend, restrict, or delete Your Content.
+
+
+
+ You may terminate your use of our Services at any time by ceasing to
+ access or use our Services.
+
+
+
13. Personal Data
+
+ Please read our{" "}
+
+ Privacy Notice
+ {" "}
+ for information about how we collect, use, and share your personal
+ information. Our Privacy Notice is incorporated into these Terms by
+ reference.
+
+
+
14. Notices
+
+ You agree that we may electronically provide you all communications,
+ agreements, documents, notices, and disclosures (“
+ Communications ”) in connection with your access or use of our
+ Services. You agree that we may provide Communications to you by posting
+ them on our Services, by emailing them to you at the email address you
+ provide, or by sending an SMS or text message to a mobile phone number
+ that you provide. Your carrier's normal messaging, data, and other
+ rates and fees may apply to any mobile Communications you should retain
+ copies of all Communications for your records.
+
+
+
+ You may withdraw your consent to receive electronic Communications by
+ sending a withdrawal notice via the contact form on our website. If you
+ do, we may suspend or terminate your use of our Services.
+
+
+
15. General
+
Force Majeure.
+
+ We are not responsible or liable for any error, delay, loss, or damage
+ arising from any event beyond our reasonable control (each, a “
+ Force Majeure Event ”). Force Majeure Events include flood,
+ extraordinary weather conditions, earthquake, or other act of God, fire,
+ war, insurrection, riot, labor dispute, accident, action of government,
+ communications, power failure, or equipment or software malfunction.
+
+
+
Taxes
+
+ You alone are responsible for determining what taxes apply to your use
+ of our Services, Ink (including the Bridge Smart Contracts) and any
+ third party service available on Ink, and for reporting and remitting
+ the correct taxes to the appropriate tax authorities. You agree that we
+ have no responsibility or liability for determining what taxes apply or
+ for collecting, reporting, withholding, or remitting any taxes arising
+ from any trades or transactions, unless otherwise required by law.
+
+
+
Waiver.
+
+ If we don't exercise a right under these Terms, we are not waiving
+ such right.
+
+
+
Enforceability.
+
+ If any provision of these Terms is invalid or unenforceable, such
+ provision will be deemed severed from these Terms, but such invalidity
+ or unenforceability won't affect any other part of these Terms and
+ the rest of these Terms will remain in full force and effect; provided,
+ however, that if any such invalid or unenforceable provision can be
+ modified so as to be valid and enforceable as a matter of law, then such
+ provision is not deemed severed from these Terms and instead is deemed
+ to have been modified so as to be valid and enforceable to the maximum
+ extent permitted by law.
+
+
+
Assignment.
+
+ You cannot assign or transfer any right or obligation under these Terms
+ without our prior written consent. We can assign or transfer any right
+ or obligation under these Terms, in whole or in part, without your
+ consent, subject to compliance with applicable laws. In addition, if we
+ are acquired by or merged with a third-party entity, we reserve the
+ right to transfer or assign the information we have collected from you
+ as part of such merger, acquisition, sale, or other change of control.
+
+
+
Interpretation.
+
+ In these Terms, (1) “or” is inclusive, (2) “including” or “such as”
+ aren't words of limitation, (3) headings are only for your
+ convenience, and (4) the “Summary of Ink Limited Terms of Service” and
+ any definitions provided only for informational purposes are provided
+ only for your convenience, isn't legally binding, and does not
+ affect the interpretation of these Terms.
+
+
+
Relationship.
+
+ We don't provide investment or tax advice, including in connection
+ with your use of our Services. You agree not to rely upon any statement
+ or content on our Services, or that is otherwise attributed to us, as a
+ recommendation, advice, or guidance regarding trades, investments, tax,
+ or any other similar issues. We also are not acting as your bank,
+ broker, intermediary, agent, advisor, or as your fiduciary in any
+ capacity, including with respect to the services.
+
+
+
+ Nothing in these Terms will be deemed to or is intended to be deemed to,
+ nor will it, cause you and us to be treated as partners, joint
+ venturers, or otherwise as joint associates for profit.
+
+
+
Survival.
+
+ If these Terms expire or terminate, the following Sections will remain
+ fully binding upon you and us: 1, 2, 2, 3, 4, 5, 6, 8, 9, 10, and 11.
+ Termination won't limit any of our rights or remedies at law or
+ equity.
+
+
+
Entire Agreement.
+
+ These Terms are the entire agreement between you and us, and supersede
+ all prior and contemporaneous understandings between you and us about
+ our Services. These Terms include all applicable Annexes hereto.
>
);
diff --git a/src/app/[locale]/(info)/training-ground-rules/page.tsx b/src/app/[locale]/(info)/training-ground-rules/page.tsx
index f17eaed..5a05bec 100644
--- a/src/app/[locale]/(info)/training-ground-rules/page.tsx
+++ b/src/app/[locale]/(info)/training-ground-rules/page.tsx
@@ -1,651 +1,626 @@
import { ColoredText } from "@/components/ColoredText";
-import { containerClasses } from "@/components/styles/container";
import { EXTERNAL_LINKS, Link } from "@/routing";
export default function TrainingGroundRules() {
return (
<>
-
-
-
- Ink Training Ground Official Rules
-
+
+ Ink Training Ground Official Rules
+
-
- BY ENTERING THE COMPETITION, YOU AGREE TO THESE OFFICIAL RULES AND
- THE{" "}
-
- INKONCHAIN.COM TERMS OF SERVICE
-
- , WHICH EACH FORM A CONTRACT. READ THEM CAREFULLY BEFORE ENTERING.
- PURCHASE, PAYMENT, OR FUNDING WILL NOT INCREASE YOUR CHANCES OF
- WINNING.
-
+
+ BY ENTERING THE COMPETITION, YOU AGREE TO THESE OFFICIAL RULES AND THE{" "}
+
+ INKONCHAIN.COM TERMS OF SERVICE
+
+ , WHICH EACH FORM A CONTRACT. READ THEM CAREFULLY BEFORE ENTERING.
+ PURCHASE, PAYMENT, OR FUNDING WILL NOT INCREASE YOUR CHANCES OF WINNING.
+
-
- 1. Ink
-
-
- Ink's Training Ground Competition ("Competition") is
- run by Ink Foundation, a Cayman Islands foundation company at CO
- Services Cayman Limited, PO Box 10008, Willow House, Cricket Square,
- Grand Cayman KY1-1001, Cayman Islands ("Ink").
-
+
+ 1. Ink
+
+
+ Ink's Training Ground Competition ("Competition") is run
+ by Ink Foundation, a Cayman Islands foundation company at CO Services
+ Cayman Limited, PO Box 10008, Willow House, Cricket Square, Grand Cayman
+ KY1-1001, Cayman Islands ("Ink").
+
-
- 2. Eligibility
-
-
- Subject to these Official Rules, the Competition is only open to
- those who:
-
-
- Agree to the Inkonchain.com Terms of Service;
-
- Agree to these Official Rules and meet and comply with any and all
- applicable requirements herein; and
-
-
- Are not otherwise ineligible to participate under the
- Inkonchain.com Terms of Service, these Official Rules, or
- applicable law.
-
-
-
- Your participation in the Competition and any claim of Prizes does
- not require or involve any form of purchase, payment, or tangible
- consideration provided to Ink, nor otherwise require or involve any
- acceptance of value by Ink from you.
-
-
- Employees, officers, directors, managers, agents, consultants,
- representatives and family members of Ink employees and consultants
- (or people living in the same household whether related or not), or
- their corporate partners, divisions, subsidiaries, affiliates,
- successors in interest, advertising, promotion, and public relations
- agencies (collectively, the "Competition Entities") are
- not eligible. For the purposes of the Competition, family members
- are defined as spouse, mother, father, legal guardian, in-laws,
- grandmother, grandfather, brother, sister, children and
- grandchildren (including "step" as they may apply).
-
+
+ 2. Eligibility
+
+
+ Subject to these Official Rules, the Competition is only open to those
+ who:
+
+
+ Agree to the Inkonchain.com Terms of Service;
+
+ Agree to these Official Rules and meet and comply with any and all
+ applicable requirements herein; and
+
+
+ Are not otherwise ineligible to participate under the Inkonchain.com
+ Terms of Service, these Official Rules, or applicable law.
+
+
+
+ Your participation in the Competition and any claim of Prizes does not
+ require or involve any form of purchase, payment, or tangible
+ consideration provided to Ink, nor otherwise require or involve any
+ acceptance of value by Ink from you.
+
+
+ Employees, officers, directors, managers, agents, consultants,
+ representatives and family members of Ink employees and consultants (or
+ people living in the same household whether related or not), or their
+ corporate partners, divisions, subsidiaries, affiliates, successors in
+ interest, advertising, promotion, and public relations agencies
+ (collectively, the "Competition Entities") are not eligible.
+ For the purposes of the Competition, family members are defined as
+ spouse, mother, father, legal guardian, in-laws, grandmother,
+ grandfather, brother, sister, children and grandchildren (including
+ "step" as they may apply).
+
-
- 3. Competition Period
-
-
- The "Competition Period" for each week of the Competition
- will begin at 12:00 PM EST on the Monday of the applicable
- Competition week, and ends at 11:59 AM EST on the Sunday of the
- applicable Competition week.
-
+
+ 3. Competition Period
+
+
+ The "Competition Period" for each week of the Competition will
+ begin at 12:00 PM EST on the Monday of the applicable Competition week,
+ and ends at 11:59 AM EST on the Sunday of the applicable Competition
+ week.
+
-
- 4. How to Participate
-
-
To participate in this Competition, you will need to:
-
-
- Join Ink's{" "}
-
- Discord
- {" "}
- and follow @inkonchain on X to receive announcements and
- information about the contest; and
-
-
- Register an EVM-compatible wallet with{" "}
-
- Guild
-
- ; and
-
-
- Follow the instructions to complete each of the announced tasks.
-
-
-
- Participants using or accessing third party sites or services in
- connection with the Competition use and access such sites and
- services subject to the terms applicable to third party services
- contained in the Inkonchain.com Terms of Service. Further, you agree
- to comply with any terms required by such third party services.
-
-
- For each week of the competition, participants will need to complete
- five tasks, which all must be completed to be eligible to win a
- prize. All five tasks must be completed by 11:59 AM EST on the
- Sunday at the end of the applicable week for the Competition.
-
+
+ 4. How to Participate
+
+
To participate in this Competition, you will need to:
+
+
+ Join Ink's{" "}
+
+ Discord
+ {" "}
+ and follow @inkonchain on X to receive announcements and information
+ about the contest; and
+
+
+ Register an EVM-compatible wallet with{" "}
+
+ Guild
+
+ ; and
+
+
+ Follow the instructions to complete each of the announced tasks.
+
+
+
+ Participants using or accessing third party sites or services in
+ connection with the Competition use and access such sites and services
+ subject to the terms applicable to third party services contained in the
+ Inkonchain.com Terms of Service. Further, you agree to comply with any
+ terms required by such third party services.
+
+
+ For each week of the competition, participants will need to complete
+ five tasks, which all must be completed to be eligible to win a prize.
+ All five tasks must be completed by 11:59 AM EST on the Sunday at the
+ end of the applicable week for the Competition.
+
-
- 5. Prohibited Conduct
-
-
- Ink reserves the right to disqualify participants for (1) violation
- of these Official Rules, including breach of the Inkonchain.com
- Terms of Service; (2) violations of applicable law; (3) engaging in
- unfair competition as determined by Ink in its sole discretion, or
- (4) any conduct that violates the following prohibited conduct
- guidelines:
-
-
-
- misuses or uses without authorization any Ink or third party logo,
- trademark, or materials;
-
-
- provides personally identifiable information about yourself or any
- third parties, such as an address, phone number or any contact
- information;
-
-
- violates any third-party right including, but not limited to,
- copyright, trademark, right of publicity or any other proprietary
- right;
-
- is libelous, defamatory, disparaging or tortious;
- is sexually-explicit;
-
- refers to or promotes lotteries or gambling, other competitions or
- giveaways, or other promotions;
-
- includes explicit or offensive language;
- advocates violence;
- advocates illegal activities;
- advocates tobacco, alcohol or drugs;
-
- is unlawful, in violation of or contrary to the laws or
- regulations in any jurisdiction where the content is created; or
-
-
- denigrates, disparages or reflects negatively on Ink, its services
- and products and/or its employees, or on any other person,
- company, services or product, or that disparages Ink's
- competitors.
-
-
-
- Any conduct that does not comply with the above requirements shall
- be invalid and the participant responsible will be automatically
- disqualified.
-
+
+ 5. Prohibited Conduct
+
+
+ Ink reserves the right to disqualify participants for (1) violation of
+ these Official Rules, including breach of the Inkonchain.com Terms of
+ Service; (2) violations of applicable law; (3) engaging in unfair
+ competition as determined by Ink in its sole discretion, or (4) any
+ conduct that violates the following prohibited conduct guidelines:
+
+
+
+ misuses or uses without authorization any Ink or third party logo,
+ trademark, or materials;
+
+
+ provides personally identifiable information about yourself or any
+ third parties, such as an address, phone number or any contact
+ information;
+
+
+ violates any third-party right including, but not limited to,
+ copyright, trademark, right of publicity or any other proprietary
+ right;
+
+ is libelous, defamatory, disparaging or tortious;
+ is sexually-explicit;
+
+ refers to or promotes lotteries or gambling, other competitions or
+ giveaways, or other promotions;
+
+ includes explicit or offensive language;
+ advocates violence;
+ advocates illegal activities;
+ advocates tobacco, alcohol or drugs;
+
+ is unlawful, in violation of or contrary to the laws or regulations in
+ any jurisdiction where the content is created; or
+
+
+ denigrates, disparages or reflects negatively on Ink, its services and
+ products and/or its employees, or on any other person, company,
+ services or product, or that disparages Ink's competitors.
+
+
+
+ Any conduct that does not comply with the above requirements shall be
+ invalid and the participant responsible will be automatically
+ disqualified.
+
-
- 6. Determination of Winners
-
-
- Winners for each week of the competition will be determined within
- five (5) business days of the end of the applicable week.
-
-
- If the task requires submission of content for judgment, each
- participant is limited to submitting one eligible entry. Multiple
- submissions will not be considered. Each submission will be judged
- by Ink, in its sole discretion, in accordance with the judging
- criteria announced for that task. In the event no criteria is
- mentioned, judging will be based on originality and creativity
- (equally weighted) to determine the winning submission.
-
+
+ 6. Determination of Winners
+
+
+ Winners for each week of the competition will be determined within five
+ (5) business days of the end of the applicable week.
+
+
+ If the task requires submission of content for judgment, each
+ participant is limited to submitting one eligible entry. Multiple
+ submissions will not be considered. Each submission will be judged by
+ Ink, in its sole discretion, in accordance with the judging criteria
+ announced for that task. In the event no criteria is mentioned, judging
+ will be based on originality and creativity (equally weighted) to
+ determine the winning submission.
+
-
- 7. Winner Notification
-
-
- Winners will be notified via direct message from the official Ink
- social media accounts. The winner will be required to provide
- sufficient information to deliver any prize awarded.
-
-
- Winners may be required to report and pay taxes on the value of any
- prizes they have won, regardless of the value of that prize. Winners
- are solely responsible for any taxes that may apply. You agree that
- we have no responsibility or liability for determining what taxes
- apply or for collecting, reporting, withholding, or remitting any
- taxes arising from your participation in the Competition, unless
- otherwise required by law. The recipient of any prize acknowledges
- and agrees that they may be required to submit additional
- documentation upon request, including Form W-9 Request for Taxpayer
- Identification Number and Certification (for US Residents) or Form
- W-8BEN (for non-US Residents), to be eligible to receive a prize.
-
-
- Upon confirmation of the winner's eligibility and compliance
- with these Rules, Prizes will be distributed to the winner.
-
+
+ 7. Winner Notification
+
+
+ Winners will be notified via direct message from the official Ink social
+ media accounts. The winner will be required to provide sufficient
+ information to deliver any prize awarded.
+
+
+ Winners may be required to report and pay taxes on the value of any
+ prizes they have won, regardless of the value of that prize. Winners are
+ solely responsible for any taxes that may apply. You agree that we have
+ no responsibility or liability for determining what taxes apply or for
+ collecting, reporting, withholding, or remitting any taxes arising from
+ your participation in the Competition, unless otherwise required by law.
+ The recipient of any prize acknowledges and agrees that they may be
+ required to submit additional documentation upon request, including Form
+ W-9 Request for Taxpayer Identification Number and Certification (for US
+ Residents) or Form W-8BEN (for non-US Residents), to be eligible to
+ receive a prize.
+
+
+ Upon confirmation of the winner's eligibility and compliance with
+ these Rules, Prizes will be distributed to the winner.
+
-
- 8. Prize
-
-
- For each week of the Competition, Ink will announce the number of
- potential winners and available prizes at the time of announcing the
- tasks to be completed for that week of the Competition.
-
-
- All Prizes are subject to such KYC and other compliance checks as
- may be reasonably required by Ink in its sole discretion. Failure to
- provide any requested identification documentation or to meet any
- other compliance requirements may result in your exclusion from the
- Competition or the forfeiture of any and all prizes.
-
-
- 9. Licenses and Approvals
-
-
- By entering the Competition, you agree that any content and any
- other information submitted by you or collected by Ink in connection
- with the Competition may be used by Ink and shared with Ink's
- affiliated business entities. You give consent for Ink and its agents
- to obtain and deliver your name, address and other information to
- third parties for the purpose of administering this Competition and
- complying with applicable laws, regulations, and rules. Except as
- otherwise contemplated in these Official Rules, Ink will use
- personal information collected in connection with the Competition in
- accordance with its online privacy policy, located at
- https://inkonchain.com/privacy.
-
-
- You further represent and warrant that you meet all eligibility
- criteria for participation in the Competition and, in connection
- with the Competition, grant the Competition Entities an irrevocable,
- perpetual, non-exclusive worldwide license to publish, post,
- display, copy, distribute, transmit, edit, use alone, together or
- with other works, and otherwise exploit your Competition
- information, and any other indicia of persona associated with your
- Competition Information, in any manner whatsoever throughout the
- world, including on the internet, and at any time or times, in any
- and all forms of media, now known or hereafter discovered, without
- additional compensation, review or approval rights, notification or
- permission, except where prohibited by law, and you release all
- Competition Entities from any and all liability related thereto. For
- the sake of clarity, you give consent and approval to announce
- Competition results during and at the completion of the Competition
- Period on the internet and social media applications. YOU FURTHER
- ACKNOWLEDGE THAT IF YOU ARE A WINNER, YOUR IDENTIFYING INFORMATION,
- INCLUDING BUT NOT LIMITED TO YOUR NAME AND ADDRESS, MAY BE DISCLOSED
- TO THIRD PARTIES TO FACILITATE THE AWARDING OF PRIZES AND COMPLY
- WITH APPLICABLE LAW AND REPORTING REQUIREMENTS.
-
+
+ 8. Prize
+
+
+ For each week of the Competition, Ink will announce the number of
+ potential winners and available prizes at the time of announcing the
+ tasks to be completed for that week of the Competition.
+
+
+ All Prizes are subject to such KYC and other compliance checks as may be
+ reasonably required by Ink in its sole discretion. Failure to provide
+ any requested identification documentation or to meet any other
+ compliance requirements may result in your exclusion from the
+ Competition or the forfeiture of any and all prizes.
+
+
+ 9. Licenses and Approvals
+
+
+ By entering the Competition, you agree that any content and any other
+ information submitted by you or collected by Ink in connection with the
+ Competition may be used by Ink and shared with Ink's affiliated
+ business entities. You give consent for Ink and its agents to obtain and
+ deliver your name, address and other information to third parties for
+ the purpose of administering this Competition and complying with
+ applicable laws, regulations, and rules. Except as otherwise
+ contemplated in these Official Rules, Ink will use personal information
+ collected in connection with the Competition in accordance with its
+ online privacy policy, located at https://inkonchain.com/privacy.
+
+
+ You further represent and warrant that you meet all eligibility criteria
+ for participation in the Competition and, in connection with the
+ Competition, grant the Competition Entities an irrevocable, perpetual,
+ non-exclusive worldwide license to publish, post, display, copy,
+ distribute, transmit, edit, use alone, together or with other works, and
+ otherwise exploit your Competition information, and any other indicia of
+ persona associated with your Competition Information, in any manner
+ whatsoever throughout the world, including on the internet, and at any
+ time or times, in any and all forms of media, now known or hereafter
+ discovered, without additional compensation, review or approval rights,
+ notification or permission, except where prohibited by law, and you
+ release all Competition Entities from any and all liability related
+ thereto. For the sake of clarity, you give consent and approval to
+ announce Competition results during and at the completion of the
+ Competition Period on the internet and social media applications. YOU
+ FURTHER ACKNOWLEDGE THAT IF YOU ARE A WINNER, YOUR IDENTIFYING
+ INFORMATION, INCLUDING BUT NOT LIMITED TO YOUR NAME AND ADDRESS, MAY BE
+ DISCLOSED TO THIRD PARTIES TO FACILITATE THE AWARDING OF PRIZES AND
+ COMPLY WITH APPLICABLE LAW AND REPORTING REQUIREMENTS.
+
-
- 10. Limitation of Liability
-
+
+ 10. Limitation of Liability
+
-
- By participating in the Competition, you agree to and hereby do
- release and hold harmless the Competition Entities from any damage,
- injury, death, loss, claim, action, demand, or other liability
- (collectively, "Claims") that may arise from your
- acceptance, possession and/or use of any prize or your participation
- in this Competition, regardless of whether such Claims, or knowledge
- of the facts constituting such Claims, exist at the time of entry or
- arise at any time thereafter. Any person attempting to defraud or in
- any way tamper with this Competition may be prosecuted to the full
- extent of the law. Ink reserves the right to modify these Official
- Rules in any way or at any time. Ink reserves the right, in its sole
- discretion, to cancel or suspend this Competition should viruses,
- bugs or other causes beyond their control corrupt the
- administration, security or proper operation of the Competition. In
- the event of cancellation or suspension, Ink shall promptly post a
- notice on Ink's website to such effect.
-
+
+ By participating in the Competition, you agree to and hereby do release
+ and hold harmless the Competition Entities from any damage, injury,
+ death, loss, claim, action, demand, or other liability (collectively,
+ "Claims") that may arise from your acceptance, possession
+ and/or use of any prize or your participation in this Competition,
+ regardless of whether such Claims, or knowledge of the facts
+ constituting such Claims, exist at the time of entry or arise at any
+ time thereafter. Any person attempting to defraud or in any way tamper
+ with this Competition may be prosecuted to the full extent of the law.
+ Ink reserves the right to modify these Official Rules in any way or at
+ any time. Ink reserves the right, in its sole discretion, to cancel or
+ suspend this Competition should viruses, bugs or other causes beyond
+ their control corrupt the administration, security or proper operation
+ of the Competition. In the event of cancellation or suspension, Ink
+ shall promptly post a notice on Ink's website to such effect.
+
-
- 11. Additional Disclaimers
-
+
+ 11. Additional Disclaimers
+
-
- Without limiting any other provision in these Official Rules,
- Competition Entities are not responsible or liable to any
- participant or prize winner or any person claiming through such
- participant or prize winner for failure to supply the prize or any
- part thereof in the event that any of the Competition activities or
- the Competition Entities' operations or activities are
- affected, as determined by the Ink in its sole discretion,
- including, without limitation, by reason of any acts of God, any
- action, regulation, equipment failure, threatened terrorist acts,
- terrorist acts, air raid, blackout, act of public enemy, earthquake,
- war, fire, flood, epidemic, explosion, unusually severe weather,
- hurricane, embargo, labor dispute or strike labor or material
- shortage, transportation interruption of any kind, civil
- disturbance, insurrection, riot, or any law, rule, regulation, order
- or other action adopted or taken by any governmental, federal, state
- or local government authority, or any other cause, whether or not
- specifically mentioned above.
-
+
+ Without limiting any other provision in these Official Rules,
+ Competition Entities are not responsible or liable to any participant or
+ prize winner or any person claiming through such participant or prize
+ winner for failure to supply the prize or any part thereof in the event
+ that any of the Competition activities or the Competition Entities'
+ operations or activities are affected, as determined by the Ink in its
+ sole discretion, including, without limitation, by reason of any acts of
+ God, any action, regulation, equipment failure, threatened terrorist
+ acts, terrorist acts, air raid, blackout, act of public enemy,
+ earthquake, war, fire, flood, epidemic, explosion, unusually severe
+ weather, hurricane, embargo, labor dispute or strike labor or material
+ shortage, transportation interruption of any kind, civil disturbance,
+ insurrection, riot, or any law, rule, regulation, order or other action
+ adopted or taken by any governmental, federal, state or local government
+ authority, or any other cause, whether or not specifically mentioned
+ above.
+
-
- 12. Dispute Resolution by Binding Arbitration
-
+
+ 12. Dispute Resolution by Binding Arbitration
+
-
- This Dispute Resolution by Binding Arbitration section is referred
- to in the Terms as the "Arbitration Agreement".
-
-
- PLEASE READ THIS ARBITRATION AGREEMENT CAREFULLY BECAUSE IT REQUIRES
- YOU TO ARBITRATE DISPUTES WITH US AND IT LIMITS THE MANNER IN WHICH
- YOU CAN SEEK RELIEF.
-
+
+ This Dispute Resolution by Binding Arbitration section is referred to in
+ the Terms as the "Arbitration Agreement".
+
+
+ PLEASE READ THIS ARBITRATION AGREEMENT CAREFULLY BECAUSE IT REQUIRES YOU
+ TO ARBITRATE DISPUTES WITH US AND IT LIMITS THE MANNER IN WHICH YOU CAN
+ SEEK RELIEF.
+
-
- Informal Process First
-
+
+ Informal Process First
+
-
- We are always interested in resolving disputes amicably and
- efficiently, and most concerns can be resolved quickly and to your
- satisfaction by emailing user support at{" "}
-
- legal@inkonchain.com
-
- . However, if such efforts prove unsuccessful, you may send to us,
- by email, a written Notice of Dispute ("Notice"). The
- Notice should be sent to{" "}
-
- legal@inkonchain.com
- {" "}
- and must (a) describe the nature and basis of the claim or dispute
- and (b) set forth the specific relief sought.
-
+
+ We are always interested in resolving disputes amicably and efficiently,
+ and most concerns can be resolved quickly and to your satisfaction by
+ emailing user support at{" "}
+
+ legal@inkonchain.com
+
+ . However, if such efforts prove unsuccessful, you may send to us, by
+ email, a written Notice of Dispute ("Notice"). The Notice
+ should be sent to{" "}
+
+ legal@inkonchain.com
+ {" "}
+ and must (a) describe the nature and basis of the claim or dispute and
+ (b) set forth the specific relief sought.
+
-
- Arbitration and its Terms
-
-
- Subject to the informal process outlined in the preceding paragraph,
- you and us agree to arbitrate any dispute arising in connection with
- these Official Rules (including questions related to their validity,
- existence, or termination), except for disputes in which either
- party seeks equitable and other relief for the alleged unlawful use
- of copyrights, trademarks, trade names, logos, trade secrets or
- patents.
-
-
- The arbitration will be administered in accordance with the Rules of
- the London Court of International Arbitration then in effect (the
- "LCIA Rules"). It will be conducted in English and the
- parties will keep the arbitration proceedings confidential and not
- disclose any information regarding the arbitration (or any
- underlying claim or dispute) to any third party except as required
- by law.
-
-
- Other than class procedures and remedies expressly prohibited by
- this Arbitration Agreement, the arbitrator(s) will have the
- authority to provide any remedy or relief that a court of competent
- jurisdiction could award, including injunctive relief. Any decision
- or award rendered by the arbitrator will be final and binding, and
- may be overturned by a court only for very limited reasons. Any
- judgment may be entered in any court of competent jurisdiction.
-
-
- If there is any inconsistency between any term of the LCIA Rules and
- any term of this Arbitration Agreement, the applicable terms of this
- Arbitration Agreement will control unless the arbitrator determines
- that the application of the inconsistent Arbitration Agreement terms
- would not result in a fundamentally fair arbitration. The arbitrator
- must also follow the provisions of these Terms as a court would.
-
-
- It is expressly agreed that any arbitration under these Official
- Rules will take place on an individual basis – class arbitrations
- and class action are not permitted. You understand that by agreeing
- to these Official Rules, you and us are each waiving the right to
- trial by jury or to participate in a class action or class
- arbitration.
-
+
+ Arbitration and its Terms
+
+
+ Subject to the informal process outlined in the preceding paragraph, you
+ and us agree to arbitrate any dispute arising in connection with these
+ Official Rules (including questions related to their validity,
+ existence, or termination), except for disputes in which either party
+ seeks equitable and other relief for the alleged unlawful use of
+ copyrights, trademarks, trade names, logos, trade secrets or patents.
+
+
+ The arbitration will be administered in accordance with the Rules of the
+ London Court of International Arbitration then in effect (the "LCIA
+ Rules"). It will be conducted in English and the parties will keep
+ the arbitration proceedings confidential and not disclose any
+ information regarding the arbitration (or any underlying claim or
+ dispute) to any third party except as required by law.
+
+
+ Other than class procedures and remedies expressly prohibited by this
+ Arbitration Agreement, the arbitrator(s) will have the authority to
+ provide any remedy or relief that a court of competent jurisdiction
+ could award, including injunctive relief. Any decision or award rendered
+ by the arbitrator will be final and binding, and may be overturned by a
+ court only for very limited reasons. Any judgment may be entered in any
+ court of competent jurisdiction.
+
+
+ If there is any inconsistency between any term of the LCIA Rules and any
+ term of this Arbitration Agreement, the applicable terms of this
+ Arbitration Agreement will control unless the arbitrator determines that
+ the application of the inconsistent Arbitration Agreement terms would
+ not result in a fundamentally fair arbitration. The arbitrator must also
+ follow the provisions of these Terms as a court would.
+
+
+ It is expressly agreed that any arbitration under these Official Rules
+ will take place on an individual basis – class arbitrations and class
+ action are not permitted. You understand that by agreeing to these
+ Official Rules, you and us are each waiving the right to trial by jury
+ or to participate in a class action or class arbitration.
+
-
- Costs of Arbitration
-
-
- Payment of all filing, administration and arbitrator costs and
- expenses will be governed by the LCIA Rules then in effect, except
- that if you demonstrate that any such costs and expenses owed by you
- under those rules would be prohibitively more expensive than a court
- proceeding, then we will pay the amount of any such costs and
- expenses that the arbitrator determines are necessary to prevent the
- arbitration from being prohibitively more expensive than a court
- proceeding.
-
-
- Fees and costs may be awarded as provided pursuant to applicable
- law. The arbitrator may make rulings and resolve disputes as to the
- payment and reimbursement of fees or expenses at any time during the
- proceeding and upon request from either party made within 14 days of
- the arbitrator's ruling on the merits.
-
+
+ Costs of Arbitration
+
+
+ Payment of all filing, administration and arbitrator costs and expenses
+ will be governed by the LCIA Rules then in effect, except that if you
+ demonstrate that any such costs and expenses owed by you under those
+ rules would be prohibitively more expensive than a court proceeding,
+ then we will pay the amount of any such costs and expenses that the
+ arbitrator determines are necessary to prevent the arbitration from
+ being prohibitively more expensive than a court proceeding.
+
+
+ Fees and costs may be awarded as provided pursuant to applicable law.
+ The arbitrator may make rulings and resolve disputes as to the payment
+ and reimbursement of fees or expenses at any time during the proceeding
+ and upon request from either party made within 14 days of the
+ arbitrator's ruling on the merits.
+
-
- Batch Arbitration
-
-
- To increase the efficiency of administration and resolution of
- arbitrations, you and us agree that in the event that there are
- one-hundred (100) or more individual claims of a substantially
- similar nature filed against us by or with the assistance of the
- same law firm, group of law firms, or organizations, then within a
- thirty (30) day period (or as soon as possible thereafter), the LCIA
- shall (a) administer the arbitration demands in batches of
- one-hundred (100) claims per batch (plus, to the extent there are
- less than one-hundred (100) claims left over after the batching
- described above, a final batch consisting of the remaining claims);
- (b) appoint one arbitrator for each batch; and (c) provide for the
- resolution of each batch as a single consolidated arbitration with
- one set of filing and administrative fees due per side per batch,
- one procedural calendar, one hearing (if any) in a place to be
- determined by the arbitrator, and one final award ("Batch
- Arbitration").
-
-
- All parties agree that claims are of a "substantially similar
- nature" if they arise out of or relate to the same event or
- factual scenario and raise the same or similar legal issues and seek
- the same or similar relief. To the extent the parties disagree on
- the application of the Batch Arbitration process, the disagreeing
- party shall advise the LCIA, and the LCIA shall appoint a sole
- standing arbitrator to determine the applicability of the Batch
- Arbitration process ("Administrative Arbitrator"). In an
- effort to expedite resolution of any such dispute by the
- Administrative Arbitrator, the parties agree the Administrative
- Arbitrator may set forth such procedures as are necessary to resolve
- any disputes promptly. The Administrative Arbitrator's fees
- shall be paid by us.
-
-
- You and us agree to cooperate in good faith with the LCIA to
- implement the Batch Arbitration process including the payment of
- single filing and administrative fees for batches of claims, as well
- as any steps to minimize the time and costs of arbitration, which
- may include: (i) the appointment of a discovery special master to
- assist the arbitrator in the resolution of discovery disputes; and
- (ii) the adoption of an expedited calendar of the arbitration
- proceedings.
-
-
- To the extent the parties disagree on the application of the Batch
- Arbitration process, the disagreeing party shall advise the LCIA,
- and the LCIA shall appoint a sole standing arbitrator to determine
- the applicability of the Batch Arbitration process
- ("Administrative Arbitrator").
-
-
- The arbitration will be administered in accordance with the Rules of
- the London Court of International Arbitration then in effect (the
- "LCIA Rules"). It will be conducted in English and the
- parties will keep the arbitration proceedings confidential and not
- disclose any information regarding the arbitration (or any
- underlying claim or dispute) to any third party except as required
- by law.
-
-
- YOU AND US EXPRESSLY WAIVE ANY ABILITY TO MAINTAIN A CLASS ACTION IN
- ANY FORUM. IF THE DISPUTE IS SUBJECT TO ARBITRATION, THE ARBITRATOR
- WILL NOT HAVE THE AUTHORITY TO COMBINE OR AGGREGATE CLAIMS, CONDUCT
- A CLASS ACTION, OR MAKE AN AWARD TO ANY PERSON OR ENTITY NOT A PARTY
- TO THE ARBITRATION.
-
+
+ Batch Arbitration
+
+
+ To increase the efficiency of administration and resolution of
+ arbitrations, you and us agree that in the event that there are
+ one-hundred (100) or more individual claims of a substantially similar
+ nature filed against us by or with the assistance of the same law firm,
+ group of law firms, or organizations, then within a thirty (30) day
+ period (or as soon as possible thereafter), the LCIA shall (a)
+ administer the arbitration demands in batches of one-hundred (100)
+ claims per batch (plus, to the extent there are less than one-hundred
+ (100) claims left over after the batching described above, a final batch
+ consisting of the remaining claims); (b) appoint one arbitrator for each
+ batch; and (c) provide for the resolution of each batch as a single
+ consolidated arbitration with one set of filing and administrative fees
+ due per side per batch, one procedural calendar, one hearing (if any) in
+ a place to be determined by the arbitrator, and one final award
+ ("Batch Arbitration").
+
+
+ All parties agree that claims are of a "substantially similar
+ nature" if they arise out of or relate to the same event or factual
+ scenario and raise the same or similar legal issues and seek the same or
+ similar relief. To the extent the parties disagree on the application of
+ the Batch Arbitration process, the disagreeing party shall advise the
+ LCIA, and the LCIA shall appoint a sole standing arbitrator to determine
+ the applicability of the Batch Arbitration process ("Administrative
+ Arbitrator"). In an effort to expedite resolution of any such
+ dispute by the Administrative Arbitrator, the parties agree the
+ Administrative Arbitrator may set forth such procedures as are necessary
+ to resolve any disputes promptly. The Administrative Arbitrator's
+ fees shall be paid by us.
+
+
+ You and us agree to cooperate in good faith with the LCIA to implement
+ the Batch Arbitration process including the payment of single filing and
+ administrative fees for batches of claims, as well as any steps to
+ minimize the time and costs of arbitration, which may include: (i) the
+ appointment of a discovery special master to assist the arbitrator in
+ the resolution of discovery disputes; and (ii) the adoption of an
+ expedited calendar of the arbitration proceedings.
+
+
+ To the extent the parties disagree on the application of the Batch
+ Arbitration process, the disagreeing party shall advise the LCIA, and
+ the LCIA shall appoint a sole standing arbitrator to determine the
+ applicability of the Batch Arbitration process ("Administrative
+ Arbitrator").
+
+
+ The arbitration will be administered in accordance with the Rules of the
+ London Court of International Arbitration then in effect (the "LCIA
+ Rules"). It will be conducted in English and the parties will keep
+ the arbitration proceedings confidential and not disclose any
+ information regarding the arbitration (or any underlying claim or
+ dispute) to any third party except as required by law.
+
+
+ YOU AND US EXPRESSLY WAIVE ANY ABILITY TO MAINTAIN A CLASS ACTION IN ANY
+ FORUM. IF THE DISPUTE IS SUBJECT TO ARBITRATION, THE ARBITRATOR WILL NOT
+ HAVE THE AUTHORITY TO COMBINE OR AGGREGATE CLAIMS, CONDUCT A CLASS
+ ACTION, OR MAKE AN AWARD TO ANY PERSON OR ENTITY NOT A PARTY TO THE
+ ARBITRATION.
+
-
- Waiver of Right to Bring Class Action and Representative Claims;
- Jury Trial Waiver
-
-
- WE AND YOU EACH AGREE TO WAIVE ANY RIGHT TO A TRIAL BY JURY. ANY
- CLAIM OR DISPUTE WILL BE DETERMINED BY A NEUTRAL ARBITRATOR AS
- STIPULATED IN THIS ARBITRATION AGREEMENT, NOT A JUDGE OR JURY.
-
-
- TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AND US EACH
- AGREE THAT ANY PROCEEDING TO RESOLVE ANY DISPUTE, CLAIM, OR
- CONTROVERSY WILL BE BROUGHT AND CONDUCTED ONLY IN THE RESPECTIVE
- PARTY'S INDIVIDUAL CAPACITY AND NOT AS PART OF ANY CLASS (OR
- PURPORTED CLASS), CONSOLIDATED, MULTIPLE-PLAINTIFF, OR
- REPRESENTATIVE ACTION OR PROCEEDING ("CLASS ACTION").
-
-
- YOU AND US AGREE TO WAIVE THE RIGHT TO PARTICIPATE AS A PLAINTIFF OR
- CLASS MEMBER IN ANY CLASS ACTION. YOU AND US EXPRESSLY WAIVE ANY
- ABILITY TO MAINTAIN A CLASS ACTION IN ANY FORUM.
-
-
- IF THE DISPUTE IS SUBJECT TO ARBITRATION, THE ARBITRATOR WILL NOT
- HAVE THE AUTHORITY TO COMBINE OR AGGREGATE CLAIMS, CONDUCT A CLASS
- ACTION, OR MAKE AN AWARD TO ANY PERSON OR ENTITY NOT A PARTY TO THE
- ARBITRATION. FURTHER, YOU AND US AGREE THAT THE ARBITRATOR MAY NOT
- CONSOLIDATE PROCEEDINGS FOR MORE THAN ONE PERSON'S CLAIMS, AND
- IT MAY NOT OTHERWISE PRESIDE OVER ANY FORM OF A CLASS ACTION (OTHER
- THAN THE BATCH ARBITRATION SPECIFIED ABOVE).
-
-
- FOR THE AVOIDANCE OF DOUBT, HOWEVER, YOU CAN SEEK PUBLIC INJUNCTIVE
- RELIEF TO THE EXTENT AUTHORIZED BY LAW AND CONSISTENT WITH THE
- EXCEPTIONS DESCRIBED ABOVE.
-
-
- IF THIS CLASS ACTION WAIVER IS LIMITED, VOIDED, OR FOUND
- UNENFORCEABLE, THEN, UNLESS THE PARTIES MUTUALLY AGREE OTHERWISE,
- THE PARTIES' AGREEMENT TO ARBITRATE SHALL BE NULL AND VOID WITH
- RESPECT TO SUCH PROCEEDING SO LONG AS THE PROCEEDING IS PERMITTED TO
- PROCEED AS A CLASS ACTION.
-
-
- If a court decides that the limitations of this paragraph are deemed
- invalid or unenforceable, any putative class, private attorney
- general, or consolidated or representative action must be brought in
- a court of proper jurisdiction and not in arbitration.
-
+
+ Waiver of Right to Bring Class Action and Representative Claims; Jury
+ Trial Waiver
+
+
+ WE AND YOU EACH AGREE TO WAIVE ANY RIGHT TO A TRIAL BY JURY. ANY CLAIM
+ OR DISPUTE WILL BE DETERMINED BY A NEUTRAL ARBITRATOR AS STIPULATED IN
+ THIS ARBITRATION AGREEMENT, NOT A JUDGE OR JURY.
+
+
+ TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AND US EACH AGREE
+ THAT ANY PROCEEDING TO RESOLVE ANY DISPUTE, CLAIM, OR CONTROVERSY WILL
+ BE BROUGHT AND CONDUCTED ONLY IN THE RESPECTIVE PARTY'S INDIVIDUAL
+ CAPACITY AND NOT AS PART OF ANY CLASS (OR PURPORTED CLASS),
+ CONSOLIDATED, MULTIPLE-PLAINTIFF, OR REPRESENTATIVE ACTION OR PROCEEDING
+ ("CLASS ACTION").
+
+
+ YOU AND US AGREE TO WAIVE THE RIGHT TO PARTICIPATE AS A PLAINTIFF OR
+ CLASS MEMBER IN ANY CLASS ACTION. YOU AND US EXPRESSLY WAIVE ANY ABILITY
+ TO MAINTAIN A CLASS ACTION IN ANY FORUM.
+
+
+ IF THE DISPUTE IS SUBJECT TO ARBITRATION, THE ARBITRATOR WILL NOT HAVE
+ THE AUTHORITY TO COMBINE OR AGGREGATE CLAIMS, CONDUCT A CLASS ACTION, OR
+ MAKE AN AWARD TO ANY PERSON OR ENTITY NOT A PARTY TO THE ARBITRATION.
+ FURTHER, YOU AND US AGREE THAT THE ARBITRATOR MAY NOT CONSOLIDATE
+ PROCEEDINGS FOR MORE THAN ONE PERSON'S CLAIMS, AND IT MAY NOT
+ OTHERWISE PRESIDE OVER ANY FORM OF A CLASS ACTION (OTHER THAN THE BATCH
+ ARBITRATION SPECIFIED ABOVE).
+
+
+ FOR THE AVOIDANCE OF DOUBT, HOWEVER, YOU CAN SEEK PUBLIC INJUNCTIVE
+ RELIEF TO THE EXTENT AUTHORIZED BY LAW AND CONSISTENT WITH THE
+ EXCEPTIONS DESCRIBED ABOVE.
+
+
+ IF THIS CLASS ACTION WAIVER IS LIMITED, VOIDED, OR FOUND UNENFORCEABLE,
+ THEN, UNLESS THE PARTIES MUTUALLY AGREE OTHERWISE, THE PARTIES'
+ AGREEMENT TO ARBITRATE SHALL BE NULL AND VOID WITH RESPECT TO SUCH
+ PROCEEDING SO LONG AS THE PROCEEDING IS PERMITTED TO PROCEED AS A CLASS
+ ACTION.
+
+
+ If a court decides that the limitations of this paragraph are deemed
+ invalid or unenforceable, any putative class, private attorney general,
+ or consolidated or representative action must be brought in a court of
+ proper jurisdiction and not in arbitration.
+
-
- Opt-Out
-
-
- You have the right to opt-out and not be bound by the Arbitration
- Agreement contained in these Terms by sending written notice of your
- decision to opt-out to{" "}
-
- legal@inkonchain.com
-
- . The notice must be sent to us within thirty (30) days of your
- first registering to use the Services or agreeing to these Terms;
- otherwise you shall be bound to arbitrate disputes on a non-class
- basis in accordance with these Terms. If you opt out of only the
- arbitration provisions, and not also the class action waiver, the
- class action waiver still applies. You may not opt out of only the
- class action waiver and not also the arbitration provisions. If you
- opt-out of these arbitration provisions, we also will not be bound
- by them.
-
+
+ Opt-Out
+
+
+ You have the right to opt-out and not be bound by the Arbitration
+ Agreement contained in these Terms by sending written notice of your
+ decision to opt-out to{" "}
+
+ legal@inkonchain.com
+
+ . The notice must be sent to us within thirty (30) days of your first
+ registering to use the Services or agreeing to these Terms; otherwise
+ you shall be bound to arbitrate disputes on a non-class basis in
+ accordance with these Terms. If you opt out of only the arbitration
+ provisions, and not also the class action waiver, the class action
+ waiver still applies. You may not opt out of only the class action
+ waiver and not also the arbitration provisions. If you opt-out of these
+ arbitration provisions, we also will not be bound by them.
+
-
- 13. General Rules
-
-
- Ink is not responsible for any changes or unavailability of your
- internet, your wallet, dapps, other third party services, or any
- other interference with your ability to access or otherwise
- participate in the Competition, including your ability to timely
- enter or receive notices or communicate with Ink. Ink's failure
- to enforce any term of these Official Rules shall not constitute a
- waiver of that provision. Ink's decisions will be final in all
- matters relating to the Competition. Ink reserves the right to
- restrict or void participation from any IP address if any suspicious
- participation is detected. Ink reserves the right, in its sole
- discretion, to void Participants who Ink believes have attempted to
- tamper with or impair the administration, security, fairness or
- proper play of the Competition.
-
-
- In the event there is an alleged or actual ambiguity, discrepancy or
- inconsistency between disclosures or other statements contained in
- any Competition-related materials and/or these Official Rules
- (including any alleged discrepancy or inconsistency in these
- Official Rules), it will be resolved in Ink's sole discretion.
- You waive any right to claim ambiguity in the Competition or these
- Official Rules. If Ink determines at any time in its sole discretion
- that you are disqualified, ineligible, or in violation of these
- Official Rules, or engaging in behavior that Ink deems obnoxious,
- inappropriate, threatening, infringing, illegal or that is intended
- to annoy, abuse, threaten or harass any other person, Ink reserves
- the right in its sole discretion to select an alternate winner.
-
-
- The invalidity or unenforceability of any provision of these
- Official Rules will not affect the validity or enforceability of any
- other provision. If the Competition is not capable of running as
- planned for any reason, Ink reserves the right, in its sole
- discretion, to cancel, modify or suspend the Competition and award
- the Prize from eligible entries received prior to cancellation,
- modification, or suspension or as otherwise deemed fair and
- appropriate by Ink. Ink may suspend, modify, or terminate the
- Competition in its sole discretion if circumstances arise that
- compromise the integrity, legality, or viability of the Competition.
-
-
- Each potential Winner may be required to provide Ink with proof that
- he or she is the authorized account holder and complete
- documentation required for tax or other legal purposes. If a dispute
- cannot be resolved to Ink's satisfaction, the individual(s) may
- be deemed ineligible in Ink's sole discretion CAUTION: ANY
- ATTEMPT TO DAMAGE ANY ONLINE SERVICE OR UNDERMINE THE LEGITIMATE
- OPERATIONS OF THE COMPETITION VIOLATES CRIMINAL AND CIVIL LAWS. IF
- SUCH AN ATTEMPT IS MADE, INK MAY SEEK DAMAGES TO THE FULLEST EXTENT
- PERMITTED BY LAW AND MAY DISQUALIFY ANY PARTICIPANT MAKING SUCH
- ATTEMPT.
-
-
+
+ 13. General Rules
+
+
+ Ink is not responsible for any changes or unavailability of your
+ internet, your wallet, dapps, other third party services, or any other
+ interference with your ability to access or otherwise participate in the
+ Competition, including your ability to timely enter or receive notices
+ or communicate with Ink. Ink's failure to enforce any term of these
+ Official Rules shall not constitute a waiver of that provision.
+ Ink's decisions will be final in all matters relating to the
+ Competition. Ink reserves the right to restrict or void participation
+ from any IP address if any suspicious participation is detected. Ink
+ reserves the right, in its sole discretion, to void Participants who Ink
+ believes have attempted to tamper with or impair the administration,
+ security, fairness or proper play of the Competition.
+
+
+ In the event there is an alleged or actual ambiguity, discrepancy or
+ inconsistency between disclosures or other statements contained in any
+ Competition-related materials and/or these Official Rules (including any
+ alleged discrepancy or inconsistency in these Official Rules), it will
+ be resolved in Ink's sole discretion. You waive any right to claim
+ ambiguity in the Competition or these Official Rules. If Ink determines
+ at any time in its sole discretion that you are disqualified,
+ ineligible, or in violation of these Official Rules, or engaging in
+ behavior that Ink deems obnoxious, inappropriate, threatening,
+ infringing, illegal or that is intended to annoy, abuse, threaten or
+ harass any other person, Ink reserves the right in its sole discretion
+ to select an alternate winner.
+
+
+ The invalidity or unenforceability of any provision of these Official
+ Rules will not affect the validity or enforceability of any other
+ provision. If the Competition is not capable of running as planned for
+ any reason, Ink reserves the right, in its sole discretion, to cancel,
+ modify or suspend the Competition and award the Prize from eligible
+ entries received prior to cancellation, modification, or suspension or
+ as otherwise deemed fair and appropriate by Ink. Ink may suspend,
+ modify, or terminate the Competition in its sole discretion if
+ circumstances arise that compromise the integrity, legality, or
+ viability of the Competition.
+
+
+ Each potential Winner may be required to provide Ink with proof that he
+ or she is the authorized account holder and complete documentation
+ required for tax or other legal purposes. If a dispute cannot be
+ resolved to Ink's satisfaction, the individual(s) may be deemed
+ ineligible in Ink's sole discretion CAUTION: ANY ATTEMPT TO DAMAGE
+ ANY ONLINE SERVICE OR UNDERMINE THE LEGITIMATE OPERATIONS OF THE
+ COMPETITION VIOLATES CRIMINAL AND CIVIL LAWS. IF SUCH AN ATTEMPT IS
+ MADE, INK MAY SEEK DAMAGES TO THE FULLEST EXTENT PERMITTED BY LAW AND
+ MAY DISQUALIFY ANY PARTICIPANT MAKING SUCH ATTEMPT.
>
);
diff --git a/src/app/[locale]/(info)/wizarding-academy-rules/page.tsx b/src/app/[locale]/(info)/wizarding-academy-rules/page.tsx
index eea0633..bd51489 100644
--- a/src/app/[locale]/(info)/wizarding-academy-rules/page.tsx
+++ b/src/app/[locale]/(info)/wizarding-academy-rules/page.tsx
@@ -1,5 +1,4 @@
import { ColoredText } from "@/components/ColoredText";
-import { containerClasses } from "@/components/styles/container";
import { EXTERNAL_LINKS, Link } from "@/routing";
/**
@@ -19,494 +18,484 @@ Here is the prompt that I used (change the examples if needed):
6. Change single list ol + li into a ColoredText component with 'variant="purple"' and the text-2xl or text-4xl class depending on the heading level. For instance, numbered items should have text-4xl. Use text-6xl for the main header. If the elements needs to be bold, add "font-bold" to the class as well.
7. Change mailto:legal to EXTERNAL_LINKS.legal and a Link component
8. All links should have classes "text-blue-500 hover:underline" and 'target="_blank' and 'rel="noopener noreferrer"'
- 9. Wrap the whole thing in
+ 9. Wrap the whole thing in a fragment: `<>>`
10. In the text, change the ' character with "'", the " character with """
*/
export default function TrainingGroundRules() {
return (
-
-
-
- INK WIZARDING ACADEMY - OFFICIAL RULES
-
-
-
- BY PARTICIPATING IN THE ACADEMY, YOU AGREE TO THESE OFFICIAL RULES AND
- THE{" "}
-
- INKONCHAIN.COM TERMS OF SERVICE
-
- , WHICH FORM A CONTRACT. READ THEM CAREFULLY BEFORE ENTERING.
- PURCHASE, PAYMENT, OR FUNDING WILL NOT INCREASE YOUR CHANCES OF
- WINNING.
-
-
-
- Ink's Wizarding Academy ("Academy") is run by Ink
- Foundation, a Cayman Islands foundation company at CO Services Cayman
- Limited, PO Box 10008, Willow House, Cricket Square, Grand Cayman
- KY1-1001, Cayman Islands ("Ink").
-
-
-
- 1. Eligibility to Participate in the Academy
-
-
-
- You are eligible to participate in the Academy if, at the time of
- entry and during the Academy, you:
-
-
-
- Reside in the Eligible Areas identified above;
- Agree to the Inkonchain.com Terms of Service;
-
- Agree to these Rules and meet and comply with any and all applicable
- requirements herein;
-
-
- Are not otherwise ineligible to participate under the Inkonchain.com
- Terms of Service, these Rules, or applicable law.
-
-
-
-
- By submitting participating in the Academy, you represent and warrant
- that you meet, and will continue to meet throughout the Academy
- Session, each of the above criteria and are eligible to participate in
- the Academy.
-
-
-
- 2. Disqualification
-
-
-
- Ink reserves the right to disqualify you if Ink determines, in its
- sole discretion, that you have (A) violated these Rules, including the
- Inkonchain.com Terms of Service or applicable law.
-
-
-
- 3. Daap Cosponsors
-
-
-
- In the event that an Academy Session is co-sponsored by a Dapp, such
- co-sponsorship does not constitute an endorsement of the Dapp, its
- personnel, or its products or services by Ink. Further, the Daap
- cosponsor will be solely responsible and liable for the determination
- and notification of winners and providing any prizes. As a result, you
- acknowledge and agree that Ink makes no representations or warranties,
- express or implied, regarding any prize and will not be liable for any
- claims, damages, losses, or injuries arising out of or related to the
- receipt, use, or misuse of any prize provided by the Dapp cosponsor.
- Any issues or disputes regarding the prizes must be resolved directly
- with the Dapp cosponsor.
-
-
-
- 4. Notification of Winner
-
-
-
- If a task requires submission of content for judgment, each
- participant is limited to submitting one eligible entry. Multiple
- submissions will not be considered. Each submission will be judged by
- Ink or the Daap co-sponsor, in its sole discretion, in accordance with
- the judging criteria announced for that task. In the event no criteria
- is mentioned, judging will be based on originality and creativity
- (equally weighted) to determine the winning submission.
-
-
-
- The winner will be notified via any means of communication provided by
- the participant, which may include direct message on social media
- accounts and email. The winner will be required to provide sufficient
- information to deliver any prize awarded. The recipient of any prize
- acknowledges and agrees that they may be required to submit additional
- documentation to be eligible to receive a prize. Upon confirmation of
- the winner's compliance with these Rules, the prize will be made
- available to the winner. In the event that a winner cannot be
- contacted, fails to respond within 48 hours of any communication,
- refuses the prize, or fails to provide any information or
- documentation requested by Ink, the winner may be disqualified by Ink
- without further notice and an alternate winner selected.
-
-
-
- 5. Consents and Approvals
-
-
-
- By entering the Academy, you agree that any content and any other
- information submitted by you or collected by Ink in connection with
- the Academy may be used by Ink, including their affiliated business
- entities. Further, you consent to and opt-in to any communications,
- including marketing communications, from Ink. You give consent for Ink
- and its agents to obtain and deliver your name, address and other
- information to third parties for the purpose of administering this
- Academy and complying with applicable laws, regulations, and rules.
- YOU FURTHER ACKNOWLEDGE THAT IF YOU ARE A WINNER, YOUR IDENTIFYING
- INFORMATION, INCLUDING BUT NOT LIMITED TO YOUR NAME AND ADDRESS, MAY
- BE DISCLOSED TO THIRD PARTIES TO FACILITATE THE PROMOTION AND COMPLY
- WITH APPLICABLE LAW, TAX, AND REPORTING REQUIREMENTS. Except as
- otherwise contemplated in these Rules, Ink will use personal
- information collected in connection with the Academy in accordance
- with its online privacy policy located at{" "}
-
- https://inkonchain.com/privacy
-
- .
-
-
-
- 6. Disclaimers
-
-
-
- Ink is not responsible for any changes or unavailability of your
- internet or any other interference with your ability to access or
- otherwise participate in the Academy, including your ability to timely
- enter, receive notices, or communicate with Ink. Without limiting any
- other provision in these Rules, Ink and Ink Related Parties are not
- responsible or liable for any damage or loss by reason of any acts of
- God, equipment failure, terrorist acts, earthquake, war, fire, flood,
- epidemic, explosion, unusually severe weather, embargo, labor dispute,
- transportation interruption of any kind, civil disturbance, or any
- governmental, federal, state or local government authority action, or
- any other cause, whether or not specifically mentioned above.
-
-
-
- 7. Limitation of Liability, Disputes, and Governing Law
-
-
-
- By participating in the Academy, you agree to and hereby do release
- and hold harmless Ink and its related parties from any damage, injury,
- death, loss, claim, action, demand, or other liability (collectively,
- "Claims") that may arise from your acceptance, possession
- and/or use of any prize or your participation in this Academy,
- regardless of whether such Claims, or knowledge of the facts
- constituting such Claims, exist at the time of entry or arise at any
- time thereafter.
-
-
-
- BY PARTICIPATING IN THE PROMOTION, YOU AGREE THAT TO THE EXTENT
- PERMITTED BY APPLICABLE LAW: (1) ANY AND ALL DISPUTES, CLAIMS AND
- CAUSES OF ACTION THAT CANNOT BE RESOLVED BETWEEN YOU AND Ink, OR THE
- Ink RELATED PARTIES ARISING OUT OF OR CONNECTED WITH THE PROMOTION
- WILL BE RESOLVED INDIVIDUALLY, WITHOUT RESORT TO ANY FORM OF CLASS
- ACTION; (2) ANY AND ALL CLAIMS, JUDGMENTS AND AWARDS WILL BE LIMITED
- TO ACTUAL THIRD-PARTY, OUT-OF-POCKET COSTS INCURRED, (IF ANY), NOT TO
- EXCEED TWENTY FIVE DOLLARS ($25.00), BUT IN NO EVENT WILL
- ATTORNEYS' FEES BE AWARDED OR RECOVERABLE; (3) UNDER NO
- CIRCUMSTANCES WILL YOU BE PERMITTED TO OBTAIN ANY AWARD FOR, AND YOU
- HEREBY KNOWINGLY AND EXPRESSLY WAIVE ALL RIGHTS TO SEEK, PUNITIVE,
- INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, LOST PROFITS AND/OR ANY
- OTHER DAMAGES, OTHER THAN ACTUAL OUT-OF-POCKET EXPENSES NOT TO EXCEED
- TWENTY FIVE DOLLARS ($25.00), AND/OR ANY RIGHTS TO HAVE DAMAGES
- MULTIPLIED OR OTHERWISE INCREASED; AND (4) YOUR REMEDIES ARE LIMITED
- TO A CLAIM FOR MONEY DAMAGES (IF ANY) AND YOU IRREVOCABLY WAIVE ANY
- RIGHT TO SEEK INJUNCTIVE OR EQUITABLE RELIEF.
-
-
-
- Any dispute arising under or related hereto (whether for breach of
- contract, tortious conduct or otherwise) will be governed by the laws
- of England and Wales, without reference to its conflicts of law
- principles. By participating in this Academy, you agree that any
- dispute arising from or relating to this Academy shall be determined
- by confidential binding arbitration only in London, England, by and
- under the LCIA rules, and judgment on the award rendered by the
- arbitrator(s) may be entered in any court having jurisdiction thereof.
- Notwithstanding the foregoing, Ink may seek equitable relief in any
- court of competent jurisdiction. If any provision of these rules is
- held to be illegal or unenforceable, such provision shall be limited
- or eliminated to the minimum extent necessary so that these rules
- otherwise remain in full force and effect and enforceable.
-
-
-
- 8. General Rules
-
-
-
- Ink reserves the right to modify these Rules in any way or at any
- time. Ink reserves the right, in its sole discretion, to cancel or
- suspend this Academy should viruses, bugs or other causes beyond their
- control corrupt the administration, security or proper operation of
- the Participation. In the event of cancellation or suspension, Ink
- shall promptly post a notice on its website to such effect. Failure to
- enforce any provision of these Rules shall not constitute a waiver of
- that provision. Ink's decisions will be final in all matters
- relating to the Academy. You waive any right to claim ambiguity in the
- Academy or these Rules. The invalidity or unenforceability of any
- provision of these Rules will not affect the validity or
- enforceability of any other provision. If the Academy is not capable
- of running as planned for any reason, Ink reserves the right, in our
- sole discretion, to cancel, modify or suspend the Academy and
- unilaterally select winners from eligible submissions received prior
- to cancellation, modification, or suspension or as otherwise deemed
- fair and appropriate by Ink.
-
-
-
- 9. Dispute Resolution by Binding Arbitration
-
-
-
- This Dispute Resolution by Binding Arbitration section is referred to
- in the Terms as the "
- Arbitration Agreement ".
-
-
-
- PLEASE READ THIS ARBITRATION AGREEMENT CAREFULLY BECAUSE IT REQUIRES
- YOU TO ARBITRATE DISPUTES WITH US AND IT LIMITS THE MANNER IN WHICH
- YOU CAN SEEK RELIEF.
-
-
-
Informal Process First
-
-
- We are always interested in resolving disputes amicably and
- efficiently, and most concerns can be resolved quickly and to your
- satisfaction by emailing user support at{" "}
-
- legal@inkonchain.com
-
- . However, if such efforts prove unsuccessful, you may send to us, by
- email, a written Notice of Dispute ("
- Notice "). The Notice should be
- sent to{" "}
-
- legal@inkonchain.com
- {" "}
- and must (a) describe the nature and basis of the claim or dispute and
- (b) set forth the specific relief sought. If we and you do not resolve
- the claim or dispute set out in the Notice within sixty (60) calendar
- days from the date of receipt, we or you may commence an arbitration
- proceeding. It is agreed that this dispute resolution procedure is a
- condition precedent which must be satisfied before initiating
- arbitration.
-
-
-
Arbitration and its Terms
-
-
- Subject to the informal process outlined in the preceding paragraph,
- you and us agree to arbitrate any dispute arising in connection with
- these Official Rules (including questions related to their validity,
- existence, or termination), except for disputes in which either party
- seeks equitable and other relief for the alleged unlawful use of
- copyrights, trademarks, trade names, logos, trade secrets or patents.
-
-
-
- The arbitration will be administered in accordance with the Rules of
- the London Court of International Arbitration then in effect (the
- "
- LCIA Rules "). It will be
- conducted in English and the parties will keep the arbitration
- proceedings confidential and not disclose any information regarding
- the arbitration (or any underlying claim or dispute) to any third
- party except as required by law.
-
-
-
- Other than class procedures and remedies expressly prohibited by this
- Arbitration Agreement, the arbitrator(s) will have the authority to
- provide any remedy or relief that a court of competent jurisdiction
- could award, including injunctive relief. Any decision or award
- rendered by the arbitrator will be final and binding, and may be
- overturned by a court only for very limited reasons. Any judgment may
- be entered in any court of competent jurisdiction.
-
-
-
- If there is any inconsistency between any term of the LCIA Rules and
- any term of this Arbitration Agreement, the applicable terms of this
- Arbitration Agreement will control unless the arbitrator determines
- that the application of the inconsistent Arbitration Agreement terms
- would not result in a fundamentally fair arbitration. The arbitrator
- must also follow the provisions of these Terms as a court would.
-
-
-
- It is expressly agreed that any arbitration under these Official Rules
- will take place on an individual basis – class arbitrations and class
- action are not permitted. You understand that by agreeing to these
- Official Rules, you and us are each waiving the right to trial by jury
- or to participate in a class action or class arbitration.
-
-
-
Costs of Arbitration
-
-
- Payment of all filing, administration and arbitrator costs and
- expenses will be governed by the LCIA Rules then in effect, except
- that if you demonstrate that any such costs and expenses owed by you
- under those rules would be prohibitively more expensive than a court
- proceeding, then we will pay the amount of any such costs and expenses
- that the arbitrator determines are necessary to prevent the
- arbitration from being prohibitively more expensive than a court
- proceeding.
-
-
-
- Fees and costs may be awarded as provided pursuant to applicable law.
- The arbitrator may make rulings and resolve disputes as to the payment
- and reimbursement of fees or expenses at any time during the
- proceeding and upon request from either party made within 14 days of
- the arbitrator's ruling on the merits.
-
-
-
Batch Arbitration
-
-
- To increase the efficiency of administration and resolution of
- arbitrations, you and us agree that in the event that there are
- one-hundred (100) or more individual claims of a substantially similar
- nature filed against us by or with the assistance of the same law
- firm, group of law firms, or organizations, then within a thirty (30)
- day period (or as soon as possible thereafter), the LCIA shall (a)
- administer the arbitration demands in batches of one-hundred (100)
- claims per batch (plus, to the extent there are less than one-hundred
- (100) claims left over after the batching described above, a final
- batch consisting of the remaining claims); (b) appoint one arbitrator
- for each batch; and (c) provide for the resolution of each batch as a
- single consolidated arbitration with one set of filing and
- administrative fees due per side per batch, one procedural calendar,
- one hearing (if any) in a place to be determined by the arbitrator,
- and one final award ("
- Batch Arbitration "). All
- parties agree that claims are of a "substantially similar
- nature" if they arise out of or relate to the same event or
- factual scenario and raise the same or similar legal issues and seek
- the same or similar relief. To the extent the parties disagree on the
- application of the Batch Arbitration process, the disagreeing party
- shall advise the LCIA, and the LCIA shall appoint a sole standing
- arbitrator to determine the applicability of the Batch Arbitration
- process ("
- Administrative Arbitrator ").
- In an effort to expedite resolution of any such dispute by the
- Administrative Arbitrator, the parties agree the Administrative
- Arbitrator may set forth such procedures as are necessary to resolve
- any disputes promptly. The Administrative Arbitrator's fees shall
- be paid by us. You and us agree to cooperate in good faith with the
- LCIA to implement the Batch Arbitration process including the payment
- of single filing and administrative fees for batches of claims, as
- well as any steps to minimize the time and costs of arbitration, which
- may include: (i) the appointment of a discovery special master to
- assist the arbitrator in the resolution of discovery disputes; and
- (ii) the adoption of an expedited calendar of the arbitration
- proceedings. This Batch Arbitration provision shall in no way be
- interpreted as authorizing a class, collective and/or mass arbitration
- or action of any kind, or arbitration involving joint or consolidated
- claims under any circumstances, except as expressly set forth in this
- provision.
-
-
-
- Waiver of Right to Bring Class Action and Representative Claims; Jury
- Trial Waiver.
-
-
-
- WE AND YOU EACH AGREE TO WAIVE ANY RIGHT TO A TRIAL BY JURY. ANY CLAIM
- OR DISPUTE WILL BE DETERMINED BY A NEUTRAL ARBITRATOR AS STIPULATED IN
- THIS ARBITRATION AGREEMENT, NOT A JUDGE OR JURY.
-
-
-
- TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AND US EACH
- AGREE THAT ANY PROCEEDING TO RESOLVE ANY DISPUTE, CLAIM, OR
- CONTROVERSY WILL BE BROUGHT AND CONDUCTED ONLY IN THE RESPECTIVE
- PARTY'S INDIVIDUAL CAPACITY AND NOT AS PART OF ANY CLASS (OR
- PURPORTED CLASS), CONSOLIDATED, MULTIPLE-PLAINTIFF, OR REPRESENTATIVE
- ACTION OR PROCEEDING ("
- CLASS ACTION ").
-
-
-
- YOU AND US AGREE TO WAIVE THE RIGHT TO PARTICIPATE AS A PLAINTIFF OR
- CLASS MEMBER IN ANY CLASS ACTION. YOU AND US EXPRESSLY WAIVE ANY
- ABILITY TO MAINTAIN A CLASS ACTION IN ANY FORUM.
-
-
-
- IF THE DISPUTE IS SUBJECT TO ARBITRATION, THE ARBITRATOR WILL NOT HAVE
- THE AUTHORITY TO COMBINE OR AGGREGATE CLAIMS, CONDUCT A CLASS ACTION,
- OR MAKE AN AWARD TO ANY PERSON OR ENTITY NOT A PARTY TO THE
- ARBITRATION. FURTHER, YOU AND US AGREE THAT THE ARBITRATOR MAY NOT
- CONSOLIDATE PROCEEDINGS FOR MORE THAN ONE PERSON'S CLAIMS, AND IT
- MAY NOT OTHERWISE PRESIDE OVER ANY FORM OF A CLASS ACTION (OTHER THAN
- THE BATCH ARBITRATION SPECIFIED ABOVE). FOR THE AVOIDANCE OF DOUBT,
- HOWEVER, YOU CAN SEEK PUBLIC INJUNCTIVE RELIEF TO THE EXTENT
- AUTHORIZED BY LAW AND CONSISTENT WITH THE EXCEPTIONS DESCRIBED ABOVE.
-
-
-
- IF THIS CLASS ACTION WAIVER IS LIMITED, VOIDED, OR FOUND
- UNENFORCEABLE, THEN, UNLESS THE PARTIES MUTUALLY AGREE OTHERWISE, THE
- PARTIES' AGREEMENT TO ARBITRATE SHALL BE NULL AND VOID WITH
- RESPECT TO SUCH PROCEEDING SO LONG AS THE PROCEEDING IS PERMITTED TO
- PROCEED AS A CLASS ACTION. If a court decides that the limitations of
- this paragraph are deemed invalid or unenforceable, any putative
- class, private attorney general, or consolidated or representative
- action must be brought in a court of proper jurisdiction and not in
- arbitration.
-
-
-
Opt-Out
-
-
- You have the right to opt-out and not be bound by the Arbitration
- Agreement contained in these Terms by sending written notice of your
- decision to opt-out to{" "}
-
- legal@inkonchain.com
-
- . The notice must be sent to us within thirty (30) days of your first
- registering to use the Services or agreeing to these Terms; otherwise
- you shall be bound to arbitrate disputes on a non-class basis in
- accordance with these Terms. If you opt out of only the arbitration
- provisions, and not also the class action waiver, the class action
- waiver still applies. You may not opt out of only the class action
- waiver and not also the arbitration provisions. If you opt-out of
- these arbitration provisions, we also will not be bound by them.
-
-
-
+ <>
+
+ INK WIZARDING ACADEMY - OFFICIAL RULES
+
+
+
+ BY PARTICIPATING IN THE ACADEMY, YOU AGREE TO THESE OFFICIAL RULES AND
+ THE{" "}
+
+ INKONCHAIN.COM TERMS OF SERVICE
+
+ , WHICH FORM A CONTRACT. READ THEM CAREFULLY BEFORE ENTERING. PURCHASE,
+ PAYMENT, OR FUNDING WILL NOT INCREASE YOUR CHANCES OF WINNING.
+
+
+
+ Ink's Wizarding Academy ("Academy") is run by Ink
+ Foundation, a Cayman Islands foundation company at CO Services Cayman
+ Limited, PO Box 10008, Willow House, Cricket Square, Grand Cayman
+ KY1-1001, Cayman Islands ("Ink").
+
+
+
+ 1. Eligibility to Participate in the Academy
+
+
+
+ You are eligible to participate in the Academy if, at the time of entry
+ and during the Academy, you:
+
+
+
+ Reside in the Eligible Areas identified above;
+ Agree to the Inkonchain.com Terms of Service;
+
+ Agree to these Rules and meet and comply with any and all applicable
+ requirements herein;
+
+
+ Are not otherwise ineligible to participate under the Inkonchain.com
+ Terms of Service, these Rules, or applicable law.
+
+
+
+
+ By submitting participating in the Academy, you represent and warrant
+ that you meet, and will continue to meet throughout the Academy Session,
+ each of the above criteria and are eligible to participate in the
+ Academy.
+
+
+
+ 2. Disqualification
+
+
+
+ Ink reserves the right to disqualify you if Ink determines, in its sole
+ discretion, that you have (A) violated these Rules, including the
+ Inkonchain.com Terms of Service or applicable law.
+
+
+
+ 3. Daap Cosponsors
+
+
+
+ In the event that an Academy Session is co-sponsored by a Dapp, such
+ co-sponsorship does not constitute an endorsement of the Dapp, its
+ personnel, or its products or services by Ink. Further, the Daap
+ cosponsor will be solely responsible and liable for the determination
+ and notification of winners and providing any prizes. As a result, you
+ acknowledge and agree that Ink makes no representations or warranties,
+ express or implied, regarding any prize and will not be liable for any
+ claims, damages, losses, or injuries arising out of or related to the
+ receipt, use, or misuse of any prize provided by the Dapp cosponsor. Any
+ issues or disputes regarding the prizes must be resolved directly with
+ the Dapp cosponsor.
+
+
+
+ 4. Notification of Winner
+
+
+
+ If a task requires submission of content for judgment, each participant
+ is limited to submitting one eligible entry. Multiple submissions will
+ not be considered. Each submission will be judged by Ink or the Daap
+ co-sponsor, in its sole discretion, in accordance with the judging
+ criteria announced for that task. In the event no criteria is mentioned,
+ judging will be based on originality and creativity (equally weighted)
+ to determine the winning submission.
+
+
+
+ The winner will be notified via any means of communication provided by
+ the participant, which may include direct message on social media
+ accounts and email. The winner will be required to provide sufficient
+ information to deliver any prize awarded. The recipient of any prize
+ acknowledges and agrees that they may be required to submit additional
+ documentation to be eligible to receive a prize. Upon confirmation of
+ the winner's compliance with these Rules, the prize will be made
+ available to the winner. In the event that a winner cannot be contacted,
+ fails to respond within 48 hours of any communication, refuses the
+ prize, or fails to provide any information or documentation requested by
+ Ink, the winner may be disqualified by Ink without further notice and an
+ alternate winner selected.
+
+
+
+ 5. Consents and Approvals
+
+
+
+ By entering the Academy, you agree that any content and any other
+ information submitted by you or collected by Ink in connection with the
+ Academy may be used by Ink, including their affiliated business
+ entities. Further, you consent to and opt-in to any communications,
+ including marketing communications, from Ink. You give consent for Ink
+ and its agents to obtain and deliver your name, address and other
+ information to third parties for the purpose of administering this
+ Academy and complying with applicable laws, regulations, and rules. YOU
+ FURTHER ACKNOWLEDGE THAT IF YOU ARE A WINNER, YOUR IDENTIFYING
+ INFORMATION, INCLUDING BUT NOT LIMITED TO YOUR NAME AND ADDRESS, MAY BE
+ DISCLOSED TO THIRD PARTIES TO FACILITATE THE PROMOTION AND COMPLY WITH
+ APPLICABLE LAW, TAX, AND REPORTING REQUIREMENTS. Except as otherwise
+ contemplated in these Rules, Ink will use personal information collected
+ in connection with the Academy in accordance with its online privacy
+ policy located at{" "}
+
+ https://inkonchain.com/privacy
+
+ .
+
+
+
+ 6. Disclaimers
+
+
+
+ Ink is not responsible for any changes or unavailability of your
+ internet or any other interference with your ability to access or
+ otherwise participate in the Academy, including your ability to timely
+ enter, receive notices, or communicate with Ink. Without limiting any
+ other provision in these Rules, Ink and Ink Related Parties are not
+ responsible or liable for any damage or loss by reason of any acts of
+ God, equipment failure, terrorist acts, earthquake, war, fire, flood,
+ epidemic, explosion, unusually severe weather, embargo, labor dispute,
+ transportation interruption of any kind, civil disturbance, or any
+ governmental, federal, state or local government authority action, or
+ any other cause, whether or not specifically mentioned above.
+
+
+
+ 7. Limitation of Liability, Disputes, and Governing Law
+
+
+
+ By participating in the Academy, you agree to and hereby do release and
+ hold harmless Ink and its related parties from any damage, injury,
+ death, loss, claim, action, demand, or other liability (collectively,
+ "Claims") that may arise from your acceptance, possession
+ and/or use of any prize or your participation in this Academy,
+ regardless of whether such Claims, or knowledge of the facts
+ constituting such Claims, exist at the time of entry or arise at any
+ time thereafter.
+
+
+
+ BY PARTICIPATING IN THE PROMOTION, YOU AGREE THAT TO THE EXTENT
+ PERMITTED BY APPLICABLE LAW: (1) ANY AND ALL DISPUTES, CLAIMS AND CAUSES
+ OF ACTION THAT CANNOT BE RESOLVED BETWEEN YOU AND Ink, OR THE Ink
+ RELATED PARTIES ARISING OUT OF OR CONNECTED WITH THE PROMOTION WILL BE
+ RESOLVED INDIVIDUALLY, WITHOUT RESORT TO ANY FORM OF CLASS ACTION; (2)
+ ANY AND ALL CLAIMS, JUDGMENTS AND AWARDS WILL BE LIMITED TO ACTUAL
+ THIRD-PARTY, OUT-OF-POCKET COSTS INCURRED, (IF ANY), NOT TO EXCEED
+ TWENTY FIVE DOLLARS ($25.00), BUT IN NO EVENT WILL ATTORNEYS' FEES
+ BE AWARDED OR RECOVERABLE; (3) UNDER NO CIRCUMSTANCES WILL YOU BE
+ PERMITTED TO OBTAIN ANY AWARD FOR, AND YOU HEREBY KNOWINGLY AND
+ EXPRESSLY WAIVE ALL RIGHTS TO SEEK, PUNITIVE, INCIDENTAL, CONSEQUENTIAL
+ OR SPECIAL DAMAGES, LOST PROFITS AND/OR ANY OTHER DAMAGES, OTHER THAN
+ ACTUAL OUT-OF-POCKET EXPENSES NOT TO EXCEED TWENTY FIVE DOLLARS
+ ($25.00), AND/OR ANY RIGHTS TO HAVE DAMAGES MULTIPLIED OR OTHERWISE
+ INCREASED; AND (4) YOUR REMEDIES ARE LIMITED TO A CLAIM FOR MONEY
+ DAMAGES (IF ANY) AND YOU IRREVOCABLY WAIVE ANY RIGHT TO SEEK INJUNCTIVE
+ OR EQUITABLE RELIEF.
+
+
+
+ Any dispute arising under or related hereto (whether for breach of
+ contract, tortious conduct or otherwise) will be governed by the laws of
+ England and Wales, without reference to its conflicts of law principles.
+ By participating in this Academy, you agree that any dispute arising
+ from or relating to this Academy shall be determined by confidential
+ binding arbitration only in London, England, by and under the LCIA
+ rules, and judgment on the award rendered by the arbitrator(s) may be
+ entered in any court having jurisdiction thereof. Notwithstanding the
+ foregoing, Ink may seek equitable relief in any court of competent
+ jurisdiction. If any provision of these rules is held to be illegal or
+ unenforceable, such provision shall be limited or eliminated to the
+ minimum extent necessary so that these rules otherwise remain in full
+ force and effect and enforceable.
+
+
+
+ 8. General Rules
+
+
+
+ Ink reserves the right to modify these Rules in any way or at any time.
+ Ink reserves the right, in its sole discretion, to cancel or suspend
+ this Academy should viruses, bugs or other causes beyond their control
+ corrupt the administration, security or proper operation of the
+ Participation. In the event of cancellation or suspension, Ink shall
+ promptly post a notice on its website to such effect. Failure to enforce
+ any provision of these Rules shall not constitute a waiver of that
+ provision. Ink's decisions will be final in all matters relating to
+ the Academy. You waive any right to claim ambiguity in the Academy or
+ these Rules. The invalidity or unenforceability of any provision of
+ these Rules will not affect the validity or enforceability of any other
+ provision. If the Academy is not capable of running as planned for any
+ reason, Ink reserves the right, in our sole discretion, to cancel,
+ modify or suspend the Academy and unilaterally select winners from
+ eligible submissions received prior to cancellation, modification, or
+ suspension or as otherwise deemed fair and appropriate by Ink.
+
+
+
+ 9. Dispute Resolution by Binding Arbitration
+
+
+
+ This Dispute Resolution by Binding Arbitration section is referred to in
+ the Terms as the "
+ Arbitration Agreement ".
+
+
+
+ PLEASE READ THIS ARBITRATION AGREEMENT CAREFULLY BECAUSE IT REQUIRES YOU
+ TO ARBITRATE DISPUTES WITH US AND IT LIMITS THE MANNER IN WHICH YOU CAN
+ SEEK RELIEF.
+
+
+
Informal Process First
+
+
+ We are always interested in resolving disputes amicably and efficiently,
+ and most concerns can be resolved quickly and to your satisfaction by
+ emailing user support at{" "}
+
+ legal@inkonchain.com
+
+ . However, if such efforts prove unsuccessful, you may send to us, by
+ email, a written Notice of Dispute ("
+ Notice "). The Notice should be
+ sent to{" "}
+
+ legal@inkonchain.com
+ {" "}
+ and must (a) describe the nature and basis of the claim or dispute and
+ (b) set forth the specific relief sought. If we and you do not resolve
+ the claim or dispute set out in the Notice within sixty (60) calendar
+ days from the date of receipt, we or you may commence an arbitration
+ proceeding. It is agreed that this dispute resolution procedure is a
+ condition precedent which must be satisfied before initiating
+ arbitration.
+
+
+
Arbitration and its Terms
+
+
+ Subject to the informal process outlined in the preceding paragraph, you
+ and us agree to arbitrate any dispute arising in connection with these
+ Official Rules (including questions related to their validity,
+ existence, or termination), except for disputes in which either party
+ seeks equitable and other relief for the alleged unlawful use of
+ copyrights, trademarks, trade names, logos, trade secrets or patents.
+
+
+
+ The arbitration will be administered in accordance with the Rules of the
+ London Court of International Arbitration then in effect (the "
+ LCIA Rules "). It will be
+ conducted in English and the parties will keep the arbitration
+ proceedings confidential and not disclose any information regarding the
+ arbitration (or any underlying claim or dispute) to any third party
+ except as required by law.
+
+
+
+ Other than class procedures and remedies expressly prohibited by this
+ Arbitration Agreement, the arbitrator(s) will have the authority to
+ provide any remedy or relief that a court of competent jurisdiction
+ could award, including injunctive relief. Any decision or award rendered
+ by the arbitrator will be final and binding, and may be overturned by a
+ court only for very limited reasons. Any judgment may be entered in any
+ court of competent jurisdiction.
+
+
+
+ If there is any inconsistency between any term of the LCIA Rules and any
+ term of this Arbitration Agreement, the applicable terms of this
+ Arbitration Agreement will control unless the arbitrator determines that
+ the application of the inconsistent Arbitration Agreement terms would
+ not result in a fundamentally fair arbitration. The arbitrator must also
+ follow the provisions of these Terms as a court would.
+
+
+
+ It is expressly agreed that any arbitration under these Official Rules
+ will take place on an individual basis – class arbitrations and class
+ action are not permitted. You understand that by agreeing to these
+ Official Rules, you and us are each waiving the right to trial by jury
+ or to participate in a class action or class arbitration.
+
+
+
Costs of Arbitration
+
+
+ Payment of all filing, administration and arbitrator costs and expenses
+ will be governed by the LCIA Rules then in effect, except that if you
+ demonstrate that any such costs and expenses owed by you under those
+ rules would be prohibitively more expensive than a court proceeding,
+ then we will pay the amount of any such costs and expenses that the
+ arbitrator determines are necessary to prevent the arbitration from
+ being prohibitively more expensive than a court proceeding.
+
+
+
+ Fees and costs may be awarded as provided pursuant to applicable law.
+ The arbitrator may make rulings and resolve disputes as to the payment
+ and reimbursement of fees or expenses at any time during the proceeding
+ and upon request from either party made within 14 days of the
+ arbitrator's ruling on the merits.
+
+
+
Batch Arbitration
+
+
+ To increase the efficiency of administration and resolution of
+ arbitrations, you and us agree that in the event that there are
+ one-hundred (100) or more individual claims of a substantially similar
+ nature filed against us by or with the assistance of the same law firm,
+ group of law firms, or organizations, then within a thirty (30) day
+ period (or as soon as possible thereafter), the LCIA shall (a)
+ administer the arbitration demands in batches of one-hundred (100)
+ claims per batch (plus, to the extent there are less than one-hundred
+ (100) claims left over after the batching described above, a final batch
+ consisting of the remaining claims); (b) appoint one arbitrator for each
+ batch; and (c) provide for the resolution of each batch as a single
+ consolidated arbitration with one set of filing and administrative fees
+ due per side per batch, one procedural calendar, one hearing (if any) in
+ a place to be determined by the arbitrator, and one final award ("
+ Batch Arbitration "). All parties
+ agree that claims are of a "substantially similar nature" if
+ they arise out of or relate to the same event or factual scenario and
+ raise the same or similar legal issues and seek the same or similar
+ relief. To the extent the parties disagree on the application of the
+ Batch Arbitration process, the disagreeing party shall advise the LCIA,
+ and the LCIA shall appoint a sole standing arbitrator to determine the
+ applicability of the Batch Arbitration process ("
+ Administrative Arbitrator "). In
+ an effort to expedite resolution of any such dispute by the
+ Administrative Arbitrator, the parties agree the Administrative
+ Arbitrator may set forth such procedures as are necessary to resolve any
+ disputes promptly. The Administrative Arbitrator's fees shall be
+ paid by us. You and us agree to cooperate in good faith with the LCIA to
+ implement the Batch Arbitration process including the payment of single
+ filing and administrative fees for batches of claims, as well as any
+ steps to minimize the time and costs of arbitration, which may include:
+ (i) the appointment of a discovery special master to assist the
+ arbitrator in the resolution of discovery disputes; and (ii) the
+ adoption of an expedited calendar of the arbitration proceedings. This
+ Batch Arbitration provision shall in no way be interpreted as
+ authorizing a class, collective and/or mass arbitration or action of any
+ kind, or arbitration involving joint or consolidated claims under any
+ circumstances, except as expressly set forth in this provision.
+
+
+
+ Waiver of Right to Bring Class Action and Representative Claims; Jury
+ Trial Waiver.
+
+
+
+ WE AND YOU EACH AGREE TO WAIVE ANY RIGHT TO A TRIAL BY JURY. ANY CLAIM
+ OR DISPUTE WILL BE DETERMINED BY A NEUTRAL ARBITRATOR AS STIPULATED IN
+ THIS ARBITRATION AGREEMENT, NOT A JUDGE OR JURY.
+
+
+
+ TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AND US EACH AGREE
+ THAT ANY PROCEEDING TO RESOLVE ANY DISPUTE, CLAIM, OR CONTROVERSY WILL
+ BE BROUGHT AND CONDUCTED ONLY IN THE RESPECTIVE PARTY'S INDIVIDUAL
+ CAPACITY AND NOT AS PART OF ANY CLASS (OR PURPORTED CLASS),
+ CONSOLIDATED, MULTIPLE-PLAINTIFF, OR REPRESENTATIVE ACTION OR PROCEEDING
+ ("
+ CLASS ACTION ").
+
+
+
+ YOU AND US AGREE TO WAIVE THE RIGHT TO PARTICIPATE AS A PLAINTIFF OR
+ CLASS MEMBER IN ANY CLASS ACTION. YOU AND US EXPRESSLY WAIVE ANY ABILITY
+ TO MAINTAIN A CLASS ACTION IN ANY FORUM.
+
+
+
+ IF THE DISPUTE IS SUBJECT TO ARBITRATION, THE ARBITRATOR WILL NOT HAVE
+ THE AUTHORITY TO COMBINE OR AGGREGATE CLAIMS, CONDUCT A CLASS ACTION, OR
+ MAKE AN AWARD TO ANY PERSON OR ENTITY NOT A PARTY TO THE ARBITRATION.
+ FURTHER, YOU AND US AGREE THAT THE ARBITRATOR MAY NOT CONSOLIDATE
+ PROCEEDINGS FOR MORE THAN ONE PERSON'S CLAIMS, AND IT MAY NOT
+ OTHERWISE PRESIDE OVER ANY FORM OF A CLASS ACTION (OTHER THAN THE BATCH
+ ARBITRATION SPECIFIED ABOVE). FOR THE AVOIDANCE OF DOUBT, HOWEVER, YOU
+ CAN SEEK PUBLIC INJUNCTIVE RELIEF TO THE EXTENT AUTHORIZED BY LAW AND
+ CONSISTENT WITH THE EXCEPTIONS DESCRIBED ABOVE.
+
+
+
+ IF THIS CLASS ACTION WAIVER IS LIMITED, VOIDED, OR FOUND UNENFORCEABLE,
+ THEN, UNLESS THE PARTIES MUTUALLY AGREE OTHERWISE, THE PARTIES'
+ AGREEMENT TO ARBITRATE SHALL BE NULL AND VOID WITH RESPECT TO SUCH
+ PROCEEDING SO LONG AS THE PROCEEDING IS PERMITTED TO PROCEED AS A CLASS
+ ACTION. If a court decides that the limitations of this paragraph are
+ deemed invalid or unenforceable, any putative class, private attorney
+ general, or consolidated or representative action must be brought in a
+ court of proper jurisdiction and not in arbitration.
+
+
+
Opt-Out
+
+
+ You have the right to opt-out and not be bound by the Arbitration
+ Agreement contained in these Terms by sending written notice of your
+ decision to opt-out to{" "}
+
+ legal@inkonchain.com
+
+ . The notice must be sent to us within thirty (30) days of your first
+ registering to use the Services or agreeing to these Terms; otherwise
+ you shall be bound to arbitrate disputes on a non-class basis in
+ accordance with these Terms. If you opt out of only the arbitration
+ provisions, and not also the class action waiver, the class action
+ waiver still applies. You may not opt out of only the class action
+ waiver and not also the arbitration provisions. If you opt-out of these
+ arbitration provisions, we also will not be bound by them.
+
+ >
);
}
diff --git a/src/app/[locale]/_components/ThemeToggle.tsx b/src/app/[locale]/_components/ThemeToggle.tsx
index 2a3ae52..8766adb 100644
--- a/src/app/[locale]/_components/ThemeToggle.tsx
+++ b/src/app/[locale]/_components/ThemeToggle.tsx
@@ -1,10 +1,8 @@
"use client";
-import { Button } from "@inkonchain/ink-kit";
+import { Button, InkIcon } from "@inkonchain/ink-kit";
import { useTheme } from "next-themes";
-import { MoonIcon } from "@/components/icons/Moon";
-import { SunIcon } from "@/components/icons/Sun";
import { classNames } from "@/util/classes";
export const ThemeToggle = () => {
@@ -19,7 +17,7 @@ export const ThemeToggle = () => {
className="ink:text-text-muted duration-0 bg-transparent"
iconLeft={
-
{
size="icon-lg"
enforce="inherit"
/>
-
- <>
-
-
-
-
- >
-
+ <>
+
+
+
+
+ >
);
}
diff --git a/src/app/[locale]/apps/_components/AppLinks.tsx b/src/app/[locale]/apps/_components/AppLinks.tsx
index 0487679..fa84b4d 100644
--- a/src/app/[locale]/apps/_components/AppLinks.tsx
+++ b/src/app/[locale]/apps/_components/AppLinks.tsx
@@ -1,10 +1,6 @@
import React from "react";
+import { Button, InkIcon } from "@inkonchain/ink-kit";
-import { DiscordIcon } from "@/components/icons/Discord";
-import { GateIcon } from "@/components/icons/Gate";
-import { GitHubIcon } from "@/components/icons/GitHub";
-import { TelegramIcon } from "@/components/icons/Telegram";
-import { TwitterIcon } from "@/components/icons/Twitter";
import { classNames } from "@/util/classes";
import { InkApp, InkAppNetwork } from "./InkApp";
@@ -12,7 +8,6 @@ import { InkApp, InkAppNetwork } from "./InkApp";
export function AppLinks({
className,
links,
- network,
}: {
className?: string;
links: InkApp["links"];
@@ -30,47 +25,29 @@ export function AppLinks({
>
{links.x && (
-
+
)}
{links.discord && (
-
+
)}
{links.telegram && (
-
+
)}
{links.farcaster && (
-
- {/* */}
+
)}
- {/* Not showing the website URL as the cards/rows are clickable */}
- {/* {websiteUrl && (
-
-
-
- )} */}
{links.github && (
-
+
)}
- {/* {links.docs && (
-
-
-
- )} */}
);
}
@@ -83,17 +60,24 @@ function AppLink({
children: React.ReactNode;
}) {
return (
-
{
- e.stopPropagation();
- }}
+
- {children}
-
+
{
+ e.stopPropagation();
+ }}
+ >
+ {children}
+
+
);
}
diff --git a/src/app/[locale]/apps/_components/AppsContent.tsx b/src/app/[locale]/apps/_components/AppsContent.tsx
index 5e99902..32ac11a 100644
--- a/src/app/[locale]/apps/_components/AppsContent.tsx
+++ b/src/app/[locale]/apps/_components/AppsContent.tsx
@@ -177,7 +177,7 @@ export function AppsContent({ currentCategory }: AppsContentProps) {
{/* Floating section on desktop */}
-
+
}
- onClick={(e) => {
- e.preventDefault();
- setIsOpen(true);
- }}
+ onClick={openModal}
>
Submit app
diff --git a/src/app/[locale]/apps/_components/categories.tsx b/src/app/[locale]/apps/_components/categories.tsx
index fbd917a..2cff934 100644
--- a/src/app/[locale]/apps/_components/categories.tsx
+++ b/src/app/[locale]/apps/_components/categories.tsx
@@ -1,52 +1,30 @@
-import { InkIcon } from "@inkonchain/ink-kit";
-
-import { AppsIcon } from "@/components/icons/Apps";
-import { BankIcon } from "@/components/icons/Bank";
-import { BlocksIcon } from "@/components/icons/Blocks";
-import { BridgeIcon } from "@/components/icons/Bridge";
-import { GlobeIcon } from "@/components/icons/Globe";
-import { UsersIcon } from "@/components/icons/Users";
-
export const appCategories = [
{
value: null,
label: "All categories",
- icon:
,
},
{
value: "bridge",
label: "Bridge",
- icon: (
-
- ),
},
{
value: "defi",
label: "DeFi",
- icon:
,
},
{
value: "explorers",
label: "Explorers",
- icon:
,
},
{
value: "infra",
label: "Infrastructure",
- icon: (
-
- ),
},
{
value: "on-ramps",
label: "On-ramps",
- icon: (
-
- ),
},
{
value: "social",
label: "Social",
- icon:
,
},
] as const;
diff --git a/src/app/[locale]/apps/page.tsx b/src/app/[locale]/apps/page.tsx
index 313e55d..825d89e 100644
--- a/src/app/[locale]/apps/page.tsx
+++ b/src/app/[locale]/apps/page.tsx
@@ -1,8 +1,7 @@
import { Metadata } from "next";
-import { AppSubmissionModal } from "@/components/AppSubmissionModal/AppSubmissionModal";
-import { AppSubmissionModalProvider } from "@/components/AppSubmissionModal/AppSubmissionModalContext";
import { JsonLd } from "@/components/JsonLd";
+import { AppSubmissionModal } from "@/components/Modals/AppSubmissionModal/AppSubmissionModal";
import { PageView } from "@/components/PageView";
import { newLayoutContainerClasses } from "@/components/styles/container";
@@ -16,22 +15,20 @@ export const metadata: Metadata = {
export default function AppsPage() {
return (
-
- <>
-
-
-
-
- >
-
+ <>
+
+
+
+
+ >
);
}
diff --git a/src/app/[locale]/faucet/_components/Faucet.tsx b/src/app/[locale]/faucet/_components/Faucet.tsx
index 9034ed0..f664032 100644
--- a/src/app/[locale]/faucet/_components/Faucet.tsx
+++ b/src/app/[locale]/faucet/_components/Faucet.tsx
@@ -2,11 +2,11 @@
import { useEffect, useRef, useState } from "react";
import Confetti from "react-confetti";
+import { Input } from "@inkonchain/ink-kit";
import { useTranslations } from "next-intl";
import { useAccount } from "wagmi";
-import { BigScalableTitle } from "@/components/BigScallableTitle";
-import { ColoredText } from "@/components/ColoredText";
+import { newLayoutSectionClasses } from "@/components/styles/container";
import { FaucetRequestButton } from "./FaucetRequestButton";
@@ -14,7 +14,6 @@ export function Faucet() {
const t = useTranslations("Faucet");
const [address, setAddress] = useState("");
const hasSetInitialAddress = useRef(false);
- const buttonRef = useRef
(null);
const [requestSuccess, setRequestSuccess] = useState(null);
const { address: connectedAddress, isConnected } = useAccount();
@@ -26,54 +25,22 @@ export function Faucet() {
}, [isConnected, connectedAddress]);
return (
-
-
-
- {t("description")}
-
- }
- />
-
-
+ <>
+
+
{requestSuccess && (
)}
-
+ >
);
}
diff --git a/src/app/[locale]/faucet/_components/FaucetRequestButton.tsx b/src/app/[locale]/faucet/_components/FaucetRequestButton.tsx
index bcba1ca..9effbaa 100644
--- a/src/app/[locale]/faucet/_components/FaucetRequestButton.tsx
+++ b/src/app/[locale]/faucet/_components/FaucetRequestButton.tsx
@@ -1,24 +1,20 @@
"use client";
-import { forwardRef, useCallback, useEffect, useRef, useState } from "react";
+import React, { useCallback, useEffect, useRef, useState } from "react";
import { toast } from "react-toastify";
+import {
+ Button,
+ InkIcon,
+ Input,
+ Modal,
+ useModalContext,
+} from "@inkonchain/ink-kit";
import { useConnectModal } from "@rainbow-me/rainbowkit";
import { CloudflareProvider, getAddress } from "ethers";
import { useAccount } from "wagmi";
import { Backdrop } from "@/components/Backdrop";
-import { Button } from "@/components/Button/Button";
-import {
- CenteredModal,
- CenteredModalContainer,
-} from "@/components/CenteredModal";
import { ColoredText } from "@/components/ColoredText";
-import { TwitterIcon } from "@/components/icons/Twitter";
-import {
- inputClassNames,
- inputContainerClassNames,
- inputIconClassNames,
-} from "@/components/InputWithSubmit/styles";
import { clientEnv } from "@/env-client";
import { useFaucetInfoAndCaptcha } from "@/hooks/useFaucetInfoAndHCaptcha";
@@ -133,417 +129,389 @@ const getRandomTweetTemplate = () => {
return TWEET_TEMPLATES[randomIndex];
};
-export const FaucetRequestButton = forwardRef<
- HTMLButtonElement,
- FaucetRequestButtonProps
->(
- (
- { disabled, children, className, type = "button", onChange, address },
- ref
- ) => {
- const chainId = 763373; // Ink Sepolia
- const [requestLoading, setRequestLoading] = useState(false);
- const [waitingForConnection, setWaitingForConnection] = useState(false);
- const hasAutoRequested = useRef(false);
- const { hcaptchaLoaded, executeHCaptcha } =
- useFaucetInfoAndCaptcha(chainId);
- const { isConnected } = useAccount();
- const { openConnectModal } = useConnectModal();
- const [showTweetPrompt, setShowTweetPrompt] = useState(false);
- const [tweetUrl, setTweetUrl] = useState("");
- const [isHCaptchaVisible, setIsHCaptchaVisible] = useState(false);
- const [showBackdrop, setShowBackdrop] = useState(false);
- const [skipTweetPrompt, setSkipTweetPrompt] = useState(false);
- const [tweetModalLoading, setTweetModalLoading] = useState(false);
-
- const handleRequest = useCallback(
- async (forceSkip?: boolean, setLoading = setRequestLoading) => {
- setLoading(true);
-
- if (!isConnected && address.trim() === "" && openConnectModal) {
- setWaitingForConnection(true);
- openConnectModal();
+export const FaucetRequestButton: React.FC
= ({
+ disabled,
+ children,
+ type = "button",
+ onChange,
+ address,
+}) => {
+ const chainId = 763373; // Ink Sepolia
+ const [requestLoading, setRequestLoading] = useState(false);
+ const [waitingForConnection, setWaitingForConnection] = useState(false);
+ const hasAutoRequested = useRef(false);
+ const { hcaptchaLoaded, executeHCaptcha } = useFaucetInfoAndCaptcha(chainId);
+ const { isConnected } = useAccount();
+ const { openConnectModal } = useConnectModal();
+ const [tweetUrl, setTweetUrl] = useState("");
+ const [isHCaptchaVisible, setIsHCaptchaVisible] = useState(false);
+ const [showBackdrop, setShowBackdrop] = useState(false);
+ const [skipTweetPrompt, setSkipTweetPrompt] = useState(false);
+ const [tweetModalLoading, setTweetModalLoading] = useState(false);
+ const modalId = "tweet-prompt-modal";
+ const { openModal: openTweetPrompt } = useModalContext(modalId);
+
+ const handleRequest = useCallback(
+ async (forceSkip?: boolean, setLoading = setRequestLoading) => {
+ setLoading(true);
+
+ if (!isConnected && address.trim() === "" && openConnectModal) {
+ setWaitingForConnection(true);
+ openConnectModal();
+ setLoading(false);
+ return;
+ }
+
+ if (address.trim() === "") {
+ toast.error("Please enter an address or ENS name first.", {
+ toastId: "address-error",
+ ...TOAST_STYLE,
+ });
+ setLoading(false);
+ return;
+ }
+
+ let resolvedAddress: string;
+ try {
+ resolvedAddress = await resolveAddress(address);
+ } catch (error) {
+ toast.error((error as Error).message, TOAST_STYLE);
+ setLoading(false);
+ return;
+ }
+
+ try {
+ // Check rate limit first
+ const rateLimitRes = await fetch(
+ `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/check-rate-limit`,
+ {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({ address: resolvedAddress, chainId }),
+ }
+ );
+
+ if (!rateLimitRes.ok) {
+ const errorData = await rateLimitRes.json();
+ toast.error(
+ <>
+
+ {errorData.message ??
+ "Faucet is temporarily unavailable. Please try again later."}
+
+
+ See{" "}
+
+ docs.inkonchain.com
+ {" "}
+ for other faucet options.
+
+ >,
+ TOAST_STYLE
+ );
setLoading(false);
return;
}
- if (address.trim() === "") {
- toast.error("Please enter an address or ENS name first.", {
- toastId: "address-error",
- ...TOAST_STYLE,
- });
+ const rateLimitData = await rateLimitRes.json();
+
+ if (!rateLimitData.allowed) {
+ toast.error(
+ <>
+
+ {rateLimitData.message ??
+ "Faucet is temporarily unavailable. Please try again later."}
+
+
+ See{" "}
+
+ docs.inkonchain.com
+ {" "}
+ for other faucet options.
+
+ >,
+ TOAST_STYLE
+ );
setLoading(false);
return;
}
- let resolvedAddress: string;
- try {
- resolvedAddress = await resolveAddress(address);
- } catch (error) {
- toast.error((error as Error).message, TOAST_STYLE);
+ if (forceSkip) {
+ setTweetUrl("");
+ } else if (!tweetUrl && !skipTweetPrompt) {
setLoading(false);
+ openTweetPrompt();
return;
- }
-
- try {
- // Check rate limit first
- const rateLimitRes = await fetch(
- `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/check-rate-limit`,
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({ address: resolvedAddress, chainId }),
- }
+ } else if (tweetUrl && !validateTweetUrl(tweetUrl)) {
+ toast.error(
+ "Please provide a valid X/Twitter post URL.",
+ TOAST_STYLE
);
+ setLoading(false);
+ return;
+ }
- if (!rateLimitRes.ok) {
- const errorData = await rateLimitRes.json();
- toast.error(
- <>
-
- {errorData.message ??
- "Faucet is temporarily unavailable. Please try again later."}
-
-
- See{" "}
-
- docs.inkonchain.com
- {" "}
- for other faucet options.
-
- >,
- TOAST_STYLE
- );
- setLoading(false);
- return;
- }
-
- const rateLimitData = await rateLimitRes.json();
-
- if (!rateLimitData.allowed) {
- toast.error(
- <>
-
- {rateLimitData.message ??
- "Faucet is temporarily unavailable. Please try again later."}
-
-
- See{" "}
-
- docs.inkonchain.com
- {" "}
- for other faucet options.
-
- >,
- TOAST_STYLE
- );
- setLoading(false);
- return;
- }
-
- if (forceSkip) {
- setTweetUrl("");
- } else if (!tweetUrl && !skipTweetPrompt) {
- setLoading(false);
- setShowTweetPrompt(true);
- return;
- } else if (tweetUrl && !validateTweetUrl(tweetUrl)) {
- toast.error(
- "Please provide a valid X/Twitter post URL.",
- TOAST_STYLE
- );
+ // If not rate limited, proceed with captcha verification
+ let hcaptchaToken = undefined;
+ if (hcaptchaLoaded) {
+ try {
+ setIsHCaptchaVisible(true);
+
+ // Small delay before showing backdrop
+ setTimeout(() => {
+ setShowBackdrop(true);
+ }, 600);
+
+ hcaptchaToken = await executeHCaptcha();
+
+ setShowBackdrop(false);
+ setIsHCaptchaVisible(false);
+ } catch (error) {
+ setShowBackdrop(false);
+ setIsHCaptchaVisible(false);
+ console.error("hCaptcha execution error:", error);
+ toast.error("Failed to verify captcha.", TOAST_STYLE);
setLoading(false);
return;
}
+ } else {
+ console.warn("hCaptcha not loaded or not ready");
+ toast.warning("hCaptcha not ready. Please try again.", TOAST_STYLE);
+ setLoading(false);
+ return;
+ }
- // If not rate limited, proceed with captcha verification
- let hcaptchaToken = undefined;
- if (hcaptchaLoaded) {
- try {
- setIsHCaptchaVisible(true);
-
- // Small delay before showing backdrop
- setTimeout(() => {
- setShowBackdrop(true);
- }, 600);
-
- hcaptchaToken = await executeHCaptcha();
-
- setShowBackdrop(false);
- setIsHCaptchaVisible(false);
- } catch (error) {
- setShowBackdrop(false);
- setIsHCaptchaVisible(false);
- console.error("hCaptcha execution error:", error);
- toast.error("Failed to verify captcha.", TOAST_STYLE);
- setLoading(false);
- return;
- }
- } else {
- console.warn("hCaptcha not loaded or not ready");
- toast.warning("hCaptcha not ready. Please try again.", TOAST_STYLE);
- setLoading(false);
- return;
+ // If captcha is solved, proceed with the claim
+ const res = await fetch(
+ `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/claim`,
+ {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ address: resolvedAddress,
+ chainId,
+ hcaptchaToken,
+ multiplierToken: localStorage.getItem("multiplierToken"),
+ }),
}
+ );
- // If captcha is solved, proceed with the claim
- const res = await fetch(
- `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/claim`,
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- address: resolvedAddress,
- chainId,
- hcaptchaToken,
- multiplierToken: localStorage.getItem("multiplierToken"),
- }),
- }
- );
-
- const responseData = await res.json();
+ const responseData = await res.json();
- await onChange(true);
+ await onChange(true);
- res.ok
- ? toast.success(
- `🎉 Testnet ETH successfully claimed! Enjoy!`,
- TOAST_STYLE
- )
- : toast.error(`${responseData.message}`, TOAST_STYLE);
- } catch (error) {
- console.error("Request error:", error);
- await onChange(false);
- toast.error(
- `${error instanceof Error ? error.message : "❌ Failed to claim testnet ETH. Please try again."}`,
- TOAST_STYLE
- );
- } finally {
- localStorage.removeItem("multiplierToken");
- setLoading(false);
- setSkipTweetPrompt(false);
- setTweetUrl("");
- }
- },
- [
- address,
- isConnected,
- openConnectModal,
- onChange,
- hcaptchaLoaded,
- executeHCaptcha,
- tweetUrl,
- skipTweetPrompt,
- setTweetUrl,
- ]
- );
-
- // Watch for connection success and address being populated
- useEffect(() => {
- if (
- waitingForConnection &&
- isConnected &&
- address &&
- !hasAutoRequested.current
- ) {
- setWaitingForConnection(false);
- hasAutoRequested.current = true;
- handleRequest();
+ res.ok
+ ? toast.success(
+ `🎉 Testnet ETH successfully claimed! Enjoy!`,
+ TOAST_STYLE
+ )
+ : toast.error(`${responseData.message}`, TOAST_STYLE);
+ } catch (error) {
+ console.error("Request error:", error);
+ await onChange(false);
+ toast.error(
+ `${error instanceof Error ? error.message : "❌ Failed to claim testnet ETH. Please try again."}`,
+ TOAST_STYLE
+ );
+ } finally {
+ localStorage.removeItem("multiplierToken");
+ setLoading(false);
+ setSkipTweetPrompt(false);
+ setTweetUrl("");
}
- }, [isConnected, waitingForConnection, address, handleRequest]);
-
- // Reset auto-request flag when address changes
- useEffect(() => {
- hasAutoRequested.current = false;
- }, [address]);
-
- return (
- <>
- {
- e.preventDefault(); // Prevent form submission
- handleRequest(false, setRequestLoading);
+ },
+ [
+ address,
+ isConnected,
+ openConnectModal,
+ onChange,
+ hcaptchaLoaded,
+ executeHCaptcha,
+ tweetUrl,
+ skipTweetPrompt,
+ setTweetUrl,
+ openTweetPrompt,
+ ]
+ );
+
+ // Watch for connection success and address being populated
+ useEffect(() => {
+ if (
+ waitingForConnection &&
+ isConnected &&
+ address &&
+ !hasAutoRequested.current
+ ) {
+ setWaitingForConnection(false);
+ hasAutoRequested.current = true;
+ handleRequest();
+ }
+ }, [isConnected, waitingForConnection, address, handleRequest]);
+
+ // Reset auto-request flag when address changes
+ useEffect(() => {
+ hasAutoRequested.current = false;
+ }, [address]);
+
+ return (
+ <>
+ {
+ e.preventDefault(); // Prevent form submission
+ handleRequest(false, setRequestLoading);
+ }}
+ disabled={requestLoading || disabled}
+ type={type}
+ variant="primary"
+ size="md"
+ >
+ {requestLoading ? "Requesting..." : children}
+
+
+ {isHCaptchaVisible && (
+ {
+ const closeButton = document.querySelector(
+ 'iframe[title="close"]'
+ ) as HTMLIFrameElement;
+ if (closeButton) {
+ closeButton.click();
+ }
}}
- disabled={requestLoading || disabled}
- type={type}
- className={`bg-[#7538F5] hover:bg-[#7538F5]/90 shadow-blue-glow
- rounded-full text-center text-white text-base font-bold uppercase font-[Plus_Jakarta_Sans] min-w-[160px] ${
- requestLoading ? "opacity-50 cursor-not-allowed" : ""
- } ${className}`}
- variant="primary"
- size="md"
- >
- {requestLoading ? "Requesting..." : children}
-
-
- {isHCaptchaVisible && (
- {
- const closeButton = document.querySelector(
- 'iframe[title="close"]'
- ) as HTMLIFrameElement;
- if (closeButton) {
- closeButton.click();
+ />
+ )}
+
+
+ {({ closeModal }) => (
+
+
+
+ Share a tweet for a 2x bonus!
+
+
+ Tweet about our faucet and include the faucet URL to get 2x more
+ testnet ETH.
+
+
+
+
+ {
+ const tweetText = getRandomTweetTemplate();
+ const shareUrl = new URL("https://x.com/intent/tweet");
+ shareUrl.searchParams.set("text", tweetText);
+ shareUrl.searchParams.set("url", TWEET_PARAMS.url);
+ shareUrl.searchParams.set("cards", "summary_large_image");
+ window.open(shareUrl.toString(), "_blank");
+ }}
+ variant="primary"
+ size="md"
+ disabled={tweetModalLoading}
+ >
+ Generate Tweet
+
+
+
+
- )}
-
- {showTweetPrompt && (
-
- setShowTweetPrompt(false)}
+ value={tweetUrl}
+ iconRight={ }
+ onChange={(e) => setTweetUrl(e.target.value)}
+ placeholder="Paste your tweet URL here"
+ onKeyDown={async (e) => {
+ if (e.key === "Enter") {
+ e.preventDefault();
+ try {
+ await validateAndProcessTweet(chainId, tweetUrl);
+ handleRequest(false, setTweetModalLoading);
+ closeModal();
+ } catch (error) {
+ toast.error(
+ error instanceof Error
+ ? error.message
+ : "Failed to validate tweet. Please try again.",
+ TOAST_STYLE
+ );
+ }
+ }
+ }}
/>
- setShowTweetPrompt(false)}
- contentClassName="max-w-[536px] flex-1 relative z-10000"
- >
-
-
-
- Share a tweet for a 2x bonus!
-
-
- Tweet about our faucet and include the faucet URL to get 2x
- more testnet ETH.
-
-
-
-
- {
- const tweetText = getRandomTweetTemplate();
- const shareUrl = new URL("https://x.com/intent/tweet");
- shareUrl.searchParams.set("text", tweetText);
- shareUrl.searchParams.set("url", TWEET_PARAMS.url);
- shareUrl.searchParams.set("cards", "summary_large_image");
- window.open(shareUrl.toString(), "_blank");
- }}
- variant="spotlight"
- size="xs"
- disabled={tweetModalLoading}
- >
- Generate Tweet
-
-
-
-
-
setTweetUrl(e.target.value)}
- onKeyDown={async (e) => {
- if (e.key === "Enter") {
- e.preventDefault();
- try {
- await validateAndProcessTweet(chainId, tweetUrl);
- handleRequest(false, setTweetModalLoading);
- } catch (error) {
- toast.error(
- error instanceof Error
- ? error.message
- : "Failed to validate tweet. Please try again.",
- TOAST_STYLE
- );
- }
- }
- }}
- />
-
-
-
-
-
-
- {
- setShowTweetPrompt(false);
- setSkipTweetPrompt(true);
- handleRequest(true, setTweetModalLoading);
- }}
- variant="spotlight"
- size="md"
- disabled={tweetModalLoading}
- >
- Skip
-
- {
- try {
- await validateAndProcessTweet(chainId, tweetUrl);
- handleRequest(false, setTweetModalLoading);
- } catch (error) {
- toast.error(
- error instanceof Error
- ? error.message
- : "Failed to validate tweet. Please try again.",
- TOAST_STYLE
- );
- }
- }}
- type="button"
- variant="primary"
- size="md"
- disabled={tweetModalLoading}
- className="shadow-large-pop shadow-krakenPurple/50"
- >
- {tweetModalLoading ? "Processing..." : "Continue"}
-
-
-
-
-
+
+
+ {
+ closeModal();
+ setSkipTweetPrompt(true);
+ handleRequest(true, setTweetModalLoading);
+ }}
+ variant="secondary"
+ size="md"
+ disabled={tweetModalLoading}
+ >
+ Skip
+
+ {
+ try {
+ await validateAndProcessTweet(chainId, tweetUrl);
+ handleRequest(false, setTweetModalLoading);
+ closeModal();
+ } catch (error) {
+ toast.error(
+ error instanceof Error
+ ? error.message
+ : "Failed to validate tweet. Please try again.",
+ TOAST_STYLE
+ );
+ }
+ }}
+ variant="primary"
+ size="md"
+ disabled={tweetModalLoading}
+ >
+ {tweetModalLoading ? "Processing..." : "Continue"}
+
+
+
)}
- >
- );
- }
-);
+
+ >
+ );
+};
FaucetRequestButton.displayName = "FaucetRequestButton";
diff --git a/src/app/[locale]/faucet/page.tsx b/src/app/[locale]/faucet/page.tsx
index 3b65126..c143078 100644
--- a/src/app/[locale]/faucet/page.tsx
+++ b/src/app/[locale]/faucet/page.tsx
@@ -1,7 +1,11 @@
import { Metadata } from "next";
+import { useTranslations } from "next-intl";
import { JsonLd } from "@/components/JsonLd";
import { PageView } from "@/components/PageView";
+import { newLayoutContainerClasses } from "@/components/styles/container";
+
+import { PageHeader } from "../_components/PageHeader";
import { Faucet } from "./_components/Faucet";
@@ -27,6 +31,7 @@ export const metadata: Metadata = {
};
export default function FaucetPage() {
+ const t = useTranslations("Faucet");
return (
<>
-
+
>
);
}
diff --git a/src/app/[locale]/get-verified/_components/VerificationContent.tsx b/src/app/[locale]/get-verified/_components/VerificationContent.tsx
deleted file mode 100644
index 7917e68..0000000
--- a/src/app/[locale]/get-verified/_components/VerificationContent.tsx
+++ /dev/null
@@ -1,282 +0,0 @@
-"use client";
-
-import Image from "next/image";
-
-import { Button } from "@/components/Button/Button";
-import { ColoredText } from "@/components/ColoredText";
-import { useFeatureRequestModalContext } from "@/components/FeatureRequestModal/FeatureRequestModalContext";
-import { FlyWhenIntoView } from "@/components/FlyWhenIntoView";
-import { useVerificationModalContext } from "@/components/VerificationModal/VerificationModalContext";
-
-export function VerificationContent() {
- const { setIsOpen: openVerificationModal } = useVerificationModalContext();
- const { setIsOpen: openFeatureRequestModal } =
- useFeatureRequestModalContext();
-
- return (
-
- {/* First section with two noisy containers */}
-
-
-
- {/* Add background noise div with matching rounded corners */}
-
-
-
-
-
-
- What is Ink Verify?
-
-
- Ink Verify is a public infrastructure that enables onchain
- attestations about both offhcain and onchain data. Powered by
- the Ethereum Attestation Service.
-
-
-
-
-
-
-
-
-
-
-
-
- Why Verify
-
-
- We're building openly and we want to hear from you.
- Verify your attendance, get tooling rewards, and tell us how
- you want to use Ink Verify.
-
-
-
-
-
-
-
- {/* Benefits section */}
-
-
-
- By verifying your attendance you can get...
-
-
-
-
-
- {/* USPs grid - 50% width */}
-
-
- {/* QuickNode */}
-
-
-
- Best in class RPC, Streams, Functions, Alerts!
-
-
-
- {/* Tenderly */}
-
-
-
- Full stack web3 infrastructure
-
-
-
- {/* Goldsky */}
-
-
-
Data indexing made easy
-
-
- {/* And more */}
-
-
-
-
- {/* Discord badge - 50% width */}
-
-
-
-
- Get a Discord badge
-
-
- By verifying your attendance of Ink DevJam, you'll get a
- one of a kind Discord badge to display on your profile.
-
-
-
-
-
-
- {/* Verify now button */}
-
-
- openVerificationModal(true)}
- >
- Verify now
-
-
-
-
-
- {/* Request a feature section */}
-
- {/* Left side content */}
-
-
- Request a feature
-
-
- What data would you like to see attestations for?
-
-
- openFeatureRequestModal(true)}
- >
- Make request
-
-
-
-
- {/* Right side image - positioned to bottom right */}
-
-
-
-
-
- {/* Final CTA section */}
-
-
- Get Verified and start building
-
-
-
- openVerificationModal(true)}
- >
- Verify now
-
-
-
-
- );
-}
diff --git a/src/app/[locale]/get-verified/_components/VerificationHero.tsx b/src/app/[locale]/get-verified/_components/VerificationHero.tsx
deleted file mode 100644
index 23cb10b..0000000
--- a/src/app/[locale]/get-verified/_components/VerificationHero.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-"use client";
-
-import Image from "next/image";
-
-import { Button } from "@/components/Button/Button";
-import { ColoredText } from "@/components/ColoredText";
-import { useVerificationModalContext } from "@/components/VerificationModal/VerificationModalContext";
-import { classNames } from "@/util/classes";
-
-export function VerificationHero() {
- const { setIsOpen } = useVerificationModalContext();
-
- return (
-
-
- {/* Left side - Image */}
-
-
-
-
- {/* Right side - Content */}
-
-
-
- Get Verified onchain to unlock perks and dev tools
-
-
-
-
- Simply verify your attendance of the Ink DevJam event and
- you're golden!
-
-
-
- setIsOpen(true)}
- >
- Verify now
-
-
-
-
-
- );
-}
diff --git a/src/app/[locale]/get-verified/page.tsx b/src/app/[locale]/get-verified/page.tsx
deleted file mode 100644
index 5d07d26..0000000
--- a/src/app/[locale]/get-verified/page.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { Metadata } from "next";
-
-import { FeatureRequestModal } from "@/components/FeatureRequestModal/FeatureRequestModal";
-import { FeatureRequestModalProvider } from "@/components/FeatureRequestModal/FeatureRequestModalContext";
-import { JsonLd } from "@/components/JsonLd";
-import { PageView } from "@/components/PageView";
-import { newLayoutContainerClasses } from "@/components/styles/container";
-import { VerificationModal } from "@/components/VerificationModal/VerificationModal";
-import { VerificationModalProvider } from "@/components/VerificationModal/VerificationModalContext";
-
-import { VerificationContent } from "./_components/VerificationContent";
-import { VerificationHero } from "./_components/VerificationHero";
-
-export const metadata: Metadata = {
- title: "Get Verified - Ink",
- description:
- "Get verified on Ink, Kraken's Layer 2 blockchain built on the Superchain. Join our verification program to establish your identity and unlock enhanced features.",
-};
-
-export default function GetVerifiedPage() {
- return (
-
-
- <>
-
-
-
-
-
-
-
-
-
-
- >
-
-
- );
-}
diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx
index 9588730..1c39013 100644
--- a/src/app/[locale]/layout.tsx
+++ b/src/app/[locale]/layout.tsx
@@ -4,12 +4,11 @@ import { cookies, headers } from "next/headers";
import { NextIntlClientProvider } from "next-intl";
import { getMessages } from "next-intl/server";
-import { ContactUsModal } from "@/components/ContactUsModal";
import { ConsentLogger } from "@/components/CookieConsent/ConsentLogger";
import { CookieConsent } from "@/components/CookieConsent/CookieConsent";
import { Footer } from "@/components/Footer";
import { GlobalSvgStuff } from "@/components/icons/GlobalSvgStuff";
-import { NewsletterModal } from "@/components/NewsletterModal";
+import { ContactUsModal, NewsletterModal } from "@/components/Modals";
import { Providers } from "@/components/Providers";
import { ToggleThemeShortcut } from "@/components/ToggleThemeShortcut";
import { clientEnv } from "@/env-client";
diff --git a/src/app/[locale]/newsletter/resubscribe/_components/ResubscribeForm.tsx b/src/app/[locale]/newsletter/resubscribe/_components/ResubscribeForm.tsx
index 844a6f6..7ff1491 100644
--- a/src/app/[locale]/newsletter/resubscribe/_components/ResubscribeForm.tsx
+++ b/src/app/[locale]/newsletter/resubscribe/_components/ResubscribeForm.tsx
@@ -2,11 +2,11 @@
import { useActionState } from "react";
import { useFormStatus } from "react-dom";
+import { Button } from "@inkonchain/ink-kit";
import { resubscribeToBraze } from "@/actions/resubscribe-to-braze";
-import { Button } from "@/components/Button/Button";
-import { ButtonLink } from "@/components/Button/ButtonLink";
import { FormStatus } from "@/components/FormStatus";
+import { Link } from "@/routing";
interface ResubscribeFormProps {
userBrazeId: string;
@@ -30,17 +30,16 @@ export const ResubscribeForm: React.FC = ({
was a mistake, use the button below to unsubscribe
-
- Unsuscribe
-
+
+
+ Unsuscribe
+
+
);
}
@@ -116,7 +115,7 @@ const Submit = () => {
return (
= ({
was a mistake, use the button below to resubscribe
-
- Resuscribe
-
+
+
+ Resuscribe
+
+
);
}
@@ -116,7 +115,7 @@ const Submit = () => {
return (
{t("title")}
-
- {t("cta")}
-
+
+ {t("cta")}
+
diff --git a/src/app/[locale]/testnet-bridge/_components/Bridge.tsx b/src/app/[locale]/testnet-bridge/_components/Bridge.tsx
index 5b826cd..74eba34 100644
--- a/src/app/[locale]/testnet-bridge/_components/Bridge.tsx
+++ b/src/app/[locale]/testnet-bridge/_components/Bridge.tsx
@@ -1,6 +1,7 @@
"use client";
import { useEffect, useState } from "react";
+import { Button, useModalContext } from "@inkonchain/ink-kit";
import Image from "next/image";
import { useTranslations } from "next-intl";
import { parseEther } from "viem";
@@ -15,8 +16,10 @@ import {
} from "wagmi";
import { sepolia } from "wagmi/chains";
-import { useBridgeTransactionModal } from "@/app/[locale]/testnet-bridge/_components/BridgeTransactionModal";
-import { Button } from "@/components/Button/Button";
+import {
+ BRIDGE_TRANSACTION_MODAL_KEY,
+ useBridgeTransactionModal,
+} from "@/app/[locale]/testnet-bridge/_components/BridgeTransactionModal";
import { ColoredText } from "@/components/ColoredText";
import { ConnectWalletButton } from "@/components/ConnectWalletButton";
import { Loader } from "@/components/Loader";
@@ -37,8 +40,8 @@ export function Bridge() {
const { address, isConnected, chain } = useAccount();
const { switchChain } = useSwitchChain();
- const { setIsOpen: setIsBridgeTransactionModalOpen, setTxHash } =
- useBridgeTransactionModal();
+ const { setTxHash } = useBridgeTransactionModal();
+ const { openModal } = useModalContext(BRIDGE_TRANSACTION_MODAL_KEY);
const isCorrectNetwork = chain?.id === sepolia.id;
const isWrongNetwork = isConnected && !isCorrectNetwork;
@@ -84,8 +87,8 @@ export function Bridge() {
onSuccess: (hash: Hash) => {
if (hash) {
setStatus(`success:${hash}`);
- setIsBridgeTransactionModalOpen(true);
setTxHash(hash);
+ openModal();
setAmount("");
} else {
console.error("Unexpected transaction response:", hash);
diff --git a/src/app/[locale]/testnet-bridge/_components/BridgeTransactionModal/BridgeTransactionModal.tsx b/src/app/[locale]/testnet-bridge/_components/BridgeTransactionModal/BridgeTransactionModal.tsx
index 168975d..c56242e 100644
--- a/src/app/[locale]/testnet-bridge/_components/BridgeTransactionModal/BridgeTransactionModal.tsx
+++ b/src/app/[locale]/testnet-bridge/_components/BridgeTransactionModal/BridgeTransactionModal.tsx
@@ -1,81 +1,70 @@
"use client";
import React from "react";
+import { Button, Modal, useModalContext } from "@inkonchain/ink-kit";
import Lottie from "lottie-react";
import { useTranslations } from "next-intl";
-import { Backdrop } from "@/components/Backdrop";
-import { Button } from "@/components/Button/Button";
-import {
- CenteredModal,
- CenteredModalContainer,
-} from "@/components/CenteredModal";
import { ColoredText } from "@/components/ColoredText";
-import { useModal } from "@/hooks/useModal";
import { BlockExplorerButton } from "../BlockExplorerButton";
import { useBridgeTransactionModal } from "./BridgeTransactionModalContext";
import animation from "./BroadcastSent-checkMark.json";
+export const BRIDGE_TRANSACTION_MODAL_KEY = "bridge-transaction-modal";
+
export interface BridgeTransactionModalProps {}
export const BridgeTransactionModal: React.FC<
BridgeTransactionModalProps
> = () => {
const t = useTranslations("Bridge");
- const { isOpen, setIsOpen, txHash, setTxHash } = useBridgeTransactionModal();
- useModal({ isOpen, closeModal, modalKey: "bridge-transaction-modal" });
+ const { txHash, setTxHash } = useBridgeTransactionModal();
+ const { closeModal } = useModalContext(BRIDGE_TRANSACTION_MODAL_KEY);
- function closeModal() {
- setIsOpen(false);
+ function onCloseModal() {
setTxHash(null);
}
- if (!isOpen) return null;
- if (!txHash) return null;
-
return (
-
-
-
-
-
-
-
+ {() => (
+
+
+
+
+
+ {t("transactionSubmitted")}
+
+
+ {t.rich("bridgingTime", {
+ network: (network) => {network} ,
+ })}
+
+
+
+
+
+
+
+
- {t("transactionSubmitted")}
-
-
- {t.rich("bridgingTime", {
- network: (network) => {network} ,
- })}
-
+ {t("done")}
+
-
-
-
-
-
- {t("done")}
-
-
-
-
+ )}
+
);
};
diff --git a/src/app/[locale]/testnet-bridge/_components/BridgeTransactionModal/BridgeTransactionModalContext.tsx b/src/app/[locale]/testnet-bridge/_components/BridgeTransactionModal/BridgeTransactionModalContext.tsx
index d3ec983..9f288ee 100644
--- a/src/app/[locale]/testnet-bridge/_components/BridgeTransactionModal/BridgeTransactionModalContext.tsx
+++ b/src/app/[locale]/testnet-bridge/_components/BridgeTransactionModal/BridgeTransactionModalContext.tsx
@@ -10,24 +10,14 @@ import {
} from "react";
interface BridgeTransactionModalContextProps {
- isOpen: boolean;
txHash: null | string;
- setIsOpen: Dispatch>;
setTxHash: Dispatch>;
}
-function notImplementedYet() {
- throw new Error(
- "Not yet implemented, make sure component is wrapped by BridgeTransactionModalContextProvider."
- );
-}
-
const BridgeTransactionModalContext =
createContext({
- isOpen: false,
txHash: null,
- setIsOpen: notImplementedYet,
- setTxHash: notImplementedYet,
+ setTxHash: () => {},
});
export const useBridgeTransactionModal = () =>
@@ -36,12 +26,11 @@ export const useBridgeTransactionModal = () =>
export const BridgeTransactionModalContextProvider: React.FC<
PropsWithChildren
> = ({ children }) => {
- const [isOpen, setIsOpen] = useState(false);
const [txHash, setTxHash] = useState(null);
const context: BridgeTransactionModalContextProps = useMemo(
- () => ({ isOpen, setIsOpen, txHash, setTxHash }),
- [isOpen, setIsOpen, txHash, setTxHash]
+ () => ({ txHash, setTxHash }),
+ [txHash, setTxHash]
);
return (
diff --git a/src/app/[locale]/verify/_components/Verifications.tsx b/src/app/[locale]/verify/_components/Verifications.tsx
index 40eacaa..7a46187 100644
--- a/src/app/[locale]/verify/_components/Verifications.tsx
+++ b/src/app/[locale]/verify/_components/Verifications.tsx
@@ -72,7 +72,7 @@ export const Verifications = () => {
const DesktopVerificationsTable = () => {
const { isConnected } = useAccount();
return (
-
+
Verification
@@ -144,7 +144,7 @@ const DesktopVerificationsTable = () => {
{isConnected ? (
Available
@@ -164,7 +164,7 @@ const DesktopVerificationsTable = () => {
const MobileVerificationsTable = () => {
const { isConnected } = useAccount();
return (
-
+
Verification
@@ -225,7 +225,7 @@ const MobileVerificationsTable = () => {
{isConnected ? (
Available
diff --git a/src/app/[locale]/verify/_components/VerifyHaveASuggestion.tsx b/src/app/[locale]/verify/_components/VerifyHaveASuggestion.tsx
index f74d17f..a3f1aca 100644
--- a/src/app/[locale]/verify/_components/VerifyHaveASuggestion.tsx
+++ b/src/app/[locale]/verify/_components/VerifyHaveASuggestion.tsx
@@ -1,14 +1,15 @@
"use client";
-import { Button } from "@inkonchain/ink-kit";
+import { Button, useModalContext } from "@inkonchain/ink-kit";
import { useTranslations } from "next-intl";
import { ColoredText } from "@/components/ColoredText";
-import { useContactUsModalContext } from "@/components/ContactUsModal/ContactUsModalContext";
+import { CONTACT_US_MODAL_KEY } from "@/components/Modals/ContactUsModal";
export function VerifyHaveASuggestion() {
const t = useTranslations("Verify.haveASuggestion");
- const { setIsOpen } = useContactUsModalContext();
+ const { openModal: openContactUsModal } =
+ useModalContext(CONTACT_US_MODAL_KEY);
return (
@@ -24,7 +25,7 @@ export function VerifyHaveASuggestion() {
{t("description")}
- setIsOpen(true)}>
+
{t("contactTeam")}
diff --git a/src/app/globals.css b/src/app/globals.css
index fd4ffed..6f1ddd6 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1,209 +1,3 @@
-@import "@inkonchain/ink-kit/style.css" layer(base);
-
-@import "tailwindcss";
-
-@config '../../tailwind.config.ts';
-
-@custom-variant dark (&:where(.dark, .dark *));
-
-/*
- The default border color has changed to `currentColor` in Tailwind CSS v4,
- so we've added these compatibility styles to make sure everything still
- looks the same as it did with Tailwind CSS v3.
-
- If we ever want to remove these styles, we need to add an explicit border
- color utility to any element that depends on these defaults.
-*/
-@layer base {
- *,
- ::after,
- ::before,
- ::backdrop,
- ::file-selector-button {
- border-color: var(--color-gray-200, currentColor);
- }
-}
-
-@theme {
- /** Colors */
- --color-default: var(--ink-text-default);
- --color-inkGradient: var(--ink-button-primary);
- --color-gradientPurple: #8049f2;
- --color-blackMagic: #0b0d12;
- --color-whiteMagic: #f6f4ff;
- --color-purpleMagic: #7132f5;
- --color-redMagic-100: #ff7386;
- --color-redMagic-400: #d11d45;
- --color-redMagic-500: #f5395e;
-
- --animation-marquee: "marquee 25s linear infinite";
- --animation-pulse: "slight-pulse 3s ease-in-out infinite";
- --animation-slightPulse: "slight-pulse 5.5s ease-in-out infinite";
-
- --blur-xs: "2px";
- --backdrop-blur-xs: "2px";
-
- --border-radius-4xl: "30px";
-
- --font-size-h1: "64px";
- --font-size-h1-line-height: "60.8px";
- --font-size-h1-letter-spacing: "-2%";
-
- --font-size-h2: "38px";
- --font-size-h2-line-height: "38px";
- --font-size-h2-letter-spacing: "-1%";
-
- --font-size-h3: "32px";
- --font-size-h3-line-height: "32px";
- --font-size-h3-letter-spacing: "-1%";
-
- --font-size-body: "16px";
- --font-size-body-line-height: "22px";
-
- --font-size-body-2: "16px";
- --font-size-body-2-line-height: "20px";
-
- --font-size-body-3: "14px";
- --font-size-body-3-line-height: "18px";
-
- --font-size-4xl: "36px";
- --font-size-4xl-line-height: "47px";
- --font-size-4xl-letter-spacing: "-2%";
-
- --font-size-6xl: "60px";
- --font-size-6xl-line-height: "72px";
- --font-size-6xl-letter-spacing: "-2%";
-
- --duration-150: "150ms";
- --duration-600: "600ms";
-
- --background-size-overflow-150: "150% 100%";
- --background-size-overflow-200: "200% 100%";
-
- /* Generated using: https://linear-easing-generator.netlify.app/ */
- --ease-spring: linear(
- 0,
- 0.002,
- 0.007 1.1%,
- 0.027,
- 0.06,
- 0.108 5.1%,
- 0.214 7.7%,
- 0.58 15.8%,
- 0.686,
- 0.774,
- 0.847,
- 0.907,
- 0.955,
- 0.991 32.1%,
- 1.011 34.6%,
- 1.026 37.3%,
- 1.034 40.2%,
- 1.037 43.5%,
- 1.034 48.2%,
- 1.012 62.1%,
- 1.003 71%,
- 0.999 81.9% 100%
- );
-
- --breakpoint-menu: 1035px;
- --breakpoint-sm-landscape-only: \(max-height: 700px\)and \(min-width: 640px\);
- --breakpoint-hd: 1920px;
- --breakpoint-2xl: 1600px;
-
- @keyframes marquee {
- 0% {
- transform: translateX(0);
- }
- 100% {
- transform: translateX(-50%);
- }
- }
-
- @keyframes slightPulse {
- 0% {
- background-position: 0% 50%;
- }
- 50% {
- background-position: 100% 50%;
- }
- 100% {
- background-position: 0% 50%;
- }
- }
-}
-
-@utility dark {
- /** To optimise **/
-
- & body {
- background-color: #160f1f;
- }
-}
-
-@utility pause {
- /** https://github.com/tailwindlabs/tailwindcss/discussions/3654#discussioncomment-2327745 */
- animation-play-state: paused;
-}
-
-@utility scrollbar-custom {
- scrollbar-width: thin; /* Firefox */
- scrollbar-color: var(--ink-scrollbar) transparent; /* Firefox */
-
- &::-webkit-scrollbar {
- width: 12px; /* width of the entire scrollbar */
- }
- f &::-webkit-scrollbar-track {
- background: transparent; /* color of the tracking area */
- }
-
- &::-webkit-scrollbar-thumb {
- background-color: var(--ink-scrollbar); /* color of the scroll thumb */
- border-radius: 20px; /* roundness of the scroll thumb */
- }
-}
-
-@utility no-scrollbar {
- &::-webkit-scrollbar {
- display: none;
- }
- -ms-overflow-style: none;
- scrollbar-width: none;
-}
-
-@layer utilities {
- body {
- font-family:
- var(--font-plus-jakarta-sans),
- var(--font-inter),
- -apple-system,
- BlinkMacSystemFont,
- "Segoe UI",
- Helvetica,
- "Apple Color Emoji",
- Arial,
- sans-serif,
- "Segoe UI Emoji",
- "Segoe UI Symbol";
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- background-color: #f0efff;
- background-size: cover;
- }
- html {
- scroll-behavior: smooth;
- }
-
- :root {
- --ink-button-primary: rgb(113, 50, 245);
- --ink-scrollbar: color-mix(
- in srgb,
- var(--ink-button-primary) 20%,
- transparent
- );
- }
-}
-
/* A fix that must be applied to all h- so that they don't cut off the text */
.ink\:text-h1 {
margin-top: -4px;
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index cd637b5..653698a 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { Metadata, Viewport } from "next";
-import "@/app/globals.css";
+import "@/app/tailwind.css";
export const metadata: Metadata = {
verification: {
diff --git a/src/app/tailwind.css b/src/app/tailwind.css
new file mode 100644
index 0000000..3b05a78
--- /dev/null
+++ b/src/app/tailwind.css
@@ -0,0 +1,220 @@
+@import "@inkonchain/ink-kit/style.css" layer(base);
+
+@import "tailwindcss";
+@import "./globals.css";
+
+@custom-variant dark (&:where(.dark, .dark *));
+
+/*
+ The default border color has changed to `currentColor` in Tailwind CSS v4,
+ so we've added these compatibility styles to make sure everything still
+ looks the same as it did with Tailwind CSS v3.
+
+ If we ever want to remove these styles, we need to add an explicit border
+ color utility to any element that depends on these defaults.
+*/
+@layer base {
+ *,
+ ::after,
+ ::before,
+ ::backdrop,
+ ::file-selector-button {
+ border-color: var(--color-gray-200, currentColor);
+ }
+}
+
+@theme {
+ /** Colors */
+ --color-default: var(--ink-text-default);
+ --color-inkGradient: var(--ink-button-primary);
+ --color-gradientPurple: #8049f2;
+ --color-blackMagic: #0b0d12;
+ --color-whiteMagic: #f6f4ff;
+
+ --color-dapps-icon-gradient: linear-gradient(
+ 144.22deg,
+ #c7e1ff -40.26%,
+ #c6c7d2 66.08%,
+ #7132f5 125.73%
+ ),
+ radial-gradient(
+ 61.23% 153.65% at -4.6% -9.33%,
+ #c7e1ff 0%,
+ rgba(199, 225, 255, 0.6) 33.33%,
+ #f6f4ff 66.67%,
+ rgba(198, 199, 210, 0) 100%
+ ),
+ linear-gradient(0deg, rgba(130, 215, 251, 0), rgba(130, 215, 251, 0)),
+ radial-gradient(
+ 50% 50% at 50% 50%,
+ rgba(255, 255, 255, 0.7) 0%,
+ rgba(255, 255, 255, 0) 100%
+ );
+
+ --animation-marquee: "marquee 25s linear infinite";
+ --animation-pulse: "slight-pulse 3s ease-in-out infinite";
+ --animation-slightPulse: "slight-pulse 5.5s ease-in-out infinite";
+
+ --blur-xs: "2px";
+ --backdrop-blur-xs: "2px";
+
+ --border-radius-4xl: "30px";
+
+ --font-size-h1: "64px";
+ --font-size-h1-line-height: "60.8px";
+ --font-size-h1-letter-spacing: "-2%";
+
+ --font-size-h2: "38px";
+ --font-size-h2-line-height: "38px";
+ --font-size-h2-letter-spacing: "-1%";
+
+ --font-size-h3: "32px";
+ --font-size-h3-line-height: "32px";
+ --font-size-h3-letter-spacing: "-1%";
+
+ --font-size-body: "16px";
+ --font-size-body-line-height: "22px";
+
+ --font-size-body-2: "16px";
+ --font-size-body-2-line-height: "20px";
+
+ --font-size-body-3: "14px";
+ --font-size-body-3-line-height: "18px";
+
+ --font-size-4xl: "36px";
+ --font-size-4xl-line-height: "47px";
+ --font-size-4xl-letter-spacing: "-2%";
+
+ --font-size-6xl: "60px";
+ --font-size-6xl-line-height: "72px";
+ --font-size-6xl-letter-spacing: "-2%";
+
+ --duration-150: "150ms";
+ --duration-600: "600ms";
+
+ --background-size-overflow-150: "150% 100%";
+ --background-size-overflow-200: "200% 100%";
+
+ /* Generated using: https://linear-easing-generator.netlify.app/ */
+ --ease-spring: linear(
+ 0,
+ 0.002,
+ 0.007 1.1%,
+ 0.027,
+ 0.06,
+ 0.108 5.1%,
+ 0.214 7.7%,
+ 0.58 15.8%,
+ 0.686,
+ 0.774,
+ 0.847,
+ 0.907,
+ 0.955,
+ 0.991 32.1%,
+ 1.011 34.6%,
+ 1.026 37.3%,
+ 1.034 40.2%,
+ 1.037 43.5%,
+ 1.034 48.2%,
+ 1.012 62.1%,
+ 1.003 71%,
+ 0.999 81.9% 100%
+ );
+
+ --breakpoint-menu: 1035px;
+ --breakpoint-sm-landscape-only: \(max-height: 700px\)and \(min-width: 640px\);
+ --breakpoint-hd: 1920px;
+ --breakpoint-2xl: 1600px;
+
+ @keyframes marquee {
+ 0% {
+ transform: translateX(0);
+ }
+ 100% {
+ transform: translateX(-50%);
+ }
+ }
+
+ @keyframes slightPulse {
+ 0% {
+ background-position: 0% 50%;
+ }
+ 50% {
+ background-position: 100% 50%;
+ }
+ 100% {
+ background-position: 0% 50%;
+ }
+ }
+}
+
+@utility dark {
+ /** To optimise **/
+
+ & body {
+ background-color: #160f1f;
+ }
+}
+
+@utility pause {
+ /** https://github.com/tailwindlabs/tailwindcss/discussions/3654#discussioncomment-2327745 */
+ animation-play-state: paused;
+}
+
+@utility scrollbar-custom {
+ scrollbar-width: thin; /* Firefox */
+ scrollbar-color: var(--ink-scrollbar) transparent; /* Firefox */
+
+ &::-webkit-scrollbar {
+ width: 12px; /* width of the entire scrollbar */
+ }
+ f &::-webkit-scrollbar-track {
+ background: transparent; /* color of the tracking area */
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background-color: var(--ink-scrollbar); /* color of the scroll thumb */
+ border-radius: 20px; /* roundness of the scroll thumb */
+ }
+}
+
+@utility no-scrollbar {
+ &::-webkit-scrollbar {
+ display: none;
+ }
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+}
+
+@layer utilities {
+ body {
+ font-family:
+ var(--font-plus-jakarta-sans),
+ var(--font-inter),
+ -apple-system,
+ BlinkMacSystemFont,
+ "Segoe UI",
+ Helvetica,
+ "Apple Color Emoji",
+ Arial,
+ sans-serif,
+ "Segoe UI Emoji",
+ "Segoe UI Symbol";
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ background-color: #f0efff;
+ background-size: cover;
+ }
+ html {
+ scroll-behavior: smooth;
+ }
+
+ :root {
+ --ink-button-primary: rgb(113, 50, 245);
+ --ink-scrollbar: color-mix(
+ in srgb,
+ var(--ink-button-primary) 20%,
+ transparent
+ );
+ }
+}
diff --git a/src/components/AppSubmissionModal/AppSubmissionModalContext.tsx b/src/components/AppSubmissionModal/AppSubmissionModalContext.tsx
deleted file mode 100644
index 78008e0..0000000
--- a/src/components/AppSubmissionModal/AppSubmissionModalContext.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-"use client";
-import React, { createContext, useContext, useState } from "react";
-
-interface AppSubmissionModalContextType {
- isOpen: boolean;
- setIsOpen: (isOpen: boolean) => void;
-}
-
-const AppSubmissionModalContext = createContext
({
- isOpen: false,
- setIsOpen: () => {},
-});
-
-export const useAppSubmissionModalContext = () =>
- useContext(AppSubmissionModalContext);
-
-export const AppSubmissionModalProvider: React.FC<{
- children: React.ReactNode;
-}> = ({ children }) => {
- const [isOpen, setIsOpen] = useState(false);
-
- return (
-
- {children}
-
- );
-};
diff --git a/src/components/BigScallableTitle.tsx b/src/components/BigScallableTitle.tsx
deleted file mode 100644
index e8aa72a..0000000
--- a/src/components/BigScallableTitle.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import React from "react";
-
-import { classNames } from "@/util/classes";
-
-import { ColoredText, ColoredTextProps } from "./ColoredText";
-
-export interface BigScalableTitleProps {
- title: React.ReactNode;
- subtitle?: React.ReactNode;
- align?: "center" | "left";
- /**
- * Ratio of the title to the viewport width. TBH just test some values and see what works best.
- * Examples:
- * Main title "Ink the future" is 8vw
- * Community page title "Join the Ink Community" is 4vw
- * */
- ratio?: 2 | 4 | 8;
- variant?: ColoredTextProps["variant"];
-}
-
-export const BigScalableTitle: React.FC = ({
- title,
- subtitle,
- ratio = 8,
- align = "center",
- variant = "purple",
-}) => {
- return (
-
-
-
- {title}
-
-
- {subtitle}
-
- );
-};
diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx
deleted file mode 100644
index 5c11f0a..0000000
--- a/src/components/Button/Button.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-"use client";
-
-import React from "react";
-import { AnimatePresence, motion } from "framer-motion";
-
-import { Loader } from "@/components/Loader";
-
-import {
- buttonClassName,
- ButtonSizes,
- ButtonVariants,
- IconPositions,
-} from "./styles";
-
-export interface ButtonProps
- extends React.ButtonHTMLAttributes {
- variant: ButtonVariants;
- icon?: React.ReactNode;
- iconPosition?: IconPositions;
- iconOnly?: boolean;
- size: ButtonSizes;
- compact?: boolean;
- pending?: boolean;
-}
-
-export const Button = React.forwardRef(
- (
- {
- className,
- variant,
- icon,
- iconPosition = "left",
- size,
- compact = false,
- iconOnly = false,
- pending = false,
- children,
- ...props
- },
- ref
- ) => {
- return (
-
-
- {!pending && icon && iconPosition === "left" && icon}
-
-
-
- {pending ? (
-
-
-
- ) : null}
-
-
-
- {children}
-
-
-
- {!pending && icon && iconPosition === "right" && icon}
-
-
- );
- }
-);
-
-Button.displayName = "Button";
diff --git a/src/components/Button/ButtonLink.tsx b/src/components/Button/ButtonLink.tsx
deleted file mode 100644
index 89de149..0000000
--- a/src/components/Button/ButtonLink.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-"use client";
-
-import React, { PropsWithChildren } from "react";
-
-import { HrefProp, Link } from "@/routing";
-import { classNames } from "@/util/classes";
-
-import {
- buttonClassName,
- ButtonSizes,
- ButtonVariants,
- IconPositions,
-} from "./styles";
-
-export interface ButtonLinkProps
- extends Omit, "href"> {
- className?: string;
- href: HrefProp;
- variant: ButtonVariants;
- icon?: React.ReactNode;
- iconPosition?: IconPositions;
- size: ButtonSizes;
- compact?: boolean;
-}
-
-export const ButtonLink: React.FC> = ({
- className,
- variant,
- icon,
- iconPosition = "left",
- children,
- size,
- compact = false,
- ...props
-}) => {
- return (
-
- {icon && iconPosition === "left" && icon}
- {children}
- {icon && iconPosition === "right" && icon}
-
- );
-};
diff --git a/src/components/Button/styles.ts b/src/components/Button/styles.ts
deleted file mode 100644
index db8025b..0000000
--- a/src/components/Button/styles.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import { classNames } from "@/util/classes";
-
-export type ButtonVariants =
- | "primary"
- | "outline"
- | "dark"
- | "black"
- | "spotlight"
- | "developer"
- | "link";
-export type ButtonSizes = "xs" | "md" | "lg";
-export type IconPositions = "left" | "right";
-
-const BACKGROUND_PRIMARY =
- "text-whiteMagic bg-krakenPurple hover:brightness-110 duration-300 transition-[box-shadow] hover:shadow-krakenPurple/50 hover:shadow-large-pop text-whiteMagic";
-
-const BACKGROUND_DARK =
- "text-whiteMagic bg-[length:110%,100%] text-white bg-blackMagic hover:bg-[linear-gradient(129.5deg,#0B0D12_14.89%,#101114_14.9%,#2B1463_58.71%,#7132F5_83.46%,#C6C7D2_103.36%),radial-gradient(73.68%_66.96%_at_1.95%_4.66%,#101114_0%,rgba(16,17,20,0)_100%)]";
-
-const BACKGROUND_OUTLINE =
- "text-whiteMagic bg-blackMagic outline outline-2 outline-whiteMagic hover:brightness-90";
-
-const BACKGROUND_SPOTLIGHT =
- "text-purpleMagic bg-whiteMagic hover:brightness-90";
-
-const BACKGROUND_LINK =
- "text-whiteMagic bg-blackMagic/25 hover:brightness-110 duration-300 transition-[box-shadow] hover:shadow-krakenPurple/50 hover:shadow-large-pop text-whiteMagic";
-
-const BACKGROUND_BLACK =
- "bg-blackMagic shadow-blue-glow backdrop-blur-2xl hover:bg-blackMagic/80 dark:hover:bg-blackMagic/40 transition-all duration-300 text-white";
-
-interface ButtonClassNameOptions {
- iconOnly?: boolean;
- compact?: boolean;
- variant: ButtonVariants;
- size: ButtonSizes;
- extraClassName?: string;
-}
-
-export const buttonClassName = ({
- variant,
- iconOnly = false,
- compact = false,
- size,
- extraClassName,
-}: ButtonClassNameOptions) => {
- return classNames(
- "cursor-pointer opacity-100 rounded-full w-full h-full border-white overflow-hidden flex items-center justify-center gap-2 font-bold shadow-sm",
- "transition-colors",
- "relative flex items-center gap-3 select-none w-full",
- {
- "justify-center": variant !== "link",
- "justify-between": variant === "link",
- },
- {
- "py-2": size === "xs",
- "py-4": size === "md",
- "py-5": size === "lg",
- },
- compact
- ? {
- "px-2": size === "xs",
- "px-4": size === "md",
- "px-8": size === "lg",
- }
- : {
- "px-4": size === "xs",
- "px-8": size === "md",
- "px-16": size === "lg",
- },
- {
- "text-base": size === "md",
- "text-xl": size === "lg",
- },
- {
- "px-4 py-4": variant === "link",
- },
- iconOnly && {
- "aspect-square": true,
- "px-4": size === "xs",
- "px-5": size === "md",
- "px-6": size === "lg",
- },
- {
- [BACKGROUND_PRIMARY]: variant === "primary" || variant === "developer",
- [BACKGROUND_DARK]: variant === "dark",
- [BACKGROUND_OUTLINE]: variant === "outline",
- [BACKGROUND_SPOTLIGHT]: variant === "spotlight",
- [BACKGROUND_LINK]: variant === "link",
- [BACKGROUND_BLACK]: variant === "black",
- },
- extraClassName
- );
-};
diff --git a/src/components/CenteredModal.tsx b/src/components/CenteredModal.tsx
deleted file mode 100644
index 8b1cd05..0000000
--- a/src/components/CenteredModal.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import { PropsWithChildren } from "react";
-import FocusLock from "react-focus-lock";
-
-import { classNames } from "@/util/classes";
-
-import { CloseIcon } from "./icons/Close";
-
-export interface ModalContainerProps
- extends React.HTMLAttributes {}
-
-export const CenteredModalContainer: React.FC<
- PropsWithChildren
-> = (props) => {
- const { children, className, ...rest } = props;
- return (
-
- {children}
-
- );
-};
-
-export interface CenteredModalProps
- extends React.HTMLAttributes {
- isOpen: boolean;
- closeModal: () => void;
- contentClassName?: string;
- scrollable?: boolean;
-}
-
-export const CenteredModal: React.FC> = (
- props
-) => {
- const {
- isOpen,
- closeModal,
- children,
- className,
- contentClassName,
- scrollable = false,
- ...rest
- } = props;
-
- if (!isOpen) return null;
-
- return (
-
-
-
- );
-};
diff --git a/src/components/ContactUsModal/ContactUsModal.tsx b/src/components/ContactUsModal/ContactUsModal.tsx
deleted file mode 100644
index cba7ceb..0000000
--- a/src/components/ContactUsModal/ContactUsModal.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-"use client";
-import React, { useEffect, useState } from "react";
-
-import { useCallbackOnKey } from "@/hooks/useGlobalKey";
-import { useModal } from "@/hooks/useModal";
-
-import { Backdrop } from "../Backdrop";
-import { CenteredModal, CenteredModalContainer } from "../CenteredModal";
-
-import { useContactUsModalContext } from "./ContactUsModalContext";
-
-export interface ContactUsModalProps {}
-
-export const ContactUsModal: React.FC = ({}) => {
- const { isOpen, setIsOpen } = useContactUsModalContext();
-
- function closeModal() {
- setIsOpen(false);
- }
-
- useModal({ isOpen, closeModal, modalKey: "contact-us-modal" });
-
- const baseUrl = "https://surveys.kraken.com/jfe/form/SV_8AgphAlvVoBgM4K";
- const [srcWithTimestamp, setSrcWithTimestamp] = useState("");
-
- useEffect(() => {
- const timestamp = new Date().getTime();
- setSrcWithTimestamp(`${baseUrl}?t=${timestamp}`);
- }, [baseUrl]);
-
- useCallbackOnKey({
- key: "c",
- handler: () => {
- setIsOpen(true);
- return true;
- },
- });
-
- if (!isOpen) return null;
-
- return (
-
-
-
-
-
-
-
-
- );
-};
diff --git a/src/components/ContactUsModal/ContactUsModalContext.tsx b/src/components/ContactUsModal/ContactUsModalContext.tsx
deleted file mode 100644
index b2eea05..0000000
--- a/src/components/ContactUsModal/ContactUsModalContext.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-"use client";
-import {
- createContext,
- Dispatch,
- PropsWithChildren,
- SetStateAction,
- useContext,
- useMemo,
- useState,
-} from "react";
-
-interface ContactUsModalContextProps {
- isOpen: boolean;
- setIsOpen: Dispatch>;
-}
-
-const ContactUsModalContext = createContext({
- isOpen: false,
- setIsOpen: () => {
- throw new Error(
- "Not yet implemented, make sure component is wrapped by ContactUsModalContextProvider."
- );
- },
-});
-
-export const useContactUsModalContext = () => useContext(ContactUsModalContext);
-
-export const ContactUsModalContextProvider: React.FC = ({
- children,
-}) => {
- const [isOpen, setIsOpen] = useState(false);
-
- const context: ContactUsModalContextProps = useMemo(
- () => ({ isOpen, setIsOpen }),
- [isOpen, setIsOpen]
- );
-
- return (
-
- {children}
-
- );
-};
diff --git a/src/components/ContactUsModal/index.ts b/src/components/ContactUsModal/index.ts
deleted file mode 100644
index 6080f35..0000000
--- a/src/components/ContactUsModal/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./ContactUsModal";
diff --git a/src/components/ContactUsPrivacyButton.tsx b/src/components/ContactUsPrivacyButton.tsx
index ea3d045..6cc672e 100644
--- a/src/components/ContactUsPrivacyButton.tsx
+++ b/src/components/ContactUsPrivacyButton.tsx
@@ -1,8 +1,9 @@
"use client";
import React from "react";
+import { Button, useModalContext } from "@inkonchain/ink-kit";
-import { useContactUsModalContext } from "@/components/ContactUsModal/ContactUsModalContext";
+import { CONTACT_US_MODAL_KEY } from "./Modals/ContactUsModal";
export interface ContactUsPrivacyButtonProps {
text: string;
@@ -11,11 +12,11 @@ export interface ContactUsPrivacyButtonProps {
export const ContactUsPrivacyButton: React.FC = ({
text,
}) => {
- const { setIsOpen } = useContactUsModalContext();
+ const { openModal } = useModalContext(CONTACT_US_MODAL_KEY);
return (
setIsOpen(true)}
- className="text-blue-500 hover:underline"
+ className="ml-1 underline inline-text hover:cursor-pointer"
+ onClick={openModal}
>
{text}
diff --git a/src/components/EventCard.tsx b/src/components/EventCard.tsx
index 4fa63b6..2e9fd62 100644
--- a/src/components/EventCard.tsx
+++ b/src/components/EventCard.tsx
@@ -1,7 +1,5 @@
import { Button, Card, CardContent, InkIcon, Tag } from "@inkonchain/ink-kit";
-import { CalendarIcon } from "@/components/icons/Calendar";
-import { LocationIcon } from "@/components/icons/Location";
import { ParallaxedHoverImage } from "@/components/ParallaxedHoverImage";
import { HrefProp, Link } from "@/routing";
import { classNames } from "@/util/classes";
@@ -41,11 +39,15 @@ export const EventCard = ({
mainLabels={
<>
-
+
+
+
{date}
-
+
+
+
{location}
>
diff --git a/src/components/FeatureRequestModal/FeatureRequestModal.tsx b/src/components/FeatureRequestModal/FeatureRequestModal.tsx
deleted file mode 100644
index 84ec8c9..0000000
--- a/src/components/FeatureRequestModal/FeatureRequestModal.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-"use client";
-import React, { useEffect, useState } from "react";
-
-import { useModal } from "@/hooks/useModal";
-
-import { Backdrop } from "../Backdrop";
-import { CenteredModal, CenteredModalContainer } from "../CenteredModal";
-
-import { useFeatureRequestModalContext } from "./FeatureRequestModalContext";
-
-export interface FeatureRequestModalProps {
- iframeUrl?: string;
-}
-
-export const FeatureRequestModal: React.FC = ({
- iframeUrl,
-}) => {
- const { isOpen, setIsOpen } = useFeatureRequestModalContext();
-
- function closeModal() {
- setIsOpen(false);
- }
-
- useModal({ isOpen, closeModal, modalKey: "feature-request-modal" });
-
- const baseUrl =
- iframeUrl ?? "https://surveys.kraken.com/jfe/form/SV_requestFeatureForm";
- const [srcWithTimestamp, setSrcWithTimestamp] = useState("");
-
- // Keep timestamp effect as it's specific to this modal
- useEffect(() => {
- const timestamp = new Date().getTime();
- setSrcWithTimestamp(`${baseUrl}?t=${timestamp}`);
- }, [baseUrl]);
-
- if (!isOpen) return null;
-
- return (
-
-
-
-
-
-
-
-
- );
-};
diff --git a/src/components/FeatureRequestModal/FeatureRequestModalContext.tsx b/src/components/FeatureRequestModal/FeatureRequestModalContext.tsx
deleted file mode 100644
index 124e199..0000000
--- a/src/components/FeatureRequestModal/FeatureRequestModalContext.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-"use client";
-import React, { createContext, useContext, useState } from "react";
-
-interface FeatureRequestModalContextType {
- isOpen: boolean;
- setIsOpen: (isOpen: boolean) => void;
-}
-
-const FeatureRequestModalContext =
- createContext({
- isOpen: false,
- setIsOpen: () => {},
- });
-
-export const useFeatureRequestModalContext = () =>
- useContext(FeatureRequestModalContext);
-
-export const FeatureRequestModalProvider: React.FC<{
- children: React.ReactNode;
-}> = ({ children }) => {
- const [isOpen, setIsOpen] = useState(false);
-
- return (
-
- {children}
-
- );
-};
diff --git a/src/components/FormStatus.tsx b/src/components/FormStatus.tsx
index 6c73797..3cc66d7 100644
--- a/src/components/FormStatus.tsx
+++ b/src/components/FormStatus.tsx
@@ -20,7 +20,7 @@ export const FormStatus: React.FC = ({
<>
{errorMessage && (
-
+
diff --git a/src/components/InputWithSubmit/styles.ts b/src/components/InputWithSubmit/styles.ts
deleted file mode 100644
index 17067f1..0000000
--- a/src/components/InputWithSubmit/styles.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-import { classNames } from "@/util/classes";
-
-export type InputVariants =
- | "default"
- | "transparent"
- | "transparent-on-dark"
- | "gray";
-export type InputSize = "md" | "lg";
-
-interface InputContainerClassNameOptions {
- variant: InputVariants;
- hasIcon?: boolean;
- hasError?: boolean;
- size?: InputSize;
- extraClassName?: string;
-}
-
-export const inputContainerClassNames = ({
- variant,
- size,
- hasIcon = false,
- hasError = false,
- extraClassName,
-}: InputContainerClassNameOptions) => {
- return classNames(
- "relative flex w-full h-full bg-clip-padding min-w-56",
- "rounded-full overflow-hidden border",
- "shadow-transparent shadow-inner-form duration-200 transition-[background-color,box-shadow]",
- "hover:bg-white",
- {
- "bg-transparent hover:bg-white focus-within:bg-white hover:shadow-black/25 dark:hover:bg-blackMagic/50 dark:focus-within:bg-blackMagic/50":
- variant === "transparent",
- "bg-transparent hover:bg-whiteMagic/10 focus-within:bg-whiteMagic/5 hover:shadow-black/25":
- variant === "transparent-on-dark",
- "bg-white hover:shadow-black/50": variant === "default",
- "bg-zinc-100": variant === "gray",
- "bg-white": hasError,
- },
- {
- "pl-6": hasIcon,
- "border-blackMagic/50": variant === "transparent",
- "border-whiteMagic/50": variant === "transparent-on-dark",
- "border-whiteMagic focus-within:border-whiteMagic": variant === "default",
- "border-redMagic-400 focus-within:border-redMagic-400 ": hasError,
- },
- {
- "h-12": size == "lg",
- "h-10": size == "md",
- },
- extraClassName
- );
-};
-
-interface InputClassNameOptions {
- variant: InputVariants;
- extraClassName?: string;
-}
-
-export const inputClassNames = ({
- variant,
- extraClassName,
-}: InputClassNameOptions) => {
- return classNames(
- "h-auto w-full px-6 text-blackMagic placeholder:text-body-2 placeholder:text-blackMagic/40 focus-visible:placeholder:text-blackMagic/50 focus-visible:outline-hidden disabled:opacity-50 bg-transparent placeholder:font-normal placeholder:antialiased placeholder:text-sm",
- {
- "dark:text-whiteMagic placeholder:text-blackMagic/50 dark:placeholder:text-whiteMagic/50":
- variant == "transparent",
- "text-whiteMagic placeholder:text-whiteMagic/30 focus-visible:placeholder:text-whiteMagic/50":
- variant === "transparent-on-dark",
- "placeholder:text-blackMagic/80": variant == "gray",
- },
- extraClassName
- );
-};
-
-export const inputIconClassNames = ({
- variant,
-}: { variant?: InputVariants } = {}) =>
- classNames(
- `absolute h-full left-4 top-0 bottom-0 flex items-center justify-center`,
- {
- "opacity-40": variant !== "gray",
- }
- );
diff --git a/src/components/MailIconButton/MailIconButton.tsx b/src/components/MailIconButton/MailIconButton.tsx
deleted file mode 100644
index 4467fad..0000000
--- a/src/components/MailIconButton/MailIconButton.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-"use client";
-
-import { EmailIcon } from "@/components/icons/Email";
-import { IconProps } from "@/components/icons/types";
-import { useNewsletterModalContext } from "@/components/NewsletterModal/NewsletterModalContext";
-
-interface MailButtonIconProps {
- className: string;
- iconProps: Omit
;
-}
-
-export const MailIconButton: React.FC = ({
- className,
- iconProps,
-}) => {
- const context = useNewsletterModalContext();
-
- return (
- {
- context.setIsOpen(true);
- }}
- >
-
-
- );
-};
diff --git a/src/components/AppSubmissionModal/AppSubmissionModal.tsx b/src/components/Modals/AppSubmissionModal/AppSubmissionModal.tsx
similarity index 78%
rename from src/components/AppSubmissionModal/AppSubmissionModal.tsx
rename to src/components/Modals/AppSubmissionModal/AppSubmissionModal.tsx
index 1ed8e17..8947fc8 100644
--- a/src/components/AppSubmissionModal/AppSubmissionModal.tsx
+++ b/src/components/Modals/AppSubmissionModal/AppSubmissionModal.tsx
@@ -1,6 +1,6 @@
"use client";
import React from "react";
-import { Button } from "@inkonchain/ink-kit";
+import { Button, Modal, useModalContext } from "@inkonchain/ink-kit";
import Lottie from "lottie-react";
import Image from "next/image";
@@ -8,32 +8,27 @@ import type { FormState } from "@/actions/submit-your-app";
import { submitYourApp } from "@/actions/submit-your-app";
import { useFeatureFlag } from "@/hooks/useFeatureFlag";
import { useForm } from "@/hooks/useForm";
-import { useModal } from "@/hooks/useModal";
import {
AppSubmissionFormData,
appSubmissionSchema,
} from "@/schemas/app-submission-schema";
-import { Backdrop } from "../Backdrop";
-import { CenteredModal, CenteredModalContainer } from "../CenteredModal";
-import { ColoredText } from "../ColoredText";
+import { ColoredText } from "../../ColoredText";
import { AppSubmissionForm } from "./_components/AppSubmissionForm";
import { PullRequestButton } from "./_components/PullRequestButton";
import animation from "./animation.json";
-import { useAppSubmissionModalContext } from "./AppSubmissionModalContext";
+
+export const APP_SUBMISSION_MODAL_KEY = "app-submission-modal";
export const AppSubmissionModal: React.FC = () => {
- const { isOpen, setIsOpen } = useAppSubmissionModalContext();
+ const { isModalOpen } = useModalContext(APP_SUBMISSION_MODAL_KEY);
- function closeModal() {
+ function onCloseModal() {
reset();
- setIsOpen(false);
form.reset();
}
- useModal({ isOpen, closeModal, modalKey: "app-submission-modal" });
-
const { state, form, formAction, onSubmit, reset, isSubmitting } = useForm<
FormState,
AppSubmissionFormData
@@ -62,18 +57,15 @@ export const AppSubmissionModal: React.FC = () => {
: {}
);
- if (!isOpen) return null;
-
return (
-
-
-
-
+
+ {() => (
+
{state.success ? (
{
variant="primary"
className="w-full"
size="lg"
- onClick={closeModal}
+ onClick={onCloseModal}
>
Close
@@ -128,17 +120,17 @@ export const AppSubmissionModal: React.FC = () => {
>
)}
-
-
+ )}
+
);
};
diff --git a/src/components/AppSubmissionModal/_components/AppSubmissionForm.tsx b/src/components/Modals/AppSubmissionModal/_components/AppSubmissionForm.tsx
similarity index 93%
rename from src/components/AppSubmissionModal/_components/AppSubmissionForm.tsx
rename to src/components/Modals/AppSubmissionModal/_components/AppSubmissionForm.tsx
index fc10c42..0dd71bb 100644
--- a/src/components/AppSubmissionModal/_components/AppSubmissionForm.tsx
+++ b/src/components/Modals/AppSubmissionModal/_components/AppSubmissionForm.tsx
@@ -2,6 +2,7 @@ import React, { useState } from "react";
import { FormProvider, useFormContext, UseFormReturn } from "react-hook-form";
import {
Button,
+ InkIcon,
Input,
Listbox,
ListboxButton,
@@ -12,9 +13,7 @@ import Image from "next/image";
import { z } from "zod";
import { FormState } from "@/actions/submit-your-app";
-import { CloseIcon } from "@/components/icons/Close";
import { ImageIcon } from "@/components/icons/Image";
-import { SpinnerIcon } from "@/components/icons/Spinner";
import {
AppSubmissionFormData,
appSubmissionSchema,
@@ -24,24 +23,22 @@ import {
import { classNames } from "@/util/classes";
interface AppSubmissionFormProps {
- isOpen: boolean;
form: UseFormReturn
>;
formAction: (payload: AppSubmissionFormData) => void;
onSubmit: (event: React.FormEvent) => void;
state: FormState;
+ disabled: boolean;
isSubmitting: boolean;
}
export const AppSubmissionForm: React.FC = ({
- isOpen,
form,
formAction,
onSubmit,
state,
+ disabled,
isSubmitting,
}) => {
- const disabled = !isOpen || isSubmitting;
-
return (
{state?.message !== "" && !state.issues && (
@@ -212,7 +209,9 @@ const SubmitButton: React.FC<{ isSubmitting: boolean }> = ({
>
{isSubmitting ? (
) : (
@@ -253,7 +252,9 @@ const InputField: React.FC = ({
{...register(name)}
/>
{errors[name] && (
- {errors[name]?.message as string}
+
+ {errors[name]?.message as string}
+
)}
);
@@ -310,9 +311,11 @@ const FileInput: React.FC> = ({
setPreview(null);
form.setValue(name, null);
}}
- className="absolute -top-1 -right-1 bg-gray-200 hover:bg-gray-300 text-blackMagic rounded-full p-1 w-6 h-6 flex items-center justify-center text-sm focus:outline-purpleMagic transition-all duration-150"
+ className="absolute -top-1 -right-1 bg-gray-200 hover:bg-gray-300 text-blackMagic rounded-full p-1 w-6 h-6 flex items-center justify-center text-sm focus:outline-(--ink-button-primary) transition-all duration-150"
>
-
+
+
+
> = ({
/>
) : (
-
+
-
+
> = ({
)}
{form.formState.errors[name] && (
-
+
{form.formState.errors[name]?.message as string}
)}
@@ -445,7 +448,7 @@ const MultiSelectField = ({
{selected.map((item) => (
{item.label}
diff --git a/src/components/AppSubmissionModal/_components/PullRequestButton.tsx b/src/components/Modals/AppSubmissionModal/_components/PullRequestButton.tsx
similarity index 100%
rename from src/components/AppSubmissionModal/_components/PullRequestButton.tsx
rename to src/components/Modals/AppSubmissionModal/_components/PullRequestButton.tsx
diff --git a/src/components/AppSubmissionModal/animation.json b/src/components/Modals/AppSubmissionModal/animation.json
similarity index 100%
rename from src/components/AppSubmissionModal/animation.json
rename to src/components/Modals/AppSubmissionModal/animation.json
diff --git a/src/components/Modals/ContactUsModal.tsx b/src/components/Modals/ContactUsModal.tsx
new file mode 100644
index 0000000..7640f9a
--- /dev/null
+++ b/src/components/Modals/ContactUsModal.tsx
@@ -0,0 +1,45 @@
+"use client";
+import React, { useEffect, useState } from "react";
+import { Modal, useModalContext } from "@inkonchain/ink-kit";
+
+import { useCallbackOnKey } from "@/hooks/useGlobalKey";
+
+export const CONTACT_US_MODAL_KEY = "contact-us-modal";
+
+export interface ContactUsModalProps {}
+
+export const ContactUsModal: React.FC = ({}) => {
+ const { openModal } = useModalContext(CONTACT_US_MODAL_KEY);
+
+ const baseUrl = "https://surveys.kraken.com/jfe/form/SV_8AgphAlvVoBgM4K";
+ const [srcWithTimestamp, setSrcWithTimestamp] = useState("");
+
+ useEffect(() => {
+ const timestamp = new Date().getTime();
+ setSrcWithTimestamp(`${baseUrl}?t=${timestamp}`);
+ }, [baseUrl]);
+
+ useCallbackOnKey({
+ key: "c",
+ handler: () => {
+ openModal();
+ return true;
+ },
+ });
+
+ return (
+
+ {() => (
+
+
+
+ )}
+
+ );
+};
diff --git a/src/components/Modals/NewsletterModal.tsx b/src/components/Modals/NewsletterModal.tsx
new file mode 100644
index 0000000..65a2254
--- /dev/null
+++ b/src/components/Modals/NewsletterModal.tsx
@@ -0,0 +1,184 @@
+"use client";
+import React, { SyntheticEvent, useState } from "react";
+import {
+ Button,
+ Checkbox,
+ CheckboxLabel,
+ InkIcon,
+ Input,
+ Modal,
+ useModalContext,
+} from "@inkonchain/ink-kit";
+import Image from "next/image";
+
+import { subscribeToWaitlists } from "@/actions/subscribe-to-braze";
+import { useCallbackOnKey } from "@/hooks/useGlobalKey";
+import { useLegacyForm } from "@/hooks/useLegacyForm";
+import { EXTERNAL_LINKS, Link } from "@/routing";
+
+import { ColoredText } from "../ColoredText";
+import { FormStatus } from "../FormStatus";
+import { SocialLinksRow } from "../SocialLinksRow";
+
+export interface NewsletterModalProps {}
+
+export const NEWSLETTER_MODAL_KEY = "newsletter-modal";
+
+export const NewsletterModal: React.FC = () => {
+ const { openModal } = useModalContext(NEWSLETTER_MODAL_KEY);
+
+ const { isPending, state, formAction, onSubmit } = useLegacyForm(
+ subscribeToWaitlists,
+ {
+ success: false,
+ error: undefined,
+ }
+ );
+
+ useCallbackOnKey({
+ key: "s",
+ handler: () => {
+ openModal();
+ return true;
+ },
+ });
+
+ return (
+
+ {() => (
+
+
+
+
+ {state.success
+ ? "Welcome, thanks for joining Ink"
+ : "Join the community for the latest updates, news and announcements"}
+
+
+ {state.success ? (
+
+ ) : (
+
+ )}
+
+ )}
+
+ );
+};
+
+interface NewsletterModalFormProps {
+ isPending: boolean;
+ formAction: (payload: FormData) => void;
+ onSubmit: (event: SyntheticEvent) => Promise;
+ state: {
+ success: boolean;
+ error?: { email?: string; form?: string };
+ };
+}
+
+const NewsletterModalForm: React.FC = ({
+ isPending,
+ state,
+ formAction,
+ onSubmit,
+}) => {
+ const [checkedGeneral, setCheckedGeneral] = useState(false);
+ const [checkedBuilder, setCheckedBuilder] = useState(false);
+
+ return (
+
+ );
+};
+
+const SubmitButton: React.FC<{ success: boolean; isPending: boolean }> = ({
+ success,
+ isPending,
+}) => {
+ return (
+
+ {isPending ? (
+
+ ) : (
+ "Submit"
+ )}
+
+ );
+};
+
+const SuccessActions: React.FC = () => (
+
+
}
+ asChild
+ >
+
+
SHARE ON X
+
+
+
+
+);
diff --git a/src/components/Modals/index.ts b/src/components/Modals/index.ts
new file mode 100644
index 0000000..d4fccb8
--- /dev/null
+++ b/src/components/Modals/index.ts
@@ -0,0 +1,3 @@
+export * from "./AppSubmissionModal/AppSubmissionModal";
+export * from "./ContactUsModal";
+export * from "./NewsletterModal";
diff --git a/src/components/NewsletterModal/NewsletterModal.tsx b/src/components/NewsletterModal/NewsletterModal.tsx
deleted file mode 100644
index 57ea638..0000000
--- a/src/components/NewsletterModal/NewsletterModal.tsx
+++ /dev/null
@@ -1,255 +0,0 @@
-"use client";
-import React, { SyntheticEvent, useEffect, useRef } from "react";
-import { Checkbox, Field, Label } from "@headlessui/react";
-import Image from "next/image";
-
-import { subscribeToWaitlists } from "@/actions/subscribe-to-braze";
-import { useCallbackOnKey } from "@/hooks/useGlobalKey";
-import { useLegacyForm } from "@/hooks/useLegacyForm";
-import { useModal } from "@/hooks/useModal";
-import { EXTERNAL_LINKS, usePathname, useRouter } from "@/routing";
-
-import { Backdrop } from "../Backdrop";
-import { Button } from "../Button/Button";
-import { ButtonLink } from "../Button/ButtonLink";
-import { CenteredModal, CenteredModalContainer } from "../CenteredModal";
-import { ColoredText } from "../ColoredText";
-import { FormStatus } from "../FormStatus";
-import { CheckmarkIcon } from "../icons/Checkmark";
-import { EmailIcon } from "../icons/Email";
-import { SpinnerIcon } from "../icons/Spinner";
-import { TwitterIcon } from "../icons/Twitter";
-import {
- inputClassNames,
- inputContainerClassNames,
- inputIconClassNames,
-} from "../InputWithSubmit/styles";
-import { SocialLinksRow } from "../SocialLinksRow";
-
-import { useNewsletterModalContext } from "./NewsletterModalContext";
-
-export interface NewsletterModalProps {}
-
-export const NewsletterModal: React.FC = () => {
- const { isOpen, setIsOpen } = useNewsletterModalContext();
-
- function closeModal() {
- setIsOpen(false);
- }
-
- useModal({ isOpen, closeModal, modalKey: "newsletter-modal" });
- const { isPending, state, formAction, onSubmit } = useLegacyForm(
- subscribeToWaitlists,
- {
- success: false,
- error: undefined,
- }
- );
-
- const pathname = usePathname();
- const router = useRouter();
-
- useEffect(() => {
- if (isOpen) {
- const scrollY = window.scrollY;
- window.scrollTo(0, scrollY);
- }
- }, [isOpen]);
-
- useCallbackOnKey({
- key: "s",
- handler: () => {
- if (pathname !== "/") {
- router.push("/");
- // When the route changes, sometimes the state gets reset for some reason.
- // `isFormOpen` stays "false", but the `AnimatePresence` still plays, which leaves us into a weird state.
- // This workarounds seems to fix it consistently by delaying the state update.
- setTimeout(() => setIsOpen(true), 500);
- } else {
- setIsOpen(true);
- }
- return true;
- },
- });
-
- if (!isOpen) return null;
-
- return (
-
-
-
-
-
-
-
- {state.success
- ? "Welcome, thanks for joining Ink"
- : "Join the community for the latest updates, news and announcements"}
-
-
- {state.success ? (
-
- ) : (
-
- )}
-
-
-
- );
-};
-
-interface NewsletterModalFormProps {
- isOpen: boolean;
- isPending: boolean;
- formAction: (payload: FormData) => void;
- onSubmit: (event: SyntheticEvent) => Promise;
- state: {
- success: boolean;
- error?: { email?: string; form?: string };
- };
-}
-
-const NewsletterModalForm: React.FC = ({
- isOpen,
- isPending,
- state,
- formAction,
- onSubmit,
-}) => {
- const input = useRef(null);
- useEffect(() => {
- if (isOpen && input.current) {
- // input.current.focus();
- }
- }, [input, isOpen]);
-
- return (
-
- );
-};
-
-const CheckboxField: React.FC<{
- name: string;
- label: string;
-}> = ({ name, label }) => (
-
-
-
-
-
-
- {label}
-
-);
-
-const SubmitButton: React.FC<{ success: boolean; isPending: boolean }> = ({
- success,
- isPending,
-}) => {
- return (
-
- {isPending ? (
-
-
- Submitting...
-
- ) : (
- "Submit"
- )}
-
- );
-};
-
-const SuccessActions: React.FC = () => (
-
-
}
- href={EXTERNAL_LINKS.twitter}
- target="_blank"
- rel="noopener noreferrer"
- >
-
SHARE ON X
-
-
-
-);
diff --git a/src/components/NewsletterModal/NewsletterModalContext.tsx b/src/components/NewsletterModal/NewsletterModalContext.tsx
deleted file mode 100644
index 77d9722..0000000
--- a/src/components/NewsletterModal/NewsletterModalContext.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-"use client";
-import {
- createContext,
- Dispatch,
- PropsWithChildren,
- SetStateAction,
- useContext,
- useMemo,
- useState,
-} from "react";
-
-interface NewsletterModalContextProps {
- isOpen: boolean;
- setIsOpen: Dispatch>;
-}
-
-const NewsletterModalContext = createContext({
- isOpen: false,
- setIsOpen: () => {
- throw new Error(
- "Not yet implemented, make sure component is wrapped by NewsletterModalContextProvider."
- );
- },
-});
-
-export const useNewsletterModalContext = () =>
- useContext(NewsletterModalContext);
-
-export const NewsletterModalContextProvider: React.FC = ({
- children,
-}) => {
- const [isOpen, setIsOpen] = useState(false);
-
- const context: NewsletterModalContextProps = useMemo(
- () => ({ isOpen, setIsOpen }),
- [isOpen, setIsOpen]
- );
-
- return (
-
- {children}
-
- );
-};
diff --git a/src/components/NewsletterModal/index.ts b/src/components/NewsletterModal/index.ts
deleted file mode 100644
index 8500145..0000000
--- a/src/components/NewsletterModal/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./NewsletterModal";
diff --git a/src/components/Providers.tsx b/src/components/Providers.tsx
index 19b6a5b..79423b7 100644
--- a/src/components/Providers.tsx
+++ b/src/components/Providers.tsx
@@ -1,5 +1,6 @@
"use client";
import { PropsWithChildren } from "react";
+import { ModalProvider } from "@inkonchain/ink-kit";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { AnalyticsProvider } from "@/contexts/AnalyticsProvider";
@@ -9,10 +10,6 @@ import { WalletProvider } from "@/contexts/WalletProvider";
import { clientEnv } from "@/env-client";
import { useGlobalKeyCallback } from "@/hooks/useGlobalKey";
-import { AppSubmissionModalProvider } from "./AppSubmissionModal/AppSubmissionModalContext";
-import { ContactUsModalContextProvider } from "./ContactUsModal/ContactUsModalContext";
-import { NewsletterModalContextProvider } from "./NewsletterModal/NewsletterModalContext";
-
const queryClient = new QueryClient();
export const Providers: React.FC = ({ children }) => {
@@ -20,21 +17,15 @@ export const Providers: React.FC = ({ children }) => {
return (
-
-
-
-
-
-
-
- {children}
-
-
-
-
-
-
-
+
+
+
+
+ {children}
+
+
+
+
);
};
diff --git a/src/components/SearchBar/SearchInput.tsx b/src/components/SearchBar/SearchInput.tsx
index 3613480..a79184a 100644
--- a/src/components/SearchBar/SearchInput.tsx
+++ b/src/components/SearchBar/SearchInput.tsx
@@ -1,11 +1,9 @@
import React, { forwardRef, useImperativeHandle, useRef } from "react";
-import { Input } from "@inkonchain/ink-kit";
+import { InkIcon, Input } from "@inkonchain/ink-kit";
import { useCallbackOnKey } from "@/hooks/useGlobalKey";
import { classNames } from "@/util/classes";
-import { SearchIcon } from "../icons/Search";
-
export interface SearchInputProps
extends React.InputHTMLAttributes {
className?: string;
@@ -50,11 +48,9 @@ export const SearchInput = forwardRef<
"ink:rounded-md duration-0 backdrop-blur-xl ink:text-body-3-bold placeholder:text-body-3-bold",
className
)}
- iconLeft={
-
- }
+ iconLeft={ }
iconRight={
-
+
{"/"}
}
diff --git a/src/components/SocialLinksRow.tsx b/src/components/SocialLinksRow.tsx
index 25d2d92..91cf27b 100644
--- a/src/components/SocialLinksRow.tsx
+++ b/src/components/SocialLinksRow.tsx
@@ -1,32 +1,25 @@
import React from "react";
+import { Button, InkIcon, useModalContext } from "@inkonchain/ink-kit";
-import { MailIconButton } from "@/components/MailIconButton/MailIconButton";
import { EXTERNAL_LINKS, Link } from "@/routing";
import { classNames } from "@/util/classes";
-import { DiscordIcon } from "./icons/Discord";
-import { GitHubIcon } from "./icons/GitHub";
-import { TelegramIcon } from "./icons/Telegram";
-import { TwitterIcon } from "./icons/Twitter";
-
-const socialIconClasses = () =>
- `relative group text-xl rounded-full p-2 flex items-center justify-center`;
+import { NEWSLETTER_MODAL_KEY } from "./Modals/NewsletterModal";
interface SocialLinksRowProps {
- enforce?: "black";
className?: string;
includeMail?: boolean;
includeDiscord?: boolean;
- faded?: boolean;
}
export const SocialLinksRow: React.FC
= ({
- enforce,
className,
includeMail = true,
includeDiscord = true,
- faded = false,
}) => {
+ const { openModal: openNewsletterModal } =
+ useModalContext(NEWSLETTER_MODAL_KEY);
+
return (
= ({
className
)}
>
-
-
-
-
- {includeDiscord && (
+
-
+
+
+
+ {includeDiscord && (
+
+
+
+
+
)}
-
-
-
+
+
+
+
+
-
-
-
+
+
+
+
+
{includeMail && (
-
+
+
+
)}
);
diff --git a/src/components/VerificationModal/VerificationModal.tsx b/src/components/VerificationModal/VerificationModal.tsx
deleted file mode 100644
index 3a04f18..0000000
--- a/src/components/VerificationModal/VerificationModal.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-"use client";
-import React, { useEffect, useState } from "react";
-
-import { useModal } from "@/hooks/useModal";
-
-import { Backdrop } from "../Backdrop";
-import { CenteredModal, CenteredModalContainer } from "../CenteredModal";
-
-import { useVerificationModalContext } from "./VerificationModalContext";
-
-export interface VerificationModalProps {
- iframeUrl?: string;
-}
-
-export const VerificationModal: React.FC = ({
- iframeUrl,
-}) => {
- const { isOpen, setIsOpen } = useVerificationModalContext();
-
- function closeModal() {
- setIsOpen(false);
- }
-
- useModal({
- isOpen,
- closeModal,
- modalKey: "verification-modal",
- });
-
- const baseUrl =
- iframeUrl ?? "https://surveys.kraken.com/jfe/form/SV_b1VtoIEAznLivA2";
- const [srcWithTimestamp, setSrcWithTimestamp] = useState("");
-
- useEffect(() => {
- const timestamp = new Date().getTime();
- setSrcWithTimestamp(`${baseUrl}?t=${timestamp}`);
- }, [baseUrl]);
-
- if (!isOpen) return null;
-
- return (
-
-
-
-
-
-
-
-
- );
-};
diff --git a/src/components/VerificationModal/VerificationModalContext.tsx b/src/components/VerificationModal/VerificationModalContext.tsx
deleted file mode 100644
index affc9ed..0000000
--- a/src/components/VerificationModal/VerificationModalContext.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-"use client";
-import React, { createContext, useContext, useState } from "react";
-
-interface VerificationModalContextType {
- isOpen: boolean;
- setIsOpen: (isOpen: boolean) => void;
-}
-
-const VerificationModalContext = createContext({
- isOpen: false,
- setIsOpen: () => {},
-});
-
-export const useVerificationModalContext = () =>
- useContext(VerificationModalContext);
-
-export const VerificationModalProvider: React.FC<{
- children: React.ReactNode;
-}> = ({ children }) => {
- const [isOpen, setIsOpen] = useState(false);
-
- return (
-
- {children}
-
- );
-};
diff --git a/src/components/icons/Apps.tsx b/src/components/icons/Apps.tsx
deleted file mode 100644
index ec699e4..0000000
--- a/src/components/icons/Apps.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const AppsIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Bank.tsx b/src/components/icons/Bank.tsx
deleted file mode 100644
index 58df93c..0000000
--- a/src/components/icons/Bank.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const BankIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Blocks.tsx b/src/components/icons/Blocks.tsx
deleted file mode 100644
index 286054b..0000000
--- a/src/components/icons/Blocks.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const BlocksIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Bridge.tsx b/src/components/icons/Bridge.tsx
deleted file mode 100644
index 9872f7b..0000000
--- a/src/components/icons/Bridge.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const BridgeIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Calendar.tsx b/src/components/icons/Calendar.tsx
deleted file mode 100644
index 8b31033..0000000
--- a/src/components/icons/Calendar.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const CalendarIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
-
-CalendarIcon.displayName = "CalendarIcon";
diff --git a/src/components/icons/Checkmark.tsx b/src/components/icons/Checkmark.tsx
deleted file mode 100644
index b80a7a2..0000000
--- a/src/components/icons/Checkmark.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const CheckmarkIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Close.tsx b/src/components/icons/Close.tsx
deleted file mode 100644
index 9927e03..0000000
--- a/src/components/icons/Close.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const CloseIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Discord.tsx b/src/components/icons/Discord.tsx
deleted file mode 100644
index ac51ca3..0000000
--- a/src/components/icons/Discord.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const DiscordIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Email.tsx b/src/components/icons/Email.tsx
deleted file mode 100644
index d95504f..0000000
--- a/src/components/icons/Email.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const EmailIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Gate.tsx b/src/components/icons/Gate.tsx
deleted file mode 100644
index 47c1bc9..0000000
--- a/src/components/icons/Gate.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const GateIcon: React.FC = (props) => {
- return (
-
-
-
-
-
- );
-};
diff --git a/src/components/icons/GitHub.tsx b/src/components/icons/GitHub.tsx
deleted file mode 100644
index 84950eb..0000000
--- a/src/components/icons/GitHub.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const GitHubIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Globe.tsx b/src/components/icons/Globe.tsx
deleted file mode 100644
index e7f4950..0000000
--- a/src/components/icons/Globe.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const GlobeIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Location.tsx b/src/components/icons/Location.tsx
deleted file mode 100644
index 33feabb..0000000
--- a/src/components/icons/Location.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const LocationIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
-
-LocationIcon.displayName = "LocationIcon";
diff --git a/src/components/icons/Mail.tsx b/src/components/icons/Mail.tsx
deleted file mode 100644
index c02a659..0000000
--- a/src/components/icons/Mail.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const MailIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Moon.tsx b/src/components/icons/Moon.tsx
deleted file mode 100644
index 1a2dc86..0000000
--- a/src/components/icons/Moon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const MoonIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Search.tsx b/src/components/icons/Search.tsx
deleted file mode 100644
index a270459..0000000
--- a/src/components/icons/Search.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const SearchIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Spinner.tsx b/src/components/icons/Spinner.tsx
deleted file mode 100644
index 04fd16b..0000000
--- a/src/components/icons/Spinner.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { IconProps, iconProps } from "./types";
-
-export const SpinnerIcon: React.FC = ({
- size = "icon-md",
- enforce,
-}) => (
-
-
-
-
-);
diff --git a/src/components/icons/Sun.tsx b/src/components/icons/Sun.tsx
deleted file mode 100644
index a41c6da..0000000
--- a/src/components/icons/Sun.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const SunIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Telegram.tsx b/src/components/icons/Telegram.tsx
deleted file mode 100644
index 144c011..0000000
--- a/src/components/icons/Telegram.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const TelegramIcon: React.FC = (props) => {
- return (
-
-
-
-
-
-
-
-
-
-
- );
-};
diff --git a/src/components/icons/Twitter.tsx b/src/components/icons/Twitter.tsx
deleted file mode 100644
index 017f3bc..0000000
--- a/src/components/icons/Twitter.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const TwitterIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/components/icons/Users.tsx b/src/components/icons/Users.tsx
deleted file mode 100644
index c28d953..0000000
--- a/src/components/icons/Users.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { type IconProps, iconProps } from "./types";
-
-export const UsersIcon: React.FC = (props) => {
- return (
-
-
-
- );
-};
diff --git a/src/hooks/useCallbackWhenVisible.ts b/src/hooks/useCallbackWhenVisible.ts
deleted file mode 100644
index 18f154e..0000000
--- a/src/hooks/useCallbackWhenVisible.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { useEffect, useRef } from "react";
-
-export function useCallbackWhenVisible({
- callback,
-}: {
- callback: () => void;
-}) {
- const ref = useRef(null);
- useEffect(() => {
- if (ref.current) {
- const observer = new IntersectionObserver(
- (entries) => {
- entries.forEach((entry) => {
- if (entry.target && entry.target instanceof HTMLElement) {
- if (
- entry.isIntersecting &&
- entry.boundingClientRect.top > 0 &&
- entry.boundingClientRect.top < 500
- ) {
- if (entry.target.dataset["intersecting"] === "false") {
- callback();
- entry.target.dataset["intersecting"] = "true";
- }
- } else {
- entry.target.dataset["intersecting"] = "false";
- }
- }
- });
- },
- {
- threshold: [0.2, 0.5, 0.8, 0.9, 1],
- }
- );
- observer.observe(ref.current);
- return () => {
- observer.disconnect();
- };
- }
- }, [ref, callback]);
-
- return { ref };
-}
diff --git a/src/hooks/useHoverAnimationWithKey.ts b/src/hooks/useHoverAnimationWithKey.ts
deleted file mode 100644
index 3bd6111..0000000
--- a/src/hooks/useHoverAnimationWithKey.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-"use client";
-
-import { useCallback, useEffect, useRef, useState } from "react";
-
-interface HoverHandlers {
- props(key: T): {
- [HOVER_KEY_ATTRIBUTE]: T;
- onMouseEnter: (event: MouseEvent) => void;
- onMouseLeave: (event: MouseEvent) => void;
- };
-}
-
-type UseHoverAnimationReturns = [
- currentHover: T | undefined,
- HoverHandlers,
-];
-
-const HOVER_KEY_ATTRIBUTE = "data-hover-key";
-
-export function useHoverAnimationWithKey<
- T extends string,
->(): UseHoverAnimationReturns {
- const [currentHover, setCurrentHover] = useState(undefined);
- const hoverTimeout = useRef(undefined);
-
- const clearHoverTimeout = useCallback(() => {
- if (hoverTimeout.current) {
- window.clearTimeout(hoverTimeout.current);
- hoverTimeout.current = undefined;
- }
- }, [hoverTimeout]);
-
- useEffect(() => {
- return () => {
- clearHoverTimeout();
- };
- }, [clearHoverTimeout]);
-
- const onMouseEnter = (event: MouseEvent) => {
- clearHoverTimeout();
-
- if (
- event.target &&
- event.target instanceof HTMLElement &&
- event.target.hasAttribute(HOVER_KEY_ATTRIBUTE)
- ) {
- setCurrentHover(event.target.getAttribute(HOVER_KEY_ATTRIBUTE) as T);
- }
- };
-
- const onMouseLeave = () => {
- clearHoverTimeout();
- hoverTimeout.current = window.setTimeout(
- () => setCurrentHover(undefined),
- 650
- );
- };
-
- return [
- currentHover,
- {
- props(key: T) {
- return {
- onMouseEnter,
- onMouseLeave,
- [HOVER_KEY_ATTRIBUTE]: key,
- };
- },
- },
- ];
-}
diff --git a/src/hooks/useModal.ts b/src/hooks/useModal.ts
deleted file mode 100644
index f21b6d2..0000000
--- a/src/hooks/useModal.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { useEffect } from "react";
-import { useSearchParams } from "next/navigation";
-
-import { useCallbackOnKey } from "@/hooks/useGlobalKey";
-import { useScrollLock } from "@/hooks/useScrollLock";
-import { usePathname, useRouter } from "@/routing";
-
-interface UseModalProps {
- isOpen: boolean;
- closeModal: () => void;
- modalKey: string;
-}
-
-export function useModal({ isOpen, closeModal, modalKey }: UseModalProps) {
- const pathname = usePathname();
- const searchParams = useSearchParams();
- const router = useRouter();
-
- useScrollLock({ key: modalKey, enabled: isOpen });
-
- useEffect(() => {
- if (isOpen) {
- const scrollY = window.scrollY;
- window.scrollTo(0, scrollY);
- }
- }, [isOpen]);
-
- useEffect(() => {
- if (isOpen && window.location.hash !== "") {
- router.replace("#", { scroll: false });
- }
- }, [router, isOpen]);
-
- useEffect(() => {
- if (window.location.hash !== "") {
- closeModal();
- }
- }, [pathname, searchParams, closeModal]);
-
- useCallbackOnKey({
- key: "Escape",
- isDisabled: !isOpen,
- handler: () => {
- closeModal();
- return true;
- },
- });
-}
diff --git a/src/hooks/useOnOutsideClick.ts b/src/hooks/useOnOutsideClick.ts
deleted file mode 100644
index 49bf837..0000000
--- a/src/hooks/useOnOutsideClick.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { useEffect } from "react";
-
-interface UseOutsideClickListenerProps {
- ref: React.RefObject;
- handler: VoidFunction;
- padding?: number;
-}
-
-export const useOutsideClickListener = ({
- ref,
- handler,
- padding = 0,
-}: UseOutsideClickListenerProps) => {
- useEffect(() => {
- const determineIfClickedOutside = (event: MouseEvent) => {
- if (
- !ref.current ||
- !(event.target instanceof Node) ||
- ref.current.contains(event.target)
- ) {
- return;
- }
-
- const rect = ref.current.getBoundingClientRect();
- const { clientX, clientY } = event;
- const { left, right, top, bottom } = rect;
-
- if (
- clientX < left - padding ||
- clientX > right + padding ||
- clientY < top - padding ||
- clientY > bottom + padding
- ) {
- handler();
- }
- };
-
- document.addEventListener("mousedown", determineIfClickedOutside);
-
- return () => {
- document.removeEventListener("mousedown", determineIfClickedOutside);
- };
- }, [ref, handler, padding]);
-};
diff --git a/src/hooks/useScrollLock.ts b/src/hooks/useScrollLock.ts
deleted file mode 100644
index 955fa7f..0000000
--- a/src/hooks/useScrollLock.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { useEffect } from "react";
-
-let locks: string[] = [];
-
-const pageScroll = {
- lock: (id: string) => {
- document.body.style.overflow = "hidden";
- if (!locks.includes(id)) {
- locks.push(id);
- }
- },
- unlock: (id: string) => {
- locks = locks.filter((lock) => lock !== id);
- if (locks.length === 0) {
- document.body.style.overflow = "";
- }
- },
-};
-
-export const useScrollLock = ({
- key,
- enabled,
-}: {
- key: string;
- enabled: boolean;
-}) => {
- useEffect(() => {
- if (enabled) {
- pageScroll.lock(key);
- }
- return () => pageScroll.unlock(key);
- }, [key, enabled]);
-};
diff --git a/src/util/classes.ts b/src/util/classes.ts
index 8e02c2a..fe51bb4 100644
--- a/src/util/classes.ts
+++ b/src/util/classes.ts
@@ -24,7 +24,6 @@ const customTwMerge = extendTailwindMerge({
"text-caption-2-regular",
"text-caption-2-bold",
],
- shadow: ["shadow-large-pop", "shadow-inner-form", "box-shadow"],
},
},
});
diff --git a/src/util/dataLayer.ts b/src/util/dataLayer.ts
deleted file mode 100644
index e313971..0000000
--- a/src/util/dataLayer.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export function pushToDataLayer(data: Object) {
- if (typeof window !== "undefined") {
- if (!("dataLayer" in window)) {
- window.dataLayer = [];
- }
- window.dataLayer?.push(data);
- }
-}
diff --git a/src/util/debounce.ts b/src/util/debounce.ts
deleted file mode 100644
index e07f545..0000000
--- a/src/util/debounce.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-export interface DebouncedFunction any> {
- (...args: Parameters): void;
- cancel: () => void;
-}
-
-export function debounce any>(
- func: T,
- wait: number
-): DebouncedFunction {
- let timeout: NodeJS.Timeout | null = null;
-
- const debouncedFn = (...args: Parameters) => {
- if (timeout) {
- clearTimeout(timeout);
- }
-
- timeout = setTimeout(() => {
- func(...args);
- timeout = null;
- }, wait);
- };
-
- debouncedFn.cancel = () => {
- if (timeout) {
- clearTimeout(timeout);
- timeout = null;
- }
- };
-
- return debouncedFn;
-}
diff --git a/src/util/detection.ts b/src/util/detection.ts
deleted file mode 100644
index 528ee5b..0000000
--- a/src/util/detection.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export const isMobileUserAgent = () => {
- if (typeof navigator === "undefined") {
- return false;
- }
-
- const regex =
- /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;
- return regex.test(navigator.userAgent);
-};
diff --git a/src/util/pseudoRandom.ts b/src/util/pseudoRandom.ts
deleted file mode 100644
index c126769..0000000
--- a/src/util/pseudoRandom.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// Inspired by https://github.com/toggio/pseudoRandom/blob/main/pseudoRandom.js
-import { useMemo } from "react";
-
-// Honestly have no clue how this works exactly, but it generates a deterministic number from a given string.
-function crc32(str: string) {
- let a,
- table = [],
- c;
- for (c = 0; c < 256; c++) {
- a = c;
- for (let f = 0; f < 8; f++) {
- a = a & 1 ? 3988292384 ^ (a >>> 1) : a >>> 1;
- }
- table[c] = a;
- }
- let hash = -1;
- for (let i = 0; i < str.length; i++) {
- hash = (hash >>> 8) ^ table[(hash ^ str.charCodeAt(i)) & 255];
- }
- return (hash ^ -1) >>> 0;
-}
-
-interface PseudoRandom {
- randInt: (min: number, max: number) => number;
-}
-
-export function usePseudoRandom(
- seed: string,
- callback: (random: PseudoRandom) => T
-) {
- const multiplier = 1664525;
- const modulus = 4294967296;
-
- return useMemo(() => {
- let counter = 0;
- let currentSeed = crc32(seed);
- return callback({
- randInt: (min: number, max: number) => {
- const c = crc32(
- String(counter) + String(currentSeed) + String(counter)
- );
- const newSeed = (currentSeed * multiplier + c) % modulus;
- counter++;
- currentSeed = newSeed;
- return Math.floor((newSeed / modulus) * (max - min + 1) + min);
- },
- });
- }, [seed, callback]);
-}
diff --git a/src/util/urls.ts b/src/util/urls.ts
deleted file mode 100644
index 7d312b6..0000000
--- a/src/util/urls.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { PathnamesWithoutParameterizedPaths } from "@/routing";
-
-export const getAnchorWithParams = (path: string, params?: string) => {
- return (
- params ? "?" + params + path.substring(1) : path
- ) as PathnamesWithoutParameterizedPaths;
-};
diff --git a/tailwind.config.ts b/tailwind.config.ts
deleted file mode 100644
index 051b3dd..0000000
--- a/tailwind.config.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import type { Config } from "tailwindcss";
-
-const config: Config = {
- content: [
- "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
- "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
- "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
- ],
- theme: {
- extend: {
- boxShadow: {
- "inner-form": "inset 0 0px 4px 0 var(--tw-shadow-color)",
- "large-pop": "0px 3px 84px -10px var(--tw-shadow-color)",
- "box-shadow": "0px 3px 34px -10px rgba(180, 180, 180, 0.40)",
- "blue-glow": "0px 3px 84px -10px rgba(63,107,175,0.50)",
- },
- colors: {
- krakenPurple: "#7538F5",
- gradientPurple: "#8049F2",
- softDarkPurple: "#160F1F",
- featuredCardPurple: "#6451AA26",
- darkPurple: "#5C479D",
- },
- backgroundImage: {
- "gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
- "purple-pill-gradient":
- "radial-gradient(367.31% 2457.04% at 354.39% 128.21%, #8049F2 0%, rgba(109, 78, 174, 0) 100%), linear-gradient(0deg, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7))",
- "dapps-icon-gradient": `linear-gradient(144.22deg, #C7E1FF -40.26%, #C6C7D2 66.08%, #7132F5 125.73%),
-radial-gradient(61.23% 153.65% at -4.6% -9.33%, #C7E1FF 0%, rgba(199, 225, 255, 0.6) 33.33%, #F6F4FF 66.67%, rgba(198, 199, 210, 0) 100%),
-linear-gradient(0deg, rgba(130, 215, 251, 0), rgba(130, 215, 251, 0)),
-radial-gradient(50% 50% at 50% 50%, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0) 100%)`,
- "gradient-conic":
- "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
- noise: "url(/noise.svg);",
- "event-pill-gradient":
- "radial-gradient(150% 740.74% at 135.63% 100%, #B9AAEF 0%, rgba(157, 130, 254, 0) 100%), linear-gradient(0deg, var(--fill-bg-100, #FFFFFF), var(--fill-bg-100, #FFFFFF))",
- "event-pill-gradient-dark":
- "radial-gradient(100.63% 100.63% at 50% -0.32%, #2E2E2E 0%, #080808 100%), radial-gradient(367.31% 2457.04% at 354.39% 128.21%, #8049F2 0%, rgba(109, 78, 174, 0) 100%)",
- "featured-card-gradient":
- "radial-gradient(115.71% 442.14% at 97.72% -9.91%, #8049F2 15.52%, rgba(109, 78, 174, 0) 100%),radial-gradient(100.63% 101.63% at 50% -0.32%, #2E2E2E 0%, #080808 100%),linear-gradient(0deg, #FFFFFF, #FFFFFF)",
- "featured-card-gradient-dark":
- "radial-gradient(115.71% 442.14% at 97.72% -9.91%, #8049F2 15.52%, rgba(109, 78, 174, 0) 100%),linear-gradient(0deg, #FFFFFF, #FFFFFF),radial-gradient(100.63% 101.63% at 50% -0.32%, #2E2E2E 0%, #080808 100%)",
- },
- flex: {
- "2": "2 auto",
- },
- },
- },
-};
-
-export default config;