diff --git a/deploy/offers.template.json b/deploy/offers.template.json index 21272d8..aa86a63 100644 --- a/deploy/offers.template.json +++ b/deploy/offers.template.json @@ -3,6 +3,7 @@ "offer_id": "edut.solo.core", "price_atomic": "1000000000", "active": true, + "edut_id_required": true, "membership_required": true, "execution_profile": { "connector_surface": "hybrid", @@ -14,6 +15,7 @@ "offer_id": "edut.workspace.core", "price_atomic": "1000000000", "active": true, + "edut_id_required": true, "membership_required": true, "execution_profile": { "connector_surface": "hybrid", @@ -25,6 +27,7 @@ "offer_id": "edut.workspace.ai", "price_atomic": "1000000000", "active": true, + "edut_id_required": true, "membership_required": true, "execution_profile": { "connector_surface": "hybrid", @@ -36,6 +39,7 @@ "offer_id": "edut.workspace.lane24", "price_atomic": "1000000000", "active": true, + "edut_id_required": true, "membership_required": true, "execution_profile": { "connector_surface": "edut_native", @@ -46,6 +50,7 @@ "offer_id": "edut.workspace.sovereign", "price_atomic": "1000000000", "active": true, + "edut_id_required": true, "membership_required": true, "execution_profile": { "connector_surface": "edut_native", diff --git a/scripts/deploy-entitlement.cjs b/scripts/deploy-entitlement.cjs index bd24846..60fc4e9 100644 --- a/scripts/deploy-entitlement.cjs +++ b/scripts/deploy-entitlement.cjs @@ -90,6 +90,7 @@ function buildOfferPlan(defaultPriceAtomic) { offerID, priceAtomic: defaultPriceAtomic, active: true, + edutIDRequired: true, membershipRequired: true, })); } @@ -110,9 +111,13 @@ function buildOfferPlan(defaultPriceAtomic) { ).trim(); const priceAtomic = parseUint(`offer[${offerID}].price_atomic`, rawPrice); const active = entry.active !== undefined ? Boolean(entry.active) : true; - const membershipRequired = - entry.membership_required !== undefined ? Boolean(entry.membership_required) : true; - return { offerID, priceAtomic, active, membershipRequired }; + const edutIDRequired = + entry.edut_id_required !== undefined + ? Boolean(entry.edut_id_required) + : entry.membership_required !== undefined + ? Boolean(entry.membership_required) + : true; + return { offerID, priceAtomic, active, edutIDRequired, membershipRequired: edutIDRequired }; }); } @@ -124,6 +129,7 @@ function normalizeOfferConfig(configResult) { return { priceAtomic: configResult.priceAtomic.toString(), active: Boolean(configResult.active), + edutIDRequired: Boolean(configResult.membershipRequired), membershipRequired: Boolean(configResult.membershipRequired), exists: Boolean(configResult.exists), }; @@ -134,7 +140,8 @@ function offerConfigMatches(current, expected) { current.exists && current.priceAtomic === expected.priceAtomic.toString() && current.active === expected.active && - current.membershipRequired === expected.membershipRequired + current.membershipRequired === expected.membershipRequired && + current.edutIDRequired === expected.edutIDRequired ); } @@ -146,7 +153,7 @@ async function upsertOfferWithRetry(contract, offer, retries, retryDelayMs) { offer.offerID, offer.priceAtomic, offer.active, - offer.membershipRequired + offer.edutIDRequired ); const receipt = await tx.wait(); const cfg = normalizeOfferConfig(await contract.offerConfig(offer.offerID)); @@ -232,6 +239,7 @@ async function main() { offerID: offer.offerID, priceAtomic: offer.priceAtomic.toString(), active: offer.active, + edutIDRequired: offer.edutIDRequired, membershipRequired: offer.membershipRequired, status: "already_aligned", attempts: 0, @@ -241,7 +249,7 @@ async function main() { offer.offerID, offer.priceAtomic.toString(), offer.active, - offer.membershipRequired + offer.edutIDRequired ); continue; } @@ -250,6 +258,7 @@ async function main() { offerID: offer.offerID, priceAtomic: offer.priceAtomic.toString(), active: offer.active, + edutIDRequired: offer.edutIDRequired, membershipRequired: offer.membershipRequired, status: seeded.status, attempts: seeded.attempts, @@ -260,7 +269,7 @@ async function main() { offer.offerID, offer.priceAtomic.toString(), offer.active, - offer.membershipRequired, + offer.edutIDRequired, seeded.txHash, `attempts=${seeded.attempts}` ); diff --git a/scripts/verify-offer-config-readback.cjs b/scripts/verify-offer-config-readback.cjs index 6def7c1..c4f35f7 100644 --- a/scripts/verify-offer-config-readback.cjs +++ b/scripts/verify-offer-config-readback.cjs @@ -66,8 +66,18 @@ function loadExpectedOffers() { offerId, priceAtomic, active: entry.active === undefined ? true : Boolean(entry.active), + edutIDRequired: + entry.edut_id_required !== undefined + ? Boolean(entry.edut_id_required) + : entry.membership_required === undefined + ? true + : Boolean(entry.membership_required), membershipRequired: - entry.membership_required === undefined ? true : Boolean(entry.membership_required), + entry.edut_id_required !== undefined + ? Boolean(entry.edut_id_required) + : entry.membership_required === undefined + ? true + : Boolean(entry.membership_required), }; }); } @@ -90,19 +100,22 @@ async function main() { exists: Boolean(cfg.exists), priceAtomic: cfg.priceAtomic.toString(), active: Boolean(cfg.active), + edutIDRequired: Boolean(cfg.membershipRequired), membershipRequired: Boolean(cfg.membershipRequired), }; const expected = { exists: true, priceAtomic: offer.priceAtomic, active: offer.active, + edutIDRequired: offer.edutIDRequired, membershipRequired: offer.membershipRequired, }; const match = got.exists === expected.exists && got.priceAtomic === expected.priceAtomic && got.active === expected.active && - got.membershipRequired === expected.membershipRequired; + got.membershipRequired === expected.membershipRequired && + got.edutIDRequired === expected.edutIDRequired; if (!match) { mismatches.push({ offer_id: offer.offerId,