Whitepaper Documentation Privacy Policy Terms of Use
Documentation

Build your immortal will.

Everything you need to create a GRAVE Vault, lock ETH and RWA Stock Tokens, keep it alive with proof-of-life check-ins, and let your beneficiaries claim — plus a full contract and network reference for developers.

Network Robinhood Chain Wallets Reown AppKit · 80+ wallets Contracts GraveFactory · GraveVault

Overview

GRAVE is a non-custodial last-will protocol on Robinhood Chain. You lock assets in a vault only you can move; if you stop checking in, your beneficiaries claim their shares — no probate, no custodian, no admin key.

This guide walks through the full user journey in the GRAVE dApp, then provides the network and contract reference developers need to integrate or verify the protocol directly. For the design rationale and security model, read the whitepaper.

Each owner address controls exactly one vault. The factory maps your address to your vault, so re-connecting the same wallet always returns you to the same will.

Quick start

Five steps take you from a fresh wallet to a fully funded, self-executing will:

  1. Connect a wallet and switch to Robinhood Chain.
  2. Create your vault: set a check-in interval, a grace period, beneficiaries, and optional guardians.
  3. Deposit ETH and RWA Stock Tokens into your vault.
  4. Check in on schedule to prove you are alive and reset the countdown.
  5. If check-ins ever stop past the deadline, anyone can execute and your beneficiaries claim.

Connect a wallet

The dApp uses Reown AppKit (WalletConnect) — a multi-wallet modal supporting Trust, MetaMask, Binance, SafePal and 80+ wallets, including mobile via QR code and deeplink. If AppKit cannot load, the dApp automatically falls back to a basic injected-wallet connection.

  1. Open app.grave.cash and click Connect.
  2. Pick your wallet from the modal (or scan the QR with a mobile wallet).
  3. Approve the connection request in your wallet.

Add the network

If your wallet is not yet on Robinhood Chain, the dApp will prompt you to add and switch networks. Approve the request, or add it manually with the values in the network reference below. Gas is paid in ETH.

Create a will

Creating a vault deploys your own GraveVault contract through the factory. You set four things:

FieldWhat it means
Check-in intervalHow long you may go silent before the grace period starts. Choose a cadence you can comfortably keep (e.g. monthly, quarterly).
Grace periodAn extra buffer after the interval. A single check-in during this window resets everything, so give yourself room for travel or illness.
BeneficiariesAddresses and their shares in basis points. All shares must sum to exactly 10,000 (100%).
Guardians (optional)Trusted addresses allowed only to check in on your behalf. They can never withdraw, redirect, or trigger execution.

Shares are expressed in basis points: 5,000 bps = 50%, 2,500 bps = 25%. The dApp validates that your allocation sums to 10,000 before letting you submit.

Deposit assets

Your vault can hold ETH and any ERC-20 — including RWA Stock Tokens — that you deposit.

ETH

Send ETH directly to your vault address, or use the deposit control in the dApp. The vault's receive() function accepts ETH and emits a Deposited event.

RWA Stock Tokens & ERC-20s

Depositing a token is a two-step flow: first approve the vault to move the amount, then call depositToken(token, amount), which pulls the tokens in and tracks them. The dApp offers curated Stock Token shortcuts in the deposit panel, and any ERC-20 address also works via manual entry.

// 1) Approve the vault on the token
token.approve(vault, amount);

// 2) Pull the tokens into the vault (owner only, while active)
vault.depositToken(token, amount);

If you transfer a token directly to the vault (without depositToken), call trackToken(token) so it is included in the execution snapshot. Untracked tokens are not distributed to beneficiaries.

Check in

A check-in is your proof of life. Calling checkIn() stamps the current time and resets the countdown to the full interval plus grace period. You can check in any time — early is fine — and you can do it as often as you like.

  • The owner can always check in.
  • Any guardian you appointed can also check in on your behalf.
  • The onchain deadline() and isExpired() views always show your current status.

The dApp surfaces your next deadline and can remind you before your window closes. Keeping a regular cadence is the single most important habit for a GRAVE owner.

Execution & claims

If check-ins stop and block.timestamp passes the deadline, the vault becomes expirable. From that point:

  1. Anyone can call execute(). It flips the vault to executed and snapshots ETH and every tracked token balance.
  2. Each beneficiary calls claim() once to pull their fixed share of ETH and every token: snapshot × bps / 10,000.
  3. previewClaim(address) shows what a beneficiary would receive before they claim.

Because balances are frozen at execution, beneficiaries can claim independently and in any order without affecting one another. Once executed, owner controls are permanently locked.

Manage your vault

While the vault is active and un-executed, the owner can adjust the will at any time:

ActionFunction
Change the schedulesetSchedule(interval, grace)
Update beneficiaries & sharessetBeneficiaries(accounts, bps)
Add or remove a guardiansetGuardian(guardian, enabled)
Withdraw ETHwithdrawETH(amount, to)
Withdraw a tokenwithdrawToken(token, amount, to)

Updating the schedule also refreshes your last check-in, so changing your cadence never accidentally shortens your current window.

Network reference

GRAVE runs on Robinhood Chain, an Arbitrum-Orbit L2. Gas is paid in ETH.

NetworkChain IDRPCExplorer
Mainnet4663https://rpc.mainnet.chain.robinhood.comrobinhoodchain.blockscout.com
Testnet46630https://rpc.testnet.chain.robinhood.com/rpcexplorer.testnet.chain.robinhood.com

Get testnet ETH at faucet.testnet.chain.robinhood.com. The deployed GraveFactory on mainnet is 0x3Fa87f229c42d892a91f0DfeFC85c21F4cddd6A0.

Contract reference

The protocol is two contracts. Read the full source in contracts/src/.

GraveFactory

FunctionDescription
createVault(interval, grace, accounts, bps, guardians)Deploys the caller's vault and returns its address.
vaultOf(address) → addressReturns the vault for an owner (or zero if none).
vaultCount() → uint256Total vaults deployed.
event VaultCreated(owner, vault)Emitted on each deployment.

GraveVault — owner

FunctionDescription
checkIn()Proof of life. Owner or guardian; resets the countdown.
depositToken(token, amount)Pull an approved ERC-20 into the vault and track it.
trackToken(token)Register a token sent directly to the vault.
withdrawETH(amount, to) / withdrawToken(token, amount, to)Owner withdrawals while active.
setSchedule(interval, grace)Update the timing; refreshes last check-in.
setBeneficiaries(accounts, bps)Replace the beneficiary set; shares must sum to 10,000.
setGuardian(guardian, enabled)Add or remove a guardian.

GraveVault — execution & views

FunctionDescription
execute()Permissionless once expired. Snapshots balances, opens claims.
claim()A beneficiary pulls their fixed share, once.
previewClaim(account)Preview a beneficiary's ETH + token amounts.
deadline() / isExpired()Current expiry timestamp and status.
getBeneficiaries() / getTokens()Read the beneficiary set and tracked tokens.
executed() / executedAt()Execution status and timestamp.

Deploy the factory (developers)

The factory is deployed with Foundry. Deploy once per network, then point the dApp config at the printed address.

# from contracts/
forge install foundry-rs/forge-std
export PRIVATE_KEY=0x...            # a funded deployer key

# Testnet
forge script script/Deploy.s.sol:Deploy \
  --rpc-url robinhood_testnet --broadcast --private-key $PRIVATE_KEY

# Mainnet
forge script script/Deploy.s.sol:Deploy \
  --rpc-url robinhood --broadcast --private-key $PRIVATE_KEY

Copy the printed GraveFactory address into js/config.js (FACTORY.testnet / FACTORY.mainnet), set your Reown project id in WALLETCONNECT_PROJECT_ID, and allowlist your domain in the Reown dashboard.

FAQ

Does GRAVE ever take custody of my assets?

Never. Assets stay in a vault only you control until — and only until — your conditions are met onchain. GRAVE has no admin key and cannot move your funds.

What if I forget to check in?

You get a grace period after your interval, and reminders before it closes. A single check-in during the grace window resets everything. Guardians can also check in for you.

Is a GRAVE will legally binding?

GRAVE is a technical execution layer, not a law firm. It complements — not replaces — a legal will. Consult local regulations for your jurisdiction.

What if a beneficiary loses their wallet?

Plan beneficiary wallets carefully; social-recovery flows are on the roadmap. See the threat analysis for detail.