Skip to content

Commit ebbb235

Browse files
sktbrdclaude
andauthored
docs(treasury): split address book — verified recipients, unnamed tier (#287)
* docs(treasury): split address book — verified recipients, unnamed tier Salvaged from the closed #276 (its attribution mechanism was superseded by 861b390): the tiered address book on SPLIT_PRODUCT, the hash-verified recipients of the two unnamed ETH-paying splits with the measured divergences that refute the subnet hypothesis, the never-sources tier, and the UNNAMED_VERIFIED_SPLITS export so future naming starts from verified constants instead of a re-dig. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(treasury): address book is reference, not implementation Attribution stays with the receipt + ledger-credit mechanism; naming an address here must never be what tags a payout. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 4b84a4e commit ebbb235

1 file changed

Lines changed: 46 additions & 5 deletions

File tree

src/services/treasury-inflows.ts

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,59 @@ export const SWAP_FEE_SPLIT = "0x15e69fd67dcc17e061ceeb93dac791e0f5af0eae";
4949
* in the SAME transaction (distribute-and-withdraw flows), and failing that by
5050
* the ledger credit that funded it — see `ledgerSplitForCredit`, which is what
5151
* recovers a bare `withdraw()` of balance deposited earlier. A split nobody has
52-
* mapped yet (two such ETH-paying splits, 0xd9b2…ad6b and 0xdac8…e54, have
53-
* already credited this treasury) still falls to the generic `splits` tag: an
54-
* unmapped split must surface as unclassified, never wear another product's
55-
* name. The one exception is spelled out at `UNATTRIBUTED_USDC_FALLBACK`.
52+
* mapped yet still falls to the generic `splits` tag: an unmapped split must
53+
* surface as unclassified, never wear another product's name. The one
54+
* exception is spelled out at `UNATTRIBUTED_USDC_FALLBACK`.
5655
*
57-
* Adding a product = one entry here plus its i18n strings and tile tone.
56+
* ── THE ADDRESS BOOK ──
57+
*
58+
* Reference, NOT implementation. Attribution in production is the mechanism
59+
* above (same-tx receipt, then `ledgerSplitForCredit`'s amount-matched credit
60+
* scan). This book only documents who the addresses are, so nobody re-digs —
61+
* do not wire it into attribution: naming an address here must never be what
62+
* makes a payout wear a product tag.
63+
*
64+
* MAPPED (below):
65+
* SUBNET_FINAL_SPLIT 0xcc7E…3A4E → "subnet". Recipients (reconstructed from
66+
* the creation event, hash-verified against the stored splitHash,
67+
* 2026-08-19): Sopa Multisig 0x96C3…eEA2 80%, treasury 20%. Pays USDC.
68+
* SWAP_FEE_SPLIT 0x15e6…0eae → "swap" (recipients above).
69+
*
70+
* IDENTIFIED, RECIPIENTS VERIFIED, PRODUCT UNKNOWN (`UNNAMED_VERIFIED_SPLITS`;
71+
* deliberately unmapped — their payouts stay generic until a human names
72+
* them). Both were once suspected of being subnet splits; the on-chain shape
73+
* refutes that, so do not re-add the hypothesis:
74+
* 0xd9b2…ad6b — 0xEed9…a282 20%, treasury 80% (hash-verified 2026-08-19).
75+
* Diverges from the subnet pattern on every axis: counterparty is not the
76+
* Sopa Multisig, the treasury share is INVERTED (80% vs the subnet's 20%),
77+
* different factory (0x5cba…21d1), no distribution incentive, pays ETH
78+
* where the subnet lane pays USDC.
79+
* 0xdac8…e54 — 0x9ad8…E1c8 49.5%, treasury 49.5%, 0x9946…17a1 1%
80+
* (hash-verified 2026-08-19). Also unrelated to the [80/20] subnet shape.
81+
* Pays ETH.
82+
*
83+
* NOT SPLITS, NEVER SOURCES: SplitsWarehouse 0x8fb6…1fb8 is shared transport
84+
* for every split above; the legacy Ethereum-mainnet treasury 0x4d3a…ce52
85+
* (config `GNARS_ADDRESSES_ETH.treasury`) is an obsolete DAO address, not an
86+
* income product; Seaport and the auction house have their own tags.
87+
*
88+
* Adding a product = verify the recipients against the stored splitHash first
89+
* (reconstruct from the creation event), then one entry here plus its i18n
90+
* strings and tile tone.
5891
*/
5992
const SPLIT_PRODUCT: Record<string, InflowSource> = {
6093
[SUBNET_FINAL_SPLIT]: "subnet",
6194
[SWAP_FEE_SPLIT]: "swap",
6295
};
6396

97+
/** Investigated and hash-verified splits whose product is still unnamed (see
98+
* the address book above for their recipients and why they are NOT subnet).
99+
* Exported so future naming starts from the verified constants, not a re-dig. */
100+
export const UNNAMED_VERIFIED_SPLITS = [
101+
"0xd9b22da0c190a90bcada99d69b0f5aeeaf10ad6b",
102+
"0xdac848cfe537b21eeb5e718422e4055644b29e54",
103+
] as const;
104+
64105
/**
65106
* Where a credit came from. Kept deliberately coarse — these are the things
66107
* the DAO actually earns from, not a transaction taxonomy. `splits` is the

0 commit comments

Comments
 (0)