Skip to content

Artifacts

DISCLAIMER // NFA // DYOR

This analysis is based on observations of the contract behavior. We are not smart contract security experts. This document aims to explain what the contract appears to do based on the code. It should not be considered a comprehensive security audit or financial advice. Always verify critical information independently and consult with blockchain security professionals for important decisions.

⊙ generated by robots | curated by humans

METADATA
Contract Address 0x0000006d...32a9a8 (etherscan)
Network Ethereum Mainnet
Analysis Date 2026-08-09
Snapshot Block 25,714,806

Runtime Bytecode

Deployed runtime is 20,324 bytes, 4,252 bytes under the EIP-170 ceiling of 24,576. Too large to inline; reproduce locally with the commands below.

Source: Etherscan — Contract Code

Command:

export ETH_RPC_URL=https://eth.llamarpc.com
cast code 0x0000006d936BA3653b8854490E16e782cd32a9a8
cast codesize 0x0000006d936BA3653b8854490E16e782cd32a9a8

Artifact (first 91 bytes of the dispatcher):

0x608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c908162c7f3fb14613f595750806301ffc9a714613f0c5780630223449b14613cc957806303314efa14613c85578063046f7da214613c06...

The dispatcher opens with a calldatasize check that falls through to the empty receive() body — the 36 15 61001a sequence — before entering the selector jump table. The table then runs in ascending selector order starting at 0x00c7f3fb (treasuryEth), consistent with solc's binary-search dispatcher for a contract with this many selectors.


Creation Bytecode

Deployment did not send init code directly. The creator Externally Owned Account (EOA) called a CREATE2 factory at 0x00000000...4e6f2a (etherscan), which produced the leading-zeros vanity address. The transaction input is therefore a factory call carrying the salt and the init code, not raw init code.

Source: Etherscan — Creation TX

Command:

export ETH_RPC_URL=https://eth.llamarpc.com
cast tx 0x8848f7d7d1aa67261ad987cc8c217a403a6ef95595ef819cf022c5a912c82ec3 input

Artifact (factory call header):

0x94d6f6d4
0000000000000000000000000000000000000000000000000000000000000040   # offset to initCode
68a0acf9d2df369c7a5d7e154476b222d56f2d398cb342f74db3b03c7834164b    # CREATE2 salt
...                                                                # initCode + constructor args

Constructor arguments (decoded from the trailing 8 words of the init code):

dao_        = 0x5e58ba0e06ed0f5558f83be732a4b899a674053e   # Moloch DAO clone
shares_     = 0x00a6ba94bbb5474725515de88fe04f854f2dcb12   # ZORG
zorgz_      = 0x00000000008835cef3e0d2333695f288ee6b63a6   # zOrgz ERC-721
weiNames_   = 0x0000000000696760e15f265e828db644a0c242eb   # Wei Name Service
tokenList_  = 0x0000006013df75a31678b786061c2b54bf531524   # TokenList registry
renderer_   = 0x000000115b1b95b9e04128a2bcd9ed9d24ab141c   # SUPERSEDED 2026-08-07
receiptArt_ = 0x0000007f4342bddda2a951b9e181b42328dd1ed9   # still current
halfLife_   = 0x000000000000000000000000000000000003f480   # 259200 seconds = 3 days

The renderer_ argument is the one value from this list that no longer matches on-chain state. See Renderer Replacement below.

Verify the constructor arguments independently:

cast call 0x0000006d936BA3653b8854490E16e782cd32a9a8 "dao()(address)"
cast call 0x0000006d936BA3653b8854490E16e782cd32a9a8 "shares()(address)"
cast call 0x0000006d936BA3653b8854490E16e782cd32a9a8 "zorgz()(address)"
cast call 0x0000006d936BA3653b8854490E16e782cd32a9a8 "weiNames()(address)"
cast call 0x0000006d936BA3653b8854490E16e782cd32a9a8 "tokenList()(address)"
cast call 0x0000006d936BA3653b8854490E16e782cd32a9a8 "renderer()(address)"
cast call 0x0000006d936BA3653b8854490E16e782cd32a9a8 "receiptArt()(address)"
cast call 0x0000006d936BA3653b8854490E16e782cd32a9a8 "halfLife()(uint64)"


Verified Source Code

Source verified on Etherscan as an exact match, compiled with solc v0.8.36+commit.8a079791, optimizer enabled at 200 runs, EVM target prague. Six files, of which one is the contract under analysis and the rest are Solady dependencies and two interface stubs.

Source: Etherscan — Contract Source

FILE LINES ROLE
src/dao/ZorgConviction.sol 873 The contract under analysis
lib/solady/src/tokens/ERC721.sol 914 ERC-721 base, non-sequential storage
lib/solady/src/utils/FixedPointMathLib.sol 1,313 powWad, divWad, fullMulDiv
lib/solady/src/utils/SafeTransferLib.sol 684 Token transfer and balance helpers
src/dao/IZorgConvictionRenderer.sol 8 html(address,address) stub
src/dao/IZorgReceiptArt.sol 8 tokenURI(address,uint256) stub

Fetch the full source:

curl -s "https://api.etherscan.io/v2/api?chainid=1&module=contract&action=getsourcecode\
&address=0x0000006d936BA3653b8854490E16e782cd32a9a8&apikey=$ETHERSCAN_API_KEY" \
  | jq -r '.result[0].SourceCode'

Artifact (the two declarations that define the whole relationship to TokenList):

interface ITokenListView {
    function isListed(uint256 id) external view returns (bool);
}

// ...the sole call site, inside allocate():
if (amount > oldAmount) {
    if (paused) revert Unauthorized();
    if (!ITokenListView(tokenList).isListed(listingId)) revert UnknownListing();
}

Additional Artifacts

Contract State Snapshot

Read at block 25,714,806.

Command:

export ETH_RPC_URL=https://eth.llamarpc.com
ZC=0x0000006d936BA3653b8854490E16e782cd32a9a8

for f in "halfLife()(uint64)" "paused()(bool)" "domainClaimed()(bool)" \
         "rolesInstalled()(bool)" "execRoleRevoked()(bool)" \
         "totalLoyaltyWeight()(uint256)" "loyaltyRewardPerWeight()(uint256)" \
         "loyaltyRewardReserve()(uint256)" "totalEthPrincipal()(uint256)" \
         "treasuryEth()(uint256)" "totalEthCredits()(uint256)"; do
  echo "$f -> $(cast call $ZC "$f")"
done

cast call $ZC "ethBondTerms()(uint256,uint64,uint16,uint16)"
cast balance $ZC
cast call 0x00a6bA94BBb5474725515De88fE04F854f2dCb12 "balanceOf(address)(uint256)" $ZC

Artifact:

halfLife               259200            # 3 days
paused                 false
domainClaimed          true
rolesInstalled         false             # emergency exec role NOT installed
execRoleRevoked        false
totalLoyaltyWeight     371470e18 ZORG
loyaltyRewardPerWeight 0                 # no early exit has ever occurred
loyaltyRewardReserve   0
totalEthPrincipal      0.05 ETH
treasuryEth            0.02 ETH
totalEthCredits        0

ethBondTerms           minimumBond       0.01 ETH
                       maturity          604800  (7 days)
                       earlyExitTaxBps   2000    (20%)
                       treasuryShareBps  5000    (50%)

contract ETH balance   0.07 ETH          # == 0.05 + 0 + 0.02 + 0, exactly
contract ZORG balance  371470e18         # == totalLoyaltyWeight, exactly

Both invariants the contract asserts internally hold when checked from outside.


Lock Tier Menu

Command:

for t in 0 1 2 3; do
  echo "tier $t: $(cast call 0x0000006d936BA3653b8854490E16e782cd32a9a8 \
    "lockTiers(uint8)(uint64,uint16)" $t)"
done

Artifact:

TIER EXIT DELAY BOOST STATUS
0 none 1.00× (synthesised, not stored) Default; 5 of the 7 bonds opened here
1 90 days 1.10× (11,000 bps) Constructor default, never used
2 180 days 1.25× (12,500 bps) Constructor default, never used
3 365 days 1.50× (15,000 bps) Constructor default; held by 3 receipts — 2 chosen at bond time, 1 via selectLockTier

Tier 0 is not stored — lockTiers[0] reads back as zeros, and _bondZorgz synthesises LockTier({exitDelay: 0, boostBps: BPS}) for it. All three menu entries remain at their constructor values; setLockTier has never been called.


Bond Positions

Reconstructed from Bonded / BondIncreased / Eternalized logs and verified against the per-id getters.

Command:

ZC=0x0000006d936BA3653b8854490E16e782cd32a9a8
for r in 9953 4205 339 9241 4816 77 156; do
  echo "receipt $r"
  cast call $ZC "ownerOf(uint256)(address)" $r
  cast call $ZC "bondedWeight(uint256)(uint256)" $r
  cast call $ZC "allocatedByBond(uint256)(uint256)" $r
  cast call $ZC "receiptLocks(uint256)(uint64,uint64,uint16,uint8)" $r
  cast call $ZC "eternalBonds(uint256)(bool)" $r
done

Artifact:

RECEIPT HOLDER BONDED ZORG ALLOCATED TIER BOOST UNLOCKS ETERNAL ETH
9953 0x1C0Aa8cC...855A20 (etherscan) 10,000 10,000 0 1.00× — ☑ 0
4205 0x053E6294...7F388f (etherscan) 10,001 0 3 1.50× 2027-08-07 ☑ 0
339 0xFbd69f81...cADE8E (etherscan) 10,009 10,000 0 1.00× — ☒ 0.01
9241 0xFbd69f81...cADE8E (etherscan) 10,028 10,000 0 1.00× — ☒ 0.01
4816 0x1C0Aa8cC...855A20 (etherscan) 100,000 100,000 3 1.50× 2027-08-08 ☒ 0.01
77 0xFbd69f81...cADE8E (etherscan) 221,432 221,432 0 1.00× — ☒ 0.01
156 0x357836fF...61902B (etherscan) 10,000 10,000 3 1.50× 2027-08-09 ☒ 0.01

Total bonded: 371,470 ZORG across 7 receipts and 4 holders. Receipt 9953 was eternalized while still at tier 0 and reads a boostBps of 10,000; receipt 4205 is eternal with no allocation at all, so 10,001 ZORG sits permanently locked while directing nothing.

The unlockAt dates are more than a year out because topUpZorg renews the commitment from the moment of the top-up, and because tier 3 is a 365-day delay measured from selection rather than from the original bond.


Listing Support Snapshot

Listing ids for ordinary Ethereum tokens are uint256(uint160(token)); foreign listings carry a wider hashed id. See the TokenList analysis for the derivation.

Command:

ZC=0x0000006d936BA3653b8854490E16e782cd32a9a8
cast call $ZC "listingState(uint256)(uint256,uint256)" <LISTING_ID>
cast call $ZC "convictionOf(uint256)(uint256)" <LISTING_ID>

# CONFIRM THE ID IS ONE THE REGISTRY ACTUALLY CARRIES
cast call 0x0000006013dF75A31678B786061C2B54bf531524 "isListed(uint256)(bool)" <LISTING_ID>

Artifact:

The eight ids carrying support, in full decimal form for direct reuse in the commands above. Weight, conviction and score for each are tabulated in the Contract Analysis; they are omitted here because the accrued columns advance every block and two copies would drift apart.

LISTING ID SUBJECT
0 ETH (native)
104165018710067097353655755692819801489527232022561016148205125677286991358696 TAC (tacitscan)
3718177199436581777268575498026466751093263122 ZORG (etherscan)
707243736947857446325356514591335334 zOrgz (etherscan)
1097077688018008265106216665536940668749033598146 WETH (etherscan)
726330175714135941764069406682033110407748398240 wstETH (etherscan)
996101235222674412020337938588541139382869425796 stETH (etherscan)
996050538495118299096582895562516634314123010963 rETH (etherscan)

Eight of the registry's seventeen listings carry any support at all. The nine with none — WBTC, USDC, USDT, DAI, BOLD, LUSD, ZAMM, WEI, FWA — return a score of zero, indistinguishable from an id that was never allocated to.

Effective weight is the raw allocation scaled by the allocating receipt's boost. Native ETH's 156,850 comes from receipt 4816's 100,000 at 1.50× plus receipt 9953's 6,850 at 1.00×.


Event History

Command:

curl -s "https://api.etherscan.io/v2/api?chainid=1&module=logs&action=getLogs\
&address=0x0000006d936BA3653b8854490E16e782cd32a9a8\
&fromBlock=25694754&toBlock=latest&apikey=$ETHERSCAN_API_KEY" | jq '.result | length'

Artifact: 57 logs total from deployment through block 25,714,806.

EVENT COUNT NOTES
Allocated 18 Across 8 distinct listings
BondLockSelected 8 Emitted unconditionally by bondZorgz, so 7 at bond time, plus 1 from receipt 4205's later selectLockTier
Transfer (mint) 7 All mints; no receipt has ever been transferred or burned
Bonded 7
EthBonded 7 Every bond paid exactly the 0.01 ETH minimum
CommitmentExtended 4 Tier selections and one top-up renewal
Eternalized 2 Receipts 9953 and 4205
DomainClaimed 1 0xedcfb44b...13166a (tx)
BondIncreased 1 Receipt 4205, two blocks (24 seconds) before it was eternalized
EthBondMaturityReset 1 Paired with the above
RendererSet 1 0xf90b79da...f8dd80 (tx)

Events declared by this contract that have never fired: Unbonded, BondDecreased, EarlyExitTaxed, LoyaltyAccrued, EthCreditClaimed, TreasuryEthReleased, PauseSet, Executed, ExecRoleInstalled, ExecRoleBurned, HalfLifeSet, LockTierSet, EthBondTermsSet, ReceiptArtSet. The inherited ERC-721 Approval and ApprovalForAll have also never fired. No exit path and no admin parameter change has been exercised on mainnet.


Renderer Replacement

The renderer pointer was changed once, one day after deployment. Both the original and the replacement are verified, so the change can be diffed directly rather than inferred.

Command:

for a in 0x000000115b1b95b9e04128a2bcd9ed9d24ab141c \
         0x0000006b980ae5e796B3eF484e767993d0E29979; do
  curl -s "https://api.etherscan.io/v2/api?chainid=1&module=contract&action=getsourcecode\
&address=$a&apikey=$ETHERSCAN_API_KEY" \
    | jq -r '.result[0].SourceCode' > "renderer-$a.json"
done
# extract src/dao/ZorgConvictionRenderer.sol from each, then diff

Artifact: 283 lines → 288 lines, 23 changed lines, all presentational.

CHANGE NATURE
Inline SVG favicon added to the page head Cosmetic
Warning copy on the permanent-action panel rewritten Documentation of the tier-0 eternalization trap
height='8.8' quoting fixed in an inline SVG Cosmetic
Receipt status line now shows the boost rate explicitly Display
Eternal receipts now read "principal given to treasury" instead of showing 0 ETH Display
Score sub-label relabelled from "live / accrued" to "direct / conviction" Terminology
set button switched from an inline onclick to event delegation via data-set Frontend fix

The substantive change is the second row. The original read:

Permanent — Neither can be undone.

The replacement reads:

Permanent · order matters — Hard lock FIRST. Eternalize freezes whatever rate the receipt
holds and no lock can be added afterwards, so eternalizing an open bond commits it at 1.00x
forever.

Receipt 9953 had already been eternalized at tier 0 by the time this copy was written.


Storage Slot Dump

Command:

for i in $(seq 0 20); do
  echo "slot $i: $(cast storage 0x0000006d936BA3653b8854490E16e782cd32a9a8 $i)"
done

Artifact:

slot  0: 0x0000000000000000000000000000006b980ae5e796b3ef484e767993d0e29979
slot  1: 0x00000001000000000003f4800000007f4342bddda2a951b9e181b42328dd1ed9
slot  2: 0x0000000000000000000000000000000000000000000000000000000000000000
slot  3: 0x0000000000000000000000000000000000000000000000000000000000000000
slot 10: 0x000000000000000000000000000000000000000000000000002386f26fc10000
slot 11: 0x0000000000000000000000000000000000000000138807d00000000000093a80
slot 13: 0x000000000000000000000000000000000000000000004ea96dd64396f3780000
slot 16: 0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000
slot 17: 0x00000000000000000000000000000000000000000000000000470de4df820000

Slots 4–9, 12, and 19–20 are mapping bases and read as zero, as expected. Slots 14, 15, and 18 are genuinely zero — no loyalty has ever been distributed and no ETH credit is outstanding.

Slot 1 decodes right to left: receiptArt in bytes 0–19, halfLife (0x3f480 = 259,200) in bytes 20–27, then domainClaimed = 0x01, rolesInstalled = 0x00, execRoleRevoked = 0x00, paused = 0x00. See Storage Layout for the full decode.


Governance Chain

The admin is neither an EOA nor a Safe. It is a 45-byte ERC-1167 minimal proxy delegating to 0x643a45b5...0673c1 (etherscan), a contract named Moloch. The ZORG share token is a clone of a separate implementation, 0x71e9b38d...acf600 (etherscan), named Shares.

Command:

cast code 0x5E58BA0e06ED0F5558f83bE732a4b899a674053E
cast code 0x00a6bA94BBb5474725515De88fE04F854f2dCb12
cast call 0x00a6bA94BBb5474725515De88fE04F854f2dCb12 "totalSupply()(uint256)"
cast call 0x00a6bA94BBb5474725515De88fE04F854f2dCb12 "transfersLocked()(bool)"

Artifact:

DAO   0x5E58BA0e...74053E  -> ERC-1167 clone of 0x643a45b5...0673c1 ("Moloch")
ZORG  0x00a6bA94...2dCb12  -> ERC-1167 clone of 0x71e9b38d...acf600 ("Shares")

ZORG totalSupply           7,490,386
ZORG held by conviction    371,470          (~5.0% of supply)
ZORG held by 0x1C0Aa8cC...855A20  1,489,036 (~19.9% of supply)
transfersLocked()          false            # the constructor guard's assumption still holds
getProposalCount()         21

transfersLocked() is the value the constructor refuses to deploy against. It is false today; the source is explicit that the DAO setting it afterwards would make unbond impossible for existing bonds, and that a constructor cannot prevent this.


Deployer Funding Trace

Command:

curl -s "https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlist\
&address=0xacfba7ce872c6ead99d535586f84b0d68ade4082&sort=asc&apikey=$ETHERSCAN_API_KEY" \
  | jq -r '.result[0]'

# CONFIRM THE SAME EOA DEPLOYED THE REGISTRY THIS CONTRACT READS
curl -s "https://api.etherscan.io/v2/api?chainid=1&module=contract\
&action=getcontractcreation&contractaddresses=0x0000006013dF75A31678B786061C2B54bf531524\
&apikey=$ETHERSCAN_API_KEY" | jq -r '.result[0].contractCreator'

Artifact:

2026-08-03 15:39 UTC  block 25675323
  0x1C0Aa8cC...855A20  ->  0xacFbA7ce...de4082    0.02 ETH
  (z0r0z canonical EOA)    (first transaction this address ever received)

2026-08-03 15:43 UTC  block 25675344
  0xacFbA7ce...de4082 deploys TokenList        0x00000060...531524   (4 min after funding)

2026-08-06 08:37 UTC  block 25694754
  0xacFbA7ce...de4082 deploys ZorgConviction   0x0000006d...32a9a8

One funded deployer produced both halves of the system three days apart. The registry's own governance sits under a separate 2-of-3 multisig; this contract's sits under the Moloch clone.