What you will build.
Review a synthetic event DEMO-MATCH-01 with no stakes, customers or payouts. The event can be cancelled, disputed or lack a final source result. Build a result-review worksheet that refuses to turn uncertain event information into a wallet instruction.
Your working record
Create a private worksheet with columns for the source reference, observed state, responsible system, observation time, expected result and unresolved issue. Use the same fictional case throughout the steps; do not paste live personal or financial records into this exercise.
Run the example before changing it.
Inspect the baseline record below. Download and read the complete JavaScript file before running it. It uses only Node’s built-in test and assertion modules; there is no package installation, account connection or secret to configure.
{
"cancelled": false,
"disputed": false,
"sourceFinal": true
}Save it as leveraged-sports-betting.mjs. Open a terminal in that folder and run:
node --version
node --test leveraged-sports-betting.mjsExpected result: four passing tests and zero failures. These tests verify the teaching classifier only. They do not verify a production integration, security boundary or financial outcome.
File or test runner will not start?
Check that Node.js 22 or later is installed, the filename ends in .mjs rather than .mjs.txt, and your terminal is in the download folder. If a managed browser blocks scripts, open “Read the full exercise” and save that text locally under the same filename. Do not disable organizational security controls.
Read the full exercise
// Hybrid-Chain offline teaching model: leveraged-sports-betting
// Fictional fields/states; NOT an API client, authorization system or production implementation.
// No network calls, credentials, payments or file writes. Review before running.
// Requires Node.js 22+. Run: node --test leveraged-sports-betting.mjs
import test from 'node:test';
import assert from 'node:assert/strict';
export function inspect(record) {
if (record.cancelled) return 'CANCELLED_REVIEW_REQUIRED';
if (record.disputed) return 'DISPUTED_RESULT';
if (!record.sourceFinal) return 'WAIT_FOR_SOURCE';
return 'SIMULATION_RESULT_REVIEWABLE';
}
const baseline = {
"cancelled": false,
"disputed": false,
"sourceFinal": true
};
const cases = [
{
"name": "reviewable simulation",
"patch": {},
"expected": "SIMULATION_RESULT_REVIEWABLE"
},
{
"name": "cancelled event",
"patch": {
"cancelled": true
},
"expected": "CANCELLED_REVIEW_REQUIRED"
},
{
"name": "disputed source",
"patch": {
"disputed": true
},
"expected": "DISPUTED_RESULT"
},
{
"name": "non-final source",
"patch": {
"sourceFinal": false
},
"expected": "WAIT_FOR_SOURCE"
}
];
for (const example of cases) {
test(example.name, () => {
assert.equal(inspect({...baseline, ...example.patch}), example.expected);
});
}
Know what the tests demonstrate
- reviewable simulation
SIMULATION_RESULT_REVIEWABLE- cancelled event
CANCELLED_REVIEW_REQUIRED- disputed source
DISPUTED_RESULT- non-final source
WAIT_FOR_SOURCE
Now change one fixture at a time. If you change a case’s input without changing its expected result, the test should fail. Read the actual-versus-expected difference and use the walkthrough to decide whether your rule or your expectation needs correcting. Keep an unchanged copy for comparison.
Work through the case, step by step.
- 01
Define a synthetic event
Do this
- Create DEMO-MATCH-01 and write its source, cutoff and intended resolution owner.
- Keep participation records and outcome evidence separate.
- State that Arena and this exercise are demonstrations, not enabled wagering or payout systems.
Expected resultThe reader knows exactly what is being simulated and cannot confuse the worksheet with a customer betting interface.
If your result is different
If your example starts accepting real stakes, it is outside this tutorial; stop and establish the required professional and operational review.
- 02
Inspect cancellation before resolution
Do this
- Run the baseline, then set cancelled=true and confirm CANCELLED_REVIEW_REQUIRED.
- Record the source and observation time for the cancellation.
- Write who adjudicates the case; do not invent a refund or settlement operation.
Expected resultCancellation remains a distinct outcome requiring the defined process, not an ordinary win/loss state.
If your result is different
Do not choose a result merely to satisfy a demo animation or close a market record.
- 03
Keep disputes and missing results open
Do this
- Set disputed=true and expect DISPUTED_RESULT.
- Restore the baseline and set sourceFinal=false; expect WAIT_FOR_SOURCE.
- Document which evidence would resolve either condition and which owner can accept it.
Expected resultThe model makes incomplete or contested evidence visible instead of selecting a convenient winner.
If your result is different
Two disagreeing feeds are not resolved by taking the first response unless the actual adjudication policy explicitly defines that rule.
- 04
End at a reviewed simulation
Do this
- Restore the baseline and retain SIMULATION_RESULT_REVIEWABLE.
- Save the source references and unresolved-case procedure alongside the test output.
- Use the execution-evidence guide to distinguish inspectable computation from permission for any external action.
Expected resultThe exercise finishes with reviewable synthetic evidence and no inferred authority to transfer funds.
If your result is different
The classifier is not a risk engine, responsible-gaming system, legal approval or payout service.
Review what you produced.
Save the worksheet, unmodified test output, one deliberately failing case and the explanation of its fix. A useful result includes an unresolved item with an owner; it is not just a screenshot of four green tests.
Map the model to actual systems.
Any wagering operator must independently establish eligibility, permissions, responsible-gaming controls, outcome adjudication, risk management, customer protection, and dispute handling before considering deployment.
For each worksheet field, name the owning system, exact current operation, permission and error behavior. Put “not available” next to any missing operation and assign a dependency owner. Do not substitute the teaching classifier for that missing integration.
Open the current API reference and inspect each operation’s request, response, scope and implementation status. Code examples on this page are local models only; they do not call those operations.
Take the next technical step.
Use your worksheet and failing-case notes in the next walkthrough. Keep the same reference trail so you can see which assumptions become actual observations—and which remain dependencies.
Inspect computation evidence without execution