HENS HISTORICAL PUBLIC-MINT BOND — SOURCE AND EVENT EVIDENCE

Contract: 0x8774c09F32755c3147137439467B1e66C9fef607
Chain: Robinhood Chain, chain ID 4663
Deployment transaction: 0x31583d19bd62aeed7623707aea774cccb52c4d64f658826a8beffcc7d00d20e9
Deployment block: 83050559
Verification block: 88848659
Prepared: 15 October 2026

CONTENTS AND PROVENANCE

sources/ contains the exact eight Solidity source files needed for this bond.
Each file's Keccak-256 hash matches the included compiler metadata.
abi.json is the full ABI, including event names, types and indexed fields.
events.json additionally supplies each event's signature and topic0.
metadata.json preserves the matching compiler metadata byte-for-byte.
constructor-arguments.json contains the public constructor values decoded from
the deployment transaction, together with their encoded representation.
creation-input.hex is that public transaction's complete creation input.
chain-evidence.json records the public deployment and on-chain checks.
verification.json records the successful local reproduction checks.

standard-input.reconstructed.json is a minimal Standard JSON compiler input
reconstructed from the matching metadata and hash-verified source files. It is
NOT presented as the original saved compiler-session input. The original full
compiler-session input/output was not recovered. This deliberately scoped input
reproduces the exact deployed creation bytecode and exact compiler metadata.
standard-output.recompiled.json is the fresh compiler output from that input.

Compiler: Solidity 0.8.30+commit.73712a01
Optimizer: enabled, 500 runs
viaIR: true
EVM target: cancun
Metadata bytecode hash: ipfs
Linked/deployed libraries: none (link references and libraries are empty).
Required source imports are included; the compiler settings preserve the
original remapping strings, which do not require unrelated source files.

Metadata CID, recovered from deployed bytecode and reproduced by compilation:
QmPfZeBKi9UCjGSV3YTnJfAiX1tuWfJAZ1YtKsx6HQ293u

Recompile with a trusted installation of the exact compiler:
  solc-0.8.30 --standard-json < standard-input.reconstructed.json > output.json
The JSON embeds its source content, so no filesystem import callbacks are needed.
Compare output.contracts["src/HenPublicMintBond.sol"].HenPublicMintBond.
Its creation bytecode followed by the encoded constructor arguments must equal
creation-input.hex. Its metadata must equal metadata.json exactly. Runtime
bytecode contains constructor immutables: use the output's immutableReferences
and the included verified values rather than expecting zero placeholders to
match the deployed code. Foundry's ABI entry ordering can differ from solc's;
entry names, types, input order and indexed flags are equivalent.

PROXY AND UPGRADE STATUS

This bond address is a direct, non-proxy deployment of HenPublicMintBond.
Its exact creation code matches the deployment transaction, its runtime code
matches the reproduced build with verified immutable values, and its runtime
code is identical at the deployment block and verification block. The standard
ERC-1967 implementation, admin and beacon slots are zero. Its source contains
no owner, upgrade function or delegatecall path. There is no bond implementation
upgrade history to apply to these events.

The separate claimController address is a distinct contract and is not covered
by that non-proxy statement. This package does not include its upgrade history
or unrelated mint/NFT implementation sources. Read the bond's own logs at the
exact address above for the bond accounting described below.

Explorer reference (verification status not confirmed in this review):
https://robin.etherscan.io/address/0x8774c09F32755c3147137439467B1e66C9fef607#code
The explorer blocked automated access. Sourcify's legacy full_match and
partial_match metadata endpoints returned 404 on 15 October 2026. No claim is
made here that the contract has an existing public verified explorer entry.
The included checks establish an independent local reproduction; they do not
publish or verify the contract on an external service.

HOW TO CLASSIFY HISTORICAL BOND ACTIVITY

1. BondLocked(address indexed account, uint256 amount, uint256 indexed ticket)
   A successful deposit through lock(). Increase that account's outstanding
   bonded HEGG by amount. This is escrow, not a sale or a burn. The bond amount
   for this deployment is 100000000000000000000 units, i.e. 100 HEGG.

2. ClaimConsumed(address indexed account, uint256 indexed ticket,
                 uint256 indexed allocationIndex, uint256 refundAvailableAt)
   The claim controller consumed the entrant's selected allocation. This does
   not withdraw, burn or refund the HEGG bond. refundAvailableAt gives the
   earliest refund time for that claimed entry: claimedAt + 2 hours. It is
   eligibility information, not proof of a transfer.

3. There is NO separate BondUnlocked event.
   Unlocking is a time/state condition. The amount remains bonded until a
   successful withdraw() emits BondWithdrawn. entries(account).locked stays
   true while an eligible but unwithdrawn bond is still held.

   Eligibility rules:
   - Selection not finalized: refund available from publicMintStart.
   - Claimed entrant: refund available 2 hours after claimedAt.
   - Finalized selection, non-winning entrant: immediately eligible.
   - Winning entrant who never claimed: eligible at claimDeadline.

   refundAvailableAt(account) is a view of eligibility, not historical payment
   evidence. For a non-winning locked entrant it returns the block's current
   timestamp. For an already withdrawn or absent entry it returns zero; zero
   alone must not be used to distinguish those cases.

4. BondWithdrawn(address indexed account, uint256 amount)
   A successful reclaim/refund. Decrease that account's outstanding bonded HEGG
   by amount and record the refund at this transaction. The same successful
   receipt includes the HEGG Transfer from the bond to that account. It is not
   a sale or burn. Failed/reverted withdrawal attempts do not count.

5. SelectionRequested, EntropyCaptured and SelectionFinalized describe selection,
   not deposits or refunds. All six event schemas and topic0 values are included
   in events.json. Under-subscribed rounds finalize immediately, with zero seed,
   multiplier and offset; no entropy reveal is required for that branch.

Replay successful canonical logs in block/transaction/log order, handling chain
reorganizations and deduplicating by transaction hash and log index. Match logs
to this exact contract and chain. Outstanding bonded HEGG is deposits recorded
by BondLocked minus refunds recorded by BondWithdrawn; unlocking alone does not
reduce it. Reconcile against totalLocked and entries at the same block.

Do not classify every raw HEGG Transfer to this address as a valid bond deposit.
An unsolicited token transfer does not create an entry and is not credited by
lock(). Likewise, an NFT sale/transfer does not transfer the original entrant's
bond refund entitlement: withdraw() returns funds only to its caller's entry.

DISCLOSURE BOUNDARY

This package is limited to the historical bond and its required imports. It
contains no wallet private keys, signing credentials, API tokens, environment
files, operational scripts, private entropy reveal, mint allocation files,
token-to-artwork mappings, artwork files, image-hosting URLs, NFT metadata
collection or future mint plans. The entropyCommitment constructor value is a
public on-chain hash, not its secret preimage. Compiler metadata IPFS references
identify Solidity source/metadata, not Hen artwork.

Sharing these files supplies code and public evidence; it does not grant wallet
access, contract administration or website access. This review verifies the
package contents and deployment correspondence, not the absence of every
possible smart-contract vulnerability. Nothing has been sent or published.
