ASC run · inscribed on Solana with IQ Labs code-in real, local validator
One rule set, two withdrawals, one refused
We wrote an exchange hot wallet's withdrawal rules in English, inscribed them on Solana, and asked five AI jurors to check two withdrawals.
The rules
- Never send more than $1,000,000 to a wallet not registered to the exchange.
- Never send more than $50,000,000 in total per day.
- Only pay out to wallets on the declared withdrawal list.
- A newly registered address cannot receive funds until 24 hours after registration.
- Never send more than 10% of the hot wallet balance in one withdrawal.
- If any rule is broken, refuse the withdrawal and hold it for human review.
Hypothetical, written for this demo. Not used or endorsed by any exchange.
What happened
$250,000 to a registered wallet
5 of 5 allow · paid
Quorum 4 · no rule broken
$6,000,000,000 to an unknown wallet
0 of 5 allow · refused, held for review
Broke 5 rules: the $1M cap, the daily cap, the declared list, the 24-hour delay, the 10% share
Signatures, inscription and transfer are real on a local validator. The jurors' verdicts were scripted from the rules for this run; no model calls were made.
How it ran
- The English rules were compiled into 7 loop-free steps.
- The steps were inscribed on Solana with IQ Labs and read back byte for byte.
- Each withdrawal was checked by five jurors, each signing from its own wallet.
- The payout transaction checked every signature; an altered signature made the whole transaction fail.
The data
Inscribed step list
[
{
"n": 1,
"op": "read_input",
"what": "withdrawal request: to, amountUsd, registered, sentTodayUsd, registeredHoursAgo"
},
{
"n": 2,
"op": "judge",
"rule": "unregistered_cap",
"test": "registered || amountUsd <= 1000000"
},
{
"n": 3,
"op": "judge",
"rule": "daily_cap",
"test": "sentTodayUsd + amountUsd <= 50000000"
},
{
"n": 4,
"op": "judge",
"rule": "declared_list",
"test": "to in declaredList"
},
{
"n": 5,
"op": "judge",
"rule": "new_address_delay",
"test": "registeredHoursAgo >= 24"
},
{
"n": 6,
"op": "judge",
"rule": "balance_share",
"test": "amountUsd <= 0.10 * hotWalletBalanceUsd"
},
{
"n": 7,
"op": "exit",
"requires": "quorum of allow attestations",
"else": "refuse + hold"
}
]Run steps and signatures
| Step | Result | Signature |
|---|---|---|
| Inscribe hot-wallet rules as loop-free steps + run rules via an IQ Labs inscription | ok | 4c2nG6DwHumsxaz4ZbD9… · 1909 B |
| IQ read-back round trip (byte-identical) | ok | |
| Normal payout: $250,000 to a registered wallet: 5 of 5 jurists allow, exit tx verifies each wallet's signed attestation and pays | ok | 3YcigZipak6AzB5Rc22k… · 1169 B |
| Same exit with one attestation signature altered: whole tx fails, nothing paid | refused, as intended | |
| Hypothetical drain: $6,000,000,000 to an unregistered wallet: 0 of 5 jurists allow (rules broken: unregistered_cap, daily_cap, declared_list, new_address_delay, balance_share), no exit tx can be built, held for review | refused, as intended |
Normal payout: $250,000 to a registered wallet allow
5 of 5 · quorum 4
- openai/gpt-5-mini: allow · sig d8f591fc1233128c… · vote 4xfKCbK8JUbTYwNP…
- anthropic/claude-haiku-4.5: allow · sig 4127ce0d6bceec50… · vote 58nGhH5thMY7Zf5s…
- google/gemini-2.5-flash: allow · sig 6ce492aebbac4706… · vote 3ApGbCSkhFVwreGc…
- qwen/qwen3-235b-a22b-2507: allow · sig d12f2bb75217b6c1… · vote 2zx9gMDNFVLhBVuU…
- deepseek/deepseek-v4-flash: allow · sig 9c3d35ca47b78560… · vote 2wE8XpxkAyCBmNTh…
Hypothetical drain: $6,000,000,000 to an unregistered wallet deny
0 of 5 · quorum 4
- openai/gpt-5-mini: deny · sig 8947073f3c572cc4… · vote 41P4M9735tLxeVvW…
- anthropic/claude-haiku-4.5: deny · sig 057f71267d9b1203… · vote 5ytoWz3k3jybTzFy…
- google/gemini-2.5-flash: deny · sig c050315332512d17… · vote 3zk3dvGipwi1PTBe…
- qwen/qwen3-235b-a22b-2507: deny · sig 0f5bb1670aebdc48… · vote 3v4VKEes8aXQidqC…
- deepseek/deepseek-v4-flash: deny · sig 9e5c5bf9e05cb39e… · vote 3E812KZpyEtHH9xZ…
Run rules (quorum, wallets, caps)
{
"title": "Exchange hot wallet: withdrawal rules (illustrative)",
"english": [
"Never send more than $1,000,000 to a wallet not registered to Binance.",
"Never send more than $50,000,000 in total per day.",
"Only pay out to wallets on the declared withdrawal list.",
"A newly registered address cannot receive funds until 24 hours after registration.",
"Never send more than 10% of the hot wallet balance in one withdrawal.",
"If any rule is broken, refuse the withdrawal and hold it for human review."
],
"steps": [
{
"n": 1,
"op": "read_input",
"what": "withdrawal request: to, amountUsd, registered, sentTodayUsd, registeredHoursAgo"
},
{
"n": 2,
"op": "judge",
"rule": "unregistered_cap",
"test": "registered || amountUsd <= 1000000"
},
{
"n": 3,
"op": "judge",
"rule": "daily_cap",
"test": "sentTodayUsd + amountUsd <= 50000000"
},
{
"n": 4,
"op": "judge",
"rule": "declared_list",
"test": "to in declaredList"
},
{
"n": 5,
"op": "judge",
"rule": "new_address_delay",
"test": "registeredHoursAgo >= 24"
},
{
"n": 6,
"op": "judge",
"rule": "balance_share",
"test": "amountUsd <= 0.10 * hotWalletBalanceUsd"
},
{
"n": 7,
"op": "exit",
"requires": "quorum of allow attestations",
"else": "refuse + hold"
}
],
"runRules": {
"quorum": 4,
"of": 5,
"operators": [
{
"id": "op-gpt-5-mini",
"model": "openai/gpt-5-mini",
"wallet": "5SJ7ZemJANUHQjHG6X34SpFFCAX5cmbv8oAgdeNriDtU"
},
{
"id": "op-claude-haiku-4.5",
"model": "anthropic/claude-haiku-4.5",
"wallet": "Ekarw8NU7EdfopzqGJGYLmrshnDzRXeKVzvN56QTzxJf"
},
{
"id": "op-gemini-2.5-flash",
"model": "google/gemini-2.5-flash",
"wallet": "pcnWPu1P454ggHYSuFD1FiS6JYu41ASoTPXJWdqs8D9"
},
{
"id": "op-qwen3-235b-a22b-2507",
"model": "qwen/qwen3-235b-a22b-2507",
"wallet": "J3YWuPLmz582oympM5UGJ4HPZ74hkaKsu3VYJHh63FZg"
},
{
"id": "op-deepseek-v4-flash",
"model": "deepseek/deepseek-v4-flash",
"wallet": "2Dd8uX1ikU4opmXPhfa3Bzj9yoQQcGMeX5FXnrZFAXGP"
}
],
"declaredList": [
"6pmUjXFsHjQnyxmwYK1A4cPbMjmE22uqS79ihQB9Qb7R"
],
"hotWalletBalanceUsd": 2000000000,
"loops": "none"
}
}