-- USDC

Documentation

Obsidian Protocol / Reference

Documentation

Everything you need to understand, trust, and use Obsidian Protocol.

01 / Protocol

What is Obsidian Protocol

Obsidian Protocol is a cryptographic dead man's switch deployed on Arc blockchain. It guarantees that sensitive documents are automatically published if their owner cannot confirm they are safe.

No central server. No admin keys. No way to stop it once armed. The contract is immutable - not even the developers can interfere.

02 / Technical

How It Works

+------------------------------------------------+
|              OBSIDIAN PROTOCOL                 |
|              ENCRYPTION FLOW                   |
+------------------------------------------------+

[YOUR BROWSER]
      |
      +- 1. Select document
      +- 2. Generate AES-256-GCM key (random)
      +- 3. Encrypt document with AES key
      +- 4. XOR-split AES key into Part A + Part B
      +- 5. Age-wrap each part for beneficiaries
      |
      v
[IPFS NETWORK]
      |
      +- 6. Upload encrypted document
      +- 7. Receive IPFS hash (CID)
      |
      v
[ARC BLOCKCHAIN]
      |
      +- 8. Store: IPFS hash
      +- 9. Store: encrypted key Part A
      +- 10. Store: encrypted key Part B
      +- 11. getVault returns Part B as "" until trigger
      +- 12. Arm dead man's switch
      |
      v
[EVERY X DAYS]
      |
      +- Owner sends heartbeat transaction
      +- Timer resets
      |
      v (if no heartbeat)
[TRIGGER ACTIVATED]
      |
      +- Encrypted Part B is revealed through getVault + event
      +- Anyone can download encrypted file from IPFS
      +- Beneficiaries decrypt both parts with age private key
      +- Part A XOR Part B restores AES key in browser

03 / Contract

Smart Contract Reference

ObsidianVault.sol

The contract is an immutable registry for encrypted vault metadata and heartbeat state. It never stores plaintext documents.

FunctionAccessDescription
createVault()PublicCreate a new vault with timer, IPFS hash, encrypted key Part A, encrypted key Part B, and beneficiaries.
heartbeat()OwnerReset the timer. Must be called before the deadline expires.
activateTrigger(address user)PublicAnyone can call after deadline. Reveals encrypted key Part B through the public getter and trigger event.
getVault(address user)PublicRead vault data. Key Part B returns an empty string until the vault is triggered.
getStatus(address user)PublicRead the current lifecycle state: none, active, expired, or triggered.
nextDeadline(address user)PublicRead the exact timestamp when the vault becomes triggerable.

Events

  • VaultCreated(address indexed user, string ipfsHash, uint256 timer)
  • HeartbeatSent(address indexed user, uint256 nextDeadline)
  • TriggerActivated(address indexed user, string ipfsHash, string encryptedKeyPartA, string encryptedKeyPartB)

04 / Security

What Obsidian Protects Against

Protects Against

  • Server seizure - no central server exists
  • Forced disappearance - expired timers can be triggered by anyone or the keeper bot
  • Document tampering - IPFS hash is immutable
  • Blockchain re-org - Arc sub-second finality
  • Financial surveillance - USDC gas, no KYC needed
  • Single point of failure - fully decentralized

Does Not Protect Against

  • Compromised device before encryption

    Always encrypt on a trusted, clean device

  • Coerced heartbeat under duress

    Use a trusted contact as backup

  • IPFS file unavailability

    Pin your files on multiple services

  • On-chain identity correlation

    Use a fresh wallet with no transaction history

  • Raw public-chain storage inspection

    Do not treat EVM storage as private; production release shares should stay off-chain until trigger

  • Quantum attacks today

    Post-quantum features are on Arc's roadmap and not yet available

Post-Quantum Security

Obsidian Protocol currently runs on Arc Testnet with standard EVM cryptography. Post-quantum features are on Arc's roadmap and not yet available.

When Arc Mainnet launches: wallet signatures upgrade to SLH-DSA-SHA2-128s. Adoption is opt-in, with no action required from vault owners.

When Arc Privacy launches: encrypted state is protected by X-Wing KEM (X25519 + ML-KEM-768 with AES-256-GCM), with full protection against harvest-now, decrypt-later attacks.

This matters because blockchain data is permanent. Documents sealed today must remain secure in 10+ years when quantum computers may become practical.

05 / Setup

Get Started in 5 Steps

  1. Step 1 - Get a Wallet

    Install MetaMask from metamask.io. Create a new wallet dedicated to Obsidian. Never reuse a wallet linked to your identity.

    MetaMask
  2. Step 2 - Add Arc Testnet

    Click ADD ARC NETWORK in the app header. MetaMask will ask for confirmation. Accept.

    • RPC: https://rpc.testnet.arc.network
    • Chain ID: 5042002
    • Symbol: USDC
  3. Step 3 - Get Testnet USDC

    Go to the Circle faucet and request testnet USDC for your wallet address.

    Circle faucet
  4. Step 4 - Create Your Vault

    Go to /vault/new. Upload your document. Set your timer. Deploy.

    Initialize vault
  5. Step 5 - Send Heartbeats

    Visit your vault dashboard regularly. Send a heartbeat before the timer expires. Set a personal reminder 48 hours before deadline.

    Vault dashboard pattern

06 / FAQ

FAQ

Can Obsidian Protocol be shut down?

No. The smart contract is deployed and immutable on Arc blockchain. There is no off switch. The developers cannot modify or stop it.

What happens if IPFS loses my file?

The blockchain stores the proof hash forever, but the file itself needs to stay pinned on IPFS. Obsidian uses Pinata for reliable pinning.

What if I lose my wallet?

Your vault will eventually trigger and release the documents. Keep your seed phrase safe. Without it, you cannot send heartbeats.

Is this legal?

Obsidian Protocol is a neutral tool. Using it to publish documents is subject to the laws of your jurisdiction. We do not provide legal advice.

Can someone stop the trigger?

Only the vault owner can reset the timer by sending a heartbeat. Once the deadline passes, anyone can call activateTrigger() and nothing can stop the publication.