Go to file
2026-02-18 20:26:24 -08:00
.gitea/workflows Add contracts CI workflow 2026-02-17 20:55:08 -08:00
abi Add contracts conformance vectors and artifact readmes 2026-02-17 14:39:49 -08:00
contracts Add membership-gated offer entitlement contract and deploy script 2026-02-18 13:25:09 -08:00
deploy Annotate offer deploy templates with pacing profile metadata 2026-02-18 20:26:24 -08:00
docs Expand contract conformance vectors for sponsor and USDC paths 2026-02-18 14:20:06 -08:00
scripts Extend e2e membership smoke flow for assurance metadata 2026-02-18 14:24:05 -08:00
test Add membership-gated offer entitlement contract and deploy script 2026-02-18 13:25:09 -08:00
.env.example Add membership-gated offer entitlement contract and deploy script 2026-02-18 13:25:09 -08:00
.gitignore Add membership contract, deployment scripts, and Base network config 2026-02-17 20:48:49 -08:00
.nvmrc Harden membership deploy script with env validation and output metadata 2026-02-18 07:11:08 -08:00
hardhat.config.cjs Add membership contract, deployment scripts, and Base network config 2026-02-17 20:48:49 -08:00
Makefile Add membership contract, deployment scripts, and Base network config 2026-02-17 20:48:49 -08:00
package-lock.json Add membership contract, deployment scripts, and Base network config 2026-02-17 20:48:49 -08:00
package.json Add membership-gated offer entitlement contract and deploy script 2026-02-18 13:25:09 -08:00
README.md Extend e2e membership smoke flow for assurance metadata 2026-02-18 14:24:05 -08:00

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.