Great UX drives adoption of our Ethereum technology;

  1. a web wallet is super-easy to onboard users, but easily lost; therefore we built a 6d-digit recovery mechanism for a web wallet (with gnosis SAFE contract); users can recover access to their (web)wallet with 6 digit PIN and username and two trusted friends (strengthening friend-recovery)
  2. when sending a friend money, we can automatically respect her (risk-profile) preferences;
  3. we on-the-fly uni-swap the tokens to her preferred token to receive
  4. if she has a Layer-2 contract account, we send it to her (from L1 to L2) there to reduce future transaction costs (again if preferred)

What it does

  1. Transfer funds into a burner key
  2. Swap those funds from any ERC20 to any Erc20 (over uniswap)
  3. Move the funds to a safer (Gnosis) contract proxy (on Layer 1)
  4. From L1 to boost speed and reduce transaction fee move funds to Layer2 Mosaic
  5. To recover the owner key of (Gnosis) contract proxy using 6 digit pin delayed-recovery
    • an Atlas.json file is stored encrypted and versioned on IPFS;
    • an Access.json allows retrieval (and decryption) of Atlas.json
    • if all devices lost, Access.json is also lost; 2-out-of-6 friends hold a Shamir Secret Share of the (static) Access.json file. The Access.json only contains the Scrypt salt, and Username+6d PIN is needed for recovering encryption key; following that, from the (recovered) Atlas.json we obtain a recovery-key, which allows us to initialise a delayed recovery on the dOST contract module, forcing a 12Hour delay during which we can be notified of malicious attempt and abort.

How we built it

  1. Create a burner key to move money into the wallet
  2. Transfer these funds on a burner key to a safer contract (by using GnosisSafe contract & proxy instances deployed for each user)
  3. Using Uniswap move these funds to potentially any Erc20 address (in a single transaction)
  4. Using Facilitator (code by Mosaic) move funds securely from a same contract on L1 to a safe contract on L2.
  5. Ask for username / pin and generate a salt and derive an encryption key from these inputs. To recover a salt (afterwards by using username / pin the whole encryption key) the salt was divided into shamir secrets and shared with trusted contacts.
  • Goerli (Layer 1) Depolyment

    -- Uniswap Factory : 0x6ce570d02d73d4c384b46135e87f8c592a8c86da

Uniswap Exchanges

-- Template exchange : 0x6ce570d02d73d4c384b46135e87f8c592a8c86da

-- OST/ETH :

ERC20 : 0xd426b22f3960d01189a3D548B45A7202489Ff4De Exchange : 0x26013a2aa4371a222C63AD9463dAFd649224bb3c

-- W-ETH/ETH :

ERC20 : 0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6 Exchange : 0xda4b7e436715cde8884308ce183531acca695c04


  ERC20 : 0x488A08a02e77fC72190f7689A0be9E9b6e23c127
  Exchange : 0x2aaac00c0ace292b3b5600b95d4d27fe63a0c754

Gnosis Deployment

Master Copy : 0x776E8e89f3433087992e163e1605aC094B85E074 Proxy Factory address : 0x974ae222eC30561EC03f6055726FEC3757D5CDD1

1405 (Layer 2) Depolyment

Uniswap Factory : 0x4943ffa18C15e5D58b51b8e9ab840259645cc358

Uniswap Exchanges

-- Template excahnge : 0xbea8bae399fe8d54e34c55eb074eb1bf82fbb912

-- W-ETH/OST :

ERC20 : 0xBB5676d85d28DA039F982C07E4217fB0FDB2c2ef Exchange : 0x3121eb49ccfd870ee8f27bf485733c0b6cca4c87


Master Copy : 0x5bc7e67Bc0F6400c8bFfd193A9Dff217a2F79294 Proxy Factory address : 0xC34B9569193CD401eA0C4C930E64D305BAE3faa3

Challenges we ran into

Using node modules on web (react code) isn't possible easily. Few external libraries which we wanted to use were node modules and we couldn't get them working with React browser app.

Accomplishments that we're proud of

decentralised 6digit recovery; integrated UX of uniswap and Layer1->2 swapping

What we learned

Understood how Uniswap, shamir secrets, and ipfs works

What's next for UNI / Layer Swap + 6 digit pin recovery

properly stitching it all together

Built With

Share this project: