Package merkledrop is an idiomatic gno.land port of the classic Solidity MerkleDistributor airdrop (Uniswap's contract, OpenZeppelin's MerkleProof).
A fixed merkleRoot commits to a set of (address, amount) allocations. A recipient proves membership by supplying the sibling hashes on the path from their leaf up to the root. Each address may claim exactly once.
Leaf and node hashing use crypto/sha256 (available in the gno stdlib), the same primitive Solidity distributors use via keccak — here sha256 keeps the off-chain tree builder trivially reproducible. Internal nodes hash the two children in sorted order (the OpenZeppelin "commutative" scheme), so proofs carry no left/right flags.
Example
1leaf = sha256(addr.String() + "|" + amount)
2node = sha256(min(a,b) || max(a,b))
Balances are pure accounting (uint64); no real coin moves — there is no msg.value on gno, so this models the allocation ledger only.