Docs
How QUIETWILL works
A dead-man switch for ERC-20 tokens on Robinhood Chain (chain id 4663). Your coins never leave your wallet until you go quiet.
Contract deploying Sun 1 Nov
§1 Overview
You name one beneficiary, pick how long silence means, and list up to ten ERC-20 tokens. You approve those tokens to the QUIETWILL contract. As long as you check in, nothing happens. If you do not check in for your chosen time, anyone can call release(owner), and the contract sends each token straight from your wallet to your beneficiary: the smaller of your allowance and your balance, at that moment.
The contract has no owner, no pause switch, no upgrade path and no fee. It holds nothing: tokens stay in your wallet the whole time, so the only thing a will can ever do is call transferFrom(you, beneficiary, amount) after your deadline. There is no way to send to any other address.
Every number on the site is read from the chain in your browser, with no database of ours in between. The record of every will, check-in and release is on /proof.
§2 Write a will
- Beneficiary. One address. The page checks the checksum, tells you if the address has never been seen on this chain or is a contract, and asks you to confirm you typed it yourself. The contract refuses the zero address and your own address. Any other wrong address cannot be caught.
- Silence. The time without a check-in after which the will can be released. Presets are 30, 90, 180 and 365 days. The contract accepts anything from 1 hour to 3650 days. Under 7 days the page warns you in red: your coins move after that many hours of silence.
- Tokens. Up to ten ERC-20 tokens. USDG, NVDA and TSLA are listed; any other ERC-20 address can be pasted and is checked for contract code first.
- Approve, then create. Each token needs an
approveto the contract (unlimited, or a cap you choose; see Approvals), then onecreateWilltransaction. The approve step is skipped for tokens that already have enough allowance.
A wallet with no balance can still write a will; it covers whatever the wallet holds when it is released. A wallet that already has a will sees Your will instead of the form, so a second createWill is never sent.
§3 Check in
I'm still here calls ping(): one transaction, as often as you like. It sets the last check-in to now, so the deadline becomes now plus your silence interval. updateWill also counts as a check-in.
A ping after the deadline is allowed, as long as the will exists: it restarts the timer. If someone already released, whatever was sent stays sent; the ping only starts the timer again for what is left.
Calendar file. The page can build an .ics file in your browser: a repeating reminder at half your interval and a one-off entry on the deadline with alarms 7 days and 1 day before. No data leaves your browser. A calendar entry does not move when you check in, so download a fresh file after changing your will.
§4 Release
From the second the deadline is reached (the deadline itself counts), any wallet can call release(owner). For each token on the will, the contract reads your allowance and your balance and sends the smaller of the two from your wallet to your beneficiary.
- A token that fails (paused by its issuer, frozen address, zero allowance, zero balance, a token that reverts) is skipped. The other tokens still move. The contract logs
Skippedfor it. - The will is kept after a release. It can be called again after the deadline, and each call sends what is left. Anything you receive later can still go home.
- If nothing at all would move, the call reverts with
NothingToRelease: "nothing to move right now (revoked, empty, or paused)". - Each token call has a gas cap, so one broken token cannot starve the rest. A release sent with too little gas reverts with
InsufficientGas; resend with a higher gas limit.
Before the deadline release reverts with NotYetDue and the deadline.
§5 Approvals
A will is only as large as the approvals behind it.
- Unlimited (default): the will covers whatever you hold of that token when it fires.
- Capped: the will moves at most the amount you set (and never more than your balance).
- Revoke is the way to take one token out:
approve(contract, 0)on that token. The will then skips it. cancelWill()deletes the will but does not touch approvals. After cancelling, the page offers a Revoke button per token; an approval left in place does nothing without a will, but you may prefer it gone.
The approval is the real permission. If you want a smaller exposure, cap it.
§6 Ping against release
Both are ordinary transactions, so order matters. If your ping lands first, the deadline moves and a release sent a moment later reverts with NotYetDue. If a release lands first, the tokens are sent and cannot come back; your later ping only restarts the timer. One second after the deadline there is no grace period.
Anyone can release, including bots. That is by design: nobody has to be trusted to act. It is also why a short interval is risky: you can lose a race by being slow.
§7 Issuer controls
Tokenized stocks (NVDA, TSLA) are Robinhood Tokens issued by Robinhood. USDG is issued by Paxos. Both issuers keep powers the contract cannot override.
| Issuer action | What a release does |
|---|---|
| Robinhood pauses a token | That token is skipped (Skipped, reason 1). The page shows "transfers paused by issuer". Try again after it is unpaused. |
Robinhood burns from your address (adminBurn) | Your balance is smaller; the release moves the smaller number. |
| Paxos pauses USDG | USDG is skipped; other tokens still move. Try again after unpause. |
| Paxos freezes your address or the beneficiary's | USDG is skipped for as long as the freeze lasts. |
Because the contract holds no tokens, there is no pool for an issuer to freeze or burn at the contract address.
§8 ETH is not supported
ETH itself cannot be approved, so a will cannot move it. Keep what you want covered as USDG or any ERC-20. Supporting ETH would mean the contract holding your funds, which is the opposite of the design, and wrapped ETH is not something this version builds on.
§9 Addresses
| Network | Robinhood Chain, chain id 4663 |
|---|---|
| QuietWill | deploying Sun 1 Nov Blockscout Sourcify |
| USDG (Paxos, 6 decimals) | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| NVDA (Robinhood Token, 18 decimals) | 0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC |
| TSLA (Robinhood Token, 18 decimals) | 0x322F0929c4625eD5bAd873c95208D54E1c003b2d |
| Robinhood Token beacon | 0xe10b6f6B275de231345c20D14Ab812db62151b00 |
| Project token CA | at launch, 2 Nov 14:00 UTC |
The contract source is verified on Sourcify and Blockscout once deployed; both links appear above and on /proof. Trust only addresses published on this site and on @quietwillxyz.
§10 Command line
Everything the page reads or sends can be done with Foundry's cast. <WILL> is the contract address above; <OWNER> is the wallet that wrote the will.
Read a will (no wallet)
cast call <WILL> "getWill(address)(address,uint64,uint64,uint64,bool,uint32,address[])" <OWNER> --rpc-url https://robinhood-rpc.publicnode.comReturns beneficiary, interval, last check-in, deadline, overdue, releases so far and the token list (times are Unix seconds, UTC).
cast call <WILL> "previewRelease(address)(address[],uint256[])" <OWNER> --rpc-url https://robinhood-rpc.publicnode.comWhat a release would try to move right now: min(allowance, balance) per token, 0 where a read fails.
Check in (the owner)
cast send <WILL> "ping()" --rpc-url https://robinhood-rpc.publicnode.com --account <your-keystore>Release (anyone, after the deadline)
cast send <WILL> "release(address)" <OWNER> --rpc-url https://robinhood-rpc.publicnode.com --account <your-keystore>If a release fails with InsufficientGas, add --gas-limit 1000000.
§11 The token
QUIETWILL also has a token on Pons. Holding the token pays nothing and unlocks nothing; it is the coin of the project on Pons. The contract has no token logic and no fee. The team's promise is that the Pons creator fee (2%) goes to the creator wallet and pays for the domain and hosting, and that the team keeps the demo will and the domain running. The contract address of the token is published at launch, on this page and on @quietwillxyz.
§12 Risks
- Forgetting to check in sends your coins. That is the feature. There is no grace period and no reminder from us. Prefer a long interval and keep a calendar reminder.
- An approval is a permission. If the contract had a bug, tokens you approved would be at risk. It can only send to the beneficiary you stored, but it is small and not audited. Use a capped approval if you are unsure.
- A wrong beneficiary is final. The contract rejects only the zero address and your own address. Check the address on the explorer.
- Issuers can pause, freeze and burn. Robinhood and Paxos can stop a token from moving; the release skips it and you can try again later.
- Lost keys. This is not a recovery tool. If you lose your key you cannot check in, so a release will happen after the deadline (which is the point), but anything you did not approve stays where it is.
- Anyone can release, including bots, the second the deadline passes. A ping that lands after a release does not bring tokens back.
- Chain time. The deadline uses the block timestamp. The sequencer's clock can drift from your wall clock.
- Odd tokens. A token that takes a fee on transfer sends the beneficiary less than the contract reports. The contract does not check.
- The will stays after a release. Approvals you left in place can send again after the next deadline. Revoke what you do not want covered.
- Small team, small contract. No owner and no upgrade means bugs cannot be patched either. Tokens are not custodied and nothing here is financial or legal advice.