contracts: accept edut_id_required offer config alias
Some checks are pending
check / contracts (push) Waiting to run

This commit is contained in:
Edut LLC 2026-02-20 16:17:40 -08:00
parent 54eaadb7c7
commit c3fd532a8b
3 changed files with 36 additions and 9 deletions

View File

@ -3,6 +3,7 @@
"offer_id": "edut.solo.core", "offer_id": "edut.solo.core",
"price_atomic": "1000000000", "price_atomic": "1000000000",
"active": true, "active": true,
"edut_id_required": true,
"membership_required": true, "membership_required": true,
"execution_profile": { "execution_profile": {
"connector_surface": "hybrid", "connector_surface": "hybrid",
@ -14,6 +15,7 @@
"offer_id": "edut.workspace.core", "offer_id": "edut.workspace.core",
"price_atomic": "1000000000", "price_atomic": "1000000000",
"active": true, "active": true,
"edut_id_required": true,
"membership_required": true, "membership_required": true,
"execution_profile": { "execution_profile": {
"connector_surface": "hybrid", "connector_surface": "hybrid",
@ -25,6 +27,7 @@
"offer_id": "edut.workspace.ai", "offer_id": "edut.workspace.ai",
"price_atomic": "1000000000", "price_atomic": "1000000000",
"active": true, "active": true,
"edut_id_required": true,
"membership_required": true, "membership_required": true,
"execution_profile": { "execution_profile": {
"connector_surface": "hybrid", "connector_surface": "hybrid",
@ -36,6 +39,7 @@
"offer_id": "edut.workspace.lane24", "offer_id": "edut.workspace.lane24",
"price_atomic": "1000000000", "price_atomic": "1000000000",
"active": true, "active": true,
"edut_id_required": true,
"membership_required": true, "membership_required": true,
"execution_profile": { "execution_profile": {
"connector_surface": "edut_native", "connector_surface": "edut_native",
@ -46,6 +50,7 @@
"offer_id": "edut.workspace.sovereign", "offer_id": "edut.workspace.sovereign",
"price_atomic": "1000000000", "price_atomic": "1000000000",
"active": true, "active": true,
"edut_id_required": true,
"membership_required": true, "membership_required": true,
"execution_profile": { "execution_profile": {
"connector_surface": "edut_native", "connector_surface": "edut_native",

View File

@ -90,6 +90,7 @@ function buildOfferPlan(defaultPriceAtomic) {
offerID, offerID,
priceAtomic: defaultPriceAtomic, priceAtomic: defaultPriceAtomic,
active: true, active: true,
edutIDRequired: true,
membershipRequired: true, membershipRequired: true,
})); }));
} }
@ -110,9 +111,13 @@ function buildOfferPlan(defaultPriceAtomic) {
).trim(); ).trim();
const priceAtomic = parseUint(`offer[${offerID}].price_atomic`, rawPrice); const priceAtomic = parseUint(`offer[${offerID}].price_atomic`, rawPrice);
const active = entry.active !== undefined ? Boolean(entry.active) : true; const active = entry.active !== undefined ? Boolean(entry.active) : true;
const membershipRequired = const edutIDRequired =
entry.membership_required !== undefined ? Boolean(entry.membership_required) : true; entry.edut_id_required !== undefined
return { offerID, priceAtomic, active, membershipRequired }; ? 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 { return {
priceAtomic: configResult.priceAtomic.toString(), priceAtomic: configResult.priceAtomic.toString(),
active: Boolean(configResult.active), active: Boolean(configResult.active),
edutIDRequired: Boolean(configResult.membershipRequired),
membershipRequired: Boolean(configResult.membershipRequired), membershipRequired: Boolean(configResult.membershipRequired),
exists: Boolean(configResult.exists), exists: Boolean(configResult.exists),
}; };
@ -134,7 +140,8 @@ function offerConfigMatches(current, expected) {
current.exists && current.exists &&
current.priceAtomic === expected.priceAtomic.toString() && current.priceAtomic === expected.priceAtomic.toString() &&
current.active === expected.active && 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.offerID,
offer.priceAtomic, offer.priceAtomic,
offer.active, offer.active,
offer.membershipRequired offer.edutIDRequired
); );
const receipt = await tx.wait(); const receipt = await tx.wait();
const cfg = normalizeOfferConfig(await contract.offerConfig(offer.offerID)); const cfg = normalizeOfferConfig(await contract.offerConfig(offer.offerID));
@ -232,6 +239,7 @@ async function main() {
offerID: offer.offerID, offerID: offer.offerID,
priceAtomic: offer.priceAtomic.toString(), priceAtomic: offer.priceAtomic.toString(),
active: offer.active, active: offer.active,
edutIDRequired: offer.edutIDRequired,
membershipRequired: offer.membershipRequired, membershipRequired: offer.membershipRequired,
status: "already_aligned", status: "already_aligned",
attempts: 0, attempts: 0,
@ -241,7 +249,7 @@ async function main() {
offer.offerID, offer.offerID,
offer.priceAtomic.toString(), offer.priceAtomic.toString(),
offer.active, offer.active,
offer.membershipRequired offer.edutIDRequired
); );
continue; continue;
} }
@ -250,6 +258,7 @@ async function main() {
offerID: offer.offerID, offerID: offer.offerID,
priceAtomic: offer.priceAtomic.toString(), priceAtomic: offer.priceAtomic.toString(),
active: offer.active, active: offer.active,
edutIDRequired: offer.edutIDRequired,
membershipRequired: offer.membershipRequired, membershipRequired: offer.membershipRequired,
status: seeded.status, status: seeded.status,
attempts: seeded.attempts, attempts: seeded.attempts,
@ -260,7 +269,7 @@ async function main() {
offer.offerID, offer.offerID,
offer.priceAtomic.toString(), offer.priceAtomic.toString(),
offer.active, offer.active,
offer.membershipRequired, offer.edutIDRequired,
seeded.txHash, seeded.txHash,
`attempts=${seeded.attempts}` `attempts=${seeded.attempts}`
); );

View File

@ -66,8 +66,18 @@ function loadExpectedOffers() {
offerId, offerId,
priceAtomic, priceAtomic,
active: entry.active === undefined ? true : Boolean(entry.active), 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: 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), exists: Boolean(cfg.exists),
priceAtomic: cfg.priceAtomic.toString(), priceAtomic: cfg.priceAtomic.toString(),
active: Boolean(cfg.active), active: Boolean(cfg.active),
edutIDRequired: Boolean(cfg.membershipRequired),
membershipRequired: Boolean(cfg.membershipRequired), membershipRequired: Boolean(cfg.membershipRequired),
}; };
const expected = { const expected = {
exists: true, exists: true,
priceAtomic: offer.priceAtomic, priceAtomic: offer.priceAtomic,
active: offer.active, active: offer.active,
edutIDRequired: offer.edutIDRequired,
membershipRequired: offer.membershipRequired, membershipRequired: offer.membershipRequired,
}; };
const match = const match =
got.exists === expected.exists && got.exists === expected.exists &&
got.priceAtomic === expected.priceAtomic && got.priceAtomic === expected.priceAtomic &&
got.active === expected.active && got.active === expected.active &&
got.membershipRequired === expected.membershipRequired; got.membershipRequired === expected.membershipRequired &&
got.edutIDRequired === expected.edutIDRequired;
if (!match) { if (!match) {
mismatches.push({ mismatches.push({
offer_id: offer.offerId, offer_id: offer.offerId,