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",
"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",

View File

@ -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}`
);

View File

@ -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,