Skip to content

πŸ— simple contract to transfer funds from a lost wallet

License

Notifications You must be signed in to change notification settings

hexedout/savior-contract

Repository files navigation

Savior Contract

A very simple contract that allows a targetWallet to attempt to recover a token quickly in the event it is comprised or locked out / keys lost.

The contract requires a targetWallet wallet containing the token, a receiver of the tokens, and a token address to transfer when triggered.

The EXECUTOR_ROLE allows many wallets the ability to trigger the contract and recover the funds, without being able to withdraw them from the contract. The targetWallet can add additional executors making the ability of triggering the contract easier.

Once triggered, the tokens are initially transferred to the contract, with only the receiver being able to call withdraw() and remove them from the contract.

You can try it out for yourself at parallel-limit.surge.sh and going to the SaviorFactory which can deploy your own Savior contract, the last 10 created will be visible.

The SaviorToken contract is a standard ERC20 token with an extra faucet function to mint yourself fake tokens to test.

Got the idea from almost losing a hot wallet's keys and needing a quick solution...


TODO:

  • Ability to transfer multiple tokens, as many as the targetWallet adds and approves

πŸ„β€β™‚οΈ Quick Start

Prerequisites: Node (v18 LTS) plus Yarn (v1.x) and Git

🚨 If you are using a version < v18 you will need to remove openssl-legacy-provider from the start script in package.json

1️⃣ clone/fork πŸ— scaffold-eth:

git clone https://github.com/scaffold-eth/scaffold-eth.git

2️⃣ install and start your πŸ‘·β€ Hardhat chain:

cd scaffold-eth
yarn install
yarn chain

3️⃣ in a second terminal window, start your πŸ“± frontend:

🚨 if your contracts are not deployed to localhost, you will need to update the default network in App.jsx to match your default network in hardhat-config.js.

cd scaffold-eth
yarn start

4️⃣ in a third terminal window, πŸ›° deploy your contract:

🚨 if you are not deploying to localhost, you will need to run yarn generate (using node v16.x) first and then fund the deployer account. To view account balances, run yarn account. You will aslo need to update hardhat-config.js with the correct default network.

πŸ‘€ Side Quest: we need to update this process to use node v18.x πŸͺ„

cd scaffold-eth
yarn deploy

πŸ” Edit your smart contract Savior.sol in packages/hardhat/contracts

πŸ“ Edit your frontend App.jsx in packages/react-app/src

πŸ’Ό Edit your deployment scripts in packages/hardhat/deploy

πŸ“± Open http://localhost:3000 to see the app

πŸš¨πŸ“‘ To deploy to a public domain, use yarn surge. You will need to have a surge account and have the surge CLI installed. There is also the option to deploy to IPFS using yarn ipfs and yarn s3 to deploy to an AWS bucket πŸͺ£ There are scripts in the packages/react-app/src/scripts folder to help with this.`

πŸ“š Documentation

Documentation, tutorials, challenges, and many more resources, visit: docs.scaffoldeth.io

🍦 Other Flavors

πŸ”­ Learning Solidity

πŸ“• Read the docs: https://docs.soliditylang.org

πŸ“š Go through each topic from solidity by example editing Savior.sol in πŸ— scaffold-eth

πŸ“§ Learn the Solidity globals and units

πŸ›  Buidl

Check out all the active branches, open issues, and join/fund the 🏰 BuidlGuidl!

πŸ’Œ P.S.

🌍 You need an RPC key for testnets and production deployments, create an Alchemy account and replace the value of ALCHEMY_KEY = xxx in packages/react-app/src/constants.js with your new key.

πŸ“£ Make sure you update the InfuraID before you go to production. Huge thanks to Infura for our special account that fields 7m req/day!

πŸƒπŸ’¨ Speedrun Ethereum

Register as a builder here and start on some of the challenges and build a portfolio.

πŸ’¬ Support Chat

Join the telegram support chat πŸ’¬ or buidlguidl discord to ask questions and find others building with πŸ— scaffold-eth!


πŸ™ Please check out our Gitcoin grant too!

Automated with Gitpod

Open in Gitpod

About

πŸ— simple contract to transfer funds from a lost wallet

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published