contracts/README.md

2.5 KiB

EDUT Contracts

On-chain contracts and deployment artifacts for membership and entitlements.

Scope

  1. Human membership contract (soulbound governance identity).
  2. Offer + entitlement settlement contract for fixed-SKU purchases.
  3. ABI and deployment artifact publication.

Current Contract

contracts/EdutHumanMembership.sol

Features:

  1. One-time soulbound human token mint.
  2. Sponsor mint support (mintMembership(recipient) can be paid by inviter/company wallet).
  3. Owner-configurable flat mint price (updateMintPrice), launch default is fixed 100 USDC (6 decimals).
  4. Membership status lifecycle (ACTIVE/SUSPENDED/REVOKED) for runtime gates.
  5. Treasury address control for settlement routing.

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).
  4. Deterministic entitlement id sequence with state lifecycle (ACTIVE/SUSPENDED/REVOKED).
  5. 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 deploy:sepolia
  5. npm run deploy:mainnet
  6. npm run deploy:entitlement:sepolia
  7. npm run deploy:entitlement:mainnet

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. TREASURY_WALLET
  4. MINT_CURRENCY_ADDRESS (USDC token contract on target chain)
  5. MINT_AMOUNT_ATOMIC
  6. DEPLOY_OUTPUT_PATH (optional)
  7. ENTITLEMENT_TREASURY_WALLET
  8. MEMBERSHIP_CONTRACT_ADDRESS
  9. PAYMENT_TOKEN_ADDRESS
  10. OFFER_PRICE_ATOMIC
  11. ENTITLEMENT_DEPLOY_OUTPUT_PATH (optional)
  12. OFFERS_JSON (optional path to per-offer seed config JSON)
  13. OFFERS_INLINE_JSON (optional inline JSON array alternative to OFFERS_JSON)

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

Example (Sepolia):

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

Boundary

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