contracts/README.md
Edut LLC 64a6f0154e
Some checks are pending
check / contracts (push) Waiting to run
privacy: sanitize deploy metadata and local references
2026-02-20 13:43:50 -08:00

5.1 KiB

EDUT Contracts

On-chain contracts and deployment artifacts for EDUT ID and entitlements.

Scope

  1. EDUT ID contract (soulbound governance identity).
  2. Offer + entitlement settlement contract for fixed-SKU purchases.
  3. ABI and deployment artifact publication.
  4. Last Light continuity-release controller (guardian threshold + EIP-712 signatures).

Current Contract

contracts/EdutHumanMembership.sol

Features:

  1. One-time soulbound human token mint (EDUT ID, symbol EID).
  2. Gas-only mint path (no platform fee, no treasury transfer).
  3. Sponsor mint support (mintMembership(recipient)) where sponsor only pays gas.
  4. Membership status lifecycle (ACTIVE/SUSPENDED/REVOKED) for runtime gates.

contracts/EdutOfferEntitlement.sol

Features:

  1. Membership-gated entitlement purchases.
  2. Owner-configurable offer registry (upsertOffer).
  3. Fixed USDC settlement support (ETH optional if payment token is zero address).

contracts/LastLightController.sol

  1. Guardian-threshold (M-of-N) continuity release controller.
  2. Two-phase trigger (arm then execute) with timelock.
  3. EIP-712 typed-signature quorum for arm/cancel/execute.
  4. On-chain execution event for publicly verifiable continuity trigger.
  5. Deterministic entitlement id sequence with state lifecycle (ACTIVE/SUSPENDED/REVOKED).
  6. Emits offer + entitlement events for backend reconciliation.

Local Commands

Use a Hardhat-supported Node runtime (20.x recommended).

  1. npm install
  2. npm run build
  3. npm run test
  4. npm run check:addresses
  5. npm run deploy:sepolia
  6. npm run deploy:mainnet
  7. npm run deploy:entitlement:sepolia
  8. npm run deploy:entitlement:mainnet
  9. npm run deploy:lastlight:sepolia
  10. npm run deploy:lastlight:mainnet
  11. npm run smoke:funding:sepolia
  12. npm run lastlight:eip712:sepolia

make check wraps build + tests.

Deployment Environment

Copy .env.example values into your shell/session before deploy:

  1. DEPLOYER_PRIVATE_KEY
  2. BASE_SEPOLIA_RPC_URL / BASE_MAINNET_RPC_URL
  3. MINT_CURRENCY_ADDRESS (use zero address for gas-only EDUT ID mint)
  4. MINT_AMOUNT_ATOMIC (set to 0 for gas-only EDUT ID mint)
  5. DEPLOY_OUTPUT_PATH (optional)
  6. ENTITLEMENT_TREASURY_WALLET
  7. MEMBERSHIP_CONTRACT_ADDRESS
  8. PAYMENT_TOKEN_ADDRESS
  9. OFFER_PRICE_ATOMIC
  10. ENTITLEMENT_DEPLOY_OUTPUT_PATH (optional)
  11. OFFERS_JSON (optional path to per-offer seed config JSON)
  12. OFFERS_INLINE_JSON (optional inline JSON array alternative to OFFERS_JSON)
  13. SEED_RETRIES (optional, default 2)
  14. SEED_RETRY_DELAY_MS (optional, default 1200)
  15. SEED_ONLY (optional, true attaches to an existing entitlement contract and only seeds offers)
  16. ENTITLEMENT_CONTRACT_ADDRESS (required when SEED_ONLY=true)
  17. LASTLIGHT_GUARDIANS (required for Last Light deployment, comma-separated guardian addresses)
  18. LASTLIGHT_THRESHOLD (optional, default 3, must be <= guardian count)
  19. LASTLIGHT_DEPLOY_OUTPUT_PATH (optional deployment output JSON path)

If no offer override JSON is provided, deploy script seeds default offers at OFFER_PRICE_ATOMIC. Use deploy/offers.template.json to define per-offer prices and policy flags.

Smoke flow optional vars:

  1. E2E_IDENTITY_ASSURANCE_LEVEL
  2. E2E_IDENTITY_ATTESTED_BY
  3. E2E_IDENTITY_ATTESTATION_ID
  4. E2E_OFFER_ID
  5. E2E_ORG_ROOT_ID
  6. E2E_PRINCIPAL_ID
  7. E2E_PRINCIPAL_ROLE
  8. E2E_WORKSPACE_ID
  9. E2E_DEVICE_ID
  10. E2E_PLATFORM
  11. E2E_LAUNCHER_VERSION
  12. E2E_GAS_LIMIT (optional fixed gas limit, default 300000)
  13. E2E_GAS_PRICE_WEI (optional fixed gas price)
  14. SMOKE_MIN_GAS_PRICE_WEI (optional threshold floor for funding estimator, default 1000000000)

Last Light EIP-712 flow vars:

  1. LASTLIGHT_ACTION (arm, cancel, or execute)
  2. LASTLIGHT_CONTRACT_ADDRESS
  3. LASTLIGHT_RELEASE_ID (bytes32 or plain string to hash)
  4. LASTLIGHT_GUARDIAN_PRIVATE_KEYS (comma-separated private keys for signing)
  5. LASTLIGHT_DEADLINE_SECONDS (optional, default 3600)
  6. LASTLIGHT_REASON_HASH (arm/cancel, optional bytes32 or plain string)
  7. LASTLIGHT_DECRYPTION_KEY (execute, required)
  8. LASTLIGHT_MANIFEST_REF_HASH (execute, optional bytes32 or plain string)

Example (Sepolia):

cd <home>/Documents/VSG\ Codex/contracts
export $(grep -v '^#' .env | xargs)
npm run deploy:sepolia

Full control-plane smoke (EDUT ID + marketplace + governance install/status):

cd <home>/Documents/VSG\ Codex/contracts
export $(grep -v '^#' .env | xargs)
npm run smoke:e2e:controlplane:sepolia

Offer readback verification against deployed entitlement contract:

cd <home>/Documents/VSG\ Codex/contracts
export BASE_SEPOLIA_RPC_URL="https://base-sepolia.g.alchemy.com/v2/<key>"
export ENTITLEMENT_CONTRACT_ADDRESS="0x..."
npm run verify:offers:sepolia

Sepolia smoke funding threshold from live fee data:

cd <home>/Documents/VSG\ Codex/contracts
export BASE_SEPOLIA_RPC_URL="https://base-sepolia.g.alchemy.com/v2/<key>"
npm run smoke:funding:sepolia

Boundary

Contracts are settlement primitives. Runtime execution remains off-chain and fail-closed by entitlement state.