Digital Identity After Death - Interactive Testing Environment
Standardized format for death certificate verification and blockchain anchoring
{
"certificateId": "DC-2025-001",
"deceasedId": "uuid",
"deathDate": "2025-12-25T00:00:00Z",
"jurisdiction": "US-CA",
"verificationHash": "0x...",
"blockchainAnchor": {
"chain": "ethereum",
"txHash": "0x...",
"timestamp": "2025-12-25T00:05:00Z"
}
}
Cascading revocation of digital credentials and tokens
{
"revocationId": "REV-2025-001",
"subjectId": "uuid",
"timestamp": "2025-12-25T01:00:00Z",
"scope": "global",
"credentials": [
"did:wia:123",
"oauth:google:456"
],
"status": "revoked"
}
Time-locked access control for estate executors
{
"authId": "AUTH-2025-001",
"executorId": "uuid",
"deceasedId": "uuid",
"issuedAt": "2025-12-25T02:00:00Z",
"expiresAt": "2026-12-25T00:00:00Z",
"permissions": ["read", "export"],
"requiresMultisig": true,
"signers": ["executor", "witness"]
}
Digital afterlife persona configuration
{
"personaId": "AI-2025-001",
"sourceId": "uuid",
"createdAt": "2025-12-25T03:00:00Z",
"model": "gpt-4",
"trainingData": {
"sources": ["messages", "posts"],
"size": "10GB",
"privacy": "encrypted"
},
"interactionRules": {
"consentRequired": true,
"familyOnly": false
}
}
SHA-256Multi-sourceBlockchain
function verifyDeath(certificateData, registrySources) {
// 1. Hash certificate data
const certHash = sha256(certificateData);
// 2. Verify against multiple registries
const verifications = registrySources.map(source =>
source.verify(certHash)
);
// 3. Require 2/3 consensus
const consensus = verifications.filter(v => v.valid).length >= 2;
// 4. Anchor to blockchain
if (consensus) {
return blockchain.anchor(certHash);
}
return { verified: consensus, hash: certHash };
}
BFSAsyncIdempotent
async function cascadeRevocation(identityId) {
const queue = [identityId];
const revoked = new Set();
while (queue.length > 0) {
const current = queue.shift();
if (revoked.has(current)) continue;
// Revoke current credential
await revokeCredential(current);
revoked.add(current);
// Find dependent credentials
const dependents = await findDependentCredentials(current);
queue.push(...dependents);
}
return { totalRevoked: revoked.size, credentials: Array.from(revoked) };
}
// Initialize WIA-LEG-010 Client
import { DigitalIdentityAfterDeath } from '@wia/digital-identity-after-death';
const client = new DigitalIdentityAfterDeath({
apiKey: 'your-api-key',
network: 'mainnet',
jurisdiction: 'US-CA'
});
// Report death event
const deathReport = await client.reportDeath({
certificateId: 'DC-2025-001',
deceasedId: 'uuid-1234',
deathDate: '2025-12-25T00:00:00Z',
certificateHash: '0x...'
});
// Query identity status
const status = await client.getIdentityStatus('uuid-1234');
console.log(status); // { status: 'deceased', verifiedAt: '...' }
// Revoke credentials
const revocation = await client.revokeCredentials({
subjectId: 'uuid-1234',
scope: 'global'
});
// Issue executor access
const executorAuth = await client.issueExecutorAuth({
executorId: 'uuid-5678',
deceasedId: 'uuid-1234',
permissions: ['read', 'export'],
expiresIn: '1y'
});
// Configure webhook endpoint
app.post('/webhooks/wia-leg-010', async (req, res) => {
const event = req.body;
switch (event.type) {
case 'death.verified':
await handleDeathVerification(event.data);
break;
case 'credentials.revoked':
await handleCredentialRevocation(event.data);
break;
case 'executor.authorized':
await handleExecutorAuthorization(event.data);
break;
case 'persona.created':
await handlePersonaCreation(event.data);
break;
}
res.status(200).json({ received: true });
});
// Solidity Smart Contract
pragma solidity ^0.8.0;
contract DigitalIdentityRegistry {
mapping(bytes32 => DeathRecord) public deathRecords;
struct DeathRecord {
bytes32 certificateHash;
uint256 timestamp;
bool verified;
address[] verifiers;
}
event DeathVerified(bytes32 indexed subjectId, bytes32 certHash);
event CredentialsRevoked(bytes32 indexed subjectId, uint256 count);
function registerDeath(
bytes32 subjectId,
bytes32 certHash,
bytes[] calldata signatures
) external {
require(signatures.length >= 2, "Require 2+ verifiers");
deathRecords[subjectId] = DeathRecord({
certificateHash: certHash,
timestamp: block.timestamp,
verified: true,
verifiers: msg.sender
});
emit DeathVerified(subjectId, certHash);
}
}
// Active Identities: 0 // Deceased: 0 // Pending Verification: 0
// No events yet // Start a test to see events here