Files
fhe/examples/encrypted-crdt/tasks/get-register.ts
T
Zach Kelling 961c42e204 feat: add FHE example apps for all Pars PIPs
- data-seal: Verifiable Data Integrity Seal (PIP-0010/LP-0535)
  FHE-encrypted tamper-proof sealing with Public/ZK/Private modes,
  batch sealing, homomorphic verification

- content-provenance: AI & Media Content Provenance (PIP-0011/LP-7110)
  Model manifests, output attestation via homomorphic comparison,
  media derivation DAGs

- encrypted-crdt: Encrypted CRDT (PIP-0013/LP-6500)
  LWW-Register with FHE values, OR-Set with tag-based add/remove,
  Lamport timestamp conflict resolution, deterministic merge

- shadow-governance: Shadow Government Protocol (PIP-7010)
  Anonymous ministries, encrypted voting with homomorphic tallying,
  nullifier-based anti-fraud, quorum enforcement

Each example includes Solidity contracts, Hardhat tests, CLI tasks,
and README linking to corresponding PIP and LP specifications.
2026-02-13 14:16:46 -08:00

43 lines
1.3 KiB
TypeScript

import { task } from "hardhat/config";
task("task:get-register", "Get register info and request decryption")
.addParam("contract", "EncryptedCRDT contract address")
.addParam("doc", "Document ID")
.addParam("field", "Field name")
.setAction(async ({ contract, doc, field }, hre) => {
const [signer] = await hre.ethers.getSigners();
const crdt = await hre.ethers.getContractAt("EncryptedCRDT", contract);
const regId = hre.ethers.keccak256(
hre.ethers.solidityPacked(["string", "string"], [doc, field])
);
const info = await crdt.getRegisterInfo(regId);
if (!info.exists) {
console.log("Register not found.");
return;
}
console.log("Register:", {
timestamp: info.timestamp.toString(),
lastWriter: info.lastWriter,
documentId: info.documentId,
});
// Request decryption
await crdt.connect(signer).decryptRegister(regId);
// Poll for result
let attempts = 0;
while (attempts < 10) {
const result = await crdt.getDecryptedRegister(regId);
if (result.ready) {
console.log("Decrypted value:", result.value.toString());
return;
}
await new Promise((r) => setTimeout(r, 2000));
attempts++;
}
console.log("Decryption pending.");
});