@dust-dice/verifier 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contracts.d.ts +22 -4
- package/dist/contracts.js +34 -16
- package/dist/contracts.js.map +1 -1
- package/dist/indexer.d.ts +18 -13
- package/dist/indexer.js +110 -43
- package/dist/indexer.js.map +1 -1
- package/dist/verify.js +257 -68
- package/dist/verify.js.map +1 -1
- package/package.json +8 -8
- package/src/contracts.ts +41 -17
- package/src/indexer.ts +145 -55
- package/src/verify.ts +6 -6
package/dist/verify.js
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* having replayed every earlier round in order;
|
|
26
26
|
* 4. every score, recomputed from the dice with api/src/rules.ts -- the contract-canonical
|
|
27
27
|
* rules engine, not the circuit -- matches the scorecard the chain holds, box by box,
|
|
28
|
-
* including the upper bonus and the
|
|
28
|
+
* including the upper bonus and the five-of-a-kind bonuses;
|
|
29
29
|
* 5. the winner the tie-break selects, among SURVIVORS, is the seat the chain paid;
|
|
30
30
|
* 6. the settle transaction spent ZERO user inputs and created exactly the two expected
|
|
31
31
|
* outputs, to the addresses recorded at join and at construction.
|
|
@@ -101,40 +101,61 @@ class Checks {
|
|
|
101
101
|
console.log(` - ${f}`);
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
+
/** The calls a turn is made of, merged into one transaction or spread over several. */
|
|
105
|
+
const TURN_CALLS = new Set([
|
|
106
|
+
'playerMove',
|
|
107
|
+
'resolveRoll1',
|
|
108
|
+
'resolveRoll2',
|
|
109
|
+
'resolveRoll3',
|
|
110
|
+
'resolveReroll',
|
|
111
|
+
]);
|
|
104
112
|
/**
|
|
105
|
-
*
|
|
113
|
+
* Causal order for two transactions that landed in the same block. Not a guess: the contract's
|
|
114
|
+
* own preconditions force it -- a seat joins before it can move, every live seat must have
|
|
115
|
+
* scored before `closeRound` is accepted, and `settle` precedes the `redeem`s it funds.
|
|
116
|
+
*/
|
|
117
|
+
const GROUP_RANK = {
|
|
118
|
+
join: 0,
|
|
119
|
+
playerMove: 1,
|
|
120
|
+
resolveRoll1: 1,
|
|
121
|
+
resolveRoll2: 1,
|
|
122
|
+
resolveRoll3: 1,
|
|
123
|
+
resolveReroll: 1,
|
|
124
|
+
eliminate: 2,
|
|
125
|
+
closeRound: 3,
|
|
126
|
+
settle: 4,
|
|
127
|
+
redeem: 5,
|
|
128
|
+
abortTable: 6,
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Read the table's whole history: every transaction, and the state it left behind.
|
|
106
132
|
*
|
|
107
|
-
* One
|
|
108
|
-
*
|
|
109
|
-
*
|
|
133
|
+
* One state read per transaction, pinned to that transaction. `contractStateObservable` is not
|
|
134
|
+
* usable for this -- it misses rapid successive updates and its first emission may predate the
|
|
135
|
+
* write being read (bugs-found.md §0 #10).
|
|
110
136
|
*/
|
|
111
137
|
async function readHistory(address) {
|
|
112
|
-
const actions = await contractActions(address);
|
|
113
|
-
const
|
|
114
|
-
for (const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
138
|
+
const actions = (await contractActions(address)).filter((a) => a.kind !== 'ContractDeploy');
|
|
139
|
+
const byTx = new Map();
|
|
140
|
+
for (const a of actions)
|
|
141
|
+
byTx.set(a.txHash, [...(byTx.get(a.txHash) ?? []), a]);
|
|
142
|
+
const groups = [];
|
|
143
|
+
for (const [txHash, calls] of byTx) {
|
|
144
|
+
groups.push({
|
|
145
|
+
blockHeight: calls[0].blockHeight,
|
|
146
|
+
txHash,
|
|
147
|
+
entryPoints: calls.map((x) => x.entryPoint ?? '?'),
|
|
148
|
+
led: await readTableLedger(address, { txHash }),
|
|
149
|
+
sharesBlock: false,
|
|
150
|
+
});
|
|
118
151
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// A table CAN take several calls in one block -- that is the whole point of the concurrency
|
|
125
|
-
// work, measured at six in docs/concurrency-probe.md -- so this is a real limitation of
|
|
126
|
-
// per-block state replay and not a property of the contract. The demo driver is strictly
|
|
127
|
-
// sequential precisely so that its games stay verifiable by this method; a table played by six
|
|
128
|
-
// independent clients may not be. Saying so is much better than silently producing wrong
|
|
129
|
-
// answers.
|
|
130
|
-
const heights = steps.map((s) => s.action.blockHeight);
|
|
131
|
-
const collisions = heights.filter((h, i) => heights.indexOf(h) !== i);
|
|
132
|
-
if (collisions.length > 0) {
|
|
133
|
-
throw new Error(`two or more calls to this table share block ${[...new Set(collisions)].join(', ')}. ` +
|
|
134
|
-
'The per-block state replay cannot separate them, so this table cannot be verified by ' +
|
|
135
|
-
'this method. (This is a limitation of the verifier, not a fault in the game.)');
|
|
152
|
+
groups.sort((a, b) => a.blockHeight !== b.blockHeight
|
|
153
|
+
? a.blockHeight - b.blockHeight
|
|
154
|
+
: (GROUP_RANK[a.entryPoints[0] ?? '?'] ?? 9) - (GROUP_RANK[b.entryPoints[0] ?? '?'] ?? 9));
|
|
155
|
+
for (const g of groups) {
|
|
156
|
+
g.sharesBlock = groups.some((o) => o !== g && o.blockHeight === g.blockHeight);
|
|
136
157
|
}
|
|
137
|
-
return
|
|
158
|
+
return groups;
|
|
138
159
|
}
|
|
139
160
|
/** The seat whose `seatTurn` entry changed between two states, or -1. */
|
|
140
161
|
function movedSeat(prev, led) {
|
|
@@ -152,7 +173,7 @@ function seatCard(led, seat) {
|
|
|
152
173
|
const c = led.seatCard.lookup(BigInt(seat));
|
|
153
174
|
return {
|
|
154
175
|
scores: c.filled.map((f, i) => (f ? Number(c.scores[i]) : null)),
|
|
155
|
-
|
|
176
|
+
fiveOfAKindBonuses: Number(c.fiveOfAKindBonuses),
|
|
156
177
|
};
|
|
157
178
|
}
|
|
158
179
|
function arrayEq(a, b) {
|
|
@@ -186,10 +207,14 @@ async function verify(address, verbose) {
|
|
|
186
207
|
// table — a fast table's turn lands as one composed transaction, so its ordering is the
|
|
187
208
|
// operator's attestation.
|
|
188
209
|
console.log(` mode ${final.fastMode ? 'FAST (turn ordering operator-attested)' : 'on-chain (ordering chain-proven)'}`);
|
|
189
|
-
|
|
210
|
+
// A table that never settled is NOT a failed verification: an aborted or still-playing table
|
|
211
|
+
// has not revealed its seed, so there is nothing to replay yet. Saying "FAILED" here would
|
|
212
|
+
// read as an accusation about a game that simply is not over.
|
|
190
213
|
if (final.phase !== Table.Phase.settled) {
|
|
191
|
-
|
|
192
|
-
|
|
214
|
+
console.log(`\nNOT VERIFIABLE YET: this table is ${Table.Phase[final.phase]}. Only a settled table ` +
|
|
215
|
+
'reveals the seed,\nand without the seed no roll can be re-derived. Nothing here says ' +
|
|
216
|
+
'the game was dishonest.');
|
|
217
|
+
return 3;
|
|
193
218
|
}
|
|
194
219
|
// ---------------------------------------------------------------- 1. the seed opens the commit
|
|
195
220
|
console.log('\n── the revealed seed ──');
|
|
@@ -211,8 +236,9 @@ async function verify(address, verbose) {
|
|
|
211
236
|
}
|
|
212
237
|
c.ok('the revealed seed opens the commitment the table was deployed with', same(seedCommitmentTs(tableId, seed), final.seedCommitment), `H(tableId, seed) = ${hex(seedCommitmentTs(tableId, seed))}`);
|
|
213
238
|
// ------------------------------------------------------------------------- walk the public log
|
|
214
|
-
const
|
|
215
|
-
|
|
239
|
+
const groups = await readHistory(address);
|
|
240
|
+
const callCount = groups.reduce((n, g) => n + g.entryPoints.length, 0);
|
|
241
|
+
console.log(`\n── the public log: ${callCount} calls in ${groups.length} transaction(s) ──`);
|
|
216
242
|
let digest = genesisDigestTs(tableId);
|
|
217
243
|
const seats = Array.from({ length: seatCount }, () => ({
|
|
218
244
|
card: emptyScorecard(),
|
|
@@ -228,13 +254,139 @@ async function verify(address, verbose) {
|
|
|
228
254
|
let rollChecks = 0;
|
|
229
255
|
let closes = 0;
|
|
230
256
|
let eliminations = 0;
|
|
231
|
-
/** State immediately before the
|
|
232
|
-
const before = (i) => (i === 0 ? undefined :
|
|
233
|
-
|
|
234
|
-
|
|
257
|
+
/** State immediately before the group being examined -- the previous group's, or the deploy's. */
|
|
258
|
+
const before = (i) => (i === 0 ? undefined : groups[i - 1].led);
|
|
259
|
+
/** Turn calls this replay could not separate. Non-empty means the verdict is not a clean one. */
|
|
260
|
+
const unseparable = [];
|
|
261
|
+
/** Seats whose redemption has already been accounted for, so a second one is not double-read. */
|
|
262
|
+
const redeemed = new Set();
|
|
263
|
+
/**
|
|
264
|
+
* A whole turn in ONE transaction -- the fast path, and the shape every fast table has.
|
|
265
|
+
*
|
|
266
|
+
* The chain never stored a state between the calls, so there is no "before" to diff. It does
|
|
267
|
+
* not need one: everything the turn consumed is still on the ledger afterwards -- the seat's
|
|
268
|
+
* entropy, the mixed entropy latched at roll 1, both hold masks, the last roll (`SeatTurn`) --
|
|
269
|
+
* and how many rolls the turn took is the transaction's own call count (one `resolveRoll1`
|
|
270
|
+
* plus N `resolveReroll` is N+1 rolls, against N+2 `playerMove`s: open, N holds, score).
|
|
271
|
+
*
|
|
272
|
+
* The roll chain is a hash chain: roll 2 is derived from roll 1 under the player's mask, roll 3
|
|
273
|
+
* from roll 2. So if roll 1 or roll 2 were not what the operator claimed, the LAST roll could
|
|
274
|
+
* not match the one the chain stored. Checking the end of the chain checks all of it.
|
|
275
|
+
*
|
|
276
|
+
* Reading only this seat's fields is what makes it sound when two seats settle in the same
|
|
277
|
+
* block: their turns touch disjoint cells, and the digest this replay folds is its own.
|
|
278
|
+
*/
|
|
279
|
+
const verifyMergedTurn = (g) => {
|
|
280
|
+
const led = g.led;
|
|
281
|
+
const moves = g.entryPoints.filter((k) => k === 'playerMove').length;
|
|
282
|
+
const firsts = g.entryPoints.filter((k) => k === 'resolveRoll1').length;
|
|
283
|
+
const rerolls = g.entryPoints.filter((k) => k === 'resolveReroll' || k === 'resolveRoll2' || k === 'resolveRoll3').length;
|
|
284
|
+
const rolls = firsts + rerolls;
|
|
285
|
+
const where = `tx ${g.txHash.slice(0, 10)}… (block ${g.blockHeight})`;
|
|
286
|
+
if (firsts !== 1 || moves !== rolls + 1) {
|
|
287
|
+
c.ok(`${where}: reads as one turn`, false, `${moves} playerMove + ${firsts} resolveRoll1 + ${rerolls} reroll is not ` +
|
|
288
|
+
'open/(hold,resolve)*/score');
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// WHICH SEAT. The candidates are the seats whose chain card holds a box this replay has not
|
|
292
|
+
// applied yet. With one candidate there is nothing to choose; with two (two seats settling
|
|
293
|
+
// in the same block) the roll derivation itself decides, since a wrong pairing cannot
|
|
294
|
+
// reproduce the stored roll.
|
|
295
|
+
const filled = (card) => card.scores.filter((x) => x !== null).length;
|
|
296
|
+
const candidates = [];
|
|
297
|
+
for (let s = 0; s < seatCount; s++) {
|
|
298
|
+
if (filled(seatCard(led, s)) > filled(seats[s].card))
|
|
299
|
+
candidates.push(s);
|
|
300
|
+
}
|
|
301
|
+
if (candidates.length === 0) {
|
|
302
|
+
c.ok(`${where}: a seat's card gained a box`, false, 'no seat advanced');
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
/** Re-derive the whole roll chain for one candidate; returns the final dice, or null. */
|
|
306
|
+
const deriveFor = (seat) => {
|
|
307
|
+
const turn = led.seatTurn.lookup(BigInt(seat));
|
|
308
|
+
const round = Number(turn.round);
|
|
309
|
+
const mixed = mixEntropyTs(turn.entropy, digest);
|
|
310
|
+
let dice = firstRollTs(tableId, seed, mixed, round);
|
|
311
|
+
for (let step = 1; step <= rerolls; step++) {
|
|
312
|
+
const mask = [...(step === 1 ? turn.hold1 : turn.hold2).bits];
|
|
313
|
+
dice = rerollUnderMaskTs(tableId, seed, mixed, round, step, mask, dice);
|
|
314
|
+
}
|
|
315
|
+
return arrayEq(diceToArray(turn.roll), dice) ? { round, mixed, dice } : null;
|
|
316
|
+
};
|
|
317
|
+
let seat = candidates[0];
|
|
318
|
+
let derived = deriveFor(seat);
|
|
319
|
+
if (derived === null && candidates.length > 1) {
|
|
320
|
+
for (const alt of candidates.slice(1)) {
|
|
321
|
+
const d = deriveFor(alt);
|
|
322
|
+
if (d !== null) {
|
|
323
|
+
seat = alt;
|
|
324
|
+
derived = d;
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
const turn = led.seatTurn.lookup(BigInt(seat));
|
|
330
|
+
const round = Number(turn.round);
|
|
331
|
+
const r = seats[seat];
|
|
332
|
+
opens += 1;
|
|
333
|
+
holds += rolls - 1;
|
|
334
|
+
rollChecks += rolls;
|
|
335
|
+
c.ok(`seat ${seat} r${round}: mixed entropy folds the frozen round digest`, same(turn.mixed, mixEntropyTs(turn.entropy, digest)), `chain ${hex(turn.mixed)}`);
|
|
336
|
+
c.ok(`seat ${seat} r${round}: all ${rolls} roll(s) re-derive, chained under the player's masks`, derived !== null, derived === null
|
|
337
|
+
? `chain stored ${diceToArray(turn.roll)} after ${rolls} roll(s); no derivation matches`
|
|
338
|
+
: '');
|
|
339
|
+
if (derived === null)
|
|
340
|
+
return;
|
|
341
|
+
r.roll = derived.dice;
|
|
342
|
+
r.rolls = rolls;
|
|
343
|
+
r.mixed = derived.mixed;
|
|
344
|
+
// SCORE. The category is whichever box the chain filled that this replay had not, and the
|
|
345
|
+
// placement is recomputed with the contract-canonical rules engine from the DERIVED dice.
|
|
346
|
+
const chainAfter = seatCard(led, seat);
|
|
347
|
+
const category = chainAfter.scores.findIndex((x, k) => x !== null && r.card.scores[k] === null);
|
|
348
|
+
c.ok(`seat ${seat} r${round}: score filled exactly one new category`, category >= 0 && filled(chainAfter) === filled(r.card) + 1, `category index ${category}`);
|
|
349
|
+
if (category >= 0) {
|
|
350
|
+
scores += 1;
|
|
351
|
+
r.card = applyScore(r.card, category, derived.dice);
|
|
352
|
+
for (let k = 0; k < CATEGORY_COUNT; k++) {
|
|
353
|
+
c.ok(`seat ${seat} r${round}: box ${k}`, r.card.scores[k] === chainAfter.scores[k], `replay ${r.card.scores[k]} vs chain ${chainAfter.scores[k]}`);
|
|
354
|
+
}
|
|
355
|
+
c.ok(`seat ${seat} r${round}: running total`, BigInt(grandTotal(r.card)) === led.seatProgress.lookup(BigInt(seat)).total, `replay ${grandTotal(r.card)} vs chain ${led.seatProgress.lookup(BigInt(seat)).total}`);
|
|
356
|
+
c.ok(`seat ${seat} r${round}: the dice the chain stored are the ones replayed`, arrayEq(diceToArray(led.seatProgress.lookup(BigInt(seat)).dice), derived.dice), `chain ${diceToArray(led.seatProgress.lookup(BigInt(seat)).dice)} vs replay ${derived.dice}`);
|
|
357
|
+
c.ok(`seat ${seat} r${round}: score advances the seat past the round`, Number(led.seatProgress.lookup(BigInt(seat)).round) === round + 1);
|
|
358
|
+
if (round === FINAL_ROUND)
|
|
359
|
+
r.finishedAtRound = round;
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
for (let i = 0; i < groups.length; i++) {
|
|
363
|
+
const g = groups[i];
|
|
364
|
+
const led = g.led;
|
|
235
365
|
const prev = before(i);
|
|
236
|
-
|
|
366
|
+
const isTurn = g.entryPoints.every((k) => TURN_CALLS.has(k));
|
|
367
|
+
// A turn merged into one transaction: checked against the state it produced.
|
|
368
|
+
if (isTurn && g.entryPoints.length > 1) {
|
|
369
|
+
verifyMergedTurn(g);
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
// A SINGLE turn call sharing its block with another transaction. The per-call replay below
|
|
373
|
+
// needs the state before the call, and in a shared block the previous group's state is the
|
|
374
|
+
// state after both. Recording that is honest; checking against the wrong state is not.
|
|
375
|
+
if (isTurn && g.sharesBlock) {
|
|
376
|
+
unseparable.push(`${g.entryPoints[0]} in block ${g.blockHeight}`);
|
|
377
|
+
continue;
|
|
378
|
+
}
|
|
379
|
+
switch (g.entryPoints[0]) {
|
|
237
380
|
case 'join': {
|
|
381
|
+
// A CALL THAT LANDED AND DID NOTHING. A transaction whose fallible section fails is
|
|
382
|
+
// still recorded in the public log, so a rejected join appears here with the seat count
|
|
383
|
+
// unmoved. Folding the digest for it would corrupt the chain from that point on (this
|
|
384
|
+
// replay counts joins itself rather than trusting one action to be one seat).
|
|
385
|
+
if (Number(led.seatCount) <= joins) {
|
|
386
|
+
console.log(` (a join in block ${g.blockHeight} left the seat count at ${joins} -- it landed ` +
|
|
387
|
+
'on chain but its fallible section failed; nothing to replay)');
|
|
388
|
+
break;
|
|
389
|
+
}
|
|
238
390
|
// Seat order is join order, so the seat this call took is the one that did not exist
|
|
239
391
|
// before it. The digest binds the seat's payout address and its entropy commitment.
|
|
240
392
|
const seat = Number(led.seatCount) - 1;
|
|
@@ -319,7 +471,7 @@ async function verify(address, verbose) {
|
|
|
319
471
|
const r = seats[seat];
|
|
320
472
|
const turn = led.seatTurn.lookup(BigInt(seat));
|
|
321
473
|
const chainDice = diceToArray(turn.roll);
|
|
322
|
-
if (
|
|
474
|
+
if (g.entryPoints[0] === 'resolveRoll1') {
|
|
323
475
|
// Roll 1 hashes the seat's declared entropy against the digest FROZEN AT ROUND OPEN --
|
|
324
476
|
// which is the digest the replay is holding right now, because it only advances at a
|
|
325
477
|
// closeRound. Getting that ordering wrong is the easiest way to make an unverifiable
|
|
@@ -366,9 +518,16 @@ async function verify(address, verbose) {
|
|
|
366
518
|
break;
|
|
367
519
|
}
|
|
368
520
|
case 'closeRound': {
|
|
369
|
-
|
|
521
|
+
// The round is the replay's own count of closes, so a close that landed without effect
|
|
522
|
+
// cannot shift the chain. `roundResults` is read AFTER the close, which is equivalent:
|
|
523
|
+
// `closeRound` only reads `seatProgress` (it writes the digest, the round and the
|
|
524
|
+
// deadline), so the per-seat cells it folded are unchanged by it.
|
|
525
|
+
const round = closes;
|
|
526
|
+
if (Number(led.openRound) !== round + 1) {
|
|
527
|
+
console.log(` (a closeRound in block ${g.blockHeight} left openRound at ${led.openRound} -- ` +
|
|
528
|
+
'it landed on chain without effect; nothing to replay)');
|
|
370
529
|
break;
|
|
371
|
-
|
|
530
|
+
}
|
|
372
531
|
// The ONE place the digest advances. All six slots, in SEAT ORDER, read at this block --
|
|
373
532
|
// which is what makes the replay independent of the order the chain saw the moves in.
|
|
374
533
|
digest = roundDigestTs(digest, round, seatCount, roundResults(led));
|
|
@@ -378,20 +537,27 @@ async function verify(address, verbose) {
|
|
|
378
537
|
break;
|
|
379
538
|
}
|
|
380
539
|
case 'eliminate': {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
540
|
+
// From the AFTER state, per seat: the seat this call took out is one the chain marks
|
|
541
|
+
// eliminated that the replay has not marked yet. The alternative — diffing against the
|
|
542
|
+
// previous group — is wrong the moment two seats are eliminated in one block, which is
|
|
543
|
+
// exactly what a table nobody is playing does.
|
|
384
544
|
let seat = -1;
|
|
385
545
|
for (let s = 0; s < seatCount; s++) {
|
|
386
|
-
if (!
|
|
387
|
-
led.seatProgress.lookup(BigInt(s)).eliminated) {
|
|
546
|
+
if (!seats[s].eliminated && led.seatProgress.lookup(BigInt(s)).eliminated) {
|
|
388
547
|
seat = s;
|
|
548
|
+
break;
|
|
389
549
|
}
|
|
390
550
|
}
|
|
391
551
|
if (seat < 0) {
|
|
392
|
-
|
|
552
|
+
console.log(` (an eliminate in block ${g.blockHeight} marked no new seat -- it landed on ` +
|
|
553
|
+
'chain without effect, or the replay had already accounted for it)');
|
|
393
554
|
break;
|
|
394
555
|
}
|
|
556
|
+
// The round the seat owed when it was taken out. NOT `seatProgress.round`, which an
|
|
557
|
+
// elimination sets to `roundCount()` to mean "finished", and not the chain's `openRound`,
|
|
558
|
+
// which a closeRound in the same block would already have advanced. The replay's own
|
|
559
|
+
// count of closed rounds is the open round by construction.
|
|
560
|
+
const round = closes;
|
|
395
561
|
eliminations += 1;
|
|
396
562
|
seats[seat].eliminated = true;
|
|
397
563
|
seats[seat].finishedAtRound = Number.POSITIVE_INFINITY;
|
|
@@ -402,12 +568,18 @@ async function verify(address, verbose) {
|
|
|
402
568
|
// tells us how the seat left).
|
|
403
569
|
const timeoutPenalty = (final.tier * BigInt(round + 1)) / 13n;
|
|
404
570
|
const resignPenalty = (final.tier * BigInt(round)) / 13n;
|
|
405
|
-
const delta = led.seatRedeemable.lookup(BigInt(seat))
|
|
571
|
+
const delta = led.seatRedeemable.lookup(BigInt(seat));
|
|
406
572
|
const penalty = delta === final.tier - resignPenalty ? resignPenalty : timeoutPenalty;
|
|
407
573
|
const how = penalty === resignPenalty && resignPenalty !== timeoutPenalty ? 'resigned' : 'timed out';
|
|
408
574
|
const refund = final.tier - penalty;
|
|
409
575
|
c.ok(`seat ${seat}: eliminated at round ${round} keeps tier - penalty`, delta === refund, `expected +${refund} (penalty ${penalty}, ${how})`);
|
|
410
|
-
|
|
576
|
+
// The pot delta needs the state before this one call, so it is only checked where that
|
|
577
|
+
// state is readable — one transaction in the block. Where it is not, nothing is lost:
|
|
578
|
+
// the custody invariant below runs after every transaction and already pins the pot to
|
|
579
|
+
// `tier x seats` minus everything owed and paid, which is the claim that matters.
|
|
580
|
+
if (prev !== undefined && !g.sharesBlock) {
|
|
581
|
+
c.ok(`seat ${seat}: the penalty stayed in the pot`, led.pot === prev.pot - refund, `pot ${prev.pot} -> ${led.pot}, expected -${refund}`);
|
|
582
|
+
}
|
|
411
583
|
c.ok(`seat ${seat}: carries the never-finished sentinel`, led.seatProgress.lookup(BigInt(seat)).finishedAtRound === 65535n);
|
|
412
584
|
console.log(` (seat ${seat} ${how} at round ${round}: penalty ${penalty})`);
|
|
413
585
|
break;
|
|
@@ -418,7 +590,7 @@ async function verify(address, verbose) {
|
|
|
418
590
|
// Handled below, against the final state and the transaction.
|
|
419
591
|
break;
|
|
420
592
|
default:
|
|
421
|
-
console.log(` (unrecognised entry point '${
|
|
593
|
+
console.log(` (unrecognised entry point '${g.entryPoints[0] ?? '?'}' -- ignored)`);
|
|
422
594
|
}
|
|
423
595
|
// The custody invariant, at every single step: while the table holds the money, every atom
|
|
424
596
|
// it ever received is either in the pot or owed to a seat. The contract asserts this
|
|
@@ -430,7 +602,7 @@ async function verify(address, verbose) {
|
|
|
430
602
|
owed += led.seatRedeemable.lookup(BigInt(s));
|
|
431
603
|
paid += led.seatPaid.lookup(BigInt(s));
|
|
432
604
|
}
|
|
433
|
-
c.ok(`
|
|
605
|
+
c.ok(`tx ${i} (${g.entryPoints.join('+')}): custody invariant`, led.pot + owed + paid === final.tier * led.seatCount, `pot ${led.pot} + owed ${owed} + paid ${paid} != tier x ${led.seatCount}`);
|
|
434
606
|
}
|
|
435
607
|
}
|
|
436
608
|
console.log(`\n── replayed ${joins} joins, ${opens} opens, ${holds} holds, ${scores} scores, ` +
|
|
@@ -477,19 +649,19 @@ async function verify(address, verbose) {
|
|
|
477
649
|
c.ok('the chain paid the seat the tie-break selects among survivors', BigInt(expectedWinner) === final.winnerSeatIndex, `replay ${expectedWinner} vs chain ${final.winnerSeatIndex}`);
|
|
478
650
|
// -------------------------------------------------------------------------------- the payout
|
|
479
651
|
console.log('\n── the payout ──');
|
|
480
|
-
const
|
|
481
|
-
if (!
|
|
652
|
+
const settleGroup = groups.find((gr) => gr.entryPoints.includes('settle'));
|
|
653
|
+
if (!settleGroup) {
|
|
482
654
|
c.ok('the settle transaction is in the log', false);
|
|
483
655
|
}
|
|
484
656
|
else {
|
|
485
|
-
const tx = await transactionByHash(
|
|
657
|
+
const tx = await transactionByHash(settleGroup.txHash);
|
|
486
658
|
const winnerAddr = final.seatIdentity.lookup(final.winnerSeatIndex).addr.bytes;
|
|
487
659
|
const rakeAddr = final.rakeAddress.bytes;
|
|
488
660
|
// `settle` pays out exactly the POT, which is the stakes minus whatever left it as an
|
|
489
661
|
// eliminated seat's refund. Read from the state just before the settle rather than assumed
|
|
490
662
|
// to be tier x seatCount, because an elimination moves money out of the pot.
|
|
491
|
-
const
|
|
492
|
-
const potBefore =
|
|
663
|
+
const settleAt = groups.indexOf(settleGroup);
|
|
664
|
+
const potBefore = groups[settleAt - 1].led.pot;
|
|
493
665
|
const q = potBefore / 100n;
|
|
494
666
|
const spentByUsers = sumNative(tx.unshieldedSpentOutputs);
|
|
495
667
|
const created = sumNative(tx.unshieldedCreatedOutputs);
|
|
@@ -507,25 +679,30 @@ async function verify(address, verbose) {
|
|
|
507
679
|
c.ok('the pot is empty afterwards', final.pot === 0n, `pot field ${final.pot}`);
|
|
508
680
|
}
|
|
509
681
|
// ------------------------------------------------------------------------------- redemptions
|
|
510
|
-
const redeems =
|
|
682
|
+
const redeems = groups.filter((gr) => gr.entryPoints.includes('redeem'));
|
|
511
683
|
if (redeems.length > 0) {
|
|
512
684
|
console.log(`\n── ${redeems.length} redemption(s) ──`);
|
|
513
|
-
for (const
|
|
514
|
-
|
|
515
|
-
|
|
685
|
+
for (const gr of redeems) {
|
|
686
|
+
// The seat and the amount both come from the state AFTER the redeem: `seatPaid` is what
|
|
687
|
+
// the contract recorded paying, and it is per seat. Reading "what it was owed" from the
|
|
688
|
+
// previous group instead would be wrong the moment two seats redeem in one block, which
|
|
689
|
+
// is exactly what an aborted table does.
|
|
516
690
|
let seat = -1;
|
|
517
691
|
for (let s = 0; s < seatCount; s++) {
|
|
518
|
-
if (
|
|
519
|
-
|
|
692
|
+
if (!redeemed.has(s) &&
|
|
693
|
+
gr.led.seatPaid.lookup(BigInt(s)) > 0n &&
|
|
694
|
+
gr.led.seatRedeemable.lookup(BigInt(s)) === 0n) {
|
|
520
695
|
seat = s;
|
|
696
|
+
break;
|
|
521
697
|
}
|
|
522
698
|
}
|
|
523
699
|
if (seat < 0) {
|
|
524
700
|
c.ok('a redeem zeroed exactly one seat', false);
|
|
525
701
|
continue;
|
|
526
702
|
}
|
|
527
|
-
|
|
528
|
-
const
|
|
703
|
+
redeemed.add(seat);
|
|
704
|
+
const owed = gr.led.seatPaid.lookup(BigInt(seat));
|
|
705
|
+
const tx = await transactionByHash(gr.txHash);
|
|
529
706
|
const addr = final.seatIdentity.lookup(BigInt(seat)).addr.bytes;
|
|
530
707
|
console.log(` seat ${seat} redeemed ${owed}`);
|
|
531
708
|
c.ok(`redeem seat ${seat}: paid exactly what it was owed, to its join-time address`, sumNativeFor(tx.unshieldedCreatedOutputs, addressOf(tx, addr)) === owed, `expected ${owed}`);
|
|
@@ -538,9 +715,21 @@ async function verify(address, verbose) {
|
|
|
538
715
|
console.log(` (caller spent ${sumNative(tx.unshieldedSpentOutputs)} of its own inputs)`);
|
|
539
716
|
}
|
|
540
717
|
}
|
|
718
|
+
// Steps this method genuinely could not separate. Not a failure of the game and not a pass
|
|
719
|
+
// either: an on-chain table whose seats moved in the same block leaves those individual calls
|
|
720
|
+
// unattributable, and saying so beats both a false alarm and a false clean bill.
|
|
721
|
+
if (unseparable.length > 0) {
|
|
722
|
+
console.log(`\n── ${unseparable.length} call(s) this replay could not separate ──\n` +
|
|
723
|
+
unseparable.map((u) => ` ${u}`).join('\n') +
|
|
724
|
+
'\n Each shared its block with another transaction, so the state before it is not\n' +
|
|
725
|
+
' readable. Everything else above was checked. A FAST table never lands here: its\n' +
|
|
726
|
+
' whole turn is one transaction and is verified as a unit.');
|
|
727
|
+
}
|
|
541
728
|
c.summary();
|
|
542
729
|
console.log(`\n(${c.count} checks in total)`);
|
|
543
|
-
|
|
730
|
+
if (c.failed.length > 0)
|
|
731
|
+
return 1;
|
|
732
|
+
return unseparable.length > 0 ? 2 : 0;
|
|
544
733
|
}
|
|
545
734
|
/**
|
|
546
735
|
* Match a raw 32-byte payout key against the bech32m owner strings the indexer reports.
|
|
@@ -567,7 +756,7 @@ function addressOf(tx, raw) {
|
|
|
567
756
|
const address = process.argv[2];
|
|
568
757
|
if (!address) {
|
|
569
758
|
console.error('usage: npm run verify -w cli -- <table-address> [--verbose]\n\n' +
|
|
570
|
-
'Replays a settled
|
|
759
|
+
'Replays a settled Dust Dice table from the chain alone: every roll re-derived under the\n' +
|
|
571
760
|
'hold masks the players sent, every score recomputed, the winner and the payout\n' +
|
|
572
761
|
're-confirmed.');
|
|
573
762
|
process.exit(2);
|
package/dist/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|