Encode the same transfer batches, execute Solidity decoder bytecode, and preserve both gas tradeoffs.

THE IDEA IN ONE PICTURE
Ethereum charges for the data you send and the work needed to read it. Smaller packages can take more work to unpack.
Pick a codec for each kind of batch.
Every transfer must survive packing unchanged.
Sending cost and decoding cost stay separate.
Concept illustration, not a measured batch. The lab below runs real EVM checks; no transaction is sent.
START HERE · A SHORT GUIDED EXPERIMENT
Measure once, change one packing rule, then compare the two gas bills. The starter gives you a concrete first experiment.
Use the preloaded reuse-aware starter, or keep your own rules. This runs a real EVM measurement, not an Ethereum transaction.
With the starter, change Minimum recipient reuse from 50 to 100. The dictionary will be used less often. With custom rules, change a codec or fallback.
Go to packing rules ↓Keep the same workload. Compare the new revision with your previous run. One cost may fall while the other rises; unchanged results are allowed.
Learning progress only. No score, reward, AI fee, or payment. A tie is a valid result.
Compression rule lab · Practice
Choose how each transfer batch is packed. Save calldata without making the decoder do too much work.
20 transfer actions
3 public batches · two independent gas axes
Correctness comes first: every reference digest must match and the published malformed tests must revert.
01 / Fix the workload
Repeated recipients, mixed recipients, and integer boundary values.
02 / Build a compression policy
Rules run from top to bottom. The first match wins; otherwise the fallback is used.
This JSON is the exact bounded rule artifact sent for measurement. Change the controls above to revise it.
{
"kind": "calldata-rules-v1",
"schemaVersion": "1",
"fallbackCodec": "packed",
"rules": [
{
"minActions": 4,
"maxActions": 255,
"minReusePercent": 50,
"codecId": "dictionary"
}
]
}The host selects a checked-in codec; the EVM measures its decoder. No wallet or payment.
Follow the bytes
The starter uses a dictionary for repeated addresses and fixed-width packing elsewhere. Measure it to see actual selections, payloads, and EVM gas for every batch.
After a run, edit the reuse threshold or fallback and compare your next revision against the same ABI baseline.
Keep every recipient, uint64 amount and uint32 nonce exactly intact.
Each action uses 32 bytes. A single count byte starts the batch.
Zero byte = 4 gas · nonzero byte = 16 gas. Measure to see the actual payload.
The checked-in Solidity decoder runs locally. Its output must match the reference digest.
These terms describe the original reference challenge. The editable Practice lab above uses its own versioned context and evidence; its results are not entries in this challenge and do not earn rewards.