index.jsx 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import React, { useState } from 'react';
  2. import Header from '../components/Header';
  3. import Footer from '../components/Footer';
  4. import AddressSearchBar from '../components/AddressSearchBar';
  5. import ChooseTornadoPool from '../components/ChooseTornadoPool';
  6. export default function IndexPage() {
  7. const [inputAddress, setInputAddress] = useState('');
  8. const onAddressSubmit = (addr) => {
  9. window.location.href = "/cluster?address=" + addr;
  10. }
  11. return (
  12. <div className="container">
  13. <div className="row">
  14. <Header />
  15. <div className="full-page main col-12">
  16. <div className="row">
  17. <h1 className="col-12">assess your anonymity.</h1>
  18. </div>
  19. <div className="justify-center row">
  20. <AddressSearchBar onSubmit={onAddressSubmit} inputAddress={inputAddress} setInputAddress={setInputAddress} />
  21. </div>
  22. <div className="row instruct">
  23. <div className="col-8 text-center " id="instructions" >Enter an ethereum address or ENS name to see likely connected ethereum addresses (ie. its cluster)
  24. based on public data on previous transactions. </div>
  25. </div>
  26. <div className="row instruct instructions">
  27. <div className="col-12">
  28. -- or --
  29. </div>
  30. <div className="col-12">
  31. Use the Tornado Cash Pool Anonymity Auditor
  32. </div>
  33. </div>
  34. <div className="row justify-center">
  35. <ChooseTornadoPool />
  36. </div>
  37. </div>
  38. <div className="full-page col-12" id="about">
  39. <h3 className="left-section-header">
  40. about
  41. </h3>
  42. <div className="section-desc">
  43. Every transaction you make on the blockchain reveals more about your personal data. For individuals who care
  44. to protect their privacy, they must be mindful of what transactions they make and how they make them.
  45. </div>
  46. <div className="section-desc ">
  47. <strong>Tutela is Latin for Protection. We named this application Tutela because it
  48. aims to
  49. help Ethereum and Tornado Cash users protect their privacy, and understand how much they have revealed
  50. about themselves through their blockchain activity.</strong>
  51. </div>
  52. <div className="section-desc">
  53. We use data science and Ethereum and Tornado Cash reveals to <strong>probablistically estimate which Ethereum
  54. addresses are affiliated with single entities and which Tornado Cash deposits may be compromised.</strong>
  55. </div>
  56. <div className="section-desc">
  57. We built this application as part of a <a
  58. href="https://torn.community/t/funded-bounty-anonymity-research-tools/1437">Tornado Cash Grant</a>.
  59. We respect your privacy and so do not save search results.
  60. </div>
  61. <div className="section-desc">
  62. Read our <a
  63. href="https://arxiv.org/abs/2201.06811">whitepaper</a> to learn more.
  64. </div>
  65. </div>
  66. <div className="full-page col-12" id="reveals">
  67. <h3 className="right-section-header">
  68. reveals and heuristics
  69. </h3>
  70. <div className="right section-desc">
  71. There are lots of reveals that you can commit on the blockchain that can link your various Ethereum wallets.
  72. We outline some of the key reveals below.
  73. </div>
  74. <br />
  75. <div className="subsect">
  76. <h4>ethereum heuristics</h4>
  77. <div className="row center-blocks">
  78. <div className="col-sm-12 col-md-6">
  79. <div className="block-title">
  80. Deposit Address Reuse
  81. </div>
  82. <div className="block-text">
  83. When you send tokens to your account at a centralized exchange, the exchange creates a unique
  84. deposit addresses for each customer. If you send tokens from multiple ethereum wallets, they
  85. will likely send to the same deposit address, linking your two wallets.
  86. </div>
  87. </div>
  88. <div className="col-sm-12 col-md-6">
  89. <div className="block-title">
  90. Diff2Vec Machine Learning
  91. </div>
  92. <div className="block-text">
  93. Diff2Vec is a machine learning algorithm. Applying it to Ethereum transactions allows the
  94. clustering of potentially related addresses.
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. <br />
  100. <br />
  101. <div className="subsect">
  102. <h4>tornado cash heuristics</h4>
  103. <div className="row center-blocks">
  104. <div className="col-sm-12 col-md-6 col-lg-4">
  105. <div className="block-title">
  106. Address Match Reveal
  107. </div>
  108. <div className="block-text">
  109. Suppose the address making a deposit transaction to a Tornado Cash pool matches
  110. the address making a withdrawal transaction (from the same pool). In that case,
  111. the two transactions can be linked, and the corresponding deposit may be compromised
  112. as the user identity may be revealed. These may be TORN yield farmers who deposit and withdraw to the same address.
  113. </div>
  114. </div>
  115. <div className="col-sm-12 col-md-6 col-lg-4">
  116. <div className="block-title">
  117. Unique Gas Price Reveal
  118. </div>
  119. <div className="block-text">
  120. Prior to EIP-1559, Ethereum users could specify the gas price when making a
  121. deposit or withdrawal to a Tornado Cash pool. Those who do so tend to specify
  122. gas prices that are identical for deposit and withdrawal transactions, linking the
  123. wallets that made the deposit and withdrawal transactions.
  124. </div>
  125. </div>
  126. <div className="col-sm-12 col-md-6 col-lg-4">
  127. <div className="block-title">
  128. Multi-Denomination Reveal
  129. </div>
  130. <div className="block-text">
  131. If your “source” wallet mixes a specific set of denominations and your “destination” wallet
  132. withdraws them all (example: if you mix 3x 10 ETH, 2x 1 ETH, 1x 0.1 ETH in order to get 32.1 ETH
  133. to begin staking on the beacon chain), then you could reveal yourself within the Tornado
  134. protocol
  135. if no other wallet has mixed this exact denomination set.
  136. </div>
  137. </div>
  138. <div className="col-sm-12 col-md-6 col-lg-4">
  139. <div className="block-title">
  140. Linked Address Reveal
  141. </div>
  142. <div className="block-text">
  143. Suppose two addresses deposit and withdraw to the same Tornado Cash Pool. If these addresses
  144. interact outside of the Tornado Protocol, then they may be linked and their deposits compromised.
  145. </div>
  146. </div>
  147. <div className="col-sm-12 col-md-6 col-lg-4">
  148. <div className="block-title">
  149. TORN Mining
  150. Reveal
  151. </div>
  152. <div className="block-text">
  153. If you liquidity mine anonymity points (AP) and claim them all for TORN in a single tx with
  154. either the “source” or “destination” wallet, you will reveal exactly how long you mixed your
  155. tokens. This will perfectly connect the two addresses.
  156. </div>
  157. </div>
  158. </div>
  159. </div>
  160. <Footer />
  161. </div>
  162. </div>
  163. </div>
  164. );
  165. }