01Scope and contract identity
This paper is intended for developers and technical reviewers familiar with Solidity and ERC-20 behavior. It specifies the identity of ZGBA1R, a single contract deployed on Ethereum mainnet, its state transitions for total supply, balances and allowances, and its dependencies on external systems. Operating plans and allocations by purpose are addressed in the whitepaper.
| Item | Value |
|---|---|
| Full name | Zero Growth By Architecture - One Rule |
| Network | Ethereum Mainnet · 1 |
| Contract | 0x6Eb545C0dF5132c1E3ea543bf66902e657273059 |
| Deployment transaction | 0x5b3475e1eb7f0641898b766b352c0ecd2d7ce8041606ca9c37de839fb506e457 |
| Deployment block | 26,294,193 |
| Compiler | Solidity 0.8.38 · optimizer 200 · evmVersion paris · viaIR false |
| Runtime code hash | 0xa7825e2f3467d9407f48b502278a329c03aedb854ae3322fbe29240e8b5b0ed6 |
| Published source | Etherscan · Exact Match · MIT |
02State and invariants
Let A be the set of addresses, B(a) the balance of address a, L(o,s) the allowance owner o grants to spender s, and S the total supply. Amounts are uint256 integers in base units, with a range of 0 to 2²⁵⁶−1. One ZGBA equals 10¹⁸ base units. The constructor assigns the amounts below to distinct valid recipients d and r.
S = 1,000,000 × 10¹⁸ = 10²⁴
B(d) = 2 × 10²³; B(r) = 8 × 10²³
Σ B(a) = S; 0 ≤ B(a) ≤ S
∀ n ≥ 0: S(n) = S(0)Σ denotes the sum of balances across all addresses, and n counts state transitions after deployment. Supply changes occur only in the two constructor _mint calls. Runtime functions expose no mint, burn or upgrade path.
A successful transfer deducts an amount from the sender and credits the same amount to the recipient. A self-transfer leaves the balance unchanged. Approvals do not move balances, and failed calls revert their state changes. The initial total supply is therefore preserved through each transition.
03Transfers, approvals and atomic failure
The parameters from, to and v denote the sender address, recipient address and amount in base units, respectively. transfer(to,v) transfers v from the caller’s balance; transferFrom(from,to,v) transfers v within the allowance granted to the caller by from. Both functions require a valid recipient and sufficient balance.
approve(spender,v) sets the caller’s allowance for spender to v; it does not add to the previous allowance. An allowance of uint256 maximum is treated as unlimited and is not decremented by delegated transfers. Other allowances decrease by the amount of a successful delegated transfer.
transfer: B(a)′ = B(a) − v·1[a = from] + v·1[a = to]
approve: L(owner, spender)′ = v
transferFrom: L′ = L − v (L ≠ 2²⁵⁶ − 1)
revert: state′ = stateIn these formulas, ′ denotes the resulting state, and 1[condition] equals 1 when the condition is true and 0 otherwise. A revert rolls back the failed call’s state changes, leaving no partially applied balances, allowances or logs. A failed transaction included in a block may still consume gas and the sending account’s transaction sequence number, or nonce.
The zero address and the token contract itself are rejected as transfer recipients. Other recipient contracts are not checked for the ability to release tokens. Zero-value transfers between valid addresses and self-transfers are permitted and emit a Transfer event. A delegated self-transfer still reduces a finite allowance.
approve rejects the zero address as spender and emits an Approval event on success. A delegated transfer that reduces a finite allowance does not emit a separate Approval event. The current allowance must therefore be queried through allowance(o,s).
Approvals do not expire automatically. An approved spender may use the existing allowance before a change is processed. The recommended procedure is therefore to first set it to zero and confirm the revocation. This is a client recommendation, not a precondition enforced by approve. Revocation cannot cancel a transfer already executed. EIP-2612 permit, which supports approval submission based on a signature, is not implemented.
04Clients and transaction confirmation
For a displayed amount q and an amount v in base units, v = q × 10¹⁸. The value v must be a nonnegative uint256 integer, and a transfer must not exceed the sender’s balance. The client converts decimal input to base-unit integers and rejects values requiring more than 18 fractional decimal places, exponent notation, negative values and malformed input. The recipient, amount and network shown in the wallet must be verified before signing.
Transaction preparation, wallet signing, submission, block inclusion and finality are distinct states. A transaction hash identifies the transaction but does not establish success.
The receipt’s status and blockHash, the actual transaction’s chain, sender, target, amount and nonce, and its Transfer or Approval logs are compared with the details reviewed before signing. Delegated allowances are queried again at a finalized block. The supplied client treats missing responses, timeouts and transaction or log mismatches as unverified.
Finality is assessed by checking that the finalized block reported by the RPC is at or above the transaction’s inclusion block and that each block hash matches the canonical-chain query at that height. If the RPC does not support finalized-block queries, the client reports inclusion without treating it as finality.
Signing takes place in an external wallet; the client does not request private keys or recovery phrases. RPC endpoints provide node access for chain queries and transaction submission. Comparisons between independent providers use responses for the same block.
05Auction allocation and external-contract accounting
The address r corresponds to the constructor argument distribution. The auction creation transaction moved 800,000 existing ZGBA from r to the auction and liquidity provision contracts. The formulas below use displayed ZGBA amounts from the transaction’s Transfer logs; they are not current balances or circulating supply.
| Item | Observed value |
|---|---|
| Status | In progress |
| Auction contract · Ethereum | 0xe1c98ff2dcfbb1a70ae64ab6fe01ff868682eeec |
| Payment asset | USDC |
| Clearing price | 0.10 USDC / ZGBA |
| Bid volume | 0 USDC |
| Supply sold | 0% |
| Tokens deposited into the auction | 601,503.759398496240601504 ZGBA |
| Start date · estimated end | 2026-10-31 · 2026-11-07 |
| Start · end · claim blocks | 26,309,169 · 26,359,718 · 26,359,718 |
| Displayed LP commitment · lock expiry | 20.0% · 2027-05-09 |
Price, bid volume, supply sold and LP terms are the Uniswap interface values at the observation time. Auction closing and claims are block-based; calendar dates are estimates. The LP commitment percentage is distinct from the allocation of ZGBA as a share of total supply. A displayed lock expiry does not establish that a pool has been created, funded or its position locked.
Qdeveloper_initial = 200,000 ZGBA
Qauction_deposit = 601,503.759398496240601504 ZGBA
Qliquidity_allocation = 198,496.240601503759398496 ZGBA
Qauction_deposit + Qliquidity_allocation = 800,000 ZGBA
Qdeveloper_initial + Qauction_deposit + Qliquidity_allocation = 1,000,000 ZGBAThe schedule parameters start, end and claim identify the opening, closing and first claim blocks, respectively, and must satisfy start < end ≤ claim. Each step’s mps expresses a per-block fraction of the full auction amount in units of 1/10,000,000. For example, mps=100,000 over 100 blocks covers the full auction amount. The sum of mps × block count must equal 10,000,000, and the block counts must sum to end − start.
This schedule allocates existing auction tokens; it represents neither new issuance nor vesting of the developer holdings. Payment assets, refunds, unsold tokens and rounding remainders are settled separately under the auction rules.
The auction is in progress. The liquidity provision contract is 0x2EEF0e2a9a652d755AccAD95a24541A98B5CA000. That transfer does not establish a pool deposit, LP position creation or a completed lock. Creation-time allocations, current holdings and settled or claimed amounts are distinct.
06Code behavior and on-chain state verification
Code behavior tests and deployed-state queries are separate procedures. The contract is identified by chain ID and address together, rather than by name or symbol alone.
Behavior test conditions and results
The contract was instantiated with test accounts in an EthereumJS 10.1.3 Prague EVM without connecting to a public network. Its runtime bytecode hash matches the hash specified in this paper. Recompiling the verification input also reproduced the build artifacts’ ABI, creation bytecode and runtime bytecode.
No disagreement with the expected state transitions was found within the scenarios exercised below. RPC checks used simulated responses to test client behavior; they did not measure the availability of actual providers.
| Subject | Behavior checked |
|---|---|
| Supply and transfers | Agreement between totalSupply(), aggregate tracked balances, Transfer-event replay and stored state across ordinary, zero-value, self and mixed transfers |
| Allowances and execution order | Finite-allowance decrements, unchanged unlimited allowances, allowance replacement and delegated transfers before and after revocation |
| Atomic failure | Rejection of insufficient balances or allowances, forbidden recipients or functions and malformed calls; unchanged token storage and no retained logs on failed calls |
| Transaction-result checks | No false success or finality for missing responses, timeouts, chain, transaction or log mismatches, reorganizations or unsupported finalized queries |
Deployed-state query procedure
Perform the following queries through a node with chain access at the same finalized block. Record each result with the chain, contract, block number, block hash and query time.
| Read or comparison | Expected criterion |
|---|---|
| eth_chainId | 0x1 · Ethereum Mainnet |
| eth_getCode(address, block) | Compare runtime bytecode keccak256 with the specified code hash |
| name() · symbol() · decimals() | ZGBA-1R · ZGBA · 18 |
| totalSupply() | 1000000000000000000000000 |
| balanceOf(a) · allowance(o,s) | Balances and allowances at that block; initial issuance records are not current balances |
| Deployment transaction and initial Transfer logs | Compare constructor recipients and issuance of 200,000 and 800,000 ZGBA |
| Etherscan source and application binary interface (ABI) | Compare Exact Match, compiler and optimizer settings and public functions |