Scorecard · X Layer

Marked before the reopen and graded after it

Reading the Scorecard…

 

How a row is graded

  1. 1

    Commit before the reopen

    While the home market is shut, the keeper commits a mark, the two baselines and an input root to Scorecard. The block and its time are on chain.

  2. 2

    Settle after it

    At least 300 seconds after the scheduled reopen, anyone can settle the row. Scorecard reads the reopen price from the pool itself. Nobody supplies it.

  3. 3

    Count strictly

    Each estimate's error is its distance from the reopen, in basis points. Curb wins only with a strictly smaller error. Equal errors are a tie, and a tie is not a win.

The ledger

Newest first. Prices are USD per wrapper share. Errors are signed: plus means the estimate was above the reopen print. The three bars are the three errors on one scale, so a tie draws three identical bars.

 

 

Every Scorecard row, newest first.
Closure Committed, then settled Mark Last print Closing VWAP Reopen print Error, signed Grade Method
Reading every row from Scorecard storage at one block…

The method, and why it changed

Each row commits the digest of the method that produced it. No row is ever re-marked: a row keeps its method after the method changes.

 

curb.scorecard.mark/1

The last print before the cut, moved by half of what the wrapper's own pool did during the closure.

mark = lastPrint × (1 + 0.5 × poolDrift)

When the pool does not trade while the home market is shut, there is no drift. The mark is then exactly the last print, and the row can only tie. With creation and redemption off, the pool carries no news about the reopen, however far the reopen moves.

 

 

curb.scorecard.mark/2

Adds a signal from markets that trade while Hong Kong is shut: the Binance USD-M perpetual on the same share, and the US ADR at USD/HKD.

mark = lastPrint × (1 + 0.79 × r)
  • r The mean of the two returns from the cut to the commit. If one leg is missing, the other is used alone.
  • β 0.79 Fitted at 0.983 on 118 overnight and weekend closures, 22 Jul to 22 Sep, all before these rows. Published damped: round(0.8 × 0.983, 2).
  • Overnight, weekend The signal applies.
  • Lunch recess Weight zero, so the mark stays the last print. In backtests over 23 recesses, the perp-adjusted mark lost to the last print on all three names, and half weight was still worse. The perp's move is still committed as evidence.
  • Nasdaq names No proxy trades while they are shut, so mark/2 marks them as mark/1 would.

Verify a row

Pick a row. The command fetches its evidence bundle and rebuilds the committed input root. It re-runs the committed method on the committed inputs and checks the result against the mark, band and baselines the transaction wrote. It also checks that the row was committed before the reopen it predicts.

Needs Node 22.18 or newer, and nothing else: no key, no account. Exit code 0 means verified. Exit code 3 means the evidence was unreachable, which is never an accusation.

npx -y curb-verify tx <commit transaction>